From a31086c09f7df44d5d15f335a81eb0f835221296 Mon Sep 17 00:00:00 2001 From: Jay Pipes Date: Sun, 21 Sep 2025 09:16:54 -0400 Subject: [PATCH] gdt-dev/kube should only depend on gdt-dev/core Removes the package dependency on gdt-dev/gdt in order to get a cleaner dependency graph. Signed-off-by: Jay Pipes --- eval_test.go | 79 +++++++++++++++++++++------ fixtures/kind/kind_test.go | 12 +++-- go.mod | 1 - go.sum | 2 - parse_test.go | 106 ++++++++++++++++++++++++++++--------- placement_test.go | 7 ++- plugin.go | 4 +- 7 files changed, 159 insertions(+), 52 deletions(-) diff --git a/eval_test.go b/eval_test.go index fc0d271..6cebc2b 100644 --- a/eval_test.go +++ b/eval_test.go @@ -7,11 +7,13 @@ package kube_test import ( "bufio" "bytes" + "os" "path/filepath" "testing" gdtcontext "github.com/gdt-dev/core/context" - "github.com/gdt-dev/gdt" + _ "github.com/gdt-dev/core/plugin/exec" + "github.com/gdt-dev/core/scenario" "github.com/stretchr/testify/require" kindfix "github.com/gdt-dev/kube/fixtures/kind" @@ -27,8 +29,11 @@ func TestKindListPodsEmpty(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "list-pods-empty.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -44,8 +49,11 @@ func TestKindGetPodNotFound(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "get-pod-not-found.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -61,8 +69,11 @@ func TestKindCreateUnknownResource(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "create-unknown-resource.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -78,8 +89,11 @@ func TestKindSameNamedKind(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "same-named-kind.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -95,8 +109,11 @@ func TestKindDeleteResourceNotFound(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "delete-resource-not-found.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -112,8 +129,11 @@ func TestKindDeleteUnknownResource(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "delete-unknown-resource.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -129,8 +149,11 @@ func TestKindPodCreateGetDelete(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "create-get-delete-pod.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -146,8 +169,11 @@ func TestKindMatches(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "matches.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -163,8 +189,11 @@ func TestKindConditions(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "conditions.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -180,8 +209,11 @@ func TestKindJSON(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "json.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -197,8 +229,11 @@ func TestKindApply(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "apply-deployment.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -216,8 +251,11 @@ func TestKindEnvvarSubstitution(t *testing.T) { t.Setenv("pod_name", "foo") fp := filepath.Join("testdata", "kind", "envvar-substitution.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -233,8 +271,11 @@ func TestKindWithLabels(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "list-pods-with-labels.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -250,8 +291,11 @@ func TestKindVarSaveRestore(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "var-save-restore.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -269,8 +313,11 @@ func TestKindCurlPodIP(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "kind", "curl-pod-ip.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) diff --git a/fixtures/kind/kind_test.go b/fixtures/kind/kind_test.go index 9a60cc3..47105f4 100644 --- a/fixtures/kind/kind_test.go +++ b/fixtures/kind/kind_test.go @@ -13,7 +13,7 @@ import ( "testing" gdtcontext "github.com/gdt-dev/core/context" - "github.com/gdt-dev/gdt" + "github.com/gdt-dev/core/scenario" kindfix "github.com/gdt-dev/kube/fixtures/kind" "github.com/stretchr/testify/require" ) @@ -23,8 +23,11 @@ func TestDefaultSingleControlPlane(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "default-single-control-plane.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -49,8 +52,11 @@ func TestOneControlPlaneOneWorker(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "one-control-plane-one-worker.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) diff --git a/go.mod b/go.mod index 91d08c5..9d50d2a 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,6 @@ go 1.24.3 require ( github.com/cenkalti/backoff v2.2.1+incompatible github.com/gdt-dev/core v1.10.0 - github.com/gdt-dev/gdt v1.9.9 github.com/samber/lo v1.51.0 github.com/stretchr/testify v1.11.1 github.com/theory/jsonpath v0.10.1 diff --git a/go.sum b/go.sum index 48e8d98..0d38a07 100644 --- a/go.sum +++ b/go.sum @@ -21,8 +21,6 @@ github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sa github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/gdt-dev/core v1.10.0 h1:yX0MG2Tt+O34JGDFWcS63LV47lWpizto4HAyR/ugAC0= github.com/gdt-dev/core v1.10.0/go.mod h1:Bw8J6kUW0b7MUL8qW5e7qSbxb4SI9EAWQ0a4cAoPVpo= -github.com/gdt-dev/gdt v1.9.9 h1:GATWWI28mF6Vt7HAIOxMVYprgaIfH9tp2GyAkq/vZOg= -github.com/gdt-dev/gdt v1.9.9/go.mod h1:Zb8DKqBvjyEJXIySOlC6YLgdDlp2uNNtPjud8tDHmG4= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= diff --git a/parse_test.go b/parse_test.go index 5c8e9a4..fb3ae34 100644 --- a/parse_test.go +++ b/parse_test.go @@ -5,13 +5,13 @@ package kube_test import ( + "os" "path/filepath" "testing" "github.com/gdt-dev/core/api" "github.com/gdt-dev/core/parse" - "github.com/gdt-dev/core/suite" - "github.com/gdt-dev/gdt" + "github.com/gdt-dev/core/scenario" gdtkube "github.com/gdt-dev/kube" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -22,8 +22,11 @@ func TestFailureBadDefaults(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "bad-defaults.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "expected map") assert.Error(err, &parse.Error{}) @@ -35,8 +38,11 @@ func TestFailureDefaultsConfigNotFound(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "defaults-config-not-found.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "specified kube config path") assert.Error(err, &parse.Error{}) @@ -48,8 +54,11 @@ func TestFailureBothShortcutAndKubeSpec(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "shortcut-and-long-kube.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "either specify a full KubeSpec") assert.Error(err, &parse.Error{}) @@ -61,8 +70,11 @@ func TestFailureMoreThanOneKubeAction(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "more-than-one-kube-action.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "you may only specify a single Kubernetes action") assert.Error(err, &parse.Error{}) @@ -74,8 +86,11 @@ func TestFailureInvalidResourceSpecifierNoMultipleResources(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "invalid-resource-specifier-multiple-resources.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "invalid resource specifier") assert.Error(err, &parse.Error{}) @@ -87,8 +102,11 @@ func TestFailureInvalidResourceSpecifierMutipleForwardSlashes(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "invalid-resource-specifier-multiple-forward-slashes.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "invalid resource specifier") assert.Error(err, &parse.Error{}) @@ -100,8 +118,11 @@ func TestFailureInvalidDeleteNotFilepathOrResourceSpecifier(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "invalid-delete-not-filepath-or-resource-specifier.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "invalid resource specifier or filepath") assert.Error(err, &parse.Error{}) @@ -113,8 +134,11 @@ func TestFailureCreateFileNotFound(t *testing.T) { assert := assert.New(t) fp := filepath.Join("testdata", "parse", "fail", "create-file-not-found.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "file not found") assert.Error(err, &parse.Error{}) @@ -126,8 +150,11 @@ func TestFailureDeleteFileNotFound(t *testing.T) { assert := assert.New(t) fp := filepath.Join("testdata", "parse", "fail", "delete-file-not-found.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "file not found") assert.Error(err, &parse.Error{}) @@ -139,8 +166,11 @@ func TestFailureBadMatchesFileNotFound(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "bad-matches-file-not-found.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "file not found") assert.Error(err, &parse.Error{}) @@ -152,8 +182,11 @@ func TestFailureBadMatchesInvalidYAML(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "bad-matches-invalid-yaml.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "`kube.assert.matches` not well-formed") assert.Error(err, &parse.Error{}) @@ -165,8 +198,11 @@ func TestFailureBadMatchesEmpty(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "bad-matches-empty.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "expected either map[string]interface{} or a string with embedded YAML") assert.Error(err, &parse.Error{}) @@ -178,8 +214,11 @@ func TestFailureBadMatchesNotMapAny(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "bad-matches-not-map-any.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "`kube.assert.matches` not well-formed") assert.Error(err, &parse.Error{}) @@ -191,8 +230,11 @@ func TestFailureBadPlacementNotObject(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "bad-placement-not-object.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "expected map") assert.Error(err, &parse.Error{}) @@ -204,8 +246,11 @@ func TestWithLabelsInvalid(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "with-labels-invalid.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "with labels invalid") assert.Error(err, &parse.Error{}) @@ -217,8 +262,11 @@ func TestFailureBadVarType(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "bad-var-type.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "expected map") assert.Error(err, &parse.Error{}) @@ -230,8 +278,11 @@ func TestFailureBadVarJSONPathNoRoot(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "bad-var-jsonpath-noroot.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "expression must start with") assert.Error(err, &parse.Error{}) @@ -243,8 +294,11 @@ func TestFailureBadVarJSONPath(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "parse", "fail", "bad-var-jsonpath.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.NotNil(err) assert.ErrorContains(err, "JSONPath invalid") assert.Error(err, &parse.Error{}) @@ -258,8 +312,11 @@ func TestParse(t *testing.T) { t.Setenv("pod_name", "foo") fp := filepath.Join("testdata", "parse.yaml") + f, err := os.Open(fp) + require.Nil(err) + defer f.Close() // nolint:errcheck - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) @@ -439,11 +496,8 @@ spec: }, }, } - su := s.(*suite.Suite) - require.Len(su.Scenarios, 1) - sc := su.Scenarios[0] - require.Len(sc.Tests, len(expTests)) - for x, st := range sc.Tests { + require.Len(s.Tests, len(expTests)) + for x, st := range s.Tests { exp := expTests[x].(*gdtkube.Spec) stk := st.(*gdtkube.Spec) assert.Equal(exp.Kube, stk.Kube) diff --git a/placement_test.go b/placement_test.go index 8891082..6fda763 100644 --- a/placement_test.go +++ b/placement_test.go @@ -8,11 +8,12 @@ import ( "bufio" "bytes" "fmt" + "os" "path/filepath" "testing" gdtcontext "github.com/gdt-dev/core/context" - "github.com/gdt-dev/gdt" + "github.com/gdt-dev/core/scenario" "github.com/stretchr/testify/require" kindfix "github.com/gdt-dev/kube/fixtures/kind" @@ -24,8 +25,10 @@ func TestPlacementSpread(t *testing.T) { require := require.New(t) fp := filepath.Join("testdata", "placement-spread.yaml") + f, err := os.Open(fp) + require.Nil(err) - s, err := gdt.From(fp) + s, err := scenario.FromReader(f, scenario.WithPath(fp)) require.Nil(err) require.NotNil(s) diff --git a/plugin.go b/plugin.go index e86754b..bc643ed 100644 --- a/plugin.go +++ b/plugin.go @@ -6,7 +6,7 @@ package kube import ( "github.com/gdt-dev/core/api" - "github.com/gdt-dev/gdt" + gdtplugin "github.com/gdt-dev/core/plugin" "gopkg.in/yaml.v3" ) @@ -18,7 +18,7 @@ var ( ) func init() { - gdt.RegisterPlugin(Plugin()) + gdtplugin.Register(Plugin()) } const (