From 7398f90aaabe741d392b189f6c842d00d5efbe22 Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Wed, 15 May 2024 10:34:16 +0200 Subject: [PATCH 1/5] Expose contract mock for tests --- .../runtime/contract/contract_test.go | 24 +++++------- .../runtime/contract/mock/contract_mock.go | 37 +++++++++++++++++++ 2 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 lib/managedservicesplatform/runtime/contract/mock/contract_mock.go diff --git a/lib/managedservicesplatform/runtime/contract/contract_test.go b/lib/managedservicesplatform/runtime/contract/contract_test.go index 191b5d34a532..a8b54cd98457 100644 --- a/lib/managedservicesplatform/runtime/contract/contract_test.go +++ b/lib/managedservicesplatform/runtime/contract/contract_test.go @@ -4,30 +4,24 @@ import ( "testing" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/sourcegraph/log/logtest" - - "github.com/sourcegraph/sourcegraph/lib/managedservicesplatform/runtime/contract" + "github.com/sourcegraph/sourcegraph/lib/errors" + mock "github.com/sourcegraph/sourcegraph/lib/managedservicesplatform/runtime/contract/mock" ) -type mockServiceMetadata struct{} - -func (m mockServiceMetadata) Name() string { return "mock-name" } -func (m mockServiceMetadata) Version() string { return "mock-version" } - func TestNewContract(t *testing.T) { t.Run("sanity check", func(t *testing.T) { - e, err := contract.ParseEnv([]string{"MSP=true"}) - require.NoError(t, err) - - c := contract.New(logtest.Scoped(t), mockServiceMetadata{}, e) + c, err := mock.NewMockContract(t, mock.MockServiceMetadata{}, "MSP=true") + if errors.Is(err, mock.MockError{}) { + t.Fatal(err) + } assert.NotZero(t, c) assert.True(t, c.MSP) + // If our error is not a Mockerror, then it could be an environment validation error // Expected to error, as there are missing required env vars. - err = e.Validate() - assert.Error(t, err) + envErr := err + assert.Error(t, envErr) }) // TODO: Add more validation tests diff --git a/lib/managedservicesplatform/runtime/contract/mock/contract_mock.go b/lib/managedservicesplatform/runtime/contract/mock/contract_mock.go new file mode 100644 index 000000000000..74e028ce029d --- /dev/null +++ b/lib/managedservicesplatform/runtime/contract/mock/contract_mock.go @@ -0,0 +1,37 @@ +package mock + +import ( + "cmp" + "testing" + + "github.com/sourcegraph/log/logtest" + + "github.com/sourcegraph/sourcegraph/lib/managedservicesplatform/runtime/contract" +) + +type MockServiceMetadata struct { + name string + version string +} + +type MockError struct { + error +} + +func (m MockServiceMetadata) Name() string { return cmp.Or(m.name, "mock-name") } +func (m MockServiceMetadata) Version() string { return cmp.Or(m.version, "mock-version") } + +// NewMockContract returns a new contract instance from the given env. If there is an error parsing the given environment +// a MockError is returned that contains the error. +// +// Otherwise a new contract instance is returned as well as the environment validation result from `env.Validate()` +func NewMockContract(t *testing.T, mockServiceMeta contract.ServiceMetadataProvider, env ...string) (*contract.Contract, error) { + t.Helper() + e, err := contract.ParseEnv(env) + if err != nil { + return nil, MockError{err} + } + + c := contract.New(logtest.Scoped(t), mockServiceMeta, e) + return &c, e.Validate() +} From d13c6de3146f2c21bf8f9f55495da49455a544d9 Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Wed, 15 May 2024 10:41:22 +0200 Subject: [PATCH 2/5] reduce stuttering --- lib/managedservicesplatform/runtime/contract/BUILD.bazel | 2 +- .../runtime/contract/mock/contract_mock.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/managedservicesplatform/runtime/contract/BUILD.bazel b/lib/managedservicesplatform/runtime/contract/BUILD.bazel index 5c756c832eb1..5d7e35fafd90 100644 --- a/lib/managedservicesplatform/runtime/contract/BUILD.bazel +++ b/lib/managedservicesplatform/runtime/contract/BUILD.bazel @@ -39,11 +39,11 @@ go_test( embed = [":contract"], deps = [ "//lib/errors", + "//lib/managedservicesplatform/runtime/contract/mock", "//lib/pointers", "@com_github_hexops_autogold_v2//:autogold", "@com_github_sourcegraph_log//logtest", "@com_github_stretchr_testify//assert", - "@com_github_stretchr_testify//require", "@io_opentelemetry_go_otel_sdk//trace", ], ) diff --git a/lib/managedservicesplatform/runtime/contract/mock/contract_mock.go b/lib/managedservicesplatform/runtime/contract/mock/contract_mock.go index 74e028ce029d..ba7afddd5b48 100644 --- a/lib/managedservicesplatform/runtime/contract/mock/contract_mock.go +++ b/lib/managedservicesplatform/runtime/contract/mock/contract_mock.go @@ -9,7 +9,7 @@ import ( "github.com/sourcegraph/sourcegraph/lib/managedservicesplatform/runtime/contract" ) -type MockServiceMetadata struct { +type ServiceMetadata struct { name string version string } @@ -18,14 +18,14 @@ type MockError struct { error } -func (m MockServiceMetadata) Name() string { return cmp.Or(m.name, "mock-name") } -func (m MockServiceMetadata) Version() string { return cmp.Or(m.version, "mock-version") } +func (s ServiceMetadata) Name() string { return cmp.Or(s.name, "mock-name") } +func (s ServiceMetadata) Version() string { return cmp.Or(s.version, "mock-version") } // NewMockContract returns a new contract instance from the given env. If there is an error parsing the given environment // a MockError is returned that contains the error. // // Otherwise a new contract instance is returned as well as the environment validation result from `env.Validate()` -func NewMockContract(t *testing.T, mockServiceMeta contract.ServiceMetadataProvider, env ...string) (*contract.Contract, error) { +func NewContract(t *testing.T, mockServiceMeta contract.ServiceMetadataProvider, env ...string) (*contract.Contract, error) { t.Helper() e, err := contract.ParseEnv(env) if err != nil { From 014beba7e46f0780b0b1ef2e4296fd5229144c3c Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Wed, 15 May 2024 10:43:56 +0200 Subject: [PATCH 3/5] add missing bazel file --- .../runtime/contract/mock/BUILD.bazel | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 lib/managedservicesplatform/runtime/contract/mock/BUILD.bazel diff --git a/lib/managedservicesplatform/runtime/contract/mock/BUILD.bazel b/lib/managedservicesplatform/runtime/contract/mock/BUILD.bazel new file mode 100644 index 000000000000..c74c4c665191 --- /dev/null +++ b/lib/managedservicesplatform/runtime/contract/mock/BUILD.bazel @@ -0,0 +1,12 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "mock", + srcs = ["contract_mock.go"], + importpath = "github.com/sourcegraph/sourcegraph/lib/managedservicesplatform/runtime/contract/mock", + visibility = ["//visibility:public"], + deps = [ + "//lib/managedservicesplatform/runtime/contract", + "@com_github_sourcegraph_log//logtest", + ], +) From bc013b4295b8457cab09d6d0dd5b2d985b57eda7 Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Wed, 15 May 2024 10:47:15 +0200 Subject: [PATCH 4/5] fixup --- lib/managedservicesplatform/runtime/contract/contract_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/managedservicesplatform/runtime/contract/contract_test.go b/lib/managedservicesplatform/runtime/contract/contract_test.go index a8b54cd98457..d6b74c54c8b9 100644 --- a/lib/managedservicesplatform/runtime/contract/contract_test.go +++ b/lib/managedservicesplatform/runtime/contract/contract_test.go @@ -11,7 +11,7 @@ import ( func TestNewContract(t *testing.T) { t.Run("sanity check", func(t *testing.T) { - c, err := mock.NewMockContract(t, mock.MockServiceMetadata{}, "MSP=true") + c, err := mock.NewContract(t, mock.ServiceMetadata{}, "MSP=true") if errors.Is(err, mock.MockError{}) { t.Fatal(err) } From 8f612929eb53335af30e54cf1e9890f1c2585724 Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 20 May 2024 17:53:06 +0200 Subject: [PATCH 5/5] review comments: rename pkg and export vars --- .../runtime/contract/BUILD.bazel | 2 +- .../contract/{mock => contractest}/BUILD.bazel | 11 +++++++++++ .../contract/{mock => contractest}/contract_mock.go | 13 +++++++------ 3 files changed, 19 insertions(+), 7 deletions(-) rename lib/managedservicesplatform/runtime/contract/{mock => contractest}/BUILD.bazel (52%) rename lib/managedservicesplatform/runtime/contract/{mock => contractest}/contract_mock.go (67%) diff --git a/lib/managedservicesplatform/runtime/contract/BUILD.bazel b/lib/managedservicesplatform/runtime/contract/BUILD.bazel index 5d7e35fafd90..46b6f283ece0 100644 --- a/lib/managedservicesplatform/runtime/contract/BUILD.bazel +++ b/lib/managedservicesplatform/runtime/contract/BUILD.bazel @@ -39,7 +39,7 @@ go_test( embed = [":contract"], deps = [ "//lib/errors", - "//lib/managedservicesplatform/runtime/contract/mock", + "//lib/managedservicesplatform/runtime/contract/contractest:mock", "//lib/pointers", "@com_github_hexops_autogold_v2//:autogold", "@com_github_sourcegraph_log//logtest", diff --git a/lib/managedservicesplatform/runtime/contract/mock/BUILD.bazel b/lib/managedservicesplatform/runtime/contract/contractest/BUILD.bazel similarity index 52% rename from lib/managedservicesplatform/runtime/contract/mock/BUILD.bazel rename to lib/managedservicesplatform/runtime/contract/contractest/BUILD.bazel index c74c4c665191..9a65bbc7aa1c 100644 --- a/lib/managedservicesplatform/runtime/contract/mock/BUILD.bazel +++ b/lib/managedservicesplatform/runtime/contract/contractest/BUILD.bazel @@ -10,3 +10,14 @@ go_library( "@com_github_sourcegraph_log//logtest", ], ) + +go_library( + name = "contractest", + srcs = ["contract_mock.go"], + importpath = "github.com/sourcegraph/sourcegraph/lib/managedservicesplatform/runtime/contract/contractest", + visibility = ["//visibility:public"], + deps = [ + "//lib/managedservicesplatform/runtime/contract", + "@com_github_sourcegraph_log//logtest", + ], +) diff --git a/lib/managedservicesplatform/runtime/contract/mock/contract_mock.go b/lib/managedservicesplatform/runtime/contract/contractest/contract_mock.go similarity index 67% rename from lib/managedservicesplatform/runtime/contract/mock/contract_mock.go rename to lib/managedservicesplatform/runtime/contract/contractest/contract_mock.go index ba7afddd5b48..4855e72d72bd 100644 --- a/lib/managedservicesplatform/runtime/contract/mock/contract_mock.go +++ b/lib/managedservicesplatform/runtime/contract/contractest/contract_mock.go @@ -1,4 +1,4 @@ -package mock +package contracttest import ( "cmp" @@ -9,17 +9,18 @@ import ( "github.com/sourcegraph/sourcegraph/lib/managedservicesplatform/runtime/contract" ) -type ServiceMetadata struct { - name string - version string +type MockServiceMetadata struct { + MockName string + MockVersion string } +// MockError is the error that is returned when there is an error parsing the given environment type MockError struct { error } -func (s ServiceMetadata) Name() string { return cmp.Or(s.name, "mock-name") } -func (s ServiceMetadata) Version() string { return cmp.Or(s.version, "mock-version") } +func (s MockServiceMetadata) Name() string { return cmp.Or(s.MockName, "mock-name") } +func (s MockServiceMetadata) Version() string { return cmp.Or(s.MockVersion, "mock-version") } // NewMockContract returns a new contract instance from the given env. If there is an error parsing the given environment // a MockError is returned that contains the error.