814 lines
40 KiB
JavaScript
814 lines
40 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('assert');
|
|
|
|
require('../tools/js/v3-models.js');
|
|
|
|
const MockData = require('./resources/mock-data.js');
|
|
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;
|
|
|
|
function makeReport(rootFile, buildRequestId = 1, repositoryList = ['WebKit'], buildTime = '2017-05-10T02:54:08.666')
|
|
{
|
|
return {
|
|
workerName: 'someWorker',
|
|
workerPassword: 'somePassword',
|
|
builderName: 'someBuilder',
|
|
buildTag: "123",
|
|
buildTime: buildTime,
|
|
buildRequest: buildRequestId,
|
|
rootFile: rootFile,
|
|
repositoryList: JSON.stringify(repositoryList),
|
|
};
|
|
}
|
|
|
|
function addWorkerAndCreateRootFile(workerInfo = makeReport())
|
|
{
|
|
return addWorkerForReport(workerInfo).then(() => {
|
|
return TemporaryFile.makeTemporaryFile('some.dat', 'some content');
|
|
});
|
|
}
|
|
|
|
function createTestGroupWihPatch()
|
|
{
|
|
const triggerableConfiguration = {
|
|
'workerName': 'sync-worker',
|
|
'workerPassword': 'password',
|
|
'triggerable': 'build-webkit',
|
|
'configurations': [
|
|
{test: MockData.someTestId(), platform: MockData.somePlatformId()},
|
|
],
|
|
'repositoryGroups': [
|
|
{name: 'webkit', repositories: [
|
|
{repository: MockData.webkitRepositoryId(), acceptsPatch: true},
|
|
{repository: MockData.sharedRepositoryId()},
|
|
]}
|
|
]
|
|
};
|
|
|
|
const db = TestServer.database();
|
|
return MockData.addMockData(db).then(() => {
|
|
return Promise.all([TemporaryFile.makeTemporaryFile('patch.dat', 'patch file'), Manifest.fetch()]);
|
|
}).then((result) => {
|
|
const patchFile = result[0];
|
|
return Promise.all([UploadedFile.uploadFile(patchFile), TestServer.remoteAPI().postJSON('/api/update-triggerable/', triggerableConfiguration)]);
|
|
}).then((result) => {
|
|
const patchFile = result[0];
|
|
const someTest = Test.findById(MockData.someTestId());
|
|
const webkit = Repository.findById(MockData.webkitRepositoryId());
|
|
const shared = Repository.findById(MockData.sharedRepositoryId());
|
|
const set1 = new CustomCommitSet;
|
|
set1.setRevisionForRepository(webkit, '191622', patchFile);
|
|
set1.setRevisionForRepository(shared, '80229');
|
|
const set2 = new CustomCommitSet;
|
|
set2.setRevisionForRepository(webkit, '191622');
|
|
set2.setRevisionForRepository(shared, '80229');
|
|
return TestGroup.createWithTask('custom task', Platform.findById(MockData.somePlatformId()), someTest, 'some group', 2, 'alternating', [set1, set2]);
|
|
}).then((task) => {
|
|
return TestGroup.findAllByTask(task.id())[0];
|
|
}).then((group) => {
|
|
return db.query('UPDATE analysis_test_groups SET testgroup_author = $1', ['someUser']).then(() => group);
|
|
});
|
|
}
|
|
|
|
function createTestGroupWithPatchAndOwnedCommits()
|
|
{
|
|
const triggerableConfiguration = {
|
|
'workerName': 'sync-worker',
|
|
'workerPassword': 'password',
|
|
'triggerable': 'build-webkit',
|
|
'configurations': [
|
|
{test: MockData.someTestId(), platform: MockData.somePlatformId()},
|
|
],
|
|
'repositoryGroups': [
|
|
{name: 'webkit', repositories: [
|
|
{repository: MockData.webkitRepositoryId(), acceptsPatch: true}
|
|
]}
|
|
]
|
|
};
|
|
|
|
const db = TestServer.database();
|
|
return MockData.addMockData(db).then(() => {
|
|
return Promise.all([TemporaryFile.makeTemporaryFile('patch.dat', 'patch file'), Manifest.fetch()]);
|
|
}).then((result) => {
|
|
const patchFile = result[0];
|
|
return Promise.all([UploadedFile.uploadFile(patchFile), TestServer.remoteAPI().postJSON('/api/update-triggerable/', triggerableConfiguration)]);
|
|
}).then((result) => {
|
|
const patchFile = result[0];
|
|
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', patchFile);
|
|
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];
|
|
}).then((group) => {
|
|
return db.query('UPDATE analysis_test_groups SET testgroup_author = $1', ['someUser']).then(() => group);
|
|
});
|
|
}
|
|
|
|
describe('/api/upload-root/', function () {
|
|
prepareServerTest(this);
|
|
TemporaryFile.inject();
|
|
|
|
it('should reject when root file is missing', () => {
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', {}).then((response) => {
|
|
assert.strictEqual(response['status'], 'NoFileSpecified');
|
|
});
|
|
});
|
|
|
|
it('should reject when there are no workers', () => {
|
|
return TemporaryFile.makeTemporaryFile('some.dat', 'some content').then((rootFile) => {
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', makeReport(rootFile));
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'WorkerNotFound');
|
|
});
|
|
});
|
|
|
|
it('should reject when worker name is missing', () => {
|
|
return addWorkerAndCreateRootFile().then((rootFile) => {
|
|
const report = makeReport(rootFile);
|
|
delete report.workerName;
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'MissingWorkerName');
|
|
});
|
|
});
|
|
|
|
it('should reject when builder name is missing', () => {
|
|
return addWorkerAndCreateRootFile().then((rootFile) => {
|
|
const report = makeReport(rootFile);
|
|
delete report.builderName;
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidBuilderName');
|
|
});
|
|
});
|
|
|
|
it('should reject when build tag is missing', () => {
|
|
return addWorkerAndCreateRootFile().then((rootFile) => {
|
|
const report = makeReport(rootFile);
|
|
delete report.buildTag;
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidBuildTag');
|
|
});
|
|
});
|
|
|
|
it('should reject when build number is not a number', () => {
|
|
return addWorkerAndCreateRootFile().then((rootFile) => {
|
|
const report = makeReport(rootFile);
|
|
delete report.buildTag;
|
|
report.buildNumber = '1abc';
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidBuildNumber');
|
|
});
|
|
});
|
|
|
|
it('should reject if both build number and build tag exists but different', async () => {
|
|
const rootFile = await addWorkerAndCreateRootFile();
|
|
const report = makeReport(rootFile);
|
|
report.buildNumber = '456';
|
|
const response = await TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
assert.strictEqual(response['status'], 'BuilderNumberTagMismatch');
|
|
});
|
|
|
|
it('should accept if both build number and build tag exists with same value', async () => {
|
|
const testGroup = await createTestGroupWithPatchAndOwnedCommits();
|
|
const webkit = Repository.findById(MockData.webkitRepositoryId());
|
|
const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId());
|
|
|
|
const buildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(!buildRequest.hasFinished());
|
|
assert(buildRequest.isPending());
|
|
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.strictEqual(commitSet.revisionForRepository(ownedJSC), 'owned-jsc-6161');
|
|
assert.strictEqual(commitSet.patchForRepository(ownedJSC), null);
|
|
assert.strictEqual(commitSet.rootForRepository(ownedJSC), null);
|
|
assert.deepStrictEqual(commitSet.allRootFiles(), []);
|
|
|
|
const otherBuildRequest = testGroup.buildRequests()[1];
|
|
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.revisionForRepository(ownedJSC), 'owned-jsc-9191');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(ownedJSC), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(ownedJSC), null);
|
|
assert.deepStrictEqual(otherCommitSet.allRootFiles(), []);
|
|
|
|
const rootFile = await addWorkerAndCreateRootFile();
|
|
const report = makeReport(rootFile, buildRequest.id(), ['WebKit']);
|
|
report.buildNumber = report.buildTag;
|
|
const response = await TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
assert.strictEqual(response['status'], 'OK');
|
|
});
|
|
|
|
it('should continue working with build number if build tag is not present', async () => {
|
|
const testGroup = await createTestGroupWithPatchAndOwnedCommits();
|
|
const webkit = Repository.findById(MockData.webkitRepositoryId());
|
|
const ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId());
|
|
|
|
const buildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(!buildRequest.hasFinished());
|
|
assert(buildRequest.isPending());
|
|
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.strictEqual(commitSet.revisionForRepository(ownedJSC), 'owned-jsc-6161');
|
|
assert.strictEqual(commitSet.patchForRepository(ownedJSC), null);
|
|
assert.strictEqual(commitSet.rootForRepository(ownedJSC), null);
|
|
assert.deepStrictEqual(commitSet.allRootFiles(), []);
|
|
|
|
const otherBuildRequest = testGroup.buildRequests()[1];
|
|
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.revisionForRepository(ownedJSC), 'owned-jsc-9191');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(ownedJSC), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(ownedJSC), null);
|
|
assert.deepStrictEqual(otherCommitSet.allRootFiles(), []);
|
|
|
|
const rootFile = await addWorkerAndCreateRootFile();
|
|
const report = makeReport(rootFile, buildRequest.id(), ['WebKit']);
|
|
delete report.buildTag;
|
|
report.buildNumber = '123';
|
|
const response = await TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
assert.strictEqual(response['status'], 'OK');
|
|
});
|
|
|
|
it('should reject when build time is missing', () => {
|
|
return addWorkerAndCreateRootFile().then((rootFile) => {
|
|
const report = makeReport(rootFile);
|
|
delete report.buildTime;
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidBuildTime');
|
|
});
|
|
});
|
|
|
|
it('should reject when build time is malformed', () => {
|
|
return addWorkerAndCreateRootFile().then((rootFile) => {
|
|
const report = makeReport(rootFile);
|
|
report.buildTime = 'Wed, 10 May 2017 03:02:30 GMT';
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidBuildTime');
|
|
});
|
|
});
|
|
|
|
it('should reject when build request ID is missing', () => {
|
|
return addWorkerAndCreateRootFile().then((rootFile) => {
|
|
const report = makeReport(rootFile);
|
|
delete report.buildRequest;
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidBuildRequest');
|
|
});
|
|
});
|
|
|
|
it('should reject when build request ID is not a number', () => {
|
|
return addWorkerAndCreateRootFile().then((rootFile) => {
|
|
const report = makeReport(rootFile);
|
|
report.buildRequest = 'abc';
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidBuildRequest');
|
|
});
|
|
});
|
|
|
|
it('should reject when build request does not exist', () => {
|
|
return addWorkerAndCreateRootFile().then((rootFile) => {
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', makeReport(rootFile));
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidBuildRequestType');
|
|
});
|
|
});
|
|
|
|
it('should reject when repository list is missing', () => {
|
|
return addWorkerAndCreateRootFile().then((rootFile) => {
|
|
const report = makeReport(rootFile);
|
|
delete report.repositoryList;
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidRepositoryList');
|
|
});
|
|
});
|
|
|
|
it('should reject when repository list is not a valid JSON string', () => {
|
|
return addWorkerAndCreateRootFile().then((rootFile) => {
|
|
const report = makeReport(rootFile);
|
|
report.repositoryList = 'a+b';
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidRepositoryList');
|
|
});
|
|
});
|
|
|
|
it('should reject when using invalid key to specify an owned repository', () => {
|
|
let webkit;
|
|
let webkitPatch;
|
|
let ownedJSC;
|
|
let testGroup;
|
|
let buildRequest;
|
|
let otherBuildRequest;
|
|
let uploadedRoot;
|
|
return createTestGroupWithPatchAndOwnedCommits().then((group) => {
|
|
webkit = Repository.findById(MockData.webkitRepositoryId());
|
|
ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId());
|
|
|
|
testGroup = group;
|
|
buildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(!buildRequest.hasFinished());
|
|
assert(buildRequest.isPending());
|
|
assert.strictEqual(buildRequest.buildId(), null);
|
|
|
|
const 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.strictEqual(commitSet.revisionForRepository(ownedJSC), 'owned-jsc-6161');
|
|
assert.strictEqual(commitSet.patchForRepository(ownedJSC), null);
|
|
assert.strictEqual(commitSet.rootForRepository(ownedJSC), null);
|
|
assert.deepStrictEqual(commitSet.allRootFiles(), []);
|
|
|
|
otherBuildRequest = testGroup.buildRequests()[1];
|
|
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.revisionForRepository(ownedJSC), 'owned-jsc-9191');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(ownedJSC), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(ownedJSC), null);
|
|
assert.deepStrictEqual(otherCommitSet.allRootFiles(), []);
|
|
|
|
return addWorkerAndCreateRootFile();
|
|
}).then((rootFile) => {
|
|
const report = makeReport(rootFile, buildRequest.id(), ['WebKit']);
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'OK');
|
|
const uploadedRootRawData = response['uploadedFile'];
|
|
uploadedRoot = UploadedFile.ensureSingleton(uploadedRootRawData.id, uploadedRootRawData);
|
|
assert.strictEqual(uploadedRoot.filename(), 'some.dat');
|
|
return TestGroup.fetchForTask(buildRequest.testGroup().task().id(), true);
|
|
}).then((testGroups) => {
|
|
assert.strictEqual(testGroups.length, 1);
|
|
const group = testGroups[0];
|
|
assert.strictEqual(group, testGroup);
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
|
|
const updatedBuildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(updatedBuildRequest, buildRequest);
|
|
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(!buildRequest.hasFinished());
|
|
assert.strictEqual(buildRequest.buildId(), null);
|
|
|
|
assert.deepStrictEqual(buildRequest.commitSet().allRootFiles(), [uploadedRoot]);
|
|
assert.deepStrictEqual(otherBuildRequest.commitSet().allRootFiles(), []);
|
|
return TemporaryFile.makeTemporaryFile('JavaScriptCore-Root.dat', 'JavaScript Content 0');
|
|
}).then((rootFile) => {
|
|
const report = makeReport(rootFile, buildRequest.id(), [{ownerRepositoryWrongKey: 'WebKit', ownedRepository: 'JavaScriptCore'}], '2017-05-10T02:54:09.666');
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidKeyForRepository');
|
|
});
|
|
});
|
|
|
|
it('should reject when reporting an invalid owned repository', () => {
|
|
let webkit;
|
|
let webkitPatch;
|
|
let ownedJSC;
|
|
let testGroup;
|
|
let buildRequest;
|
|
let otherBuildRequest;
|
|
let uploadedRoot;
|
|
return createTestGroupWithPatchAndOwnedCommits().then((group) => {
|
|
webkit = Repository.findById(MockData.webkitRepositoryId());
|
|
ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId());
|
|
|
|
testGroup = group;
|
|
buildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(!buildRequest.hasFinished());
|
|
assert(buildRequest.isPending());
|
|
assert.strictEqual(buildRequest.buildId(), null);
|
|
|
|
const 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.strictEqual(commitSet.revisionForRepository(ownedJSC), 'owned-jsc-6161');
|
|
assert.strictEqual(commitSet.patchForRepository(ownedJSC), null);
|
|
assert.strictEqual(commitSet.rootForRepository(ownedJSC), null);
|
|
assert.deepStrictEqual(commitSet.allRootFiles(), []);
|
|
|
|
otherBuildRequest = testGroup.buildRequests()[1];
|
|
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.revisionForRepository(ownedJSC), 'owned-jsc-9191');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(ownedJSC), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(ownedJSC), null);
|
|
assert.deepStrictEqual(otherCommitSet.allRootFiles(), []);
|
|
|
|
return addWorkerAndCreateRootFile();
|
|
}).then((rootFile) => {
|
|
const report = makeReport(rootFile, buildRequest.id(), ['WebKit']);
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'OK');
|
|
const uploadedRootRawData = response['uploadedFile'];
|
|
uploadedRoot = UploadedFile.ensureSingleton(uploadedRootRawData.id, uploadedRootRawData);
|
|
assert.strictEqual(uploadedRoot.filename(), 'some.dat');
|
|
return TestGroup.fetchForTask(buildRequest.testGroup().task().id(), true);
|
|
}).then((testGroups) => {
|
|
assert.strictEqual(testGroups.length, 1);
|
|
const group = testGroups[0];
|
|
assert.strictEqual(group, testGroup);
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
|
|
const updatedBuildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(updatedBuildRequest, buildRequest);
|
|
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(!buildRequest.hasFinished());
|
|
assert.strictEqual(buildRequest.buildId(), null);
|
|
|
|
assert.deepStrictEqual(buildRequest.commitSet().allRootFiles(), [uploadedRoot]);
|
|
assert.deepStrictEqual(otherBuildRequest.commitSet().allRootFiles(), []);
|
|
return TemporaryFile.makeTemporaryFile('JavaScriptCore-Root.dat', 'JavaScript Content 0');
|
|
}).then((rootFile) => {
|
|
const report = makeReport(rootFile, buildRequest.id(), [{ownerRepository: 'WebKit2', ownedRepository: 'JavaScriptCore'}], '2017-05-10T02:54:09.666');
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidRepository');
|
|
});
|
|
});
|
|
|
|
it('should accept when build request exists', () => {
|
|
let webkit;
|
|
let webkitPatch;
|
|
let shared;
|
|
let testGroup;
|
|
let buildRequest;
|
|
let otherBuildRequest;
|
|
let uploadedRoot;
|
|
return createTestGroupWihPatch().then((group) => {
|
|
webkit = Repository.findById(MockData.webkitRepositoryId());
|
|
shared = Repository.findById(MockData.sharedRepositoryId());
|
|
|
|
testGroup = group;
|
|
buildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(!buildRequest.hasFinished());
|
|
assert(buildRequest.isPending());
|
|
assert.strictEqual(buildRequest.buildId(), null);
|
|
|
|
const 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.strictEqual(commitSet.revisionForRepository(shared), '80229');
|
|
assert.strictEqual(commitSet.patchForRepository(shared), null);
|
|
assert.strictEqual(commitSet.rootForRepository(shared), null);
|
|
assert.deepStrictEqual(commitSet.allRootFiles(), []);
|
|
|
|
otherBuildRequest = testGroup.buildRequests()[1];
|
|
const otherCommitSet = otherBuildRequest.commitSet();
|
|
assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(webkit), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(webkit), null);
|
|
assert.strictEqual(otherCommitSet.revisionForRepository(shared), '80229');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(shared), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(shared), null);
|
|
assert.deepStrictEqual(otherCommitSet.allRootFiles(), []);
|
|
|
|
return addWorkerAndCreateRootFile();
|
|
}).then((rootFile) => {
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', makeReport(rootFile, buildRequest.id()));
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'OK');
|
|
const uploadedRootRawData = response['uploadedFile'];
|
|
uploadedRoot = UploadedFile.ensureSingleton(uploadedRootRawData.id, uploadedRootRawData);
|
|
assert.strictEqual(uploadedRoot.filename(), 'some.dat');
|
|
assert.strictEqual(uploadedRoot.author(), 'someUser');
|
|
return TestGroup.fetchForTask(buildRequest.testGroup().task().id(), true);
|
|
}).then((testGroups) => {
|
|
|
|
assert.strictEqual(testGroups.length, 1);
|
|
const group = testGroups[0];
|
|
assert.strictEqual(group, testGroup);
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
|
|
const updatedBuildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(updatedBuildRequest, buildRequest);
|
|
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(buildRequest.hasFinished());
|
|
assert(!buildRequest.isPending());
|
|
assert.notStrictEqual(buildRequest.buildId(), null);
|
|
|
|
const commitSet = buildRequest.commitSet();
|
|
assert.strictEqual(commitSet.revisionForRepository(webkit), '191622');
|
|
assert.strictEqual(commitSet.patchForRepository(webkit), webkitPatch);
|
|
const webkitRoot = commitSet.rootForRepository(webkit);
|
|
assert.strictEqual(webkitRoot, uploadedRoot);
|
|
assert.strictEqual(commitSet.revisionForRepository(shared), '80229');
|
|
assert.strictEqual(commitSet.patchForRepository(shared), null);
|
|
assert.strictEqual(commitSet.rootForRepository(shared), null);
|
|
assert.deepStrictEqual(commitSet.allRootFiles(), [uploadedRoot]);
|
|
|
|
const otherCommitSet = otherBuildRequest.commitSet();
|
|
assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(webkit), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(webkit), null);
|
|
assert.strictEqual(otherCommitSet.revisionForRepository(shared), '80229');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(shared), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(shared), null);
|
|
assert.deepStrictEqual(otherCommitSet.allRootFiles(), []);
|
|
});
|
|
});
|
|
|
|
it('should reject when the repository list is not an array', () => {
|
|
let buildRequest;
|
|
return createTestGroupWihPatch().then((group) => {
|
|
buildRequest = group.buildRequests()[0];
|
|
return addWorkerAndCreateRootFile();
|
|
}).then((rootFile) => {
|
|
const report = makeReport(rootFile, buildRequest.id());
|
|
report.repositoryList = '"a"';
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidRepositoryList');
|
|
});
|
|
});
|
|
|
|
it('should reject when the repository list refers to a non-existent repository', () => {
|
|
let buildRequest;
|
|
return createTestGroupWihPatch().then((group) => {
|
|
buildRequest = group.buildRequests()[0];
|
|
return addWorkerAndCreateRootFile();
|
|
}).then((rootFile) => {
|
|
const report = makeReport(rootFile, buildRequest.id());
|
|
report.repositoryList = '["WebKit", "BadRepositoryName"]';
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidRepository');
|
|
assert.strictEqual(response['repositoryName'], 'BadRepositoryName');
|
|
});
|
|
});
|
|
|
|
it('should reject when the repository list refers to a repository not present in the commit set', () => {
|
|
let buildRequest;
|
|
return createTestGroupWihPatch().then((group) => {
|
|
buildRequest = group.buildRequests()[0];
|
|
return addWorkerAndCreateRootFile();
|
|
}).then((rootFile) => {
|
|
const report = makeReport(rootFile, buildRequest.id());
|
|
report.repositoryList = '["WebKit", "macOS"]';
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'InvalidRepository');
|
|
assert.strictEqual(response['repositoryName'], 'macOS');
|
|
});
|
|
});
|
|
|
|
it('should update all commit set items in the repository listed', () => {
|
|
let webkit;
|
|
let webkitPatch;
|
|
let shared;
|
|
let testGroup;
|
|
let buildRequest;
|
|
let otherBuildRequest;
|
|
let uploadedRoot;
|
|
return createTestGroupWihPatch().then((group) => {
|
|
webkit = Repository.findById(MockData.webkitRepositoryId());
|
|
shared = Repository.findById(MockData.sharedRepositoryId());
|
|
|
|
testGroup = group;
|
|
buildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(!buildRequest.hasFinished());
|
|
assert(buildRequest.isPending());
|
|
assert.strictEqual(buildRequest.buildId(), null);
|
|
|
|
const 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.strictEqual(commitSet.revisionForRepository(shared), '80229');
|
|
assert.strictEqual(commitSet.patchForRepository(shared), null);
|
|
assert.strictEqual(commitSet.rootForRepository(shared), null);
|
|
assert.deepStrictEqual(commitSet.allRootFiles(), []);
|
|
|
|
otherBuildRequest = testGroup.buildRequests()[1];
|
|
const otherCommitSet = otherBuildRequest.commitSet();
|
|
assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(webkit), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(webkit), null);
|
|
assert.strictEqual(otherCommitSet.revisionForRepository(shared), '80229');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(shared), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(shared), null);
|
|
assert.deepStrictEqual(otherCommitSet.allRootFiles(), []);
|
|
|
|
return addWorkerAndCreateRootFile();
|
|
}).then((rootFile) => {
|
|
const report = makeReport(rootFile, buildRequest.id());
|
|
report.repositoryList = '["WebKit", "Shared"]';
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'OK');
|
|
const uploadedRootRawData = response['uploadedFile'];
|
|
uploadedRoot = UploadedFile.ensureSingleton(uploadedRootRawData.id, uploadedRootRawData);
|
|
assert.strictEqual(uploadedRoot.filename(), 'some.dat');
|
|
assert.strictEqual(uploadedRoot.author(), 'someUser');
|
|
return TestGroup.fetchForTask(buildRequest.testGroup().task().id(), true);
|
|
}).then((testGroups) => {
|
|
|
|
assert.strictEqual(testGroups.length, 1);
|
|
const group = testGroups[0];
|
|
assert.strictEqual(group, testGroup);
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
|
|
const updatedBuildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(updatedBuildRequest, buildRequest);
|
|
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(buildRequest.hasFinished());
|
|
assert(!buildRequest.isPending());
|
|
assert.notStrictEqual(buildRequest.buildId(), null);
|
|
|
|
const commitSet = buildRequest.commitSet();
|
|
assert.strictEqual(commitSet.revisionForRepository(webkit), '191622');
|
|
assert.strictEqual(commitSet.patchForRepository(webkit), webkitPatch);
|
|
assert.strictEqual(commitSet.rootForRepository(webkit), uploadedRoot);
|
|
assert.strictEqual(commitSet.revisionForRepository(shared), '80229');
|
|
assert.strictEqual(commitSet.patchForRepository(shared), null);
|
|
assert.strictEqual(commitSet.rootForRepository(shared), uploadedRoot);
|
|
assert.deepStrictEqual(commitSet.allRootFiles(), [uploadedRoot]);
|
|
|
|
const otherCommitSet = otherBuildRequest.commitSet();
|
|
assert.strictEqual(otherCommitSet.revisionForRepository(webkit), '191622');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(webkit), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(webkit), null);
|
|
assert.strictEqual(otherCommitSet.revisionForRepository(shared), '80229');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(shared), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(shared), null);
|
|
assert.deepStrictEqual(otherCommitSet.allRootFiles(), []);
|
|
});
|
|
});
|
|
|
|
it('should only set build requests as complete when all roots are built', () => {
|
|
let webkit;
|
|
let webkitPatch;
|
|
let ownedJSC;
|
|
let testGroup;
|
|
let buildRequest;
|
|
let otherBuildRequest;
|
|
let uploadedRoot;
|
|
let jscRoot;
|
|
return createTestGroupWithPatchAndOwnedCommits().then((group) => {
|
|
webkit = Repository.findById(MockData.webkitRepositoryId());
|
|
ownedJSC = Repository.findById(MockData.ownedJSCRepositoryId());
|
|
|
|
testGroup = group;
|
|
buildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(!buildRequest.hasFinished());
|
|
assert(buildRequest.isPending());
|
|
assert.strictEqual(buildRequest.buildId(), null);
|
|
|
|
const 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.strictEqual(commitSet.revisionForRepository(ownedJSC), 'owned-jsc-6161');
|
|
assert.strictEqual(commitSet.patchForRepository(ownedJSC), null);
|
|
assert.strictEqual(commitSet.rootForRepository(ownedJSC), null);
|
|
assert.deepStrictEqual(commitSet.allRootFiles(), []);
|
|
|
|
otherBuildRequest = testGroup.buildRequests()[1];
|
|
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.revisionForRepository(ownedJSC), 'owned-jsc-9191');
|
|
assert.strictEqual(otherCommitSet.patchForRepository(ownedJSC), null);
|
|
assert.strictEqual(otherCommitSet.rootForRepository(ownedJSC), null);
|
|
assert.deepStrictEqual(otherCommitSet.allRootFiles(), []);
|
|
|
|
return addWorkerAndCreateRootFile();
|
|
}).then((rootFile) => {
|
|
const report = makeReport(rootFile, buildRequest.id(), ['WebKit']);
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'OK');
|
|
const uploadedRootRawData = response['uploadedFile'];
|
|
uploadedRoot = UploadedFile.ensureSingleton(uploadedRootRawData.id, uploadedRootRawData);
|
|
assert.strictEqual(uploadedRoot.filename(), 'some.dat');
|
|
return TestGroup.fetchForTask(buildRequest.testGroup().task().id(), true);
|
|
}).then((testGroups) => {
|
|
assert.strictEqual(testGroups.length, 1);
|
|
const group = testGroups[0];
|
|
assert.strictEqual(group, testGroup);
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
|
|
const updatedBuildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(updatedBuildRequest, buildRequest);
|
|
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(!buildRequest.hasFinished());
|
|
assert.strictEqual(buildRequest.buildId(), null);
|
|
|
|
assert.deepStrictEqual(buildRequest.commitSet().allRootFiles(), [uploadedRoot]);
|
|
assert.deepStrictEqual(otherBuildRequest.commitSet().allRootFiles(), []);
|
|
return TemporaryFile.makeTemporaryFile('JavaScriptCore-Root.dat', 'JavaScript Content 0');
|
|
}).then((rootFile) => {
|
|
const report = makeReport(rootFile, buildRequest.id(), [{ownerRepository: 'WebKit', ownedRepository: 'JavaScriptCore'}], '2017-05-10T02:54:09.666');
|
|
return TestServer.remoteAPI().postFormData('/api/upload-root/', report);
|
|
}).then((response) => {
|
|
assert.strictEqual(response['status'], 'OK');
|
|
const uploadedRootRawData = response['uploadedFile'];
|
|
jscRoot = UploadedFile.ensureSingleton(uploadedRootRawData.id, uploadedRootRawData);
|
|
assert.strictEqual(jscRoot.filename(), 'JavaScriptCore-Root.dat');
|
|
return TestGroup.fetchForTask(buildRequest.testGroup().task().id(), true);
|
|
}).then((testGroups) => {
|
|
assert.strictEqual(testGroups.length, 1);
|
|
const group = testGroups[0];
|
|
assert.strictEqual(group, testGroup);
|
|
assert.strictEqual(testGroup.buildRequests().length, 6);
|
|
|
|
const updatedBuildRequest = testGroup.buildRequests()[0];
|
|
assert.strictEqual(updatedBuildRequest, buildRequest);
|
|
|
|
assert(buildRequest.isBuild());
|
|
assert(!buildRequest.isTest());
|
|
assert(buildRequest.hasFinished());
|
|
assert(!buildRequest.isPending());
|
|
assert.notStrictEqual(buildRequest.buildId(), null);
|
|
|
|
assert.deepStrictEqual(buildRequest.commitSet().allRootFiles(), [uploadedRoot, jscRoot]);
|
|
assert.deepStrictEqual(otherBuildRequest.commitSet().allRootFiles(), []);
|
|
});
|
|
});
|
|
});
|