Skip to content

Commit 20d03e0

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 5002433 commit 20d03e0

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
@@ -421,6 +421,8 @@ func getTestRunnerSystemCommand() *cobra.Command {
421421
cmd.Flags().Bool(cobraext.TearDownFlagName, false, cobraext.TearDownFlagDescription)
422422
cmd.Flags().Bool(cobraext.NoProvisionFlagName, false, cobraext.NoProvisionFlagDescription)
423423

424+
cmd.Flags().String(cobraext.TestDumpPrefixFlagName, "", cobraext.TestDumpPrefixFlagDescription)
425+
424426
cmd.MarkFlagsMutuallyExclusive(cobraext.SetupFlagName, cobraext.TearDownFlagName, cobraext.NoProvisionFlagName)
425427
cmd.MarkFlagsRequiredTogether(cobraext.ConfigFileFlagName, cobraext.SetupFlagName)
426428

@@ -476,6 +478,11 @@ func testRunnerSystemCommandAction(cmd *cobra.Command, args []string) error {
476478
return cobraext.FlagParsingError(err, cobraext.TestCoverageFormatFlagName)
477479
}
478480

481+
dumpPrefix, err := cmd.Flags().GetString(cobraext.TestDumpPrefixFlagName)
482+
if err != nil {
483+
return cobraext.FlagParsingError(err, cobraext.TestDumpPrefixFlagName)
484+
}
485+
479486
if !slices.Contains(testrunner.CoverageFormatsList(), testCoverageFormat) {
480487
return cobraext.FlagParsingError(fmt.Errorf("coverage format not available: %s", testCoverageFormat), cobraext.TestCoverageFormatFlagName)
481488
}
@@ -585,6 +592,7 @@ func testRunnerSystemCommandAction(cmd *cobra.Command, args []string) error {
585592
WithCoverage: testCoverage,
586593
CoverageType: testCoverageFormat,
587594
RepositoryRoot: repositoryRoot,
595+
DumpPrefix: dumpPrefix,
588596
})
589597

590598
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
@@ -40,6 +40,7 @@ type runner struct {
4040
generateTestResult bool
4141
withCoverage bool
4242
coverageType string
43+
dumpPrefix string
4344

4445
configFilePath string
4546
runSetup bool
@@ -78,6 +79,7 @@ type SystemTestRunnerOptions struct {
7879
DeferCleanup time.Duration
7980
WithCoverage bool
8081
CoverageType string
82+
DumpPrefix string
8183
}
8284

8385
func NewSystemTestRunner(options SystemTestRunnerOptions) *runner {
@@ -100,6 +102,7 @@ func NewSystemTestRunner(options SystemTestRunnerOptions) *runner {
100102
withCoverage: options.WithCoverage,
101103
coverageType: options.CoverageType,
102104
repositoryRoot: options.RepositoryRoot,
105+
dumpPrefix: options.DumpPrefix,
103106
}
104107

105108
r.resourcesManager = resources.NewManager()
@@ -265,6 +268,7 @@ func (r *runner) GetTests(ctx context.Context) ([]testrunner.Tester, error) {
265268
GlobalTestConfig: r.globalTestConfig,
266269
WithCoverage: r.withCoverage,
267270
CoverageType: r.coverageType,
271+
DumpPrefix: r.dumpPrefix,
268272
})
269273
if err != nil {
270274
return nil, fmt.Errorf(

internal/testrunner/runners/system/tester.go

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ type tester struct {
221221
dataStreamManifest *packages.DataStreamManifest
222222
withCoverage bool
223223
coverageType string
224+
dumpPrefix string
224225

225226
serviceStateFilePath string
226227

@@ -253,6 +254,7 @@ type SystemTesterOptions struct {
253254
GlobalTestConfig testrunner.GlobalRunnerTestConfig
254255
WithCoverage bool
255256
CoverageType string
257+
DumpPrefix string
256258

257259
RunSetup bool
258260
RunTearDown bool
@@ -705,7 +707,6 @@ func (r *tester) runTestPerVariant(ctx context.Context, stackConfig stack.Config
705707
logger.Debugf("Using config: %q", testConfig.Name())
706708

707709
partial, err := r.runTest(ctx, testConfig, stackConfig, svcInfo)
708-
709710
tdErr := r.tearDownTest(ctx)
710711
if err != nil {
711712
return partial, err
@@ -1817,32 +1818,26 @@ func (r *tester) runTest(ctx context.Context, config *testConfig, stackConfig st
18171818
return results, nil
18181819
}
18191820

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

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

1843-
func dumpScenarioDocs(docs any) error {
1844-
timestamp := time.Now().Format("20060102150405")
1845-
path := filepath.Join(os.TempDir(), fmt.Sprintf("elastic-package-test-docs-dump-%s.json", timestamp))
1840+
func dumpScenarioDocs(docs any, path string) error {
18461841
f, err := os.Create(path)
18471842
if err != nil {
18481843
return fmt.Errorf("failed to create dump file: %w", err)
@@ -1860,6 +1855,19 @@ func dumpScenarioDocs(docs any) error {
18601855
return nil
18611856
}
18621857

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

0 commit comments

Comments
 (0)