func TestPatchPluginAPI(t *testing.T) { testConfig := evergreen.TestConfig() cwd := testutil.GetDirectoryOfFile() Convey("With a running api server and installed plugin", t, func() { registry := plugin.NewSimpleRegistry() gitPlugin := &GitPlugin{} err := registry.Register(gitPlugin) testutil.HandleTestingErr(err, t, "Couldn't register patch plugin") server, err := service.CreateTestServer(testConfig, nil, plugin.APIPlugins, false) testutil.HandleTestingErr(err, t, "Couldn't set up testing server") taskConfig, _ := plugintest.CreateTestConfig(filepath.Join(cwd, "testdata", "plugin_patch.yml"), t) testCommand := GitGetProjectCommand{Directory: "dir"} _, _, err = plugintest.SetupAPITestData("testTask", filepath.Join(cwd, "testdata", "testmodule.patch"), t) testutil.HandleTestingErr(err, t, "Couldn't set up test documents") testTask, err := task.FindOne(task.ById("testTaskId")) testutil.HandleTestingErr(err, t, "Couldn't set up test patch task") sliceAppender := &evergreen.SliceAppender{[]*slogger.Log{}} logger := agentutil.NewTestLogger(sliceAppender) Convey("calls to existing tasks with patches should succeed", func() { httpCom := plugintest.TestAgentCommunicator(testTask.Id, testTask.Secret, server.URL) pluginCom := &comm.TaskJSONCommunicator{gitPlugin.Name(), httpCom} patch, err := testCommand.GetPatch(taskConfig, pluginCom, logger) So(err, ShouldBeNil) So(patch, ShouldNotBeNil) testutil.HandleTestingErr(db.Clear(version.Collection), t, "unable to clear versions collection") }) Convey("calls to non-existing tasks should fail", func() { v := version.Version{Id: ""} testutil.HandleTestingErr(v.Insert(), t, "Couldn't insert dummy version") httpCom := plugintest.TestAgentCommunicator("BAD_TASK_ID", "", server.URL) pluginCom := &comm.TaskJSONCommunicator{gitPlugin.Name(), httpCom} patch, err := testCommand.GetPatch(taskConfig, pluginCom, logger) So(err.Error(), ShouldContainSubstring, "not found") So(err, ShouldNotBeNil) So(patch, ShouldBeNil) testutil.HandleTestingErr(db.Clear(version.Collection), t, "unable to clear versions collection") }) Convey("calls to existing tasks without patches should fail", func() { noPatchTask := task.Task{Id: "noPatchTask", BuildId: "a"} testutil.HandleTestingErr(noPatchTask.Insert(), t, "Couldn't insert patch task") noPatchVersion := version.Version{Id: "noPatchVersion", BuildIds: []string{"a"}} testutil.HandleTestingErr(noPatchVersion.Insert(), t, "Couldn't insert patch version") v := version.Version{Id: ""} testutil.HandleTestingErr(v.Insert(), t, "Couldn't insert dummy version") httpCom := plugintest.TestAgentCommunicator(noPatchTask.Id, "", server.URL) pluginCom := &comm.TaskJSONCommunicator{gitPlugin.Name(), httpCom} patch, err := testCommand.GetPatch(taskConfig, pluginCom, logger) So(err, ShouldNotBeNil) So(err.Error(), ShouldContainSubstring, "no patch found for task") So(patch, ShouldBeNil) testutil.HandleTestingErr(db.Clear(version.Collection), t, "unable to clear versions collection") }) }) }
func TestPatchPlugin(t *testing.T) { cwd := testutil.GetDirectoryOfFile() testConfig := evergreen.TestConfig() db.SetGlobalSessionProvider(db.SessionFactoryFromConfig(testConfig)) Convey("With patch plugin installed into plugin registry", t, func() { registry := plugin.NewSimpleRegistry() gitPlugin := &GitPlugin{} err := registry.Register(gitPlugin) testutil.HandleTestingErr(err, t, "Couldn't register plugin %v") testutil.HandleTestingErr(db.Clear(version.Collection), t, "unable to clear versions collection") version := &version.Version{ Id: "", } So(version.Insert(), ShouldBeNil) server, err := service.CreateTestServer(testConfig, nil, plugin.APIPlugins, false) testutil.HandleTestingErr(err, t, "Couldn't set up testing server") httpCom := plugintest.TestAgentCommunicator("testTaskId", "testTaskSecret", server.URL) //sliceAppender := &evergreen.SliceAppender{[]*slogger.Log{}} sliceAppender := slogger.StdOutAppender() logger := agentutil.NewTestLogger(sliceAppender) Convey("all commands in test project should execute successfully", func() { taskConfig, err := plugintest.CreateTestConfig(filepath.Join(cwd, "testdata", "plugin_patch.yml"), t) testutil.HandleTestingErr(err, t, "could not create test config") taskConfig.Task.Requester = evergreen.PatchVersionRequester _, _, err = plugintest.SetupAPITestData("testTask", filepath.Join(cwd, "testdata", "testmodule.patch"), t) testutil.HandleTestingErr(err, t, "Couldn't set up test documents") for _, task := range taskConfig.Project.Tasks { So(len(task.Commands), ShouldNotEqual, 0) for _, command := range task.Commands { pluginCmds, err := registry.GetCommands(command, taskConfig.Project.Functions) testutil.HandleTestingErr(err, t, "Couldn't get plugin command: %v") So(pluginCmds, ShouldNotBeNil) So(err, ShouldBeNil) pluginCom := &comm.TaskJSONCommunicator{pluginCmds[0].Plugin(), httpCom} err = pluginCmds[0].Execute(logger, pluginCom, taskConfig, make(chan bool)) So(err, ShouldBeNil) } } }) }) }
func TestGotestPluginWithEnvironmentVariables(t *testing.T) { Convey("With gotest plugin installed into plugin registry", t, func() { reset(t) testConfig := evergreen.TestConfig() testutil.ConfigureIntegrationTest(t, testConfig, "TestGotestPluginWithEnvironmentVariables") registry := plugin.NewSimpleRegistry() testPlugin := &GotestPlugin{} err := registry.Register(testPlugin) testutil.HandleTestingErr(err, t, "Couldn't register plugin %v") server, err := apiserver.CreateTestServer(testConfig, nil, plugin.APIPlugins, true) testutil.HandleTestingErr(err, t, "Couldn't set up testing server") httpCom := plugintest.TestAgentCommunicator("testTaskId", "testTaskSecret", server.URL) sliceAppender := &evergreen.SliceAppender{[]*slogger.Log{}} logger := agent.NewTestLogger(sliceAppender) Convey("test command should get a copy of custom environment variables", func() { curWD, err := os.Getwd() testutil.HandleTestingErr(err, t, "Couldn't get working directory: %v") taskConfig, err := plugintest.CreateTestConfig("testdata/env.yml", t) // manually override working directory to the main repo, since this // is much easier than copying over the required testing dependencies // to a temporary directory testutil.HandleTestingErr(err, t, "Couldn't set up test config %v") taskConfig.WorkDir = curWD _, _, err = plugintest.SetupAPITestData("testTask", false, t) testutil.HandleTestingErr(err, t, "Couldn't set up test documents") for _, task := range taskConfig.Project.Tasks { So(len(task.Commands), ShouldNotEqual, 0) for _, command := range task.Commands { pluginCmds, err := registry.GetCommands(command, taskConfig.Project.Functions) testutil.HandleTestingErr(err, t, "Couldn't get plugin command: %v") So(pluginCmds, ShouldNotBeNil) So(err, ShouldBeNil) pluginCom := &agent.TaskJSONCommunicator{pluginCmds[0].Plugin(), httpCom} err = pluginCmds[0].Execute(logger, pluginCom, taskConfig, make(chan bool)) So(err, ShouldBeNil) } } }) }) }
func TestGotestPluginOnPassingTests(t *testing.T) { SkipConvey("With gotest plugin installed into plugin registry", t, func() { reset(t) testConfig := evergreen.TestConfig() testutil.ConfigureIntegrationTest(t, testConfig, "TestGotestPluginOnPassingTests") registry := plugin.NewSimpleRegistry() testPlugin := &GotestPlugin{} err := registry.Register(testPlugin) testutil.HandleTestingErr(err, t, "Couldn't register plugin %v") server, err := apiserver.CreateTestServer(evergreen.TestConfig(), nil, plugin.APIPlugins, true) testutil.HandleTestingErr(err, t, "Couldn't set up testing server") httpCom := plugintest.TestAgentCommunicator("testTaskId", "testTaskSecret", server.URL) sliceAppender := &evergreen.SliceAppender{[]*slogger.Log{}} logger := agent.NewTestLogger(sliceAppender) Convey("all commands in test project should execute successfully", func() { curWD, err := os.Getwd() testutil.HandleTestingErr(err, t, "Couldn't get working directory: %v") taskConfig, err := plugintest.CreateTestConfig("testdata/good.yml", t) // manually override working directory to the main repo, since this // is much easier than copying over the required testing dependencies // to a temporary directory testutil.HandleTestingErr(err, t, "Couldn't set up test config %v") taskConfig.WorkDir = curWD task, _, err := plugintest.SetupAPITestData("testTask", false, t) testutil.HandleTestingErr(err, t, "Couldn't set up test documents") for _, task := range taskConfig.Project.Tasks { So(len(task.Commands), ShouldNotEqual, 0) for _, command := range task.Commands { pluginCmds, err := registry.GetCommands(command, taskConfig.Project.Functions) testutil.HandleTestingErr(err, t, "Couldn't get plugin command: %v") So(pluginCmds, ShouldNotBeNil) So(err, ShouldBeNil) pluginCom := &agent.TaskJSONCommunicator{pluginCmds[0].Plugin(), httpCom} err = pluginCmds[0].Execute(logger, pluginCom, taskConfig, make(chan bool)) So(err, ShouldBeNil) } } Convey("and the tests in the task should be updated", func() { updatedTask, err := model.FindTask(task.Id) So(err, ShouldBeNil) So(updatedTask, ShouldNotBeNil) So(len(updatedTask.TestResults), ShouldEqual, 2) So(updatedTask.TestResults[0].Status, ShouldEqual, "pass") So(updatedTask.TestResults[1].Status, ShouldEqual, "pass") So(updatedTask.TestResults[0].TestFile, ShouldEqual, "TestPass01") So(updatedTask.TestResults[1].TestFile, ShouldEqual, "TestPass02") So(updatedTask.TestResults[0].StartTime, ShouldBeLessThan, updatedTask.TestResults[0].EndTime) So(updatedTask.TestResults[1].StartTime, ShouldBeLessThan, updatedTask.TestResults[1].EndTime) Convey("with relevant logs present in the DB as well", func() { log, err := model.FindOneTestLog("0_goodpkg", "testTaskId", 0) So(log, ShouldNotBeNil) So(err, ShouldBeNil) So(log.Lines[0], ShouldContainSubstring, "TestPass01") }) }) }) }) }
func TestAttachTaskFilesPlugin(t *testing.T) { testConfig := evergreen.TestConfig() Convey("With attach plugin installed into plugin registry", t, func() { registry := plugin.NewSimpleRegistry() attachPlugin := &AttachPlugin{} err := registry.Register(attachPlugin) testutil.HandleTestingErr(err, t, "Couldn't register plugin %v") server, err := apiserver.CreateTestServer(testConfig, nil, plugin.APIPlugins, true) testutil.HandleTestingErr(err, t, "Couldn't set up testing server") httpCom := plugintest.TestAgentCommunicator("testTaskId", "testTaskSecret", server.URL) sliceAppender := &evergreen.SliceAppender{[]*slogger.Log{}} logger := agent.NewTestLogger(sliceAppender) Convey("all commands in test project should execute successfully", func() { taskConfig, _ := plugintest.CreateTestConfig("testdata/plugin_attach_files.yml", t) _, _, err = plugintest.SetupAPITestData("testTask", true, t) testutil.HandleTestingErr(err, t, "Couldn't set up test documents") for _, task := range taskConfig.Project.Tasks { So(len(task.Commands), ShouldNotEqual, 0) for _, command := range task.Commands { pluginCmds, err := registry.GetCommands(command, taskConfig.Project.Functions) testutil.HandleTestingErr(err, t, "Couldn't get plugin command: %v") So(pluginCmds, ShouldNotBeNil) So(err, ShouldBeNil) pluginCom := &agent.TaskJSONCommunicator{pluginCmds[0].Plugin(), httpCom} err = pluginCmds[0].Execute(logger, pluginCom, taskConfig, make(chan bool)) So(err, ShouldBeNil) } } Convey("and these file entry fields should exist in the db:", func() { entry, err := artifact.FindOne(artifact.ByTaskId("testTaskId")) So(err, ShouldBeNil) So(entry, ShouldNotBeNil) So(entry.TaskDisplayName, ShouldEqual, "testTask") So(len(entry.Files), ShouldEqual, 5) var regular artifact.File var expansion artifact.File var overwritten artifact.File for _, file := range entry.Files { switch file.Name { case "file1": expansion = file case "file2": overwritten = file case "file3": regular = file } } Convey("- regular link", func() { So(regular, ShouldResemble, artifact.File{"file3", "http://kyle.diamonds", ""}) }) Convey("- link with expansion", func() { So(expansion, ShouldResemble, artifact.File{"file1", "i am a FILE!", ""}) }) Convey("- link that is overwritten", func() { So(overwritten, ShouldResemble, artifact.File{"file2", "replaced!", ""}) }) }) }) }) }