/** * Wait for the first completed build of specified project. * @param project the instance of project * @param timeout timeout in seconds * @throws InterruptedException throw if so */ private void waitCompletedBuild(FreeStyleProject project, int timeout) throws InterruptedException { long timeStarted = System.currentTimeMillis(); long timeoutMs = TimeUnit.SECONDS.toMillis(timeout); while (project.getLastCompletedBuild() == null && System.currentTimeMillis() - timeStarted < timeoutMs) { Thread.sleep(POLLING_INTERVAL); } }
Thread.sleep(DELAY); List<Action> actions = project.getLastCompletedBuild().getActions(); boolean hasRebuildCause = false; boolean hasRemoteCause = false;
/** * Tests that a new build can be triggered for the old FreeStyleProject. */ @Test @LocalData public void testNewTriggeredBuild() { server.waitForCommand(GERRIT_STREAM_EVENTS, 10000); Item item = j.jenkins.getItem("freestyleJob"); assertThat("Item is not a FreeStyleProject", item, instanceOf(FreeStyleProject.class)); FreeStyleProject project = (FreeStyleProject)item; int number = project.getLastBuild().getNumber() + 1; PluginImpl.getServer_(PluginImpl.DEFAULT_SERVER_NAME).triggerEvent(Setup.createPatchsetCreated()); TestUtils.waitForBuilds(project, number, 20000); //3 old builds + the new one. assertEquals(number, project.getLastCompletedBuild().getNumber()); assertSame(Result.SUCCESS, project.getLastCompletedBuild().getResult()); }
/** * Tests that a comment added triggers a build correctly. * * @throws Exception if so. */ @Test @LocalData public void testTriggerOnCommentAdded() throws Exception { gerritServer.getConfig().setCategories(Setup.createCodeReviewVerdictCategoryList()); FreeStyleProject project = DuplicatesUtil.createGerritTriggeredJobForCommentAdded(j, "projectX"); project.getBuildersList().add(new SleepBuilder(2000)); serverMock.waitForCommand(GERRIT_STREAM_EVENTS, 2000); CommentAdded firstEvent = Setup.createCommentAdded(); gerritServer.triggerEvent(firstEvent); TestUtils.waitForBuilds(project, 1); assertEquals(1, project.getLastCompletedBuild().getNumber()); assertSame(Result.SUCCESS, project.getLastCompletedBuild().getResult()); }
/** * Tests to trigger a build with a dynamic configuration. * @param branchSetting the dynamic branch setting with operator e.g. "^**" or "=branch" * * @throws Exception if so. */ private void testDynamicTriggeredBuild(String branchSetting) throws Exception { ((Config)gerritServer.getConfig()).setDynamicConfigRefreshInterval(1); FreeStyleProject project = DuplicatesUtil.createGerritDynamicTriggeredJob(j, "projectX", branchSetting); serverMock.waitForCommand(GERRIT_STREAM_EVENTS, 2000); waitForDynamicTimer(project, 8000); gerritServer.triggerEvent(Setup.createPatchsetCreated()); TestUtils.waitForBuilds(project, 1); FreeStyleBuild build = project.getLastCompletedBuild(); assertSame(Result.SUCCESS, build.getResult()); }
/** * Tests that two comments added during the same time only triggers one build. * * @throws Exception if so. */ @Test @LocalData public void testDoubleTriggeredOnCommentAdded() throws Exception { gerritServer.getConfig().setCategories(Setup.createCodeReviewVerdictCategoryList()); FreeStyleProject project = DuplicatesUtil.createGerritTriggeredJobForCommentAdded(j, "projectX"); project.getBuildersList().add(new SleepBuilder(2000)); serverMock.waitForCommand(GERRIT_STREAM_EVENTS, 2000); gerritServer.triggerEvent(Setup.createCommentAdded()); gerritServer.triggerEvent(Setup.createCommentAdded()); TestUtils.waitForBuilds(project, 1); assertEquals(1, project.getLastCompletedBuild().getNumber()); assertSame(Result.SUCCESS, project.getLastCompletedBuild().getResult()); }
TestUtils.waitForBuilds(projectTwo, 1, 20000); FreeStyleBuild buildOne = projectOne.getLastCompletedBuild(); assertSame(Result.SUCCESS, buildOne.getResult()); assertEquals(1, projectOne.getLastCompletedBuild().getNumber()); assertSame(gerritServerOneName, buildOne.getCause(GerritCause.class).getEvent().getProvider().getName()); FreeStyleBuild buildTwo = projectTwo.getLastCompletedBuild(); assertSame(Result.SUCCESS, buildTwo.getResult()); assertEquals(1, projectTwo.getLastCompletedBuild().getNumber()); assertSame(gerritServerTwoName, buildTwo.getCause(GerritCause.class).getEvent().getProvider().getName());
assertEquals(2, server.getNrCommandsHistory("gerrit review.*")); FreeStyleBuild buildOne = project.getLastCompletedBuild(); assertSame(Result.SUCCESS, buildOne.getResult()); assertEquals(1, project.getLastCompletedBuild().getNumber()); assertSame(PluginImpl.DEFAULT_SERVER_NAME, buildOne.getCause(GerritCause.class).getEvent().getProvider().getName());
FreeStyleBuild buildOne = project.getLastCompletedBuild(); assertSame(Result.SUCCESS, buildOne.getResult()); assertEquals(1, project.getLastCompletedBuild().getNumber()); assertSame(gServer.getName(), buildOne.getCause(GerritCause.class).getEvent().getProvider().getName());
TestUtils.waitForBuilds(project, 1, 20000); FreeStyleBuild buildOne = project.getLastCompletedBuild(); assertSame(Result.SUCCESS, buildOne.getResult()); assertEquals(1, project.getLastCompletedBuild().getNumber()); assertSame(gerritServerName, buildOne.getCause(GerritCause.class).getEvent().getProvider().getName());
assertEquals(3, project.getLastCompletedBuild().getNumber()); assertSame(firstExpected, project.getFirstBuild().getResult()); assertSame(secondExpected, project.getBuildByNumber(2).getResult());
assertEquals(buildNum, project.getLastCompletedBuild().getNumber());
/** * Test that child build see the env variables that contains information about "parent" build. * @throws Exception throw if so */ @Test public void testChildBuildSeeParametersOfParentJob() throws Exception { String gerritServerName = ""; GerritServer gerritServer = createMockGerritServer(gerritServerName); PluginImpl.getInstance().addServer(gerritServer); ChangeBasedEvent gerritEvent = createMockChangeBasedEvent(gerritServerName); List<GerritProject> projectList = createMockGerritProjectList(); List<PluginGerritEvent> triggerOnEvents = createMockPluginGerritEventList(); GerritTrigger parentTrigger = new GerritTrigger(projectList); FreeStyleProject parent = createJobWithGerritTrigger("parent", parentTrigger, triggerOnEvents); GerritTrigger childTrigger = new GerritTrigger(projectList); childTrigger.setDependencyJobsNames(parent.getName()); FreeStyleProject child = createJobWithGerritTrigger("child", childTrigger, triggerOnEvents); CaptureEnvironmentBuilder environmentBuilder = new CaptureEnvironmentBuilder(); child.getBuildersList().add(environmentBuilder); PluginImpl.getInstance().getHandler().notifyListeners(gerritEvent); waitCompletedBuild(parent, TIMEOUT); waitCompletedBuild(child, TIMEOUT); jenkinsRule.assertBuildStatusSuccess(parent.getLastCompletedBuild()); assertEquals(environmentBuilder.getEnvVars().get("TRIGGER_parent_BUILD_NAME"), "parent"); assertEquals(environmentBuilder.getEnvVars().get("TRIGGER_DEPENDENCY_KEYS"), "parent"); }
/** * Tests that builds are not aborted when "build current patch sets only" is set to false. * * @throws Exception if so. */ @Test @LocalData public void testNotBuildLatestPatchsetOnly() throws Exception { gerritServer.getConfig().getBuildCurrentPatchesOnly().setEnabled(false); FreeStyleProject project = DuplicatesUtil.createGerritTriggeredJob(j, "projectX"); project.getBuildersList().add(new SleepBuilder(2000)); serverMock.waitForCommand(GERRIT_STREAM_EVENTS, 2000); ManualPatchsetCreated firstEvent = Setup.createManualPatchsetCreated(); AtomicReference<Run> firstBuildRef = TestUtils.getFutureBuildToStart(firstEvent); gerritServer.triggerEvent(firstEvent); Run firstBuild = TestUtils.waitForBuildToStart(firstBuildRef); PatchsetCreated secondEvent = Setup.createPatchsetCreated(); if (null != secondEvent.getPatchSet()) { secondEvent.getPatchSet().setNumber("2"); } gerritServer.triggerEvent(secondEvent); TestUtils.waitForBuilds(project, 2); assertEquals(2, project.getLastCompletedBuild().getNumber()); assertSame(Result.SUCCESS, firstBuild.getResult()); assertSame(Result.SUCCESS, project.getFirstBuild().getResult()); assertSame(Result.SUCCESS, project.getLastBuild().getResult()); }