func createTestConfig(filename string, t *testing.T) (*model.TaskConfig, error) { clearDataMsg := "Failed to clear test data collection" testutil.HandleTestingErr( db.ClearCollections( task.Collection, model.ProjectVarsCollection), t, clearDataMsg) data, err := ioutil.ReadFile(filename) if err != nil { return nil, err } testProject := &model.Project{} err = yaml.Unmarshal(data, testProject) if err != nil { return nil, err } testProjectRef := &model.ProjectRef{ Identifier: "mongodb-mongo-master", Owner: "mongodb", Repo: "mongo", RepoKind: "github", Branch: "master", Enabled: true, BatchTime: 180, } workDir, err := ioutil.TempDir("", "plugintest_") if err != nil { return nil, err } testTask := &task.Task{ Id: "mocktaskid", BuildId: "testBuildId", BuildVariant: "linux-64", Project: "mongodb-mongo-master", DisplayName: "test", HostId: "testHost", Version: "versionId", Secret: "mocktasksecret", Status: evergreen.TaskDispatched, Revision: "cb91350bf017337a734dcd0321bf4e6c34990b6a", Requester: evergreen.RepotrackerVersionRequester, } testutil.HandleTestingErr(testTask.Insert(), t, "failed to insert task") projectVars := &model.ProjectVars{ Id: "mongodb-mongo-master", Vars: map[string]string{ "abc": "xyz", "123": "456", }, } _, err = projectVars.Upsert() testutil.HandleTestingErr(err, t, "failed to upsert project vars") testDistro := &distro.Distro{Id: "linux-64", WorkDir: workDir} testVersion := &version.Version{} return model.NewTaskConfig(testDistro, testVersion, testProject, testTask, testProjectRef) }
// GetTaskConfig fetches task configuration data required to run the task from the API server. func (agt *Agent) GetTaskConfig() (*model.TaskConfig, error) { agt.logger.LogExecution(slogger.INFO, "Fetching distro configuration.") distro, err := agt.GetDistro() if err != nil { return nil, err } agt.logger.LogExecution(slogger.INFO, "Fetching project configuration.") project, err := agt.GetProjectConfig() if err != nil { return nil, err } agt.logger.LogExecution(slogger.INFO, "Fetching task configuration.") task, err := agt.GetTask() if err != nil { return nil, err } agt.logger.LogExecution(slogger.INFO, "Fetching project ref.") ref, err := agt.GetProjectRef() if err != nil { return nil, err } if ref == nil { return nil, fmt.Errorf("Agent retrieved an empty project ref") } agt.logger.LogExecution(slogger.INFO, "Constructing TaskConfig.") return model.NewTaskConfig(distro, project, task, ref) }
// GetTaskConfig fetches task configuration data required to run the task from the API server. func (agt *Agent) GetTaskConfig() (*model.TaskConfig, error) { agt.logger.LogExecution(slogger.INFO, "Fetching distro configuration.") confDistro, err := agt.GetDistro() if err != nil { return nil, err } agt.logger.LogExecution(slogger.INFO, "Fetching version.") confVersion, err := agt.GetVersion() if err != nil { return nil, err } confProject := &model.Project{} err = model.LoadProjectInto([]byte(confVersion.Config), confVersion.Identifier, confProject) if err != nil { return nil, fmt.Errorf("reading project config: %v", err) } agt.logger.LogExecution(slogger.INFO, "Fetching task configuration.") confTask, err := agt.GetTask() if err != nil { return nil, err } agt.logger.LogExecution(slogger.INFO, "Fetching project ref.") confRef, err := agt.GetProjectRef() if err != nil { return nil, err } if confRef == nil { return nil, fmt.Errorf("agent retrieved an empty project ref") } agt.logger.LogExecution(slogger.INFO, "Constructing TaskConfig.") return model.NewTaskConfig(confDistro, confVersion, confProject, confTask, confRef) }