if (scm.requiresWorkspaceForPolling()) { R b = getSomeBuildWithExistingWorkspace(); if (b == null) b = getLastBuild(); WorkspaceOfflineReason workspaceOfflineReason = workspaceOffline( b ); if ( workspaceOfflineReason != null ) { ws = browser.getWorkspace(this); if (ws != null) { return pollWithWorkspace(listener, scm, b, ws, browser.getWorkspaceList()); Label label = getAssignedLabel(); if (label != null && label.isSelfLabel()) { ? Messages.AbstractProject_WorkspaceOffline() : Messages.AbstractProject_NoWorkspace()); if (isInQueue()) { listener.getLogger().println(Messages.AbstractProject_AwaitingBuildForWorkspace()); return NO_CHANGES; return BUILD_NOW; } else { WorkspaceList l = b.getBuiltOn().toComputer().getWorkspaceList(); return pollWithWorkspace(listener, scm, b, ws, l); LOGGER.fine("Polling SCM changes of " + getName()); if (pollingBaseline==null) // see NOTE-NO-BASELINE above calcPollingBaseline(getLastBuild(),null,listener); PollingResult r = scm.poll(this, null, null, listener, pollingBaseline);
@Override public String getWhyKeepLog() { // if any of the downstream project is configured with 'keep dependency component', // we need to keep this log OUTER: for (AbstractProject<?,?> p : getParent().getDownstreamProjects()) { if (!p.isKeepDependencies()) continue; AbstractBuild<?,?> fb = p.getFirstBuild(); if (fb==null) continue; // no active record // is there any active build that depends on us? for (int i : getDownstreamRelationship(p).listNumbersReverse()) { // TODO: this is essentially a "find intersection between two sparse sequences" // and we should be able to do much better. if (i<fb.getNumber()) continue OUTER; // all the other records are younger than the first record, so pointless to search. AbstractBuild<?,?> b = p.getBuildByNumber(i); if (b!=null) return Messages.AbstractBuild_KeptBecause(p.hasPermission(Item.READ) ? b.toString() : "?"); } } return super.getWhyKeepLog(); }
@Override public boolean shouldTriggerBuild(AbstractBuild build, TaskListener listener, List<Action> actions) { AbstractProject downstream = getDownstreamProject(); if (Jenkins.getInstance().getItemByFullName(downstream.getFullName()) != downstream) { // this checks Item.READ also on parent folders LOGGER.log(Level.WARNING, "Running as {0} cannot even see {1} for trigger from {2}", new Object[] {Jenkins.getAuthentication().getName(), downstream, getUpstreamProject()}); return false; // do not even issue a warning to build log } if (!downstream.hasPermission(Item.BUILD)) { listener.getLogger().println(Messages.BuildTrigger_you_have_no_permission_to_build_(ModelHyperlinkNote.encodeTo(downstream))); return false; } return build.getResult().isBetterOrEqualTo(threshold); } });
@Override // same as ParameterizedJob version except calls possibly overridden newBuild public @CheckForNull R createExecutable() throws IOException { if(isDisabled()) return null; return newBuild(); }
/** * Schedules a polling of this project. * @see SCMTriggerItem#schedulePolling */ public boolean schedulePolling() { if(isDisabled()) return false; SCMTrigger scmt = getTrigger(SCMTrigger.class); if(scmt==null) return false; scmt.run(); return true; }
@Override public BallColor getIconColor() { if(isDisabled()) return isBuilding() ? BallColor.DISABLED_ANIME : BallColor.DISABLED; else return super.getIconColor(); }
/** * Tests * {@link TriggerMonitor#buildCompleted(com.sonymobile.tools.gerrit.gerritevents.dto.GerritEvent, hudson.model.Run)}. * @throws Exception if so. */ @Test public void testBuildCompleted() throws Exception { TriggerMonitor monitor = new TriggerMonitor(); ManualPatchsetCreated patch = Setup.createManualPatchsetCreated(); monitor.add(patch); monitor.triggerScanStarting(patch); AbstractProject project = PowerMockito.mock(AbstractProject.class); doReturn("projectX").when(project).getFullName(); AbstractBuild build = mock(AbstractBuild.class); when(build.getProject()).thenReturn(project); monitor.projectTriggered(patch, project); monitor.buildStarted(patch, build); monitor.buildCompleted(patch, build); TriggerMonitor.EventState state = monitor.getEvents().get(0); assertEquals(1, state.getBuilds().size()); assertSame(build, state.getBuilds().get(0).getBuild()); }
@SuppressWarnings("rawtypes") @Test @Bug(15794) public void shouldIgnoreDisabledJobs() throws ServletException, IOException { SubversionRepositoryStatus.JobTriggerListenerImpl listener = new SubversionRepositoryStatus.JobTriggerListenerImpl(); // GIVEN: a disabled project final AbstractProject project = mock(AbstractProject.class); when(project.isDisabled()).thenReturn(true); JobProvider jobProvider = () -> Collections.<Job>singletonList(project); listener.setJobProvider(jobProvider); // WHEN: post-commit hook is triggered listener.onNotify(UUID.randomUUID(), -1, Collections.singleton("/somepath")); // EXPECT: disabled project is not considered at all verify(project, never()).getScm(); }
/** * Create a queue item caused by the specified gerritCause. * @param gerritCause The gerritCause * @param dependency The dependency project list in a comma-separated string to add to the queue item. * @return the queue item */ private Queue.Item createItem(GerritCause gerritCause, String dependency) { List<Action> actions = new ArrayList<Action>(); actions.add(new CauseAction(gerritCause)); abstractProjectMock = mock(AbstractProject.class); when(abstractProjectMock.getTrigger(GerritTrigger.class)).thenReturn(gerritTriggerMock); when(abstractProjectMock.getTriggers()).thenReturn(triggers); abstractProjectDependencyMock = mock(AbstractProject.class); when(abstractProjectDependencyMock.getTrigger(GerritTrigger.class)).thenReturn(gerritTriggerMock); when(gerritTriggerMock.getDependencyJobsNames()).thenReturn(dependency); when(jenkinsMock.getItem(eq(dependency), any(Item.class), Item.class)).thenReturn(abstractProjectDependencyMock); ItemGroup abstractProjectDependencyMockParent = mock(ItemGroup.class); when(abstractProjectDependencyMockParent.getFullName()).thenReturn(""); when(abstractProjectDependencyMock.getParent()).thenReturn(abstractProjectDependencyMockParent); when(abstractProjectDependencyMock.getName()).thenReturn(dependency); WaitingItem waitingItem = PowerMockito.spy(new WaitingItem(Calendar.getInstance(), abstractProjectMock, actions)); when(waitingItem.getInQueueSince()).thenReturn(System.currentTimeMillis() - TimeUnit.SECONDS.toMillis(GerritDefaultValues.DEFAULT_BUILD_SCHEDULE_DELAY)); return waitingItem; }
/** * Tests {@link EventListener#gerritEvent(com.sonymobile.tools.gerrit.gerritevents.dto.GerritEvent)}. * With a ManualPatchsetCreated event and silentMode on. */ @Test public void testGerritEventManualEventSilentMode() { AbstractProject project = PowerMockito.mock(AbstractProject.class); when(project.getFullName()).thenReturn("MockProject"); when(project.isBuildable()).thenReturn(true); Queue queue = mockConfig(project); PowerMockito.mockStatic(ToGerritRunListener.class); ToGerritRunListener listener = PowerMockito.mock(ToGerritRunListener.class); PowerMockito.when(ToGerritRunListener.getInstance()).thenReturn(listener); GerritProject gP = mock(GerritProject.class); doReturn(true).when(gP).isInteresting(any(String.class), any(String.class), any(String.class)); when(gP.getFilePaths()).thenReturn(null); GerritTrigger trigger = Setup.createDefaultTrigger(project); Setup.setTrigger(trigger, project); trigger.setGerritProjects(Collections.nCopies(1, gP)); //Whitebox.setInternalState(trigger, "job", project); ManualPatchsetCreated event = Setup.createManualPatchsetCreated(); EventListener eventListener = trigger.createListener(); eventListener = spy(eventListener); eventListener.gerritEvent(event); verify(listener, never()).onTriggered(same(project), same(event)); verify(eventListener).schedule(same(trigger), argThat(new IsAManualCause(true)), same(event)); verify(queue).schedule2(same(project), eq(0), hasCauseActionContainingCause(null)); }
throws IOException, InterruptedException { when(build.getResult()).thenReturn(Result.SUCCESS); memory.completed(event, build); build = mock(AbstractBuild.class); when(build.getResult()).thenReturn(Result.FAILURE); env = Setup.createEnvVars(); when(build.getEnvironment(taskListener)).thenReturn(env); when(build.getId()).thenReturn("1"); project = mock(AbstractProject.class); doReturn("MockProject2").when(project).getFullName(); doReturn(build).when(project).getBuild(anyString()); when(build.getProject()).thenReturn(project); when(build.getParent()).thenReturn(project); when(jenkins.getItemByFullName(eq("MockProject2"), same(AbstractProject.class))).thenReturn(project); when(jenkins.getItemByFullName(eq("MockProject2"), same(Job.class))).thenReturn(project); trigger = mock(GerritTrigger.class); String parameterStringExpected = "gerrit review MSG=FAILED VERIFIED=-1 CODEREVIEW=-1"; verify(mockGerritCmdRunner).sendCommand(parameterStringExpected);
/** * Sets up the {@link #project} and {@link #build} mocks. * * This is called from {@link #fullSetup()} but can also * be called several times during a test to create more instances. */ void setup() { String name = "MockProject" + (nameCount++); String buildId = "b" + nameCount; project = mock(AbstractProject.class); doReturn(name).when(project).getFullName(); build = mock(AbstractBuild.class); doReturn(buildId).when(build).getId(); when(build.getProject()).thenReturn(project); when(build.getParent()).thenReturn(project); doReturn(build).when(project).getBuild(eq(buildId)); when(jenkins.getItemByFullName(eq(name), same(AbstractProject.class))).thenReturn(project); when(jenkins.getItemByFullName(eq(name), same(Job.class))).thenReturn(project); }
/** * Returns a mocked version of an AbstractProject, where getFullName() returns the provided name. * @param fullName - the name of the project. * @return a mock. */ private AbstractProject mockProject(String fullName) { AbstractProject project = PowerMockito.mock(AbstractProject.class); when(project.getFullName()).thenReturn(fullName); return project; }
public void testGetSortedOthers() { AbstractBuild buildInProgress0 = mockBuild("p0", 1); when(buildInProgress0.isBuilding()).thenReturn(true); when(buildInProgress1.isBuilding()).thenReturn(true); when(project.getBuildByNumber(777)).thenReturn(null); TriggeredItemEntity itemWithNullBuild = new TriggeredItemEntity(project); itemWithNullBuild.setBuildNumber(777);
hudson = PowerMockito.mock(Hudson.class); when(hudson.getRootUrl()).thenReturn("http://localhost/"); PowerMockito.mockStatic(GerritMessageProvider.class); when(GerritMessageProvider.all()).thenReturn(null); taskListener = mock(TaskListener.class); when(build.getEnvironment(taskListener)).thenReturn(env); when(build.getId()).thenReturn("1"); project = mock(AbstractProject.class); doReturn("MockProject").when(project).getFullName(); when(build.getProject()).thenReturn(project); when(build.getParent()).thenReturn(project); doReturn(build).when(project).getBuild(anyString()); trigger = mock(GerritTrigger.class); mockStatic(Jenkins.class); jenkins = mock(Jenkins.class); when(Jenkins.getInstance()).thenReturn(jenkins); when(jenkins.getItemByFullName(eq("MockProject"), same(AbstractProject.class))).thenReturn(project); when(jenkins.getItemByFullName(eq("MockProject"), same(Job.class))).thenReturn(project); mockStatic(GerritTriggeredBuildListener.class);
/** * Setup all the mocks. */ @Before public void setup() { project = mock(AbstractProject.class); doReturn("MockProject").when(project).getFullName(); listener = new EventListener(project); listener = spy(listener); trigger = mock(GerritTrigger.class); doNothing().when(listener).schedule(same(trigger), any(GerritCause.class), any(GerritTriggeredEvent.class)); jenkins = mock(Jenkins.class); mockStatic(Jenkins.class); when(Jenkins.getInstance()).thenReturn(jenkins); when(jenkins.getItemByFullName("MockProject", AbstractProject.class)).thenReturn(project); when(jenkins.getItemByFullName("MockProject", Job.class)).thenReturn(project); Setup.setTrigger(trigger, project); when(trigger.isInteresting(any(GerritTriggeredEvent.class))).thenReturn(true); handler = new JenkinsAwareGerritHandler(1); handler.addListener(listener); }
/** * Returns a mocked version of an AbstractProject, where getFullName() returns the provided name. * * @param fullName - the name of the project. * @throws Exception if so. * @return a mock. */ private AbstractProject mockProject(String fullName) throws Exception { AbstractProject project = PowerMockito.mock(AbstractProject.class); doReturn(fullName).when(project).getFullName(); when(jenkins.getItemByFullName(eq(fullName), same(AbstractProject.class))).thenReturn(project); when(jenkins.getItemByFullName(eq(fullName), same(Job.class))).thenReturn(project); return project; }
/** * Creates a mocked {@link AbstractProject} that returns the provided name and parameters * @param name the name * @param parameterDefinitionList the list of parameters or * {@code null} to not mock the {@link ParametersDefinitionProperty} at all. * @return the mocked project */ private AbstractProject mockProject(String name, List<ParameterDefinition> parameterDefinitionList) { AbstractProject project = PowerMockito.mock(AbstractProject.class); when(project.getFullDisplayName()).thenReturn(name); when(project.getFullName()).thenReturn(name); when(project.isBuildable()).thenReturn(true); if (parameterDefinitionList != null) { ParametersDefinitionProperty parameters = mock(ParametersDefinitionProperty.class); when(parameters.getParameterDefinitions()).thenReturn(parameterDefinitionList); when(project.getProperty(ParametersDefinitionProperty.class)).thenReturn(parameters); } return project; }
/** * Tests {@link TriggerMonitor#projectTriggered(com.sonymobile.tools.gerrit.gerritevents.dto.GerritEvent, hudson.model.Job)}. * @throws Exception if so. */ @Test public void testProjectTriggered() throws Exception { TriggerMonitor monitor = new TriggerMonitor(); ManualPatchsetCreated patch = Setup.createManualPatchsetCreated(); monitor.add(patch); monitor.triggerScanStarting(patch); AbstractProject project = PowerMockito.mock(AbstractProject.class); doReturn("projectX").when(project).getFullName(); monitor.projectTriggered(patch, project); TriggerMonitor.EventState state = monitor.getEvents().get(0); assertEquals(1, state.getBuilds().size()); assertSame(project, state.getBuilds().get(0).getProject()); }
final DependencyGraph graph = Jenkins.getInstance().getDependencyGraph(); List<Dependency> downstreamProjects = new ArrayList<Dependency>( graph.getDownstreamDependencies(build.getProject())); AbstractProject p = dep.getDownstreamProject(); if (p.isDisabled()) { logger.println(Messages.BuildTrigger_Disabled(ModelHyperlinkNote.encodeTo(p))); continue; boolean scheduled = p.scheduleBuild(p.getQuietPeriod(), new UpstreamCause((Run)build), buildActions.toArray(new Action[buildActions.size()])); if (Jenkins.getInstance().getItemByFullName(p.getFullName()) == p) { String name = ModelHyperlinkNote.encodeTo(p); if (scheduled) {