| 'use strict'; |
| |
| const assert = require('assert'); |
| |
| require('../tools/js/v3-models.js'); |
| |
| const BuildbotTriggerable = require('../tools/js/buildbot-triggerable.js').BuildbotTriggerable; |
| const MockData = require('./resources/mock-data.js'); |
| const MockLogger = require('./resources/mock-logger.js').MockLogger; |
| const MockRemoteAPI = require('../unit-tests/resources/mock-remote-api.js').MockRemoteAPI; |
| const TestServer = require('./resources/test-server.js'); |
| const TemporaryFile = require('./resources/temporary-file.js').TemporaryFile; |
| const addWorkerForReport = require('./resources/common-operations.js').addWorkerForReport; |
| const prepareServerTest = require('./resources/common-operations.js').prepareServerTest; |
| const BrowserPrivilegedAPI = require('../public/v3/privileged-api.js').PrivilegedAPI; |
| |
| function configWithOneTesterTwoBuilders(testConfigurationsOverride = [{types: ['some'], platforms: ['some platform'], builders: ['builder-1'], |
| supportedRepetitionTypes: ['alternating', 'sequential']}]) |
| { |
| return { |
| triggerableName: 'build-webkit', |
| lookbackCount: 2, |
| buildRequestArgument: 'build-request-id', |
| workerName: 'sync-worker', |
| workerPassword: 'password', |
| repositoryGroups: { |
| 'webkit': { |
| repositories: {'WebKit': {acceptsPatch: true}}, |
| testProperties: {'wk': {'revision': 'WebKit'}, 'roots': {'roots': {}}}, |
| buildProperties: {'wk': {'revision': 'WebKit'}, 'wk-patch': {'patch': 'WebKit'}, |
| 'checkbox': {'ifRepositorySet': ['WebKit'], 'value': 'build-wk'}, |
| 'build-wk': {'ifRepositorySet': ['WebKit'], 'value': true}, |
| 'owned-commits': {'ownedRevisions': 'WebKit'}}, |
| acceptsRoots: true, |
| } |
| }, |
| types: { |
| 'some': { |
| test: ['some test'], |
| properties: {'test': 'some-test'}, |
| } |
| }, |
| builders: { |
| 'builder-1': { |
| builder: 'some tester', |
| properties: {forcescheduler: 'force-ab-tests'}, |
| supportedRepetitionTypes: ['alternating', 'sequential'] |
| }, |
| 'builder-2': { |
| builder: 'some builder', |
| properties: {forcescheduler: 'force-ab-builds'}, |
| supportedRepetitionTypes: ['alternating', 'sequential', 'paired-parallel'] |
| }, |
| 'builder-3': { |
| builder: 'other builder', |
| properties: {forcescheduler: 'force-ab-builds'}, |
| supportedRepetitionTypes: ['alternating', 'sequential', 'paired-parallel'] |
| }, |
| }, |
| buildConfigurations: [ |
| { |
| platforms: ['some platform'], |
| builders: ['builder-2', 'builder-3'], |
| supportedRepetitionTypes: ['alternating', 'sequential', 'paired-parallel'] |
| }, |
| ], |
| testConfigurations: testConfigurationsOverride |
| }; |
| } |
| |
| const configWithPlatformName = { |
| triggerableName: 'build-webkit', |
| lookbackCount: 2, |
| buildRequestArgument: 'build-request-id', |
| workerName: 'sync-worker', |
| workerPassword: 'password', |
| platformArgument: 'platform-name', |
| repositoryGroups: { |
| 'webkit': { |
| repositories: {'WebKit': {acceptsPatch: true}}, |
| testProperties: {'wk': {'revision': 'WebKit'}, 'roots': {'roots': {}}}, |
| buildProperties: {'wk': {'revision': 'WebKit'}, 'wk-patch': {'patch': 'WebKit'}, |
| 'checkbox': {'ifRepositorySet': ['WebKit'], 'value': 'build-wk'}, |
| 'build-wk': {'ifRepositorySet': ['WebKit'], 'value': true}, |
| 'owned-commits': {'ownedRevisions': 'WebKit'}}, |
| acceptsRoots: true, |
| } |
| }, |
| types: { |
| 'some': { |
| test: ['some test'], |
| properties: {'test': 'some-test'}, |
| } |
| }, |
| builders: { |
| 'builder-1': { |
| builder: 'some tester', |
| properties: {forcescheduler: 'force-ab-tests'}, |
| supportedRepetitionTypes: ['alternating', 'sequential'] |
| }, |
| 'builder-2': { |
| builder: 'some builder', |
| properties: {forcescheduler: 'force-ab-builds'}, |
| supportedRepetitionTypes: ['alternating', 'sequential', 'paired-parallel'] |
| }, |
| 'builder-3': { |
| builder: 'other builder', |
| properties: {forcescheduler: 'force-ab-builds'}, |
| supportedRepetitionTypes: ['alternating', 'sequential', 'paired-parallel'] |
| }, |
| }, |
| buildConfigurations: [ |
| { |
| platforms: ['some platform'], |
| builders: ['builder-2', 'builder-3'], |
| supportedRepetitionTypes: ['alternating', 'sequential', 'paired-parallel'], |
| }, |
| ], |
| testConfigurations: [ |
| { |
| types: ['some'], |
| platforms: ['some platform'], |
| builders: ['builder-1'], |
| supportedRepetitionTypes: ['alternating', 'sequential'], |
| }, |
| ], |
| }; |
| |
| const configWithTwoTesters = { |
| triggerableName: 'build-webkit', |
| lookbackCount: 2, |
| buildRequestArgument: 'build-request-id', |
| workerName: 'sync-worker', |
| workerPassword: 'password', |
| repositoryGroups: { |
| 'webkit': { |
| repositories: {'WebKit': {acceptsPatch: true}}, |
| testProperties: {'wk': {'revision': 'WebKit'}, 'roots': {'roots': {}}}, |
| buildProperties: {'wk': {'revision': 'WebKit'}, 'wk-patch': {'patch': 'WebKit'}, |
| 'checkbox': {'ifRepositorySet': ['WebKit'], 'value': 'build-wk'}, |
| 'build-wk': {'ifRepositorySet': ['WebKit'], 'value': true}, |
| 'owned-commits': {'ownedRevisions': 'WebKit'}}, |
| acceptsRoots: true, |
| } |
| }, |
| types: { |
| 'some': { |
| test: ['some test'], |
| properties: {'test': 'some-test'}, |
| } |
| }, |
| builders: { |
| 'builder-1': { |
| builder: 'some tester', |
| properties: {forcescheduler: 'force-ab-tests'}, |
| supportedRepetitionTypes: ['alternating', 'sequential'] |
| }, |
| 'builder-2': { |
| builder: 'another tester', |
| properties: {forcescheduler: 'force-ab-builds'}, |
| supportedRepetitionTypes: ['alternating', 'sequential'] |
| }, |
| }, |
| testConfigurations: [ |
| { |
| types: ['some'], |
| platforms: ['some platform'], |
| builders: ['builder-1', 'builder-2'], |
| supportedRepetitionTypes: ['alternating', 'sequential'], |
| }, |
| ] |
| }; |
| |
| function assertAndResolveRequest(request, method, url, contentToResolve) |
| { |
| assert.strictEqual(request.method, method); |
| assert.strictEqual(request.url, url); |
| request.resolve(contentToResolve); |
| } |
| |
| function createTriggerable(config = configWithOneTesterTwoBuilders()) |
| { |
| let triggerable; |
| return MockData.addMockConfiguration(TestServer.database()).then(() => { |
| return Manifest.fetch(); |
| }).then(() => { |
| triggerable = new BuildbotTriggerable(config, TestServer.remoteAPI(), MockRemoteAPI, {name: 'sync-worker', password: 'password'}, new MockLogger); |
| const syncPromise = triggerable.initSyncers().then(() => triggerable.updateTriggerable()); |
| assertAndResolveRequest(MockRemoteAPI.requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return syncPromise; |
| }).then(() => Manifest.fetch()).then(() => { |
| return new BuildbotTriggerable(config, TestServer.remoteAPI(), MockRemoteAPI, {name: 'sync-worker', password: 'password'}, new MockLogger); |
| }); |
| } |
| |
| function createTestGroup(task_name='custom task') { |
| const someTest = Test.findById(MockData.someTestId()); |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const set1 = new CustomCommitSet; |
| set1.setRevisionForRepository(webkit, '191622'); |
| const set2 = new CustomCommitSet; |
| set2.setRevisionForRepository(webkit, '192736'); |
| return TestGroup.createWithTask('custom task', Platform.findById(MockData.somePlatformId()), someTest, 'some group', 2, 'alternating', [set1, set2]).then((task) => { |
| return TestGroup.findAllByTask(task.id())[0]; |
| }); |
| } |
| |
| async function createTestGroupWithPatch(repetitionType = 'alternating') |
| { |
| const patchFile = await TemporaryFile.makeTemporaryFile('patch.dat', 'patch file'); |
| const originalPrivilegedAPI = global.PrivilegedAPI; |
| BrowserPrivilegedAPI._token = null; |
| global.PrivilegedAPI = BrowserPrivilegedAPI; |
| const uploadedPatchFile = await UploadedFile.uploadFile(patchFile); |
| global.PrivilegedAPI = originalPrivilegedAPI; |
| |
| const someTest = Test.findById(MockData.someTestId()); |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const set1 = new CustomCommitSet; |
| set1.setRevisionForRepository(webkit, '191622', uploadedPatchFile); |
| const set2 = new CustomCommitSet; |
| set2.setRevisionForRepository(webkit, '191622'); |
| const task = await TestGroup.createWithTask('custom task', Platform.findById(MockData.somePlatformId()), someTest, 'some group', 2, repetitionType, [set1, set2]); |
| |
| return TestGroup.findAllByTask(task.id())[0]; |
| } |
| |
| function createTestGroupWihOwnedCommit() |
| { |
| const someTest = Test.findById(MockData.someTestId()); |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedSJC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| const set1 = new CustomCommitSet; |
| set1.setRevisionForRepository(webkit, '191622'); |
| set1.setRevisionForRepository(ownedSJC, 'owned-jsc-6161', null, '191622'); |
| const set2 = new CustomCommitSet; |
| set2.setRevisionForRepository(webkit, '192736'); |
| set2.setRevisionForRepository(ownedSJC, 'owned-jsc-9191', null, '192736'); |
| return TestGroup.createWithTask('custom task', Platform.findById(MockData.somePlatformId()), someTest, 'some group', 2, 'alternating', [set1, set2]).then((task) => { |
| return TestGroup.findAllByTask(task.id())[0]; |
| }); |
| } |
| |
| function uploadRoot(buildRequestId, buildTag, repositoryList = ["WebKit"], buildTime = '2017-05-10T02:54:08.666') |
| { |
| return TemporaryFile.makeTemporaryFile(`root${buildTag}.dat`, `root for build ${buildTag} and repository list at ${buildTime}`).then((rootFile) => { |
| return TestServer.remoteAPI().postFormData('/api/upload-root/', { |
| workerName: 'sync-worker', |
| workerPassword: 'password', |
| builderName: 'some builder', |
| buildTag: buildTag, |
| buildTime: buildTime, |
| buildRequest: buildRequestId, |
| rootFile, |
| repositoryList: JSON.stringify(repositoryList), |
| }); |
| }); |
| } |
| |
| describe('sync-buildbot', function () { |
| prepareServerTest(this, 'node'); |
| TemporaryFile.inject(); |
| |
| beforeEach(() => { |
| MockRemoteAPI.reset('http://build.webkit.org'); |
| PrivilegedAPI.configure('test', 'password'); |
| }); |
| |
| it('should not schedule on another builder if the build was scheduled on one builder before', () => { |
| const requests = MockRemoteAPI.requests; |
| let firstTestGroup; |
| let firstTestGroupFirstBuildRequest; |
| let secondTestGroup; |
| let secondTestGroupFirstBuildRequest; |
| let syncPromise; |
| let triggerable; |
| let taskId = null; |
| let anotherTaskId = null; |
| return createTriggerable(configWithTwoTesters).then((newTriggerable) => { |
| triggerable = newTriggerable; |
| return Promise.all([createTestGroup(), createTestGroup('another custom task')]); |
| }).then((testGroups) => { |
| firstTestGroup = testGroups[0]; |
| secondTestGroup = testGroups[1]; |
| firstTestGroupFirstBuildRequest = firstTestGroup.buildRequests()[0].id(); |
| secondTestGroupFirstBuildRequest = secondTestGroup.buildRequests()[0].id(); |
| taskId = firstTestGroup.task().id(); |
| anotherTaskId = secondTestGroup.task().id(); |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 2); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), MockData.pendingBuild({builderId: MockData.builderIDForName('some tester'), buildRequestId: secondTestGroupFirstBuildRequest})); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('another tester'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 4); |
| assertAndResolveRequest(requests[2], 'GET', MockData.recentBuildsUrl('some tester', 2), |
| MockData.runningBuild({builderId: MockData.builderIDForName('some tester'), buildRequestId: firstTestGroupFirstBuildRequest})); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('another tester', 2), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[4], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[5], 'GET', MockData.pendingBuildsUrl('another tester'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 8); |
| assertAndResolveRequest(requests[6], 'GET', MockData.recentBuildsUrl('some tester', 2), { |
| 'builds': [ |
| MockData.runningBuildData({builderId: MockData.builderIDForName('some tester'), buildRequestId: secondTestGroupFirstBuildRequest}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some tester'), buildRequestId: firstTestGroupFirstBuildRequest})] |
| }); |
| assertAndResolveRequest(requests[7], 'GET', MockData.recentBuildsUrl('another tester', 2), {}); |
| return syncPromise; |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert.strictEqual(testGroup.buildRequests().length, 4); |
| assert(!buildRequest.isBuild()); |
| assert(buildRequest.isTest()); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(!otherBuildRequest.isBuild()); |
| assert(otherBuildRequest.isTest()); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| |
| return TestGroup.fetchForTask(anotherTaskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert.strictEqual(testGroup.buildRequests().length, 4); |
| assert(!buildRequest.isBuild()); |
| assert(buildRequest.isTest()); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(!otherBuildRequest.isBuild()); |
| assert(otherBuildRequest.isTest()); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| }); |
| }); |
| |
| it('should keep updating build status', async () => { |
| const requests = MockRemoteAPI.requests; |
| let syncPromise; |
| const triggerable = await createTriggerable(); |
| const firstBuildNumber = 123; |
| const secondBuildNumber = 124; |
| let testGroup = await createTestGroupWithPatch(); |
| |
| const taskId = testGroup.task().id(); |
| let webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| let buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(buildRequest.statusUrl(), null); |
| assert.strictEqual(buildRequest.statusDescription(), null); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| let commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| let webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| |
| let otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.statusDescription(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| let otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), {}); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 7); |
| assertAndResolveRequest(requests[6], 'POST', '/api/v2/forceschedulers/force-ab-builds', 'OK'); |
| assert.deepEqual(requests[6].data, {'id': '1', 'jsonrpc': '2.0', 'method': 'force', 'params': |
| {'wk': '191622', 'wk-patch': RemoteAPI.url('/api/uploaded-file/1.dat'), 'checkbox': 'build-wk', 'build-wk': true, 'build-request-id': '1', 'forcescheduler': 'force-ab-builds'}}); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 10); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('some builder'), |
| MockData.pendingBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[9], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 13); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.runningBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1, buildNumber: firstBuildNumber, statusDescription: 'Building WebKit'})); |
| assertAndResolveRequest(requests[12], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| await syncPromise; |
| |
| let testGroups = await TestGroup.fetchForTask(taskId, true); |
| |
| assert.strictEqual(testGroups.length, 1); |
| testGroup = testGroups[0]; |
| webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.strictEqual(buildRequest.statusDescription(), 'Building WebKit'); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| |
| otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.statusDescription(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| MockRemoteAPI.reset(); |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.runningBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1, buildTag: firstBuildNumber, statusDescription: 'Compiling WTF'})); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 9); |
| assertAndResolveRequest(requests[6], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 12); |
| assertAndResolveRequest(requests[9], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.runningBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1, buildTag: firstBuildNumber, statusDescription: 'Compiling WTF'})); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| await syncPromise; |
| |
| await TestGroup.fetchForTask(taskId, true); |
| |
| assert.strictEqual(testGroups.length, 1); |
| testGroup = testGroups[0]; |
| webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', firstBuildNumber)); |
| assert.strictEqual(buildRequest.statusDescription(), 'Compiling WTF'); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| |
| otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.statusDescription(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| await uploadRoot(parseInt(buildRequest.id()), firstBuildNumber); |
| |
| testGroups = await TestGroup.fetchForTask(taskId, true); |
| |
| assert.strictEqual(testGroups.length, 1); |
| testGroup = testGroups[0]; |
| webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', firstBuildNumber)); |
| assert.strictEqual(buildRequest.statusDescription(), 'Compiling WTF'); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| let webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot]); |
| |
| otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.statusDescription(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| MockRemoteAPI.reset(); |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.finishedBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1, buildTag: firstBuildNumber})); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 7); |
| assertAndResolveRequest(requests[6], 'POST', '/api/v2/forceschedulers/force-ab-builds', 'OK'); |
| assert.deepEqual(requests[6].data, {'id': '2', 'jsonrpc': '2.0', 'method': 'force', 'params': |
| {'wk': '191622', 'build-request-id': '2', 'forcescheduler': 'force-ab-builds', 'checkbox': 'build-wk', 'build-wk': true}}); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 10); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[9], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| await MockRemoteAPI.waitForRequest(); |
| |
| assert.strictEqual(requests.length, 13); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('some builder', 2), { |
| 'builds': [ |
| MockData.runningBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2, buildTag: secondBuildNumber}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1, buildTag: firstBuildNumber})] |
| }); |
| assertAndResolveRequest(requests[12], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| await syncPromise; |
| |
| await TestGroup.fetchForTask(taskId, true); |
| |
| assert.strictEqual(testGroups.length, 1); |
| testGroup = testGroups[0]; |
| webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', firstBuildNumber)); |
| assert.strictEqual(buildRequest.statusDescription(), null); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot]); |
| |
| otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', secondBuildNumber)); |
| assert.strictEqual(otherBuildRequest.statusDescription(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| await uploadRoot(parseInt(otherBuildRequest.id()), 124); |
| |
| testGroups = await TestGroup.fetchForTask(taskId, true); |
| |
| assert.strictEqual(testGroups.length, 1); |
| testGroup = testGroups[0]; |
| webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', firstBuildNumber)); |
| assert.strictEqual(buildRequest.statusDescription(), null); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot]); |
| |
| otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', secondBuildNumber)); |
| assert.strictEqual(otherBuildRequest.statusDescription(), null); |
| assert.notEqual(otherBuildRequest.buildId(), null); |
| |
| otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| const otherWebkitRoot = otherCommitSet.rootForRepository(webkit); |
| assert(otherWebkitRoot instanceof UploadedFile); |
| assert.strictEqual(otherWebkitRoot.filename(), 'root124.dat'); |
| assert.deepEqual(otherCommitSet.allRootFiles(), [otherWebkitRoot]); |
| }); |
| |
| async function resolveSyncerToBuildBotRequests(requestResolutionList) |
| { |
| const requests = MockRemoteAPI.requests; |
| let resolutionIndexOffset = 0; |
| for (let i = 0; i < requestResolutionList.length; i++) { |
| const resolutions = requestResolutionList[i]; |
| assert.strictEqual(requests.length, resolutionIndexOffset + resolutions.length); |
| resolutions.forEach((resolution, index) => { |
| assertAndResolveRequest(requests[resolutionIndexOffset + index], resolution.method, resolution.url, resolution.resolve); |
| if ('data' in resolution) |
| assert.deepEqual(requests[resolutionIndexOffset + index].data, resolution.data) |
| }); |
| resolutionIndexOffset += resolutions.length; |
| if (i != requestResolutionList.length - 1) |
| await MockRemoteAPI.waitForRequest(); |
| } |
| MockRemoteAPI.reset(); |
| } |
| |
| function validateFirstTwoBuildRequestsInTestGroup(testGroup, buildRequestOverride = {}, otherBuildRequestOverride = {}) |
| { |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), buildRequestOverride.statusLabel || 'Waiting'); |
| assert.strictEqual(buildRequest.statusUrl(), buildRequestOverride.statusUrl || null); |
| assert.strictEqual(buildRequest.statusDescription(), buildRequestOverride.statusDescription || null); |
| assert.strictEqual(buildRequest.buildId(), buildRequestOverride.buildId || null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| const webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| if (!buildRequestOverride.webkitRootUploaded) { |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| } |
| else { |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot]); |
| } |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), otherBuildRequestOverride.statusLabel || 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), otherBuildRequestOverride.statusUrl || null); |
| assert.strictEqual(otherBuildRequest.statusDescription(), otherBuildRequestOverride.statusDescription || null); |
| assert.strictEqual(otherBuildRequest.buildId(), otherBuildRequestOverride.buildId || null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| |
| if (!otherBuildRequestOverride.webkitRootUploaded) { |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| } |
| else { |
| const otherWebkitRoot = otherCommitSet.rootForRepository(webkit); |
| assert(otherWebkitRoot instanceof UploadedFile); |
| assert.strictEqual(otherWebkitRoot.filename(), 'root124.dat'); |
| assert.deepEqual(otherCommitSet.allRootFiles(), [otherWebkitRoot]); |
| } |
| } |
| |
| it('should be able to schedule a "paired-parallel" build request for building a patch on buildbot', async () => { |
| let syncPromise; |
| const triggerable = await createTriggerable(configWithOneTesterTwoBuilders([ |
| { builders: ['builder-1'], types: ['some'], platforms: ['some platform'], supportedRepetitionTypes: ['alternating', 'paired-parallel'] }])); |
| const firstBuildNumber = 123; |
| const secondBuildNumber = 124; |
| let testGroup = await createTestGroupWithPatch('paired-parallel'); |
| |
| const taskId = testGroup.task().id(); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| validateFirstTwoBuildRequestsInTestGroup(testGroup); |
| |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| await resolveSyncerToBuildBotRequests([ |
| [ |
| { method: 'GET', url: MockData.buildbotBuildersURL(), resolve: MockData.mockBuildbotBuilders() }, |
| ], |
| [ |
| { method: 'GET', url: MockData.pendingBuildsUrl('some tester'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('some builder'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('other builder'), resolve: {} }, |
| ], |
| [ |
| { method: 'GET', url: MockData.recentBuildsUrl('some tester', 2), resolve: {} }, |
| { method: 'GET', url: MockData.recentBuildsUrl('some builder', 2), resolve: MockData.runningBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1, buildTag: firstBuildNumber, statusDescription: 'Compiling WTF'}) }, |
| { method: 'GET', url: MockData.recentBuildsUrl('other builder', 2), resolve: {} }, |
| ], |
| [ |
| { method: 'GET', url: MockData.pendingBuildsUrl('some tester'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('some builder'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('other builder'), resolve: {} }, |
| ], |
| [ |
| { method: 'GET', url: MockData.recentBuildsUrl('some tester', 2), resolve: {} }, |
| { method: 'GET', url: MockData.recentBuildsUrl('some builder', 2), resolve: MockData.runningBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1, buildTag: firstBuildNumber, statusDescription: 'Compiling WTF'}) }, |
| { method: 'GET', url: MockData.recentBuildsUrl('other builder', 2), resolve: {} }, |
| ] |
| ]); |
| await syncPromise; |
| |
| let testGroups = await TestGroup.fetchForTask(taskId, true); |
| assert.strictEqual(testGroups.length, 1); |
| assert.strictEqual(testGroups[0].buildRequests().length, 6); |
| validateFirstTwoBuildRequestsInTestGroup(testGroups[0], {statusLabel: 'Running', statusUrl: MockData.statusUrl('some builder', firstBuildNumber), statusDescription: 'Compiling WTF'}); |
| |
| await uploadRoot(parseInt(testGroups[0].buildRequests()[0].id()), firstBuildNumber); |
| testGroups = await TestGroup.fetchForTask(taskId, true); |
| assert.strictEqual(testGroups.length, 1); |
| validateFirstTwoBuildRequestsInTestGroup(testGroups[0], {statusLabel: 'Completed', statusUrl: MockData.statusUrl('some builder', firstBuildNumber), statusDescription: 'Compiling WTF', buildId: '1', webkitRootUploaded: true}); |
| |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| await resolveSyncerToBuildBotRequests([ |
| [ |
| { method: 'GET', url: MockData.buildbotBuildersURL(), resolve: MockData.mockBuildbotBuilders() }, |
| ], |
| [ |
| { method: 'GET', url: MockData.pendingBuildsUrl('some tester'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('some builder'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('other builder'), resolve: {} }, |
| ], |
| [ |
| { method: 'GET', url: MockData.recentBuildsUrl('some tester', 2), resolve: {} }, |
| { method: 'GET', url: MockData.recentBuildsUrl('some builder', 2), resolve: MockData.finishedBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: '1', buildTag: firstBuildNumber}) }, |
| { method: 'GET', url: MockData.recentBuildsUrl('other builder', 2), resolve: {} }, |
| ], |
| [ |
| { |
| method: 'POST', url: '/api/v2/forceschedulers/force-ab-builds', resolve: 'OK', |
| data: {'id': '2', 'jsonrpc': '2.0', 'method': 'force', 'params': {'wk': '191622', 'build-request-id': '2', 'forcescheduler': 'force-ab-builds', 'checkbox': 'build-wk', 'build-wk': true}} |
| }, |
| ], |
| [ |
| { method: 'GET', url: MockData.pendingBuildsUrl('some tester'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('some builder'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('other builder'), resolve: {} }, |
| ], |
| [ |
| { method: 'GET', url: MockData.recentBuildsUrl('some tester', 2), resolve: {} }, |
| { method: 'GET', url: MockData.recentBuildsUrl('some builder', 2), resolve: { |
| builds: [ |
| MockData.runningBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2, buildTag: secondBuildNumber}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1, buildTag: firstBuildNumber}) |
| ]} }, |
| { method: 'GET', url: MockData.recentBuildsUrl('other builder', 2), resolve: {} }, |
| ] |
| ]); |
| await syncPromise; |
| |
| await TestGroup.fetchForTask(taskId, true); |
| assert.strictEqual(testGroups.length, 1); |
| validateFirstTwoBuildRequestsInTestGroup(testGroups[0], {statusLabel: 'Completed', statusUrl: MockData.statusUrl('some builder', firstBuildNumber), buildId: '1', webkitRootUploaded: true}, |
| {statusLabel: 'Running', statusUrl: MockData.statusUrl('some builder', secondBuildNumber)}); |
| |
| await uploadRoot(parseInt(testGroups[0].buildRequests()[1].id()), 124); |
| testGroups = await TestGroup.fetchForTask(taskId, true); |
| assert.strictEqual(testGroups.length, 1); |
| validateFirstTwoBuildRequestsInTestGroup(testGroups[0], {statusLabel: 'Completed', statusUrl: MockData.statusUrl('some builder', firstBuildNumber), buildId: '1', webkitRootUploaded: true}, |
| {statusLabel: 'Completed', statusUrl: MockData.statusUrl('some builder', secondBuildNumber), buildId: '2', webkitRootUploaded: true}); |
| |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| await resolveSyncerToBuildBotRequests([ |
| [ |
| { method: 'GET', url: MockData.buildbotBuildersURL(), resolve: MockData.mockBuildbotBuilders() }, |
| ], |
| [ |
| { method: 'GET', url: MockData.pendingBuildsUrl('some tester'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('some builder'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('other builder'), resolve: {} }, |
| ], |
| [ |
| { method: 'GET', url: MockData.recentBuildsUrl('some tester', 2), resolve: {} }, |
| { method: 'GET', url: MockData.recentBuildsUrl('some builder', 2), resolve: { builds: [ |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2, buildTag: secondBuildNumber}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1, buildTag: firstBuildNumber})]}}, |
| { method: 'GET', url: MockData.recentBuildsUrl('other builder', 2), resolve: {} }, |
| ], |
| [ |
| { method: 'GET', url: MockData.pendingBuildsUrl('some tester'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('some builder'), resolve: {} }, |
| { method: 'GET', url: MockData.pendingBuildsUrl('other builder'), resolve: {} }, |
| ], |
| [ |
| { method: 'GET', url: MockData.recentBuildsUrl('some tester', 2), resolve: {} }, |
| { method: 'GET', url: MockData.recentBuildsUrl('some builder', 2), resolve: { builds: [ |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2, buildTag: secondBuildNumber}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1, buildTag: firstBuildNumber})]}}, |
| { method: 'GET', url: MockData.recentBuildsUrl('other builder', 2), resolve: {} }, |
| ] |
| ]); |
| await syncPromise; |
| |
| await TestGroup.fetchForTask(taskId, true); |
| assert.strictEqual(testGroups.length, 1); |
| assert.strictEqual(testGroups[0].buildRequests().length, 6); |
| |
| const buildRequest = testGroups[0].buildRequests()[2]; |
| assert(buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Waiting'); |
| }); |
| |
| it('should schedule a build to build a patch', () => { |
| const requests = MockRemoteAPI.requests; |
| let triggerable; |
| let taskId = null; |
| let syncPromise; |
| return createTriggerable().then((newTriggerable) => { |
| triggerable = newTriggerable; |
| return createTestGroupWithPatch(); |
| }).then((testGroup) => { |
| taskId = testGroup.task().id(); |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(buildRequest.statusUrl(), null); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| const webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), {}); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 7); |
| assertAndResolveRequest(requests[6], 'POST', '/api/v2/forceschedulers/force-ab-builds', 'OK'); |
| assert.deepEqual(requests[6].data, {'id': '1', 'jsonrpc': '2.0', 'method': 'force', 'params': |
| {'wk': '191622', 'wk-patch': RemoteAPI.url('/api/uploaded-file/1.dat'), 'checkbox': 'build-wk', 'build-wk': true, 'build-request-id': '1', 'forcescheduler': 'force-ab-builds'}}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 10); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('some builder'), |
| MockData.pendingBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[9], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 13); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.runningBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[12], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return syncPromise; |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| const webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| return uploadRoot(parseInt(buildRequest.id()), 123); |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| const webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| MockRemoteAPI.reset(); |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.finishedBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 7); |
| assertAndResolveRequest(requests[6], 'POST', '/api/v2/forceschedulers/force-ab-builds', 'OK'); |
| assert.deepEqual(requests[6].data, {'id': '2', 'jsonrpc': '2.0', 'method': 'force', 'params': |
| {'wk': '191622', 'build-request-id': '2', 'forcescheduler': 'force-ab-builds', 'checkbox': 'build-wk', 'build-wk': true}}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 10); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[9], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 13); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('some builder', 2), { |
| 'builds': [ |
| MockData.runningBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})] |
| }); |
| assertAndResolveRequest(requests[12], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return syncPromise; |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| const webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| return uploadRoot(parseInt(otherBuildRequest.id()), 124); |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| const webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| const otherWebkitRoot = otherCommitSet.rootForRepository(webkit); |
| assert(otherWebkitRoot instanceof UploadedFile); |
| assert.strictEqual(otherWebkitRoot.filename(), 'root124.dat'); |
| assert.deepEqual(otherCommitSet.allRootFiles(), [otherWebkitRoot]); |
| }); |
| }); |
| |
| it('should schedule a build with platform in build property', () => { |
| const requests = MockRemoteAPI.requests; |
| let triggerable; |
| let taskId = null; |
| let syncPromise; |
| return createTriggerable(configWithPlatformName).then((newTriggerable) => { |
| triggerable = newTriggerable; |
| return createTestGroupWithPatch(); |
| }).then((testGroup) => { |
| taskId = testGroup.task().id(); |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(buildRequest.statusUrl(), null); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| const webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), {}); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 7); |
| assertAndResolveRequest(requests[6], 'POST', '/api/v2/forceschedulers/force-ab-builds', 'OK'); |
| assert.deepEqual(requests[6].data, {'id': '1', 'jsonrpc': '2.0', 'method': 'force', 'params': |
| {'wk': '191622', 'wk-patch': RemoteAPI.url('/api/uploaded-file/1.dat'), 'build-request-id': '1', 'forcescheduler': 'force-ab-builds', 'checkbox': 'build-wk', 'build-wk': true, 'platform-name': 'some platform'}}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 10); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('some builder'), |
| MockData.pendingBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[9], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 13); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.runningBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[12], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return syncPromise; |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| const webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| return uploadRoot(parseInt(buildRequest.id()), 123); |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| const webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| MockRemoteAPI.reset(); |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.finishedBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 7); |
| assertAndResolveRequest(requests[6], 'POST', '/api/v2/forceschedulers/force-ab-builds', 'OK'); |
| assert.deepEqual(requests[6].data, {'id': '2', 'jsonrpc': '2.0', 'method': 'force', 'params': |
| {'wk': '191622', 'build-request-id': '2', 'forcescheduler': 'force-ab-builds', 'checkbox': 'build-wk', 'build-wk': true, 'platform-name': 'some platform'}}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 10); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[9], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 13); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('some builder', 2), { |
| 'builds': [ |
| MockData.runningBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})] |
| }); |
| assertAndResolveRequest(requests[12], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return syncPromise; |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| const webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| return uploadRoot(parseInt(otherBuildRequest.id()), 124); |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| const webkitPatch = commitSet.patchForRepository(webkit); |
| assert(webkitPatch instanceof UploadedFile); |
| assert.strictEqual(webkitPatch.filename(), 'patch.dat'); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| const otherWebkitRoot = otherCommitSet.rootForRepository(webkit); |
| assert(otherWebkitRoot instanceof UploadedFile); |
| assert.strictEqual(otherWebkitRoot.filename(), 'root124.dat'); |
| assert.deepEqual(otherCommitSet.allRootFiles(), [otherWebkitRoot]); |
| }); |
| }); |
| |
| it('should schedule a build to test after building a patch', () => { |
| const requests = MockRemoteAPI.requests; |
| let triggerable; |
| let taskId = null; |
| let syncPromise; |
| let firstRoot = null; |
| return createTriggerable().then((newTriggerable) => { |
| triggerable = newTriggerable; |
| return createTestGroupWithPatch(); |
| }).then((testGroup) => { |
| taskId = testGroup.task().id(); |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert.strictEqual(parseInt(buildRequest.id()), 1); |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(buildRequest.buildId(), null); |
| assert.deepEqual(buildRequest.commitSet().allRootFiles(), []); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert.strictEqual(parseInt(otherBuildRequest.id()), 2); |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| assert.deepEqual(otherBuildRequest.commitSet().allRootFiles(), []); |
| |
| return uploadRoot(1, 45); |
| }).then(() => { |
| return uploadRoot(2, 46); |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.notEqual(buildRequest.buildId(), null); |
| const roots = buildRequest.commitSet().allRootFiles(); |
| assert.strictEqual(roots.length, 1); |
| firstRoot = roots[0]; |
| assert.deepEqual(roots[0].filename(), 'root45.dat'); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Completed'); |
| assert.notEqual(otherBuildRequest.buildId(), null); |
| const otherRoots = otherBuildRequest.commitSet().allRootFiles(); |
| assert.strictEqual(otherRoots.length, 1); |
| assert.deepEqual(otherRoots[0].filename(), 'root46.dat'); |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), { |
| 'builds': [ |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2})] |
| }); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 7); |
| assertAndResolveRequest(requests[6], 'POST', '/api/v2/forceschedulers/force-ab-tests', 'OK'); |
| assert.deepEqual(requests[6].data, {'id': '3', 'jsonrpc': '2.0', 'method': 'force', 'params': |
| {'test': 'some-test', 'wk': '191622', 'build-request-id': '3','forcescheduler': 'force-ab-tests', 'roots': JSON.stringify([{url: firstRoot.url()}])}}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 10); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some tester'), [ |
| MockData.pendingBuild({builderId: MockData.builderIDForName('some tester'), buildRequestId: 3}), |
| ]); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[9], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 13); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('some builder', 2), { |
| 'builds': [ |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2})] |
| }); |
| assertAndResolveRequest(requests[12], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return syncPromise; |
| }); |
| }); |
| |
| it('should not schedule a build to test while building a patch', () => { |
| const requests = MockRemoteAPI.requests; |
| let triggerable; |
| let taskId = null; |
| let syncPromise; |
| return createTriggerable().then((newTriggerable) => { |
| triggerable = newTriggerable; |
| return createTestGroupWithPatch(); |
| }).then((testGroup) => { |
| taskId = testGroup.task().id(); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert.strictEqual(parseInt(buildRequest.id()), 1); |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(buildRequest.statusUrl(), null); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert.strictEqual(parseInt(otherBuildRequest.id()), 2); |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return Promise.all([MockRemoteAPI.waitForRequest(), uploadRoot(1, 123)]); |
| }).then(() => { |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), { |
| 'builds': [ |
| MockData.runningBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1}) |
| ] |
| }); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 9); |
| assertAndResolveRequest(requests[6], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 12); |
| assertAndResolveRequest(requests[9], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some builder', 2), { |
| 'builds': [ |
| MockData.runningBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2, buildTag: 1002}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})] |
| }); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return syncPromise; |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| |
| const testGroup = testGroups[0]; |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert.strictEqual(parseInt(buildRequest.id()), 1); |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), 'http://build.webkit.org/#/builders/1/builds/123'); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert.strictEqual(parseInt(otherBuildRequest.id()), 2); |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', 1002)); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| }); |
| }); |
| |
| it('should cancel builds for testing when a build to build a patch fails', () => { |
| const requests = MockRemoteAPI.requests; |
| let triggerable; |
| let taskId = null; |
| let syncPromise; |
| return createTriggerable().then((newTriggerable) => { |
| triggerable = newTriggerable; |
| return createTestGroupWithPatch(); |
| }).then((testGroup) => { |
| taskId = testGroup.task().id(); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert.strictEqual(parseInt(buildRequest.id()), 1); |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(buildRequest.statusUrl(), null); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert.strictEqual(parseInt(otherBuildRequest.id()), 2); |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), {}); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), |
| MockData.finishedBuild({builderId: MockData.builderIDForName('other builder'), buildRequestId: 1, buildTag: 312})); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 9); |
| assertAndResolveRequest(requests[6], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 12); |
| assertAndResolveRequest(requests[9], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some builder', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('other builder', 2), |
| MockData.finishedBuild({builderId: MockData.builderIDForName('other builder'), buildRequestId: 1, buildTag: 312})); |
| return syncPromise; |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| |
| const buildReqeusts = testGroups[0].buildRequests(); |
| assert(buildReqeusts[0].isBuild()); |
| assert(!buildReqeusts[0].isTest()); |
| assert.strictEqual(buildReqeusts[0].statusLabel(), 'Failed'); |
| assert.strictEqual(buildReqeusts[0].statusUrl(), MockData.statusUrl('other builder', 312)); |
| assert.strictEqual(buildReqeusts[0].buildId(), null); |
| |
| assert(buildReqeusts[1].isBuild()); |
| assert(!buildReqeusts[1].isTest()); |
| assert.strictEqual(buildReqeusts[1].statusLabel(), 'Failed'); |
| assert.strictEqual(buildReqeusts[1].statusUrl(), null); |
| assert.strictEqual(buildReqeusts[1].buildId(), null); |
| |
| function assertTestBuildHasFailed(request) |
| { |
| assert(!request.isBuild()); |
| assert(request.isTest()); |
| assert.strictEqual(request.statusLabel(), 'Failed'); |
| assert.strictEqual(request.statusUrl(), null); |
| assert.strictEqual(request.buildId(), null); |
| } |
| |
| assertTestBuildHasFailed(buildReqeusts[2]); |
| assertTestBuildHasFailed(buildReqeusts[3]); |
| }); |
| }); |
| |
| it('should schedule a build to build binary for owned commits', () => { |
| const requests = MockRemoteAPI.requests; |
| let triggerable; |
| let taskId = null; |
| let syncPromise; |
| return createTriggerable().then((newTriggerable) => { |
| triggerable = newTriggerable; |
| return createTestGroupWihOwnedCommit(); |
| }).then((testGroup) => { |
| taskId = testGroup.task().id(); |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(buildRequest.statusUrl(), null); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), {}); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 7); |
| assertAndResolveRequest(requests[6], 'POST', '/api/v2/forceschedulers/force-ab-builds', 'OK'); |
| assert.deepEqual(requests[6].data, {'id': '1', 'jsonrpc': '2.0', 'method': 'force', 'params': |
| {'wk': '191622', 'build-request-id': '1', 'forcescheduler': 'force-ab-builds', 'owned-commits': `{"WebKit":[{"revision":"owned-jsc-6161","repository":"JavaScriptCore","ownerRevision":"191622"}]}`}}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 10); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('some builder'), |
| MockData.pendingBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[9], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 13); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.runningBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[12], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return syncPromise; |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| return uploadRoot(parseInt(buildRequest.id()), 123).then(() => uploadRoot(parseInt(buildRequest.id()), 123, [{ownerRepository: 'WebKit', ownedRepository: 'JavaScriptCore'}], '2017-05-10T02:54:09.666')); |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| const jscRoot = commitSet.rootForRepository(ownedJSC); |
| assert(jscRoot instanceof UploadedFile); |
| assert.strictEqual(jscRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot, jscRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| MockRemoteAPI.reset(); |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.finishedBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 7); |
| assertAndResolveRequest(requests[6], 'POST', '/api/v2/forceschedulers/force-ab-builds', 'OK'); |
| assert.deepEqual(requests[6].data, {'id': '2', 'jsonrpc': '2.0', 'method': 'force', 'params': |
| {'wk': '192736', 'build-request-id': '2', 'forcescheduler': 'force-ab-builds', 'owned-commits': `{"WebKit":[{"revision":"owned-jsc-9191","repository":"JavaScriptCore","ownerRevision":"192736"}]}`}}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 10); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[9], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 13); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('some builder', 2), { |
| 'builds': [ |
| MockData.runningBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})] |
| }); |
| assertAndResolveRequest(requests[12], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return syncPromise; |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| const jscRoot = commitSet.rootForRepository(ownedJSC); |
| assert(jscRoot instanceof UploadedFile); |
| assert.strictEqual(jscRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot, jscRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| return uploadRoot(parseInt(otherBuildRequest.id()), 124).then(() => uploadRoot(parseInt(otherBuildRequest.id()), 124, [{ownerRepository: 'WebKit', ownedRepository: 'JavaScriptCore'}], '2017-05-10T02:54:09.666')); |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| const jscRoot = commitSet.rootForRepository(ownedJSC); |
| assert(jscRoot instanceof UploadedFile); |
| assert.strictEqual(jscRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot, jscRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| const otherWebkitRoot = otherCommitSet.rootForRepository(webkit); |
| assert(otherWebkitRoot instanceof UploadedFile); |
| assert.strictEqual(otherWebkitRoot.filename(), 'root124.dat'); |
| const otherJSCRoot = otherCommitSet.rootForRepository(ownedJSC); |
| assert(otherJSCRoot instanceof UploadedFile); |
| assert.strictEqual(otherJSCRoot.filename(), 'root124.dat'); |
| assert.deepEqual(otherCommitSet.allRootFiles(), [otherWebkitRoot, otherJSCRoot]); |
| }); |
| }); |
| |
| it('should not update a build request to "completed" until all roots needed in the commit set are uploaded', () => { |
| const requests = MockRemoteAPI.requests; |
| let triggerable; |
| let taskId = null; |
| let syncPromise; |
| return createTriggerable().then((newTriggerable) => { |
| triggerable = newTriggerable; |
| return createTestGroupWihOwnedCommit(); |
| }).then((testGroup) => { |
| taskId = testGroup.task().id(); |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(buildRequest.statusUrl(), null); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), {}); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 7); |
| assertAndResolveRequest(requests[6], 'POST', '/api/v2/forceschedulers/force-ab-builds', 'OK'); |
| assert.deepEqual(requests[6].data, {'id': '1', 'jsonrpc': '2.0', 'method': 'force', 'params': |
| {'wk': '191622', 'build-request-id': '1', 'forcescheduler': 'force-ab-builds', 'owned-commits': `{"WebKit":[{"revision":"owned-jsc-6161","repository":"JavaScriptCore","ownerRevision":"191622"}]}`}}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 10); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('some builder'), |
| MockData.pendingBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[9], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 13); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.runningBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[12], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return syncPromise; |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.rootForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| assert.deepEqual(commitSet.allRootFiles(), []); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| return uploadRoot(parseInt(buildRequest.id()), 123); |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.strictEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| return uploadRoot(parseInt(buildRequest.id()), 123, [{ownerRepository: 'WebKit', ownedRepository: 'JavaScriptCore'}], '2017-05-10T02:54:09.666'); |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| const jscRoot = commitSet.rootForRepository((ownedJSC)); |
| assert(jscRoot instanceof UploadedFile); |
| assert.strictEqual(jscRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot, jscRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Waiting'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), null); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| MockRemoteAPI.reset(); |
| syncPromise = triggerable.initSyncers().then(() => triggerable.syncOnce()); |
| assertAndResolveRequest(requests[0], 'GET', MockData.buildbotBuildersURL(), MockData.mockBuildbotBuilders()); |
| MockRemoteAPI.reset(); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 3); |
| assertAndResolveRequest(requests[0], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[1], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[2], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 6); |
| assertAndResolveRequest(requests[3], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[4], 'GET', MockData.recentBuildsUrl('some builder', 2), |
| MockData.finishedBuild({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})); |
| assertAndResolveRequest(requests[5], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 7); |
| assertAndResolveRequest(requests[6], 'POST', '/api/v2/forceschedulers/force-ab-builds', 'OK'); |
| assert.deepEqual(requests[6].data, {'id': '2', 'jsonrpc': '2.0', 'method': 'force', 'params': |
| {'wk': '192736', 'build-request-id': '2', 'forcescheduler': 'force-ab-builds', 'owned-commits': `{"WebKit":[{"revision":"owned-jsc-9191","repository":"JavaScriptCore","ownerRevision":"192736"}]}`}}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 10); |
| assertAndResolveRequest(requests[7], 'GET', MockData.pendingBuildsUrl('some tester'), {}); |
| assertAndResolveRequest(requests[8], 'GET', MockData.pendingBuildsUrl('some builder'), {}); |
| assertAndResolveRequest(requests[9], 'GET', MockData.pendingBuildsUrl('other builder'), {}); |
| return MockRemoteAPI.waitForRequest(); |
| }).then(() => { |
| assert.strictEqual(requests.length, 13); |
| assertAndResolveRequest(requests[10], 'GET', MockData.recentBuildsUrl('some tester', 2), {}); |
| assertAndResolveRequest(requests[11], 'GET', MockData.recentBuildsUrl('some builder', 2), { |
| 'builds': [ |
| MockData.runningBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 2}), |
| MockData.finishedBuildData({builderId: MockData.builderIDForName('some builder'), buildRequestId: 1})] |
| }); |
| assertAndResolveRequest(requests[12], 'GET', MockData.recentBuildsUrl('other builder', 2), {}); |
| return syncPromise; |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| const jscRoot = commitSet.rootForRepository(ownedJSC); |
| assert(jscRoot instanceof UploadedFile); |
| assert.strictEqual(jscRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot, jscRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.rootForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| assert.deepEqual(otherCommitSet.allRootFiles(), []); |
| |
| return uploadRoot(parseInt(otherBuildRequest.id()), 124); |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| const jscRoot = commitSet.rootForRepository(ownedJSC); |
| assert(jscRoot instanceof UploadedFile); |
| assert.strictEqual(jscRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot, jscRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Running'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.strictEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| const otherWebkitRoot = otherCommitSet.rootForRepository(webkit); |
| assert(otherWebkitRoot instanceof UploadedFile); |
| assert.strictEqual(otherWebkitRoot.filename(), 'root124.dat'); |
| assert.deepEqual(otherCommitSet.allRootFiles(), [otherWebkitRoot]); |
| return uploadRoot(parseInt(otherBuildRequest.id()), 124, [{ownerRepository: 'WebKit', ownedRepository: 'JavaScriptCore'}], '2017-05-10T02:54:09.666'); |
| }).then(() => { |
| return TestGroup.fetchForTask(taskId, true); |
| }).then((testGroups) => { |
| assert.strictEqual(testGroups.length, 1); |
| const testGroup = testGroups[0]; |
| const webkit = Repository.findById(MockData.webkitRepositoryId()); |
| const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId()); |
| assert.strictEqual(testGroup.buildRequests().length, 6); |
| |
| const buildRequest = testGroup.buildRequests()[0]; |
| assert(buildRequest.isBuild()); |
| assert(!buildRequest.isTest()); |
| assert.strictEqual(buildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(buildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(buildRequest.buildId(), null); |
| |
| const commitSet = buildRequest.commitSet(); |
| assert.strictEqual(commitSet.revisionForRepository(webkit), '191622'); |
| assert.strictEqual(commitSet.patchForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(commitSet.ownerRevisionForRepository(ownedJSC), commitSet.revisionForRepository(webkit)); |
| const webkitRoot = commitSet.rootForRepository(webkit); |
| assert(webkitRoot instanceof UploadedFile); |
| assert.strictEqual(webkitRoot.filename(), 'root123.dat'); |
| const jscRoot = commitSet.rootForRepository(ownedJSC); |
| assert(jscRoot instanceof UploadedFile); |
| assert.strictEqual(jscRoot.filename(), 'root123.dat'); |
| assert.deepEqual(commitSet.allRootFiles(), [webkitRoot, jscRoot]); |
| |
| const otherBuildRequest = testGroup.buildRequests()[1]; |
| assert(otherBuildRequest.isBuild()); |
| assert(!otherBuildRequest.isTest()); |
| assert.strictEqual(otherBuildRequest.statusLabel(), 'Completed'); |
| assert.strictEqual(otherBuildRequest.statusUrl(), MockData.statusUrl('some builder', 124)); |
| assert.notEqual(otherBuildRequest.buildId(), null); |
| |
| const otherCommitSet = otherBuildRequest.commitSet(); |
| assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '192736'); |
| assert.strictEqual(otherCommitSet.patchForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(webkit), null); |
| assert.strictEqual(otherCommitSet.ownerRevisionForRepository(ownedJSC), otherCommitSet.revisionForRepository(webkit)); |
| const otherWebkitRoot = otherCommitSet.rootForRepository(webkit); |
| assert(otherWebkitRoot instanceof UploadedFile); |
| assert.strictEqual(otherWebkitRoot.filename(), 'root124.dat'); |
| const otherJSCRoot = otherCommitSet.rootForRepository(ownedJSC); |
| assert(otherJSCRoot instanceof UploadedFile); |
| assert.strictEqual(otherJSCRoot.filename(), 'root124.dat'); |
| assert.deepEqual(otherCommitSet.allRootFiles(), [otherWebkitRoot, otherJSCRoot]); |
| }); |
| }); |
| }); |