Skip to content

Commit 9627553

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 3c02bcd commit 9627553

File tree

4 files changed

+44
-21
lines changed

4 files changed

+44
-21
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: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ type tester struct {
186186
dataStreamManifest *packages.DataStreamManifest
187187
withCoverage bool
188188
coverageType string
189+
dumpPrefix string
189190

190191
serviceStateFilePath string
191192

@@ -218,6 +219,7 @@ type SystemTesterOptions struct {
218219
GlobalTestConfig testrunner.GlobalRunnerTestConfig
219220
WithCoverage bool
220221
CoverageType string
222+
DumpPrefix string
221223

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

674676
partial, err := r.runTest(ctx, testConfig, stackConfig, svcInfo)
675-
676677
tdErr := r.tearDownTest(ctx)
677678
if err != nil {
678679
return partial, err
@@ -1814,32 +1815,26 @@ func (r *tester) runTest(ctx context.Context, config *testConfig, stackConfig st
18141815
return results, nil
18151816
}
18161817

1817-
if dump, ok := os.LookupEnv(dumpScenarioDocsEnv); ok && dump != "" {
1818-
err := dumpScenarioDocs(scenario.docs)
1818+
var dumpPath string
1819+
switch {
1820+
case r.dumpPrefix != "":
1821+
dumpPath = fmt.Sprintf("%s-%s.json", r.dumpPrefix, time.Now().Format("20060102150405"))
1822+
case os.Getenv(dumpScenarioDocsEnv) != "":
1823+
dumpPath = filepath.Join(os.TempDir(), fmt.Sprintf("elastic-package-test-docs-dump-%s.json", time.Now().Format("20060102150405")))
1824+
}
1825+
var dumpErr error
1826+
if dumpPath != "" {
1827+
err := dumpScenarioDocs(scenario.docs, dumpPath)
18191828
if err != nil {
1820-
return nil, fmt.Errorf("failed to dump scenario docs: %w", err)
1829+
dumpErr = fmt.Errorf("failed to dump scenario docs: %w", err)
18211830
}
18221831
}
18231832

1824-
return r.validateTestScenario(ctx, result, scenario, config)
1825-
}
1826-
1827-
func (r *tester) isTestUsingOTELCollectorInput(policyTemplateInput string) bool {
1828-
// Just supported for input packages currently
1829-
if r.pkgManifest.Type != "input" {
1830-
return false
1831-
}
1832-
1833-
if policyTemplateInput != otelCollectorInputName {
1834-
return false
1835-
}
1836-
1837-
return true
1833+
results, err := r.validateTestScenario(ctx, result, scenario, config)
1834+
return results, errors.Join(err, dumpErr)
18381835
}
18391836

1840-
func dumpScenarioDocs(docs any) error {
1841-
timestamp := time.Now().Format("20060102150405")
1842-
path := filepath.Join(os.TempDir(), fmt.Sprintf("elastic-package-test-docs-dump-%s.json", timestamp))
1837+
func dumpScenarioDocs(docs any, path string) error {
18431838
f, err := os.Create(path)
18441839
if err != nil {
18451840
return fmt.Errorf("failed to create dump file: %w", err)
@@ -1857,6 +1852,19 @@ func dumpScenarioDocs(docs any) error {
18571852
return nil
18581853
}
18591854

1855+
func (r *tester) isTestUsingOTELCollectorInput(policyTemplateInput string) bool {
1856+
// Just supported for input packages currently
1857+
if r.pkgManifest.Type != "input" {
1858+
return false
1859+
}
1860+
1861+
if policyTemplateInput != otelCollectorInputName {
1862+
return false
1863+
}
1864+
1865+
return true
1866+
}
1867+
18601868
func (r *tester) checkEnrolledAgents(ctx context.Context, agentInfo agentdeployer.AgentInfo, svcInfo servicedeployer.ServiceInfo) (*kibana.Agent, error) {
18611869
var agents []kibana.Agent
18621870

0 commit comments

Comments
 (0)