mirror of
https://gitlab.silvrtree.co.uk/martind2000/nci.git
synced 2025-01-11 09:35:08 +00:00
142 lines
3.1 KiB
JavaScript
142 lines
3.1 KiB
JavaScript
'use strict';
|
|
|
|
var expect = require('expect.js'),
|
|
helpers = require('../helpers'),
|
|
Steppy = require('twostep').Steppy,
|
|
_ = require('underscore');
|
|
|
|
describe('Db concurrency', function() {
|
|
|
|
var db;
|
|
|
|
var madeBuildIndex = 0;
|
|
var makeBuild = function(build) {
|
|
return _({
|
|
// to increase build numbers
|
|
createDate: Date.now() + madeBuildIndex++,
|
|
project: _({}).extend(build && build.project)
|
|
}).extend(build);
|
|
};
|
|
|
|
before(function(done) {
|
|
Steppy(
|
|
function() {
|
|
db = helpers.initDb(this.slot());
|
|
},
|
|
function() {
|
|
db.builds.find({}, this.slot());
|
|
},
|
|
function(err, builds) {
|
|
if (builds.length) {
|
|
db.builds.del(builds, this.slot());
|
|
} else {
|
|
this.pass(null);
|
|
}
|
|
},
|
|
done
|
|
);
|
|
});
|
|
|
|
describe('prallel builds add should produce different ids', function() {
|
|
|
|
var expectedIds = [];
|
|
var builds = _(100).chain().range().map(function(number) {
|
|
expectedIds.push(number + 1);
|
|
return makeBuild({project: {name: 'project' + number}});
|
|
}).value();
|
|
|
|
it('put builds in parallel without errors', function(done) {
|
|
Steppy(
|
|
function() {
|
|
var putGroup = this.makeGroup();
|
|
_(builds).each(function(build) {
|
|
db.builds.put(build, putGroup.slot());
|
|
});
|
|
},
|
|
done
|
|
);
|
|
});
|
|
|
|
it('shoud have all ' + expectedIds.length +' ids ', function() {
|
|
expect(_(builds).chain().pluck('id').sortBy().value()).eql(
|
|
expectedIds
|
|
);
|
|
});
|
|
|
|
after(function(done) {
|
|
db.builds.del(expectedIds, done);
|
|
});
|
|
});
|
|
|
|
describe('prallel builds add/update should produce different ids', function() {
|
|
|
|
var expectedIds = [];
|
|
var builds = _(200).chain().range().map(function(number) {
|
|
expectedIds.push(number + 1);
|
|
return makeBuild({project: {name: 'project' + number}});
|
|
}).value();
|
|
|
|
it('put builds in parallel without errors', function(done) {
|
|
Steppy(
|
|
function() {
|
|
var putGroup = this.makeGroup();
|
|
_(builds.slice(0, 190)).each(function(build) {
|
|
db.builds.put(build, putGroup.slot());
|
|
});
|
|
},
|
|
function() {
|
|
var putGroup = this.makeGroup();
|
|
_(builds).each(function(build) {
|
|
db.builds.put(build, putGroup.slot());
|
|
});
|
|
},
|
|
done
|
|
);
|
|
});
|
|
|
|
it('shoud have all ' + expectedIds.length +' ids ', function() {
|
|
expect(_(builds).chain().pluck('id').sortBy().value()).eql(
|
|
expectedIds
|
|
);
|
|
});
|
|
|
|
after(function(done) {
|
|
db.builds.del(expectedIds, done);
|
|
});
|
|
});
|
|
|
|
describe('prallel builds put should produce different numbers', function() {
|
|
|
|
var expectedIds = [];
|
|
var builds = _(100).chain().range().map(function(number) {
|
|
expectedIds.push(number + 1);
|
|
return makeBuild({
|
|
project: {name: 'project1'},
|
|
status: 'in-progress'
|
|
});
|
|
}).value();
|
|
|
|
it('put builds in parallel without errors', function(done) {
|
|
Steppy(
|
|
function() {
|
|
var putGroup = this.makeGroup();
|
|
_(builds).each(function(build) {
|
|
db.builds.put(build, putGroup.slot());
|
|
});
|
|
},
|
|
done
|
|
);
|
|
});
|
|
|
|
it('shoud have all ' + expectedIds.length +' ids ', function() {
|
|
expect(_(builds).chain().pluck('id').sortBy().value()).eql(
|
|
expectedIds
|
|
);
|
|
});
|
|
|
|
after(function(done) {
|
|
db.builds.del(expectedIds, done);
|
|
});
|
|
});
|
|
});
|