Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve fake server interface #3698

Merged
merged 13 commits into from
Mar 15, 2024
18 changes: 2 additions & 16 deletions config/reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,24 +34,10 @@ func TestFromReader(t *testing.T) {
test.That(t, os.IsNotExist(err), test.ShouldBeTrue)
}

setupFakeServer := func(t *testing.T) (*testutils.FakeCloudServer, func()) {
t.Helper()

logger := logging.NewTestLogger(t)

fakeServer, err := testutils.NewFakeCloudServer(context.Background(), logger)
test.That(t, err, test.ShouldBeNil)
cleanup := func() {
test.That(t, fakeServer.Shutdown(), test.ShouldBeNil)
}

return fakeServer, cleanup
}

t.Run("online", func(t *testing.T) {
setupClearCache(t)

fakeServer, cleanup := setupFakeServer(t)
fakeServer, cleanup := testutils.NewFakeCloudServer(t, ctx, logger)
defer cleanup()

cloudResponse := &Cloud{
Expand Down Expand Up @@ -114,7 +100,7 @@ func TestFromReader(t *testing.T) {
test.That(t, err, test.ShouldBeNil)
defer clearCache(robotPartID)

fakeServer, cleanup := setupFakeServer(t)
fakeServer, cleanup := testutils.NewFakeCloudServer(t, ctx, logger)
defer cleanup()
fakeServer.FailOnConfigAndCertsWith(context.DeadlineExceeded)
fakeServer.StoreDeviceConfig(robotPartID, nil, nil)
Expand Down
19 changes: 12 additions & 7 deletions config/testutils/fake_cloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import (
"net"
"net/http"
"sync"
"testing"

pb "go.viam.com/api/app/v1"
"go.viam.com/test"
"go.viam.com/utils"
"go.viam.com/utils/rpc"
"google.golang.org/grpc/codes"
Expand Down Expand Up @@ -42,10 +44,12 @@ type configAndCerts struct {
}

// NewFakeCloudServer creates and starts a new grpc server for the Viam Cloud.
func NewFakeCloudServer(ctx context.Context, logger logging.Logger) (*FakeCloudServer, error) {
func NewFakeCloudServer(t *testing.T, ctx context.Context, logger logging.Logger) (*FakeCloudServer, func()) { //revive:disable-line:context-as-argument
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

side note, I tried to configure this rule globally (allowing *testing.T to come before context.Context) in etc/.golangci.yaml but was unsuccessful. If others agree / know how to do this please share!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so I figured out how to configure this rule globally, but it has the side-effect of turning all other revive rules. furthermore, enable all rules explicitly seems to cause a panic due to lack of defaults 😞

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this turned into a rabbit hole... I think the problem i was describing goes away if we use a later version of revive, but there's another issue apparently: golangci/golangci-lint#4353

not worth the hassle right now, just sticking with a //nolint:revive

t.Helper()

listener, err := net.ListenTCP("tcp", &net.TCPAddr{Port: 0})
if err != nil {
return nil, err
t.Fatalf("failed to start listener for fake cloud server")
}

server := &FakeCloudServer{
Expand All @@ -63,7 +67,7 @@ func NewFakeCloudServer(ctx context.Context, logger logging.Logger) (*FakeCloudS
)),
rpc.WithWebRTCServerOptions(rpc.WebRTCServerOptions{Enable: false}))
if err != nil {
return nil, err
t.Fatalf("failed to create new fake cloud server")
}

err = server.rpcServer.RegisterServiceServer(
Expand All @@ -73,9 +77,8 @@ func NewFakeCloudServer(ctx context.Context, logger logging.Logger) (*FakeCloudS
pb.RegisterRobotServiceHandlerFromEndpoint,
)
if err != nil {
return nil, err
t.Fatalf("failed to register robot service for new fake cloud server")
}

server.exitWg.Add(1)
utils.PanicCapturingGo(func() {
defer server.exitWg.Done()
Expand All @@ -85,8 +88,10 @@ func NewFakeCloudServer(ctx context.Context, logger logging.Logger) (*FakeCloudS
logger.Warnf("Error shutting down grpc server", "error", err)
}
})

return server, nil
shutdown := func() {
test.That(t, server.Shutdown(), test.ShouldBeNil)
}
return server, shutdown
}

// FailOnConfigAndCerts if `failure` is true the server will return an Internal error on
Expand Down
7 changes: 2 additions & 5 deletions config/watcher_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,11 +187,8 @@ func TestNewWatcherCloud(t *testing.T) {

deviceID := primitive.NewObjectID().Hex()

fakeServer, err := testutils.NewFakeCloudServer(context.Background(), logger)
test.That(t, err, test.ShouldBeNil)
defer func() {
test.That(t, fakeServer.Shutdown(), test.ShouldBeNil)
}()
fakeServer, cleanup := testutils.NewFakeCloudServer(t, context.Background(), logger)
defer cleanup()

storeConfigInServer := func(cfg config.Config) {
cloudConfProto, err := config.CloudConfigToProto(cfg.Cloud)
Expand Down
Loading