226 lines
9.4 KiB
JavaScript
226 lines
9.4 KiB
JavaScript
// Copyright 2015, EMC, Inc.
|
|
|
|
var should = require('should');
|
|
var sinon = require('sinon');
|
|
var monorail = require('./../../lib/api/monorail/monorail');
|
|
var ironic = require('./../../lib/api/openstack/ironic');
|
|
var keystone = require('./../../lib/api/openstack/keystone');
|
|
var Promise = require('bluebird');
|
|
var client = require('./../../lib/api/client');
|
|
Promise.promisifyAll(client);
|
|
var _ = require('underscore');
|
|
var helper = require('./../helper');
|
|
//lib to be tested
|
|
var Poller;
|
|
|
|
describe('*****Shovel poller Class****', function () {
|
|
|
|
var rackhdNode =[ { workflows: [], autoDiscover: false, identifiers: ["2c:60:0c:83:f5:d1"], name: "2c:60:0c:83:f5:d1", sku: null, type: "compute", id: "5668b6ad8bee16a10989e4e5" }];
|
|
var identifier = '9a761508-4eee-4065-b47b-45c22dff54c2';
|
|
var ironic_node_list = [ { uuid: "9a761508-4eee-4065-b47b-45c22dff54c2", extra: { name: "D51B-2U (dual 10G LoM)", eventre: "", nodeid: "564cefa014ee77be18e48efd",
|
|
timer: { start: "2015-11-30T21:14:11.753Z", finish: "2015-11-30T21:14:11.753Z", stop: false, isDone: true, timeInterval: 500 }, eventcnt: 0}}];
|
|
var nodePollers = [{ config: { command: "sel" }, id: "564dd86285fb1e7c72721543" }];
|
|
var _sel = { sel:[ { logId: "1", date: "12/03/2015", time: "08:54:11", sensorType: "Memory", sensorNumber: "#0x53", event: "Correctable ECC", value: "Asserted"} ] };
|
|
var keyToken = { access:{ token:{id:'123456'} } };
|
|
var selEvent = { message: "There is no cache record for the poller with ID 564cf02a4978dadc187976f5.Perhaps it has not been run yet?" };
|
|
var extraPatch = {extra: {name: "QuantaPlex T41S-2U", eventre: "Correctable ECC",nodeid: "565f3f3b4c95bce26f35c6a0",
|
|
timer: {timeInterval: 15000, start: "2015-12-03T17:38:20.569Z",finish: "2015-12-03T17:38:20.604Z",stop: false,isDone: true} } };
|
|
var patchedData = [{ 'path': '/extra', 'value': extraPatch.extra, 'op': 'replace' }];
|
|
var pollerInstance;
|
|
|
|
before('mask logger', function () {
|
|
helper.maskLogger();
|
|
Poller = require('./../../lib/services/poller');
|
|
});
|
|
after('restore logger', function () {
|
|
helper.restoreLogger();
|
|
});
|
|
describe('Poller unit tests', function () {
|
|
before('start Poller service', function () {
|
|
pollerInstance = new Poller(5000);//timeInterval to 5s
|
|
});
|
|
|
|
beforeEach('set up mocks', function () {
|
|
sinon.stub(monorail, 'request_poller_get').returns(Promise.resolve(JSON.stringify(nodePollers)));
|
|
sinon.stub(monorail, 'request_poller_data_get').returns(Promise.resolve(JSON.stringify(_sel)));
|
|
sinon.stub(ironic, 'patch_node').returns(Promise.resolve(JSON.stringify(extraPatch)));
|
|
sinon.stub(keystone, 'authenticatePassword').returns(Promise.resolve(JSON.stringify(keyToken)));
|
|
sinon.stub(ironic, 'get_node_list').returns(Promise.resolve(JSON.stringify(ironic_node_list)));
|
|
sinon.stub(ironic, 'get_node').returns(Promise.resolve(JSON.stringify(ironic_node_list[0])));
|
|
});
|
|
|
|
afterEach('teardown mocks', function () {
|
|
monorail['request_poller_get'].restore();
|
|
monorail['request_poller_data_get'].restore();
|
|
ironic['patch_node'].restore();
|
|
keystone['authenticatePassword'].restore();
|
|
ironic['get_node_list'].restore();
|
|
ironic['get_node'].restore();
|
|
|
|
});
|
|
|
|
it('Poller.prototype.searchIronic have property name, timer', function (done) {
|
|
return pollerInstance.searchIronic(ironic_node_list[0]).
|
|
then(function (result) {
|
|
result.should.have.property('name');
|
|
result.should.have.property('timer');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('start server should call get nodes once', function (done) {
|
|
pollerInstance.startServer(0);
|
|
pollerInstance.stopServer();
|
|
var callback = sinon.spy();
|
|
pollerInstance.getNodes(callback);
|
|
callback.should.be.calledOnce;
|
|
done();
|
|
});
|
|
|
|
it('start server should call runPoller once', function (done) {
|
|
pollerInstance.startServer(0);
|
|
pollerInstance.stopServer();
|
|
var callback = sinon.spy();
|
|
pollerInstance.runPoller(ironic_node_list, callback);
|
|
callback.should.be.calledOnce;
|
|
done();
|
|
|
|
});
|
|
|
|
it('start server should call searchIronic once', function (done) {
|
|
pollerInstance.startServer(0);
|
|
pollerInstance.stopServer();
|
|
var callback = sinon.spy();
|
|
pollerInstance.searchIronic(ironic_node_list[0], callback);
|
|
callback.should.be.calledOnce;
|
|
done();
|
|
|
|
});
|
|
|
|
it('pollerInstance.getSeldata() have property sensorNumber, event', function (done) {
|
|
return pollerInstance.getSeldata(identifier)
|
|
.then(function (data) {
|
|
var result = JSON.parse(data);
|
|
result.should.have.property('sel');
|
|
_.each(result[0], function (item) {
|
|
item.should.have.property('sensorNumber');
|
|
item.should.have.property('event');
|
|
});
|
|
done();
|
|
})
|
|
.catch(function (err) {
|
|
throw (err);
|
|
});
|
|
});
|
|
|
|
it('Poller.prototype.updateInfo have property path, value', function (done) {
|
|
return pollerInstance.updateInfo(identifier, extraPatch).
|
|
then(function (data) {
|
|
var result = data;
|
|
_.each(result, function (item) {
|
|
item.should.have.property('path');
|
|
item.should.have.property('value');
|
|
});
|
|
done();
|
|
})
|
|
.catch(function (err) {
|
|
throw err;
|
|
});
|
|
});
|
|
|
|
it('Poller.prototype.patchData should have property nodeid, timer', function (done) {
|
|
return Poller.prototype.patchData('uuid', JSON.stringify(patchedData)).
|
|
then(function (data) {
|
|
data.should.have.property('nodeid');
|
|
data.should.have.property('timer');
|
|
done();
|
|
})
|
|
.catch(function (err) {
|
|
throw (err);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Poller.prototype.getNodes should have property uuid, extra', function (done) {
|
|
return pollerInstance.getNodes().
|
|
then(function (result) {
|
|
_.each(result, function (item) {
|
|
item.should.have.property('uuid');
|
|
item.should.have.property('extra');
|
|
});
|
|
done();
|
|
})
|
|
.catch(function (err) {
|
|
throw (err);
|
|
});
|
|
});
|
|
|
|
it('Poller.prototype.getToken should return token 123456', function (done) {
|
|
return pollerInstance.getToken().
|
|
then(function (token) {
|
|
token.should.be.equal('123456');
|
|
done();
|
|
})
|
|
.catch(function (err) {
|
|
throw err;
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
describe('client get/post returns error', function () {
|
|
before('set up mocks', function () {
|
|
//set client to return an error
|
|
pollerInstance = new Poller(5000);//timeInterval to 5s
|
|
var output = ({ error: 'error_message' });
|
|
sinon.stub(client, 'GetAsync').returns(Promise.reject(output));
|
|
sinon.stub(client, 'PostAsync').returns(Promise.reject(output));
|
|
sinon.stub(client, 'PatchAsync').returns(Promise.reject(output));
|
|
sinon.stub(client, 'PutAsync').returns(Promise.reject(output));
|
|
sinon.stub(client, 'DeleteAsync').returns(Promise.reject(output));
|
|
});
|
|
after('teardown mocks', function () {
|
|
client['GetAsync'].restore();
|
|
client['PostAsync'].restore();
|
|
client['PatchAsync'].restore();
|
|
client['PutAsync'].restore();
|
|
client['DeleteAsync'].restore();
|
|
});
|
|
it('poller.get_token return null', function (done) {
|
|
return pollerInstance.getToken('123')
|
|
.then(function (result) {
|
|
(result === null).should.be.exactly(true);
|
|
done();
|
|
});
|
|
});
|
|
it('poller.getSeldata return null', function (done) {
|
|
return pollerInstance.getSeldata('123')
|
|
.then(function (result) {
|
|
(result === null).should.be.exactly(true);
|
|
done();
|
|
});
|
|
});
|
|
it('poller.updateInfo return json obj with property : path', function (done) {
|
|
return pollerInstance.updateInfo(identifier, extraPatch)
|
|
.then(function (result) {
|
|
result[0].should.have.property('path', '/extra');
|
|
done();
|
|
});
|
|
});
|
|
it('poller.patchData return null', function (done) {
|
|
return pollerInstance.patchData(identifier, extraPatch)
|
|
.then(function (result) {
|
|
(result === null).should.be.exactly(true);
|
|
done();
|
|
});
|
|
});
|
|
it('poller.getNodes return null', function (done) {
|
|
return pollerInstance.getNodes()
|
|
.then(function (result) {
|
|
(result === null).should.be.exactly(true);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|