func main()

in perf-tools/main.go [68:141]


func main() {
	utils.SetLogLevel(commandLineConfig.LogLevel)
	configFilePath := commandLineConfig.ConfigFilePath
	if configFilePath == "" {
		err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
			if err != nil {
				return err
			} else if info.Name() == ConfigFileName {
				configFilePath = path
				return io.EOF
			}
			return nil
		})
		if err != io.EOF {
			utils.Logger.Fatal("failed to find config file", zap.Error(err))
		}
		if configFilePath == "" {
			utils.Logger.Fatal("can't find required config file for integration testing")
		}
	}
	conf, err := framework.InitConfig(configFilePath)
	if err != nil {
		utils.Logger.Fatal("failed to initialize config", zap.Error(err))
	}
	// init kubeClient
	kubeClient, err := utils.NewKubeClient(conf.Common.KubeConfigFile)
	if err != nil {
		utils.Logger.Fatal("failed to initialize kube-client", zap.Error(err))
	}
	// prepare expected test scenarios due to optional flag "scenarios",
	// set to all registered test scenarios if not configured.
	expectedTestScenarios := make([]framework.TestScenario, 0)
	if commandLineConfig.ScenarioNames != "" {
		for _, scenarioName := range strings.Split(commandLineConfig.ScenarioNames, ",") {
			if ts := framework.GetRegisteredTestScenarios()[scenarioName]; ts != nil {
				expectedTestScenarios = append(expectedTestScenarios, ts)
			} else {
				utils.Logger.Fatal("can't find specified scenario",
					zap.String("specifiedScenarioName", scenarioName),
					zap.Any("registeredTestScenarios", framework.GetRegisteredTestScenarios()))
			}
		}
	} else {
		for _, ts := range framework.GetRegisteredTestScenarios() {
			expectedTestScenarios = append(expectedTestScenarios, ts)
		}
	}
	// prepare output directory
	outputTime := time.Now().Format(DateTimeLayout)
	conf.Common.OutputPath = fmt.Sprintf("%s/%s-%s-%s",
		conf.Common.OutputRootPath, OutputDirNamePrefix, commandLineConfig.ScenarioNames, outputTime)
	err = os.Mkdir(conf.Common.OutputPath, os.ModePerm)
	if err != nil {
		utils.Logger.Fatal("failed to create output directory",
			zap.String("outputPath", conf.Common.OutputPath), zap.Error(err))
	}
	// init expected test scenarios first
	for _, testScenario := range expectedTestScenarios {
		err := testScenario.Init(kubeClient, conf)
		if err != nil {
			utils.Logger.Fatal("failed to initialize scenario",
				zap.String("scenarioName", testScenario.GetName()),
				zap.Error(err))
		}
	}
	// run expected test scenarios
	results := utils.NewResults()
	for _, testScenario := range expectedTestScenarios {
		testScenario.Run(results)
	}
	utils.Logger.Info("all tests have been done, generate report")
	results.RefreshStatus()
	fmt.Println(results.String())
}