internal/testrunner/runners/static/runner.go (91 lines of code) (raw):

// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one // or more contributor license agreements. Licensed under the Elastic License; // you may not use this file except in compliance with the Elastic License. package static import ( "context" "fmt" "path/filepath" "strings" "github.com/elastic/elastic-package/internal/packages" "github.com/elastic/elastic-package/internal/testrunner" ) const ( // TestType defining asset loading tests TestType testrunner.TestType = "static" sampleEventJSON = "sample_event.json" ) type runner struct { packageRootPath string failOnMissingTests bool dataStreams []string globalTestConfig testrunner.GlobalRunnerTestConfig withCoverage bool coverageType string } type StaticTestRunnerOptions struct { PackageRootPath string FailOnMissingTests bool DataStreams []string GlobalTestConfig testrunner.GlobalRunnerTestConfig WithCoverage bool CoverageType string } func NewStaticTestRunner(options StaticTestRunnerOptions) *runner { runner := runner{ packageRootPath: options.PackageRootPath, failOnMissingTests: options.FailOnMissingTests, dataStreams: options.DataStreams, globalTestConfig: options.GlobalTestConfig, withCoverage: options.WithCoverage, coverageType: options.CoverageType, } return &runner } // Ensures that runner implements testrunner.TestRunner interface var _ testrunner.TestRunner = new(runner) func (r *runner) SetupRunner(ctx context.Context) error { return nil } func (r *runner) TearDownRunner(ctx context.Context) error { return nil } func (r *runner) GetTests(ctx context.Context) ([]testrunner.Tester, error) { var tests []testrunner.TestFolder manifest, err := packages.ReadPackageManifestFromPackageRoot(r.packageRootPath) if err != nil { return nil, fmt.Errorf("reading package manifest failed (path: %s): %w", r.packageRootPath, err) } hasDataStreams, err := testrunner.PackageHasDataStreams(manifest) if err != nil { return nil, fmt.Errorf("cannot determine if package has data streams: %w", err) } if hasDataStreams { tests, err = testrunner.AssumeTestFolders(r.packageRootPath, r.dataStreams, r.Type()) if err != nil { return nil, fmt.Errorf("unable to assume test folder paths: %w", err) } if r.failOnMissingTests && len(tests) == 0 { if len(r.dataStreams) > 0 { return nil, fmt.Errorf("no %s tests found for %s data stream(s)", r.Type(), strings.Join(r.dataStreams, ",")) } return nil, fmt.Errorf("no %s tests found", r.Type()) } } else { _, pkg := filepath.Split(r.packageRootPath) tests = []testrunner.TestFolder{ { Package: pkg, }, } } var testers []testrunner.Tester for _, t := range tests { testers = append(testers, NewStaticTester(StaticTesterOptions{ PackageRootPath: r.packageRootPath, TestFolder: t, GlobalTestConfig: r.globalTestConfig, WithCoverage: r.withCoverage, CoverageType: r.coverageType, })) } return testers, nil } func (r *runner) Type() testrunner.TestType { return TestType }