use of org.jboss.pnc.spi.coordinator.BuildTask in project pnc by project-ncl.
the class CancelledBuildTest method cancelBuildingConfigSetTestCase.
@Test(timeout = 5_000)
public void cancelBuildingConfigSetTestCase() throws Exception {
// given
DatastoreMock datastoreMock = new DatastoreMock();
TestProjectConfigurationBuilder configurationBuilder = new TestProjectConfigurationBuilder(datastoreMock);
BuildCoordinator coordinator = buildCoordinatorFactory.createBuildCoordinator(datastoreMock).coordinator;
BuildConfigurationSet configurationSet = configurationBuilder.buildConfigurationSetForCancel(1);
List<BuildStatusChangedEvent> receivedStatuses = new ArrayList<>();
Consumer<BuildStatusChangedEvent> onStatusUpdate = (event) -> {
receivedStatuses.add(event);
if (event.getBuild().getBuildConfigRevision().getId().equals("2") && event.getNewStatus().equals(BuildStatus.BUILDING)) {
CompletableFuture.runAsync(() -> {
try {
// wait a bit for build execution to start
Thread.sleep(250);
// we need to get buildConfigSet id to cancel BuildGroup, it is not provided by event class
// directly, so we need to dit it up from buildTaskId that event provides
log.info("Cancelling ...");
coordinator.cancelSet(getBuildConfigSetId(coordinator, event.getBuild().getId()));
} catch (CoreException | InterruptedException e) {
log.error("Unable to cancel the build.", e);
Assert.fail("Unable to cancel the build.");
}
});
}
};
// when
BuildSetTask buildSetTask = buildProjects(configurationSet, coordinator, onStatusUpdate, 2);
// expect
List<BuildRecord> buildRecords = datastoreMock.getBuildRecords();
Assert.assertEquals("Incorrect number of build records in datastore: " + buildRecords, 3, buildRecords.size());
for (BuildRecord buildRecord : buildRecords) {
Assert.assertNotNull(buildRecord.getSubmitTime());
switch(buildRecord.getBuildConfigurationId()) {
case 1:
Assert.assertEquals(BuildStatus.CANCELLED, buildRecord.getStatus());
continue;
case 2:
Assert.assertEquals(BuildStatus.CANCELLED, buildRecord.getStatus());
break;
case 3:
Assert.assertEquals(BuildStatus.SUCCESS, buildRecord.getStatus());
break;
default:
Assert.fail("Invalid build configuration ID");
break;
}
Assert.assertNotNull(buildRecord.getStartTime());
Assert.assertNotNull(buildRecord.getEndTime());
}
// 3 is independent, 2 is dependent on 3, 1 is dependent on 2
for (BuildTask buildTask : buildSetTask.getBuildTasks()) {
String buildTaskId = buildTask.getId();
switch(buildTask.getBuildConfigurationAudited().getId()) {
case 1:
// Building status is skipped (cancelled before it can start building)
assertStatusUpdateReceived(receivedStatuses, BuildStatus.WAITING_FOR_DEPENDENCIES, buildTaskId);
assertStatusUpdateReceived(receivedStatuses, BuildStatus.CANCELLED, buildTaskId);
break;
case 2:
assertStatusUpdateReceived(receivedStatuses, BuildStatus.WAITING_FOR_DEPENDENCIES, buildTaskId);
assertStatusUpdateReceived(receivedStatuses, BuildStatus.ENQUEUED, buildTaskId);
assertStatusUpdateReceived(receivedStatuses, BuildStatus.BUILDING, buildTaskId);
assertStatusUpdateReceived(receivedStatuses, BuildStatus.CANCELLED, buildTaskId);
break;
case 3:
assertStatusUpdateReceived(receivedStatuses, BuildStatus.ENQUEUED, buildTaskId);
assertStatusUpdateReceived(receivedStatuses, BuildStatus.BUILDING, buildTaskId);
assertStatusUpdateReceived(receivedStatuses, BuildStatus.SUCCESS, buildTaskId);
break;
default:
break;
}
}
}
use of org.jboss.pnc.spi.coordinator.BuildTask in project pnc by project-ncl.
the class ConfigurationsTest method dependsOnItselfConfigurationTestCase.
// TODO test is not run as expected exception is thrown
@Test(expected = PersistenceException.class)
// configurationBuilder.build...
@InSequence(10)
public void dependsOnItselfConfigurationTestCase() throws Exception {
BuildConfiguration buildConfiguration = configurationBuilder.buildConfigurationWhichDependsOnItself();
User user = User.Builder.newBuilder().id(1).build();
BuildOptions buildOptions = new BuildOptions();
buildOptions.setBuildDependencies(false);
BuildSetTask taskSet = buildCoordinator.build(buildConfiguration, user, buildOptions);
Set<BuildTask> buildTasks = taskSet.getBuildTasks();
assertThat(buildTasks).hasSize(1);
BuildTask buildTask = buildTasks.iterator().next();
Assert.assertEquals(BuildCoordinationStatus.REJECTED, buildTask.getStatus());
Assert.assertTrue("Invalid status description: " + buildTask.getStatusDescription(), buildTask.getStatusDescription().contains("itself"));
}
use of org.jboss.pnc.spi.coordinator.BuildTask in project pnc by project-ncl.
the class DatastoreAdapterTest method storeResult.
private void storeResult(DatastoreAdapter datastoreAdapter, BuildStatus buildStatus, CompletionStatus completionStatus) throws DatastoreException {
BuildDriverResult buildDriverResult = mock(BuildDriverResult.class);
when(buildDriverResult.getBuildStatus()).thenReturn(buildStatus);
when(buildDriverResult.getBuildLog()).thenReturn(BUILD_LOG);
RepositoryManagerResult repositoryManagerResult = mock(RepositoryManagerResult.class);
when(repositoryManagerResult.getCompletionStatus()).thenReturn(completionStatus);
when(repositoryManagerResult.getLog()).thenReturn(REPOSITORY_MANAGER_LOG);
BuildExecutionConfiguration buildExecutionConfiguration = mock(BuildExecutionConfiguration.class);
BuildResult buildResult = new BuildResult(CompletionStatus.SUCCESS, Optional.empty(), "", Optional.of(buildExecutionConfiguration), Optional.of(buildDriverResult), Optional.of(repositoryManagerResult), Optional.of(EnvironmentDriverResultMock.mock()), Optional.of(RepourResultMock.mock()));
BuildTask buildTask = mockBuildTask();
datastoreAdapter.storeResult(buildTask, buildResult);
}
use of org.jboss.pnc.spi.coordinator.BuildTask in project pnc by project-ncl.
the class DatastoreAdapterTest method mockBuildTask.
private BuildTask mockBuildTask() {
BuildConfiguration buildConfiguration = new BuildConfiguration();
buildConfiguration.setId(12);
buildConfiguration.setName("Configuration.");
buildConfiguration.setProject(new Project());
BuildOptions buildOptions = new BuildOptions(false, true, false, false, RebuildMode.IMPLICIT_DEPENDENCY_CHECK, AlignmentPreference.PREFER_PERSISTENT);
BuildTask buildTask = BuildTask.build(BuildConfigurationAudited.fromBuildConfiguration(buildConfiguration, 13), buildOptions, MockUser.newTestUser(1), "123", null, new Date(), null, "context-id", Optional.empty());
buildTask.setStatus(BuildCoordinationStatus.DONE);
return buildTask;
}
use of org.jboss.pnc.spi.coordinator.BuildTask in project pnc by project-ncl.
the class WaitForDependencyBuildTest method shouldNotStartParentBuildWhenDependencyIsRunning.
@Test
public void shouldNotStartParentBuildWhenDependencyIsRunning() throws CoreException, TimeoutException, InterruptedException {
// start dependency
build(configDependency);
Wait.forCondition(() -> buildScheduler.isBuilding(configDependency.getId()), 3, ChronoUnit.SECONDS);
// start parent while dependency is running
build(configParent);
// parent should wait for dependency to complete
BuildTask parentBuildTask = getSubmittedBuildTaskByConfigurationId(configParent.getId()).get();
assertThat(parentBuildTask.getStatus()).isEqualTo(BuildCoordinationStatus.WAITING_FOR_DEPENDENCIES);
// complete the dependency
BuildTask dependencyBuildTask = getScheduledBuildTaskByConfigurationId(configDependency.getId()).get();
buildScheduler.completeBuild(dependencyBuildTask.getId());
// check if parent has started
Wait.forCondition(() -> buildScheduler.isBuilding(parentBuildTask.getBuildConfigurationAudited().getId()), 3, ChronoUnit.SECONDS);
buildScheduler.completeBuild(parentBuildTask.getId());
waitForEmptyBuildQueue();
List<BuildConfiguration> configsWithTasks = getBuiltConfigs();
assertThat(configsWithTasks).isEmpty();
}
Aggregations