func setupAPITestData(testConfig *evergreen.Settings, taskDisplayName string, variant string, patchMode patchTestMode, t *testing.T) (*model.Task, *build.Build, error) { //ignore errs here because the ns might just not exist. clearDataMsg := "Failed to clear test data collection" testCollections := []string{ model.TasksCollection, build.Collection, host.Collection, distro.Collection, version.Collection, patch.Collection, model.PushlogCollection, model.ProjectVarsCollection, model.TaskQueuesCollection, manifest.Collection, model.ProjectRefCollection} testutil.HandleTestingErr(dbutil.ClearCollections(testCollections...), t, clearDataMsg) projectVars := &model.ProjectVars{ Id: "evergreen-ci-render", Vars: map[string]string{ "aws_key": testConfig.Providers.AWS.Id, "aws_secret": testConfig.Providers.AWS.Secret, "fetch_key": "fetch_expansion_value", }, } _, err := projectVars.Upsert() testutil.HandleTestingErr(err, t, clearDataMsg) taskOne := &model.Task{ Id: "testTaskId", BuildId: "testBuildId", DistroId: "test-distro-one", BuildVariant: variant, Project: "evergreen-ci-render", DisplayName: taskDisplayName, HostId: "testHost", Secret: "testTaskSecret", Version: "testVersionId", Status: evergreen.TaskDispatched, Requester: evergreen.RepotrackerVersionRequester, } taskTwo := &model.Task{ Id: "testTaskIdTwo", BuildId: "testBuildId", DistroId: "test-distro-one", BuildVariant: variant, Project: "evergreen-ci-render", DisplayName: taskDisplayName, HostId: "", Secret: "testTaskSecret", Activated: true, Version: "testVersionId", Status: evergreen.TaskUndispatched, Requester: evergreen.RepotrackerVersionRequester, } if patchMode != NoPatch { taskOne.Requester = evergreen.PatchVersionRequester } testutil.HandleTestingErr(taskOne.Insert(), t, "failed to insert taskOne") testutil.HandleTestingErr(taskTwo.Insert(), t, "failed to insert taskTwo") // set up task queue for task end tests taskQueue := &model.TaskQueue{ Distro: "test-distro-one", Queue: []model.TaskQueueItem{ model.TaskQueueItem{ Id: "testTaskIdTwo", DisplayName: taskDisplayName, }, }, } testutil.HandleTestingErr(taskQueue.Save(), t, "failed to insert taskqueue") workDir, err := ioutil.TempDir("", "agent_test_") testutil.HandleTestingErr(err, t, "failed to create working directory") host := &host.Host{ Id: "testHost", Host: "testHost", Distro: distro.Distro{ Id: "test-distro-one", WorkDir: workDir, Expansions: []distro.Expansion{{"distro_exp", "DISTRO_EXP"}}, }, RunningTask: "testTaskId", StartedBy: evergreen.User, AgentRevision: agentRevision, } testutil.HandleTestingErr(host.Insert(), t, "failed to insert host") // read in the project configuration projectFile := "testdata/config_test_plugin/project/evergreen-ci-render.yml" projectConfig, err := ioutil.ReadFile(projectFile) testutil.HandleTestingErr(err, t, "failed to read project config") projectRef := &model.ProjectRef{ Identifier: "evergreen-ci-render", Owner: "evergreen-ci", Repo: "render", RepoKind: "github", Branch: "master", Enabled: true, BatchTime: 180, } testutil.HandleTestingErr(projectRef.Insert(), t, "failed to insert projectRef") err = testutil.CreateTestLocalConfig(testConfig, "evergreen-ci-render", "testdata/config_test_plugin/project/evergreen-ci-render.yml") testutil.HandleTestingErr(err, t, "failed to marshall project config") // unmarshall the project configuration into a struct project := &model.Project{} testutil.HandleTestingErr(yaml.Unmarshal(projectConfig, project), t, "failed to unmarshal project config") // now then marshall the project YAML for storage projectYamlBytes, err := yaml.Marshal(project) testutil.HandleTestingErr(err, t, "failed to marshall project config") // insert the version document v := &version.Version{ Id: "testVersionId", BuildIds: []string{taskOne.BuildId}, Config: string(projectYamlBytes), } testutil.HandleTestingErr(v.Insert(), t, "failed to insert version") if patchMode != NoPatch { mainPatchContent, err := ioutil.ReadFile("testdata/test.patch") testutil.HandleTestingErr(err, t, "failed to read test patch file") modulePatchContent, err := ioutil.ReadFile("testdata/testmodule.patch") testutil.HandleTestingErr(err, t, "failed to read test module patch file") ptch := &patch.Patch{ Status: evergreen.PatchCreated, Version: v.Id, } if patchMode == InlinePatch { ptch.Patches = []patch.ModulePatch{ { ModuleName: "", Githash: "1e5232709595db427893826ce19289461cba3f75", PatchSet: patch.PatchSet{Patch: string(mainPatchContent)}, }, { ModuleName: "recursive", Githash: "1e5232709595db427893826ce19289461cba3f75", PatchSet: patch.PatchSet{Patch: string(modulePatchContent)}, }, } } else { p1Id, p2Id := bson.NewObjectId().Hex(), bson.NewObjectId().Hex() So(dbutil.WriteGridFile(patch.GridFSPrefix, p1Id, strings.NewReader(string(mainPatchContent))), ShouldBeNil) So(dbutil.WriteGridFile(patch.GridFSPrefix, p2Id, strings.NewReader(string(modulePatchContent))), ShouldBeNil) ptch.Patches = []patch.ModulePatch{ { ModuleName: "", Githash: "1e5232709595db427893826ce19289461cba3f75", PatchSet: patch.PatchSet{PatchFileId: p1Id}, }, { ModuleName: "recursive", Githash: "1e5232709595db427893826ce19289461cba3f75", PatchSet: patch.PatchSet{PatchFileId: p2Id}, }, } } testutil.HandleTestingErr(ptch.Insert(), t, "failed to insert patch") } session, _, err := dbutil.GetGlobalSessionFactory().GetSession() testutil.HandleTestingErr(err, t, "couldn't get db session!") // Remove any logs for our test task from previous runs. _, err = session.DB(model.TaskLogDB).C(model.TaskLogCollection). RemoveAll(bson.M{"t_id": bson.M{"$in": []string{taskOne.Id, taskTwo.Id}}}) testutil.HandleTestingErr(err, t, "failed to remove logs") build := &build.Build{ Id: "testBuildId", Tasks: []build.TaskCache{ build.NewTaskCache(taskOne.Id, taskOne.DisplayName, true), build.NewTaskCache(taskTwo.Id, taskTwo.DisplayName, true), }, Version: "testVersionId", } testutil.HandleTestingErr(build.Insert(), t, "failed to insert build") return taskOne, build, nil }
func SetupAPITestData(taskDisplayName string, isPatch bool, t *testing.T) (*model.Task, *build.Build, error) { //ignore errs here because the ns might just not exist. testutil.HandleTestingErr( db.ClearCollections(model.TasksCollection, build.Collection, host.Collection, version.Collection, patch.Collection), t, "Failed to clear test collections") testHost := &host.Host{ Id: "testHost", Host: "testHost", RunningTask: "testTaskId", StartedBy: evergreen.User, } testutil.HandleTestingErr(testHost.Insert(), t, "failed to insert host") task := &model.Task{ Id: "testTaskId", BuildId: "testBuildId", DistroId: "rhel55", BuildVariant: "linux-64", Project: "mongodb-mongo-master", DisplayName: taskDisplayName, HostId: "testHost", Version: "testVersionId", Secret: "testTaskSecret", Status: evergreen.TaskDispatched, Requester: evergreen.RepotrackerVersionRequester, } if isPatch { task.Requester = evergreen.PatchVersionRequester } testutil.HandleTestingErr(task.Insert(), t, "failed to insert task") version := &version.Version{Id: "testVersionId", BuildIds: []string{task.BuildId}} testutil.HandleTestingErr(version.Insert(), t, "failed to insert version %v") if isPatch { modulePatchContent, err := ioutil.ReadFile("testdata/testmodule.patch") testutil.HandleTestingErr(err, t, "failed to read test module patch file %v") patch := &patch.Patch{ Status: evergreen.PatchCreated, Version: version.Id, Patches: []patch.ModulePatch{ { ModuleName: "enterprise", Githash: "c2d7ce942a96d7dacd27c55b257e3f2774e04abf", PatchSet: patch.PatchSet{Patch: string(modulePatchContent)}, }, }, } testutil.HandleTestingErr(patch.Insert(), t, "failed to insert patch %v") } session, _, err := db.GetGlobalSessionFactory().GetSession() testutil.HandleTestingErr(err, t, "couldn't get db session!") //Remove any logs for our test task from previous runs. _, err = session.DB(model.TaskLogDB).C(model.TaskLogCollection).RemoveAll(bson.M{"t_id": task.Id}) testutil.HandleTestingErr(err, t, "failed to remove logs") build := &build.Build{Id: "testBuildId", Tasks: []build.TaskCache{build.NewTaskCache(task.Id, task.DisplayName, true)}} testutil.HandleTestingErr(build.Insert(), t, "failed to insert build %v") return task, build, nil }
func setupAPITestData(testConfig *evergreen.Settings, taskDisplayName string, variant string, projectFile string, patchMode patchTestMode, t *testing.T) (*model.Task, *build.Build, error) { // Ignore errs here because the ns might just not exist. clearDataMsg := "Failed to clear test data collection" testCollections := []string{ model.TasksCollection, build.Collection, host.Collection, distro.Collection, version.Collection, patch.Collection, model.PushlogCollection, model.ProjectVarsCollection, model.TaskQueuesCollection, manifest.Collection, model.ProjectRefCollection} testutil.HandleTestingErr(dbutil.ClearCollections(testCollections...), t, clearDataMsg) // Read in the project configuration projectConfig, err := ioutil.ReadFile(projectFile) testutil.HandleTestingErr(err, t, "failed to read project config") // Unmarshall the project configuration into a struct project := &model.Project{} testutil.HandleTestingErr(yaml.Unmarshal(projectConfig, project), t, "failed to unmarshal project config") // Marshall the project YAML for storage projectYamlBytes, err := yaml.Marshal(project) testutil.HandleTestingErr(err, t, "failed to marshall project config") // Create the ref for the project projectRef := &model.ProjectRef{ Identifier: project.DisplayName, Owner: project.Owner, Repo: project.Repo, RepoKind: project.RepoKind, Branch: project.Branch, Enabled: project.Enabled, BatchTime: project.BatchTime, LocalConfig: string(projectConfig), } testutil.HandleTestingErr(projectRef.Insert(), t, "failed to insert projectRef") // Save the project variables projectVars := &model.ProjectVars{ Id: project.DisplayName, Vars: map[string]string{ "aws_key": testConfig.Providers.AWS.Id, "aws_secret": testConfig.Providers.AWS.Secret, "fetch_key": "fetch_expansion_value", }, } _, err = projectVars.Upsert() testutil.HandleTestingErr(err, t, clearDataMsg) // Create and insert two tasks taskOne := &model.Task{ Id: "testTaskId", BuildId: "testBuildId", DistroId: "test-distro-one", BuildVariant: variant, Project: project.DisplayName, DisplayName: taskDisplayName, HostId: "testHost", Secret: "testTaskSecret", Version: "testVersionId", Status: evergreen.TaskDispatched, Requester: evergreen.RepotrackerVersionRequester, } if patchMode != NoPatch { taskOne.Requester = evergreen.PatchVersionRequester } testutil.HandleTestingErr(taskOne.Insert(), t, "failed to insert taskOne") taskTwo := &model.Task{ Id: "testTaskIdTwo", BuildId: "testBuildId", DistroId: "test-distro-one", BuildVariant: variant, Project: project.DisplayName, DisplayName: taskDisplayName, HostId: "", Secret: "testTaskSecret", Version: "testVersionId", Status: evergreen.TaskUndispatched, Requester: evergreen.RepotrackerVersionRequester, Activated: true, } testutil.HandleTestingErr(taskTwo.Insert(), t, "failed to insert taskTwo") // Set up a task queue for task end tests taskQueue := &model.TaskQueue{ Distro: "test-distro-one", Queue: []model.TaskQueueItem{ model.TaskQueueItem{ Id: "testTaskIdTwo", DisplayName: taskDisplayName, }, }, } testutil.HandleTestingErr(taskQueue.Save(), t, "failed to insert taskqueue") // Insert the version document v := &version.Version{ Id: "testVersionId", BuildIds: []string{taskOne.BuildId}, Config: string(projectYamlBytes), } testutil.HandleTestingErr(v.Insert(), t, "failed to insert version") // Insert the build that contains the tasks build := &build.Build{ Id: "testBuildId", Tasks: []build.TaskCache{ build.NewTaskCache(taskOne.Id, taskOne.DisplayName, true), build.NewTaskCache(taskTwo.Id, taskTwo.DisplayName, true), }, Version: v.Id, } testutil.HandleTestingErr(build.Insert(), t, "failed to insert build") workDir, err := ioutil.TempDir("", "agent_test_") testutil.HandleTestingErr(err, t, "failed to create working directory") // Insert the host info for running the tests host := &host.Host{ Id: "testHost", Host: "testHost", Distro: distro.Distro{ Id: "test-distro-one", WorkDir: workDir, Expansions: []distro.Expansion{{"distro_exp", "DISTRO_EXP"}}, }, RunningTask: taskOne.Id, StartedBy: evergreen.User, AgentRevision: agentRevision, } testutil.HandleTestingErr(host.Insert(), t, "failed to insert host") session, _, err := dbutil.GetGlobalSessionFactory().GetSession() testutil.HandleTestingErr(err, t, "couldn't get db session!") // Remove any logs for our test task from previous runs. _, err = session.DB(model.TaskLogDB).C(model.TaskLogCollection). RemoveAll(bson.M{"t_id": bson.M{"$in": []string{taskOne.Id, taskTwo.Id}}}) testutil.HandleTestingErr(err, t, "failed to remove logs") return taskOne, build, nil }