in internal/testrunner/runners/system/tester.go [322:400]
func (r *tester) Run(ctx context.Context) ([]testrunner.TestResult, error) {
stackConfig, err := stack.LoadConfig(r.profile)
if err != nil {
return nil, err
}
if !r.runSetup && !r.runTearDown && !r.runTestsOnly {
return r.run(ctx, stackConfig)
}
result := r.newResult("(init)")
svcInfo, err := r.createServiceInfo()
if err != nil {
return result.WithError(err)
}
configFile := filepath.Join(r.testFolder.Path, r.configFileName)
testConfig, err := newConfig(configFile, svcInfo, r.serviceVariant)
if err != nil {
return nil, fmt.Errorf("unable to load system test case file '%s': %w", configFile, err)
}
logger.Debugf("Using config: %q", testConfig.Name())
resultName := ""
switch {
case r.runSetup:
resultName = "setup"
case r.runTearDown:
resultName = "teardown"
case r.runTestsOnly:
resultName = "tests"
}
result = r.newResult(fmt.Sprintf("%s - %s", resultName, testConfig.Name()))
scenario, err := r.prepareScenario(ctx, testConfig, stackConfig, svcInfo)
if r.runSetup && err != nil {
tdErr := r.tearDownTest(ctx)
if tdErr != nil {
logger.Errorf("failed to tear down runner: %s", tdErr.Error())
}
setupDirErr := r.removeServiceStateFile()
if setupDirErr != nil {
logger.Error(err.Error())
}
return result.WithError(err)
}
if r.runTestsOnly {
if err != nil {
return result.WithError(fmt.Errorf("failed to prepare scenario: %w", err))
}
results, err := r.validateTestScenario(ctx, result, scenario, testConfig)
tdErr := r.tearDownTest(ctx)
if tdErr != nil {
logger.Errorf("failed to tear down runner: %s", tdErr.Error())
}
return results, err
}
if r.runTearDown {
if err != nil {
logger.Errorf("failed to prepare scenario: %s", err.Error())
logger.Errorf("continue with the tear down process")
}
if err := r.tearDownTest(ctx); err != nil {
return result.WithError(err)
}
err := r.removeServiceStateFile()
if err != nil {
return result.WithError(err)
}
}
return result.WithSuccess()
}