func TestNewSecureGRPCServer(t *testing.T) { testAddress := "localhost:9055" srv, err := comm.NewGRPCServer(testAddress, []byte(selfSignedKeyPEM), []byte(selfSignedCertPEM), nil, nil) //check for error if err != nil { t.Fatalf("Failed to return new GRPC server: %v", err) } //make sure our properties are as expected //resolve the address addr, err := net.ResolveTCPAddr("tcp", testAddress) assert.Equal(t, srv.Address(), addr.String()) assert.Equal(t, srv.Listener().Addr().String(), addr.String()) //check the server certificate cert, _ := tls.X509KeyPair([]byte(selfSignedCertPEM), []byte(selfSignedKeyPEM)) assert.Equal(t, srv.ServerCertificate(), cert) //TlSEnabled should be true assert.Equal(t, srv.TLSEnabled(), true) //register the GRPC test server testpb.RegisterTestServiceServer(srv.Server(), &testServiceServer{}) //start the server go srv.Start() defer srv.Stop() //should not be needed time.Sleep(10 * time.Millisecond) //create the client credentials certPool := x509.NewCertPool() if !certPool.AppendCertsFromPEM([]byte(selfSignedCertPEM)) { t.Fatal("Failed to append certificate to client credentials") } creds := credentials.NewClientTLSFromCert(certPool, "") //GRPC client options var dialOptions []grpc.DialOption dialOptions = append(dialOptions, grpc.WithTransportCredentials(creds)) //invoke the EmptyCall service _, err = invokeEmptyCall(testAddress, dialOptions) if err != nil { t.Logf("GRPC client failed to invoke the EmptyCall service on %s: %v", testAddress, err) } else { t.Log("GRPC client successfully invoked the EmptyCall service: " + testAddress) } }
func TestNewGRPCServer(t *testing.T) { testAddress := "localhost:9053" srv, err := comm.NewGRPCServer(testAddress, nil, nil, nil, nil) //check for error if err != nil { t.Fatalf("Failed to return new GRPC server: %v", err) } //make sure our properties are as expected //resolve the address addr, err := net.ResolveTCPAddr("tcp", testAddress) assert.Equal(t, srv.Address(), addr.String()) assert.Equal(t, srv.Listener().Addr().String(), addr.String()) //TlSEnabled should be false assert.Equal(t, srv.TLSEnabled(), false) //register the GRPC test server testpb.RegisterTestServiceServer(srv.Server(), &testServiceServer{}) //start the server go srv.Start() defer srv.Stop() //should not be needed time.Sleep(10 * time.Millisecond) //GRPC client options var dialOptions []grpc.DialOption dialOptions = append(dialOptions, grpc.WithInsecure()) //invoke the EmptyCall service _, err = invokeEmptyCall(testAddress, dialOptions) if err != nil { t.Logf("GRPC client failed to invoke the EmptyCall service on %s: %v", testAddress, err) t.Fatalf(err.Error()) } else { t.Log("GRPC client successfully invoked the EmptyCall service: " + testAddress) } }
func TestNewGRPCServerInvalidParameters(t *testing.T) { //missing address _, err := comm.NewGRPCServer("", nil, nil, nil, nil) //check for error msg := "Missing address parameter" assert.EqualError(t, err, msg) if err != nil { t.Log(err.Error()) } //missing port _, err = comm.NewGRPCServer("abcdef", nil, nil, nil, nil) //check for error msg = "listen tcp: missing port in address abcdef" assert.EqualError(t, err, msg) if err != nil { t.Log(err.Error()) } //bad port _, err = comm.NewGRPCServer("localhost:1BBB", nil, nil, nil, nil) //check for error msgs := [2]string{"listen tcp: lookup tcp/1BBB: nodename nor servname provided, or not known", "listen tcp: unknown port tcp/1BBB"} //different error on MacOS and in Docker if assert.Error(t, err, "%s or %s expected", msgs[0], msgs[1]) { assert.Contains(t, msgs, err.Error()) } if err != nil { t.Log(err.Error()) } //bad hostname _, err = comm.NewGRPCServer("hostdoesnotexist.localdomain:9050", nil, nil, nil, nil) //check for error msg = "no such host" if assert.Error(t, err, "%s error expected", msg) { assert.Contains(t, err.Error(), msg) //use contains here as error message inconsistent } if err != nil { t.Log(err.Error()) } //address in use _, err = comm.NewGRPCServer(":9040", nil, nil, nil, nil) _, err = comm.NewGRPCServer(":9040", nil, nil, nil, nil) //check for error msg = "listen tcp :9040: bind: address already in use" assert.EqualError(t, err, msg) if err != nil { t.Log(err.Error()) } //missing serverCertificate _, err = comm.NewGRPCServer(":9041", []byte{}, nil, nil, nil) //check for error msg = "Both serverKey and serverCertificate are required in order to enable TLS" assert.EqualError(t, err, msg) if err != nil { t.Log(err.Error()) } //missing serverKey _, err = comm.NewGRPCServer(":9042", nil, []byte{}, nil, nil) //check for error assert.EqualError(t, err, msg) if err != nil { t.Log(err.Error()) } //bad serverKey _, err = comm.NewGRPCServer(":9043", []byte{}, []byte(selfSignedCertPEM), nil, nil) //check for error msg = "tls: failed to find any PEM data in key input" assert.EqualError(t, err, msg) if err != nil { t.Log(err.Error()) } //bad serverCertificate _, err = comm.NewGRPCServer(":9044", []byte(selfSignedKeyPEM), []byte{}, nil, nil) //check for error msg = "tls: failed to find any PEM data in certificate input" assert.EqualError(t, err, msg) if err != nil { t.Log(err.Error()) } }