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:
Peter Piela 2017-08-09 10:29:01 -04:00
parent 7d4f5688d6
commit 1b120b0863
2 changed files with 200 additions and 0 deletions

View File

@ -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) {
var transitions = [];
if (states.hasOwnProperty(sourceState)) {
@ -134,5 +146,14 @@
}
return transitions;
};
/**
* @description Get a list of known states.
*
* @return {string[]} List of known node states.
*/
this.getKnownStates = function() {
return Object.keys(states);
};
}
}());

View File

@ -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);
});
});
})();