title: Testing bidirectional rpc on golang
body: <p>I was following some of the tutorial for creating bidirectional grpc client and server. Client will pass some value and when last maximum value changed on server it'll response client with current max. Finally I'd like to write down some of the test cases but I have no experience with testing scenarios that's why I'm not sure if I'm doing the correct thing or not.</p>
  
  <pre><code>func TestClientConnection(t *testing.T) {
  
      creds, _ := credentials.NewClientTLSFromFile("../server-cert.pem", "")
      conn, err := grpc.Dial(address, grpc.WithTransportCredentials(creds))
      if err != nil {
          t.Error("Had problem with connection, NOT PASSED")
      }
      defer conn.Close()
  
      c := proto.NewHerdiusServerClient(conn)
  
      stream, err := c.CheckMax(context.Background())
      if err != nil {
          t.Error("Had problem with stream, NOT PASSED")
          return
      }
  
      err = stream.Send(&amp;proto.MaxRequest{Val: int32(10)})
      err = stream.Send(&amp;proto.MaxRequest{Val: int32(12)})
      err = stream.Send(&amp;proto.MaxRequest{Val: int32(13)})
      err = stream.Send(&amp;proto.MaxRequest{Val: int32(9)})
  
      if err != nil {
          t.Error("Had problem with stream, NOT PASSED")
          return
      }
  
      return
  }
  </code></pre>
  
  <p>Right now when I test this scenario wiht <code>go test</code> it passes but I also want to test if something received from server side.</p>
  
  <p>My second question was If I want to tear this test to different scenarios for example to check is server connected or is stream connected or it received response from server side, how can I do that? Should I create another class to retrieve connection and streaming and use on test functions?</p>