in internal/testrunner/runners/policy/runner.go [91:151]
func (r *runner) GetTests(ctx context.Context) ([]testrunner.Tester, error) {
var folders []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 {
var dataStreams []string
if len(r.dataStreams) > 0 {
dataStreams = r.dataStreams
}
folders, err = testrunner.FindTestFolders(r.packageRootPath, dataStreams, r.Type())
if err != nil {
return nil, fmt.Errorf("unable to determine test folder paths: %w", err)
}
if r.failOnMissingTests && len(folders) == 0 {
if len(dataStreams) > 0 {
return nil, fmt.Errorf("no %s tests found for %s data stream(s)", r.Type(), strings.Join(dataStreams, ","))
}
return nil, fmt.Errorf("no %s tests found", r.Type())
}
} else {
folders, err = testrunner.FindTestFolders(r.packageRootPath, nil, r.Type())
if err != nil {
return nil, fmt.Errorf("unable to determine test folder paths: %w", err)
}
if r.failOnMissingTests && len(folders) == 0 {
return nil, fmt.Errorf("no %s tests found", r.Type())
}
}
var testers []testrunner.Tester
for _, folder := range folders {
tests, err := filepath.Glob(filepath.Join(folder.Path, "test-*.yml"))
if err != nil {
return nil, fmt.Errorf("failed to look for test files in %s: %w", folder.Path, err)
}
for _, test := range tests {
testers = append(testers, NewPolicyTester(PolicyTesterOptions{
PackageRootPath: r.packageRootPath,
TestFolder: folder,
KibanaClient: r.kibanaClient,
GenerateTestResult: r.generateTestResult,
TestPath: test,
GlobalTestConfig: r.globalTestConfig,
WithCoverage: r.withCoverage,
CoverageType: r.coverageType,
}))
}
}
return testers, nil
}