From 3df9c55a5c0fedbb6e629aaf904088e7d7e61cbc Mon Sep 17 00:00:00 2001 From: Paul Hinze Date: Tue, 23 Nov 2021 18:09:03 -0600 Subject: [PATCH] Service box tests Continuing with the error messages audit, this service came out the same as the basis one - I haven't yet found any tests I can write that expose errors we would want to enhance. In the meantime, more tests are good though! --- .../server/singleprocess/service_box_test.go | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 internal/server/singleprocess/service_box_test.go diff --git a/internal/server/singleprocess/service_box_test.go b/internal/server/singleprocess/service_box_test.go new file mode 100644 index 000000000..bb70da726 --- /dev/null +++ b/internal/server/singleprocess/service_box_test.go @@ -0,0 +1,111 @@ +package singleprocess + +import ( + "context" + "testing" + + "github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk" + "github.com/hashicorp/vagrant/internal/server" + "github.com/hashicorp/vagrant/internal/server/proto/vagrant_server" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func TestServiceBox(t *testing.T) { + ctx := context.Background() + + t.Run("set and get", func(t *testing.T) { + require := require.New(t) + db := testDB(t) + impl, err := New(WithDB(db)) + require.NoError(err) + client := server.TestServer(t, impl) + + b := testBox() + resp, err := client.UpsertBox(ctx, &vagrant_server.UpsertBoxRequest{ + Box: b, + }) + require.NoError(err) + require.NotNil(resp) + require.Equal(b.Id, resp.Box.Id) + + // should be able to get by ID + getResp, err := client.GetBox(ctx, &vagrant_server.GetBoxRequest{ + Box: &vagrant_plugin_sdk.Ref_Box{ResourceId: b.Id}, + }) + require.NoError(err) + require.NotNil(getResp) + require.Equal(b.Provider, getResp.Box.Provider) + require.Equal(b.Name, getResp.Box.Name) + require.Equal(b.Version, getResp.Box.Version) + + }) + + t.Run("find", func(t *testing.T) { + require := require.New(t) + db := testDB(t) + impl, err := New(WithDB(db)) + require.NoError(err) + client := server.TestServer(t, impl) + + // first insert + b := testBox() + _, err = client.UpsertBox(ctx, &vagrant_server.UpsertBoxRequest{ + Box: b, + }) + require.NoError(err) + + // then find it + findResp, err := client.FindBox(ctx, &vagrant_server.FindBoxRequest{ + Box: &vagrant_plugin_sdk.Ref_Box{Name: b.Name}, + }) + require.NoError(err) + require.NotNil(findResp) + require.Equal(b.Id, findResp.Box.Id) + + // then delete it and ensure it's no longer found + _, err = client.DeleteBox(ctx, &vagrant_server.DeleteBoxRequest{ + Box: &vagrant_plugin_sdk.Ref_Box{ResourceId: b.Id}, + }) + require.NoError(err) + + refindResp, err := client.FindBox(ctx, &vagrant_server.FindBoxRequest{ + Box: &vagrant_plugin_sdk.Ref_Box{Name: b.Name}, + }) + require.NoError(err) + require.NotNil(refindResp) + }) + + t.Run("reasonable errors: get not found", func(t *testing.T) { + require := require.New(t) + db := testDB(t) + impl, err := New(WithDB(db)) + require.NoError(err) + client := server.TestServer(t, impl) + + _, err = client.GetBox(ctx, &vagrant_server.GetBoxRequest{ + Box: &vagrant_plugin_sdk.Ref_Box{ResourceId: "idontexist"}, + }) + require.Error(err) + + // we expect this to be a GRPC error with a not found code and a decent + // message + st, ok := status.FromError(err) + require.Equal(ok, true) + require.Equal(st.Code(), codes.NotFound) + require.Contains(st.Message(), "not found") + }) +} + +// minimum box valid to save +func testBox() *vagrant_server.Box { + return &vagrant_server.Box{ + Provider: "virtualbox", + Name: "test/box", + Version: "1.2.3", + // Id must be Name-Provider-Version because indexing assumes it is + // (the NewBox constructor normally generates this in core/box) + Id: "test/box-1.2.3-virtualbox", + } +}