Skip to content

Commit 68d0e7e

Browse files
committed
feat: add dmt test
Signed-off-by: Timur Tuktamyshev <timur.tuktamyshev@flant.com>
1 parent 19b7de9 commit 68d0e7e

File tree

8 files changed

+958
-3
lines changed

8 files changed

+958
-3
lines changed

cmd/dmt/root.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ import (
3232
"github.com/deckhouse/dmt/internal/flags"
3333
"github.com/deckhouse/dmt/internal/fsutils"
3434
"github.com/deckhouse/dmt/internal/logger"
35+
"github.com/deckhouse/dmt/internal/test"
36+
"github.com/deckhouse/dmt/internal/test/conversions"
3537
"github.com/deckhouse/dmt/internal/version"
3638
)
3739

@@ -137,11 +139,30 @@ func execute() {
137139
},
138140
}
139141

142+
testCmd := &cobra.Command{
143+
Use: "test <module-path>",
144+
Short: "run tests for Deckhouse modules",
145+
Long: `Run various tests for Deckhouse modules.
146+
147+
Currently supported test types:
148+
- conversions: tests for config version conversions
149+
150+
To run conversion tests, create openapi/conversions/conversions_test.yaml in your module.
151+
152+
Example:
153+
dmt test ./my-module
154+
dmt test /path/to/module --type conversions`,
155+
Args: cobra.ExactArgs(1),
156+
RunE: testCmdFunc,
157+
}
158+
140159
lintCmd.Flags().AddFlagSet(flags.InitLintFlagSet())
141160
bootstrapCmd.Flags().AddFlagSet(flags.InitBootstrapFlagSet())
161+
testCmd.Flags().AddFlagSet(flags.InitTestFlagSet())
142162

143163
rootCmd.AddCommand(lintCmd)
144164
rootCmd.AddCommand(bootstrapCmd)
165+
rootCmd.AddCommand(testCmd)
145166
rootCmd.Flags().AddFlagSet(flags.InitDefaultFlagSet())
146167

147168
err := rootCmd.Execute()
@@ -190,3 +211,48 @@ func runLintMultiple(dirs []string) error {
190211

191212
return nil
192213
}
214+
215+
func testCmdFunc(_ *cobra.Command, args []string) error {
216+
modulePath, err := fsutils.ExpandDir(args[0])
217+
if err != nil {
218+
return fmt.Errorf("error expanding path %s: %w", args[0], err)
219+
}
220+
221+
return runTests(modulePath)
222+
}
223+
224+
func runTests(dir string) error {
225+
logger.InfoF("Running tests for: %s", dir)
226+
227+
// Create test runner and register testers
228+
runner := test.NewRunner()
229+
runner.Register(conversions.NewTester())
230+
231+
// Build test options
232+
opts := test.RunOptions{
233+
ModulePath: dir,
234+
Verbose: flags.TestVerbose,
235+
}
236+
237+
// Filter by test type if specified
238+
if flags.TestType != "" {
239+
opts.TestTypes = []test.TestType{test.TestType(flags.TestType)}
240+
}
241+
242+
// Run tests
243+
summary, err := runner.Run(opts)
244+
if err != nil {
245+
logger.ErrorF("Test execution failed: %v", err)
246+
return err
247+
}
248+
249+
// Print results
250+
test.PrintSummary(summary)
251+
252+
// Return error if any tests failed
253+
if summary.FailedTests > 0 {
254+
return errors.New("some tests failed")
255+
}
256+
257+
return nil
258+
}

go.mod

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ require (
1717
github.com/golang/snappy v0.0.4
1818
github.com/google/go-containerregistry v0.20.2
1919
github.com/iancoleman/strcase v0.3.0
20+
github.com/itchyny/gojq v0.12.18
2021
github.com/kyokomi/emoji v2.2.4+incompatible
2122
github.com/mitchellh/go-homedir v1.1.0
2223
github.com/mitchellh/go-wordwrap v1.0.1
@@ -99,6 +100,7 @@ require (
99100
github.com/hashicorp/hcl v1.0.0 // indirect
100101
github.com/huandu/xstrings v1.5.0 // indirect
101102
github.com/inconshreveable/mousetrap v1.1.0 // indirect
103+
github.com/itchyny/timefmt-go v0.1.7 // indirect
102104
github.com/jmespath/go-jmespath v0.4.0 // indirect
103105
github.com/josharian/intern v1.0.0 // indirect
104106
github.com/jpillora/backoff v1.0.0 // indirect
@@ -152,7 +154,7 @@ require (
152154
golang.org/x/net v0.40.0 // indirect
153155
golang.org/x/oauth2 v0.28.0 // indirect
154156
golang.org/x/sync v0.16.0 // indirect
155-
golang.org/x/sys v0.33.0 // indirect
157+
golang.org/x/sys v0.38.0 // indirect
156158
golang.org/x/term v0.32.0 // indirect
157159
golang.org/x/text v0.26.0 // indirect
158160
golang.org/x/time v0.9.0 // indirect

go.sum

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,10 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2
220220
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
221221
github.com/ionos-cloud/sdk-go/v6 v6.3.2 h1:2mUmrZZz6cPyT9IRX0T8fBLc/7XU/eTxP2Y5tS7/09k=
222222
github.com/ionos-cloud/sdk-go/v6 v6.3.2/go.mod h1:SXrO9OGyWjd2rZhAhEpdYN6VUAODzzqRdqA9BCviQtI=
223+
github.com/itchyny/gojq v0.12.18 h1:gFGHyt/MLbG9n6dqnvlliiya2TaMMh6FFaR2b1H6Drc=
224+
github.com/itchyny/gojq v0.12.18/go.mod h1:4hPoZ/3lN9fDL1D+aK7DY1f39XZpY9+1Xpjz8atrEkg=
225+
github.com/itchyny/timefmt-go v0.1.7 h1:xyftit9Tbw+Dc/huSSPJaEmX1TVL8lw5vxjJLK4GMMA=
226+
github.com/itchyny/timefmt-go v0.1.7/go.mod h1:5E46Q+zj7vbTgWY8o5YkMeYb4I6GeWLFnetPy5oBrAI=
223227
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
224228
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
225229
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
@@ -438,8 +442,8 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
438442
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
439443
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
440444
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
441-
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
442-
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
445+
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
446+
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
443447
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
444448
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
445449
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

internal/flags/flags.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ var (
5050
BootstrapModule string
5151
)
5252

53+
var (
54+
TestVerbose bool
55+
TestType string
56+
)
57+
5358
func InitDefaultFlagSet() *pflag.FlagSet {
5459
defaults := pflag.NewFlagSet("defaults for all commands", pflag.ExitOnError)
5560

@@ -108,3 +113,13 @@ func InitBootstrapFlagSet() *pflag.FlagSet {
108113

109114
return bootstrap
110115
}
116+
117+
func InitTestFlagSet() *pflag.FlagSet {
118+
testFlags := pflag.NewFlagSet("test", pflag.ContinueOnError)
119+
120+
testFlags.BoolVarP(&TestVerbose, "verbose", "v", false, "verbose output")
121+
testFlags.StringVarP(&TestType, "type", "t", "", "test type to run (e.g., conversions)")
122+
testFlags.StringVarP(&LogLevel, "log-level", "l", "INFO", "log-level [DEBUG | INFO | WARN | ERROR]")
123+
124+
return testFlags
125+
}

0 commit comments

Comments
 (0)