in internal/testrunner/runners/pipeline/runner.go [83:149]
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 {
testCaseFiles, err := r.listTestCaseFiles(folder)
if err != nil {
return nil, fmt.Errorf("listing test case definitions failed: %w", err)
}
for _, caseFile := range testCaseFiles {
t, err := NewPipelineTester(PipelineTesterOptions{
TestFolder: folder,
PackageRootPath: r.packageRootPath,
GenerateTestResult: r.generateTestResult,
WithCoverage: r.withCoverage,
CoverageType: r.coverageType,
DeferCleanup: r.deferCleanup,
Profile: r.profile,
API: r.esAPI,
TestCaseFile: caseFile,
GlobalTestConfig: r.globalTestConfig,
})
if err != nil {
return nil, fmt.Errorf("failed to create pipeline tester: %w", err)
}
testers = append(testers, t)
}
}
return testers, nil
}