Skip to content

Commit a9fe9ba

Browse files
committed
add command line flag for system test result dumps
Also fix case of failing tests without validation in the case that the dump fails.
1 parent 559915c commit a9fe9ba

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

cmd/testrunner.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,8 @@ func getTestRunnerSystemCommand() *cobra.Command {
417417
cmd.Flags().Bool(cobraext.TearDownFlagName, false, cobraext.TearDownFlagDescription)
418418
cmd.Flags().Bool(cobraext.NoProvisionFlagName, false, cobraext.NoProvisionFlagDescription)
419419

420+
cmd.Flags().String(cobraext.TestDumpPrefixFlagName, "", cobraext.TestDumpPrefixFlagDescription)
421+
420422
cmd.MarkFlagsMutuallyExclusive(cobraext.SetupFlagName, cobraext.TearDownFlagName, cobraext.NoProvisionFlagName)
421423
cmd.MarkFlagsRequiredTogether(cobraext.ConfigFileFlagName, cobraext.SetupFlagName)
422424

@@ -472,6 +474,11 @@ func testRunnerSystemCommandAction(cmd *cobra.Command, args []string) error {
472474
return cobraext.FlagParsingError(err, cobraext.TestCoverageFormatFlagName)
473475
}
474476

477+
dumpPrefix, err := cmd.Flags().GetString(cobraext.TestDumpPrefixFlagName)
478+
if err != nil {
479+
return cobraext.FlagParsingError(err, cobraext.TestDumpPrefixFlagName)
480+
}
481+
475482
if !slices.Contains(testrunner.CoverageFormatsList(), testCoverageFormat) {
476483
return cobraext.FlagParsingError(fmt.Errorf("coverage format not available: %s", testCoverageFormat), cobraext.TestCoverageFormatFlagName)
477484
}
@@ -578,6 +585,7 @@ func testRunnerSystemCommandAction(cmd *cobra.Command, args []string) error {
578585
GlobalTestConfig: globalTestConfig.System,
579586
WithCoverage: testCoverage,
580587
CoverageType: testCoverageFormat,
588+
DumpPrefix: dumpPrefix,
581589
})
582590

583591
logger.Debugf("Running suite...")

internal/cobraext/flags.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,9 @@ const (
209209
TestCoverageFormatFlagName = "coverage-format"
210210
TestCoverageFormatFlagDescription = "set format for coverage reports: %s"
211211

212+
TestDumpPrefixFlagName = "dump"
213+
TestDumpPrefixFlagDescription = "prefix for system test dump file"
214+
212215
VariantFlagName = "variant"
213216
VariantFlagDescription = "service variant"
214217

internal/testrunner/runners/system/runner.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ type runner struct {
3939
generateTestResult bool
4040
withCoverage bool
4141
coverageType string
42+
dumpPrefix string
4243

4344
configFilePath string
4445
runSetup bool
@@ -76,6 +77,7 @@ type SystemTestRunnerOptions struct {
7677
DeferCleanup time.Duration
7778
WithCoverage bool
7879
CoverageType string
80+
DumpPrefix string
7981
}
8082

8183
func NewSystemTestRunner(options SystemTestRunnerOptions) *runner {
@@ -97,6 +99,7 @@ func NewSystemTestRunner(options SystemTestRunnerOptions) *runner {
9799
globalTestConfig: options.GlobalTestConfig,
98100
withCoverage: options.WithCoverage,
99101
coverageType: options.CoverageType,
102+
dumpPrefix: options.DumpPrefix,
100103
}
101104

102105
r.resourcesManager = resources.NewManager()
@@ -262,6 +265,7 @@ func (r *runner) GetTests(ctx context.Context) ([]testrunner.Tester, error) {
262265
GlobalTestConfig: r.globalTestConfig,
263266
WithCoverage: r.withCoverage,
264267
CoverageType: r.coverageType,
268+
DumpPrefix: r.dumpPrefix,
265269
})
266270
if err != nil {
267271
return nil, fmt.Errorf(

internal/testrunner/runners/system/tester.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ type tester struct {
185185
dataStreamManifest *packages.DataStreamManifest
186186
withCoverage bool
187187
coverageType string
188+
dumpPrefix string
188189

189190
serviceStateFilePath string
190191

@@ -217,6 +218,7 @@ type SystemTesterOptions struct {
217218
GlobalTestConfig testrunner.GlobalRunnerTestConfig
218219
WithCoverage bool
219220
CoverageType string
221+
DumpPrefix string
220222

221223
RunSetup bool
222224
RunTearDown bool
@@ -671,7 +673,6 @@ func (r *tester) runTestPerVariant(ctx context.Context, stackConfig stack.Config
671673
logger.Debugf("Using config: %q", testConfig.Name())
672674

673675
partial, err := r.runTest(ctx, testConfig, stackConfig, svcInfo)
674-
675676
tdErr := r.tearDownTest(ctx)
676677
if err != nil {
677678
return partial, err
@@ -1807,19 +1808,26 @@ func (r *tester) runTest(ctx context.Context, config *testConfig, stackConfig st
18071808
return results, nil
18081809
}
18091810

1810-
if dump, ok := os.LookupEnv(dumpScenarioDocsEnv); ok && dump != "" {
1811-
err := dumpScenarioDocs(scenario.docs)
1811+
var dumpPath string
1812+
switch {
1813+
case r.dumpPrefix != "":
1814+
dumpPath = fmt.Sprintf("%s-%s.json", r.dumpPrefix, time.Now().Format("20060102150405"))
1815+
case os.Getenv(dumpScenarioDocsEnv) != "":
1816+
dumpPath = filepath.Join(os.TempDir(), fmt.Sprintf("elastic-package-test-docs-dump-%s.json", time.Now().Format("20060102150405")))
1817+
}
1818+
var dumpErr error
1819+
if dumpPath != "" {
1820+
err := dumpScenarioDocs(scenario.docs, dumpPath)
18121821
if err != nil {
1813-
return nil, fmt.Errorf("failed to dump scenario docs: %w", err)
1822+
dumpErr = fmt.Errorf("failed to dump scenario docs: %w", err)
18141823
}
18151824
}
18161825

1817-
return r.validateTestScenario(ctx, result, scenario, config)
1826+
results, err := r.validateTestScenario(ctx, result, scenario, config)
1827+
return results, errors.Join(err, dumpErr)
18181828
}
18191829

1820-
func dumpScenarioDocs(docs any) error {
1821-
timestamp := time.Now().Format("20060102150405")
1822-
path := filepath.Join(os.TempDir(), fmt.Sprintf("elastic-package-test-docs-dump-%s.json", timestamp))
1830+
func dumpScenarioDocs(docs any, path string) error {
18231831
f, err := os.Create(path)
18241832
if err != nil {
18251833
return fmt.Errorf("failed to create dump file: %w", err)

0 commit comments

Comments
 (0)