func()

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
}