Add unit tests for node-state-transition service
Add an initial set of unit tests for the node-state-transition service. The base goal is to verify the set of supported transitions. Change-Id: I681d81f2bf5758be65c02b241cf3c2edecc52c2f
This commit is contained in:
parent
7d4f5688d6
commit
1b120b0863
@ -124,6 +124,18 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description Get the list of transitions originating
|
||||||
|
* from a specified source state.
|
||||||
|
*
|
||||||
|
* @param {string} sourceState – Name of source state
|
||||||
|
* @return {object[]} List of transition objects. Each
|
||||||
|
* transition object contains the following fields:
|
||||||
|
* source: Name of source state.
|
||||||
|
* target: Name of target state.
|
||||||
|
* verb: Verb used to accomplish the transition.
|
||||||
|
* label: String description of the transition.
|
||||||
|
*/
|
||||||
this.getTransitions = function(sourceState) {
|
this.getTransitions = function(sourceState) {
|
||||||
var transitions = [];
|
var transitions = [];
|
||||||
if (states.hasOwnProperty(sourceState)) {
|
if (states.hasOwnProperty(sourceState)) {
|
||||||
@ -134,5 +146,14 @@
|
|||||||
}
|
}
|
||||||
return transitions;
|
return transitions;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description Get a list of known states.
|
||||||
|
*
|
||||||
|
* @return {string[]} List of known node states.
|
||||||
|
*/
|
||||||
|
this.getKnownStates = function() {
|
||||||
|
return Object.keys(states);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}());
|
}());
|
||||||
|
@ -0,0 +1,179 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2017 Cray Inc
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description Unit tests for the Ironic node state transition service
|
||||||
|
*/
|
||||||
|
|
||||||
|
describe(
|
||||||
|
'horizon.dashboard.admin.ironic.node-state-transition.service',
|
||||||
|
|
||||||
|
function() {
|
||||||
|
var nodeStateTransitionService;
|
||||||
|
|
||||||
|
beforeEach(module('horizon.dashboard.admin.ironic'));
|
||||||
|
|
||||||
|
beforeEach(inject(function($injector) {
|
||||||
|
nodeStateTransitionService = $injector.get(
|
||||||
|
'horizon.dashboard.admin.ironic.node-state-transition.service');
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('nodeStateTransitionService', function() {
|
||||||
|
expect(nodeStateTransitionService).toBeDefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('known states', function() {
|
||||||
|
var knownStates = ['enroll',
|
||||||
|
'manageable',
|
||||||
|
'active',
|
||||||
|
'available',
|
||||||
|
'adopt failed',
|
||||||
|
'clean failed',
|
||||||
|
'inspect failed',
|
||||||
|
'clean wait',
|
||||||
|
'deploy failed',
|
||||||
|
'error'].sort();
|
||||||
|
expect(nodeStateTransitionService.getKnownStates().sort())
|
||||||
|
.toEqual(knownStates);
|
||||||
|
});
|
||||||
|
|
||||||
|
function validateTransition(transition) {
|
||||||
|
var serviceTransitions =
|
||||||
|
nodeStateTransitionService.getTransitions(transition.source);
|
||||||
|
for (var i = 0; i < serviceTransitions.length; i++) {
|
||||||
|
var serviceTransition = serviceTransitions[i];
|
||||||
|
if (serviceTransition.source === transition.source &&
|
||||||
|
serviceTransition.target === transition.target &&
|
||||||
|
serviceTransition.verb === transition.verb) {
|
||||||
|
expect(serviceTransition.label).toBeDefined();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
it('enroll - manage - manageable', function() {
|
||||||
|
expect(validateTransition({source: 'enroll',
|
||||||
|
target: 'manageable',
|
||||||
|
verb: 'manage'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('manageable - adopt - active', function() {
|
||||||
|
expect(validateTransition({source: 'manageable',
|
||||||
|
target: 'active',
|
||||||
|
verb: 'adopt'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('manageable - provide - available', function() {
|
||||||
|
expect(validateTransition({source: 'manageable',
|
||||||
|
target: 'available',
|
||||||
|
verb: 'provide'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('manageable - inspect - manageable', function() {
|
||||||
|
expect(validateTransition({source: 'manageable',
|
||||||
|
target: 'manageable',
|
||||||
|
verb: 'inspect'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('manageable - clean - manageable', function() {
|
||||||
|
expect(validateTransition({source: 'manageable',
|
||||||
|
target: 'manageable',
|
||||||
|
verb: 'clean'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('active - deleted - available', function() {
|
||||||
|
expect(validateTransition({source: 'active',
|
||||||
|
target: 'available',
|
||||||
|
verb: 'deleted'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('available - active - active', function() {
|
||||||
|
expect(validateTransition({source: 'available',
|
||||||
|
target: 'active',
|
||||||
|
verb: 'active'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('available - manage - manageable', function() {
|
||||||
|
expect(validateTransition({source: 'available',
|
||||||
|
target: 'manageable',
|
||||||
|
verb: 'manage'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('adopt failed - manage - manageable', function() {
|
||||||
|
expect(validateTransition({source: 'adopt failed',
|
||||||
|
target: 'manageable',
|
||||||
|
verb: 'manage'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('adopt failed - adopt - active', function() {
|
||||||
|
expect(validateTransition({source: 'adopt failed',
|
||||||
|
target: 'active',
|
||||||
|
verb: 'adopt'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('inspect failed - manage - manageable', function() {
|
||||||
|
expect(validateTransition({source: 'inspect failed',
|
||||||
|
target: 'manageable',
|
||||||
|
verb: 'manage'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('clean wait - abort - clean failed', function() {
|
||||||
|
expect(validateTransition({source: 'clean wait',
|
||||||
|
target: 'clean failed',
|
||||||
|
verb: 'abort'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('clean failed - manage - manageable', function() {
|
||||||
|
expect(validateTransition({source: 'clean failed',
|
||||||
|
target: 'manageable',
|
||||||
|
verb: 'manage'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('deploy failed - active - active', function() {
|
||||||
|
expect(validateTransition({source: 'deploy failed',
|
||||||
|
target: 'active',
|
||||||
|
verb: 'active'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('deploy failed - delete - manageable', function() {
|
||||||
|
expect(validateTransition({source: 'deploy failed',
|
||||||
|
target: 'manageable',
|
||||||
|
verb: 'deleted'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('error - rebuild - active', function() {
|
||||||
|
expect(validateTransition({source: 'error',
|
||||||
|
target: 'active',
|
||||||
|
verb: 'rebuild'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('error - deleted - manageable', function() {
|
||||||
|
expect(validateTransition({source: 'error',
|
||||||
|
target: 'manageable',
|
||||||
|
verb: 'deleted'})).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('foo - bar - baz', function() {
|
||||||
|
expect(validateTransition({source: 'foo',
|
||||||
|
target: 'baz',
|
||||||
|
verb: 'bar'})).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})();
|
Loading…
Reference in New Issue
Block a user