mirror of
https://gitlab.silvrtree.co.uk/martind2000/nci.git
synced 2025-01-10 23:35:09 +00:00
173 lines
4.2 KiB
JavaScript
173 lines
4.2 KiB
JavaScript
'use strict';
|
|
|
|
var createNode = require('../lib/node').createNode,
|
|
expect = require('expect.js'),
|
|
_ = require('underscore');
|
|
|
|
|
|
describe('Node', function() {
|
|
var node,
|
|
project1 = {name: 'project1'},
|
|
project2 = {name: 'project2'};
|
|
|
|
var createNodeMock = function(params) {
|
|
params = params || {};
|
|
|
|
var node = createNode(_({
|
|
name: 'executor1',
|
|
type: 'local',
|
|
maxExecutorsCount: 1,
|
|
usageStrategy: 'maximum'
|
|
}).extend(params));
|
|
|
|
// only for testing
|
|
if (params.executors) {
|
|
node.executors = params.executors;
|
|
}
|
|
return node;
|
|
};
|
|
|
|
describe('wait reason', function() {
|
|
|
|
it('should be not a target node when node target is not match', function() {
|
|
var waitReason = createNodeMock({
|
|
name: 'executor1'
|
|
}).getExecutorWaitReason({
|
|
name: 'project1',
|
|
node: {target: 'other executor'}
|
|
});
|
|
expect(waitReason).eql('executor1: not a target node');
|
|
});
|
|
|
|
it('should be falsy when node target match', function() {
|
|
var waitReason = createNodeMock({
|
|
name: 'executor1'
|
|
}).getExecutorWaitReason({
|
|
name: 'project1',
|
|
node: {target: 'executor1'}
|
|
});
|
|
expect(waitReason).not.ok();
|
|
});
|
|
|
|
it('should be falsy when node target (array) match', function() {
|
|
var waitReason = createNodeMock({
|
|
name: 'executor1'
|
|
}).getExecutorWaitReason({
|
|
name: 'project1',
|
|
node: {target: ['executor1']}
|
|
});
|
|
expect(waitReason).not.ok();
|
|
});
|
|
|
|
it('should be only for specific projects when target is not set', function() {
|
|
var waitReason = createNodeMock({
|
|
usageStrategy: 'specificProject'
|
|
}).getExecutorWaitReason({
|
|
name: 'project1'
|
|
});
|
|
expect(waitReason).eql('executor1: only for specific projects');
|
|
});
|
|
|
|
it('should be all executors are busy when true', function() {
|
|
var waitReason = createNodeMock({
|
|
maxExecutorsCount: 1,
|
|
executors: {project2: 1}
|
|
}).getExecutorWaitReason({
|
|
name: 'project1'
|
|
});
|
|
expect(waitReason).eql('executor1: all executors are busy');
|
|
});
|
|
|
|
it('should be project already running on node when true', function() {
|
|
var waitReason = createNodeMock({
|
|
maxExecutorsCount: 2,
|
|
executors: {project1: 1}
|
|
}).getExecutorWaitReason({
|
|
name: 'project1'
|
|
});
|
|
expect(waitReason).eql('executor1: project already running on node');
|
|
});
|
|
|
|
it('should be blocked by project when blocked by executing', function() {
|
|
var waitReason = createNodeMock({
|
|
maxExecutorsCount: 2,
|
|
executors: {project2: {project: {name: 'project2'}}}
|
|
}).getExecutorWaitReason({
|
|
name: 'project1',
|
|
blockedBy: ['project2']
|
|
});
|
|
expect(waitReason).eql(
|
|
'executor1: blocked by currently running "project2"'
|
|
);
|
|
});
|
|
|
|
it('should be blocked by project when executing blocks it', function() {
|
|
var waitReason = createNodeMock({
|
|
maxExecutorsCount: 2,
|
|
executors: {project2: {project: {
|
|
name: 'project2',
|
|
blocks: ['project1']
|
|
}}}
|
|
}).getExecutorWaitReason({
|
|
name: 'project1'
|
|
});
|
|
expect(waitReason).eql(
|
|
'executor1: blocked by currently running "project2"'
|
|
);
|
|
});
|
|
|
|
});
|
|
|
|
var expectNodeHasFreeExecutor = function(project, value) {
|
|
it('should' + (value ? ' ' : ' not ') + 'has free executors for ' +
|
|
project.name, function() {
|
|
expect(node.hasFreeExecutor(project)).equal(value);
|
|
}
|
|
);
|
|
};
|
|
|
|
describe('basic', function() {
|
|
it('instance should be created without errors', function() {
|
|
node = createNode({
|
|
type: 'local',
|
|
maxExecutorsCount: 1
|
|
});
|
|
});
|
|
|
|
expectNodeHasFreeExecutor(project1, true);
|
|
expectNodeHasFreeExecutor(project2, true);
|
|
});
|
|
|
|
describe('with 100 ms project', function() {
|
|
var originalCreateExecutor;
|
|
before(function() {
|
|
originalCreateExecutor = node._createExecutor;
|
|
node._createExecutor = function() {
|
|
return {run: function(params, callback) {
|
|
setTimeout(callback, 100);
|
|
}};
|
|
};
|
|
});
|
|
|
|
it('should run without errors', function() {
|
|
node.run(project1, {}, function(err) {
|
|
expect(err).not.ok();
|
|
});
|
|
});
|
|
|
|
expectNodeHasFreeExecutor(project1, false);
|
|
expectNodeHasFreeExecutor(project2, false);
|
|
|
|
it('wait for project done (should no errors)', function(done) {
|
|
setTimeout(done, 100);
|
|
});
|
|
|
|
expectNodeHasFreeExecutor(project1, true);
|
|
expectNodeHasFreeExecutor(project2, true);
|
|
|
|
after(function() {
|
|
node._createExecutor = originalCreateExecutor;
|
|
});
|
|
});
|
|
});
|