blob: 5f4997d1ba5a9e96eec87df1225ff2209236bf47 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
var App = require('app');
require('models/host_component');
describe('App.HostComponent', function() {
App.store.safeLoad(App.HostComponent, {
id: 'COMP_host',
component_name: 'COMP1'
});
var hc = App.HostComponent.find('COMP_host');
describe('#getStatusesList', function() {
it('allowed statuses', function() {
var statuses = ["STARTED","STARTING","INSTALLED","STOPPING","INSTALL_FAILED","INSTALLING","UPGRADE_FAILED","UNKNOWN","DISABLED","INIT"];
expect(App.HostComponentStatus.getStatusesList()).to.include.members(statuses);
expect(statuses).to.include.members(App.HostComponentStatus.getStatusesList());
});
});
describe('#isClient', function() {
beforeEach(function () {
sinon.stub(App.get('components.clients'), 'contains', Em.K);
hc.propertyDidChange('isClient');
hc.get('isClient');
});
afterEach(function () {
App.get('components.clients').contains.restore();
});
it('components.clients is called with correct data', function() {
expect(App.get('components.clients').contains.calledWith('COMP1')).to.be.true;
});
});
describe('#isMaster', function() {
beforeEach(function () {
sinon.stub(App.get('components.masters'), 'contains', Em.K);
hc.propertyDidChange('isMaster');
hc.get('isMaster');
});
afterEach(function () {
App.get('components.masters').contains.restore();
});
it('components.masters is called with correct data', function() {
expect(App.get('components.masters').contains.calledWith('COMP1')).to.be.true;
});
});
describe('#isSlave', function() {
beforeEach(function () {
sinon.stub(App.get('components.slaves'), 'contains', Em.K);
hc.propertyDidChange('isSlave');
hc.get('isSlave');
});
afterEach(function () {
App.get('components.slaves').contains.restore();
});
it('components.slaves is called with correct data', function() {
expect(App.get('components.slaves').contains.calledWith('COMP1')).to.be.true;
});
});
describe('#isDeletable', function() {
beforeEach(function () {
sinon.stub(App.get('components.deletable'), 'contains', Em.K);
hc.propertyDidChange('isDeletable');
hc.get('isDeletable');
});
afterEach(function () {
App.get('components.deletable').contains.restore();
});
it('components.deletable is called with correct data', function() {
expect(App.get('components.deletable').contains.calledWith('COMP1')).to.be.true;
});
});
App.TestAliases.testAsComputedIfThenElse(hc, 'passiveTooltip', 'isActive', '', Em.I18n.t('hosts.component.passive.mode'));
App.TestAliases.testAsComputedExistsIn(hc, 'isRunning', 'workStatus', ['STARTED', 'STARTING']);
describe('#isDecommissioning', function() {
var mock = [];
beforeEach(function () {
sinon.stub(App.HDFSService, 'find', function () {
return mock;
})
});
afterEach(function () {
App.HDFSService.find.restore();
});
it('component name is not DATANODE', function() {
hc.propertyDidChange('isDecommissioning');
expect(hc.get('isDecommissioning')).to.be.false;
});
it('component name is DATANODE but no HDFS service', function() {
hc.set('componentName', 'DATANODE');
hc.propertyDidChange('isDecommissioning');
expect(hc.get('isDecommissioning')).to.be.false;
});
it('HDFS has no decommission DataNodes', function() {
hc.set('componentName', 'DATANODE');
mock.push(Em.Object.create({
decommissionDataNodes: []
}));
hc.propertyDidChange('isDecommissioning');
expect(hc.get('isDecommissioning')).to.be.false;
});
it('HDFS has decommission DataNodes', function() {
hc.set('componentName', 'DATANODE');
hc.set('hostName', 'host1');
mock.clear();
mock.push(Em.Object.create({
decommissionDataNodes: [{hostName: 'host1'}]
}));
hc.propertyDidChange('isDecommissioning');
expect(hc.get('isDecommissioning')).to.be.true;
});
});
App.TestAliases.testAsComputedEqual(hc, 'isActive', 'passiveState', 'OFF');
App.TestAliases.testAsComputedIfThenElse(hc, 'passiveTooltip', 'isActive', '', Em.I18n.t('hosts.component.passive.mode'));
describe('#isActive', function() {
it('passiveState is ON', function() {
hc.set('passiveState', "ON");
hc.propertyDidChange('isActive');
expect(hc.get('isActive')).to.be.false;
});
it('passiveState is OFF', function() {
hc.set('passiveState', "OFF");
hc.propertyDidChange('isActive');
expect(hc.get('isActive')).to.be.true;
});
});
describe('#statusClass', function() {
it('isActive is false', function() {
hc.reopen({
isActive: false
});
hc.propertyDidChange('statusClass');
expect(hc.get('statusClass')).to.equal('icon-medkit');
});
it('isActive is true', function() {
var status = 'INSTALLED';
hc.set('isActive', true);
hc.set('workStatus', status);
hc.propertyDidChange('statusClass');
expect(hc.get('statusClass')).to.equal(status);
});
});
App.TestAliases.testAsComputedGetByKey(hc, 'statusIconClass', 'statusIconClassMap', 'statusClass', {defaultValue: '', map: {
STARTED: App.healthIconClassGreen,
STARTING: App.healthIconClassGreen,
INSTALLED: App.healthIconClassRed,
STOPPING: App.healthIconClassRed,
UNKNOWN: App.healthIconClassYellow
}});
describe('#componentTextStatus', function () {
before(function () {
sinon.stub(App.HostComponentStatus, 'getTextStatus', Em.K);
});
after(function () {
App.HostComponentStatus.getTextStatus.restore();
});
it('componentTextStatus should be changed', function () {
var status = 'INSTALLED';
hc.set('workStatus', status);
hc.propertyDidChange('componentTextStatus');
hc.get('componentTextStatus');
expect(App.HostComponentStatus.getTextStatus.calledWith(status)).to.be.true;
});
});
describe("#getCount", function () {
var testCases = [
{
t: 'unknown component',
data: {
componentName: 'CC',
type: 'totalCount',
stackComponent: Em.Object.create()
},
result: 0
},
{
t: 'master component',
data: {
componentName: 'C1',
type: 'totalCount',
stackComponent: Em.Object.create({componentCategory: 'MASTER'})
},
result: 3
},
{
t: 'slave component',
data: {
componentName: 'C1',
type: 'installedCount',
stackComponent: Em.Object.create({componentCategory: 'SLAVE'})
},
result: 4
},
{
t: 'client component',
data: {
componentName: 'C1',
type: 'startedCount',
stackComponent: Em.Object.create({componentCategory: 'CLIENT'})
},
result: 5
},
{
t: 'client component, unknown type',
data: {
componentName: 'C1',
type: 'unknownCount',
stackComponent: Em.Object.create({componentCategory: 'CLIENT'})
},
result: 0
}
];
beforeEach(function () {
this.mock = sinon.stub(App.StackServiceComponent, 'find');
sinon.stub(App.MasterComponent, 'find').returns(Em.Object.create({totalCount: 3}));
sinon.stub(App.SlaveComponent, 'find').returns(Em.Object.create({installedCount: 4}));
sinon.stub(App.ClientComponent, 'find').returns(Em.Object.create({startedCount: 5, unknownCount: null}));
});
afterEach(function () {
this.mock.restore();
App.MasterComponent.find.restore();
App.SlaveComponent.find.restore();
App.ClientComponent.find.restore();
});
testCases.forEach(function (test) {
it(test.t, function () {
this.mock.returns(test.data.stackComponent);
expect(App.HostComponent.getCount(test.data.componentName, test.data.type)).to.equal(test.result);
});
});
});
App.TestAliases.testAsComputedExistsIn(hc, 'isNotInstalled', 'workStatus', ['INIT', 'INSTALL_FAILED']);
describe("#getDisplayName",function(){
var testCases = [
{
testName: 'for displayName of length < 19',
displayName: 'abc',
result: 'abc'
},
{
testName:'for displayName of length = 19',
displayName: '1234567890123456789',
result: '1234567890123456789'
},
{
testName:'for displayName of length > 19',
displayName: '12345678901234567890',
result: '1234567890123456...'
}
];
testCases.forEach(function(test){
it(test.testName, function(){
hc.set('displayName',test.displayName);
expect(hc.get('getDisplayName')).to.equal(test.result);
});
});
});
describe("#getDisplayNameAdvanced",function(){
var testCases = [
{
testName: 'for displayNameAdvanced of length < 19',
displayNameAdvanced: 'abc',
result: 'abc'
},
{
testName:'for displayNameAdvanced of length = 19',
displayNameAdvanced: '1234567890123456789',
result: '1234567890123456789'
},
{
testName:'for displayNameAdvanced of length > 19',
displayNameAdvanced: '12345678901234567890',
result: '1234567890123456...'
}
];
testCases.forEach(function(test){
it(test.testName, function(){
hc.set('displayNameAdvanced',test.displayNameAdvanced);
expect(hc.get('getDisplayNameAdvanced')).to.equal(test.result);
});
});
});
App.TestAliases.testAsComputedTruncate(hc, 'serviceDisplayName', 'service.displayName', 14, 11);
App.TestAliases.testAsComputedTruncate(hc, 'getDisplayName', 'displayName', 19, 16);
App.TestAliases.testAsComputedTruncate(hc, 'getDisplayNameAdvanced', 'displayNameAdvanced', 19, 16);
describe("#serviceDisplayName",function(){
var testCases = [
{
testName: 'for service.displayName of length < 14',
serviceDisplayName: 'abc',
result: 'abc'
},
{
testName:'for service.displayName of length = 14',
serviceDisplayName: '12345678901234',
result: '12345678901234'
},
{
testName:'for service.displayName of length > 14',
serviceDisplayName: '123456789012345',
result: '12345678901...'
}
];
testCases.forEach(function(test){
it(test.testName, function(){
hc.set('service',Em.Object.create({displayName:test.serviceDisplayName}));
expect(hc.get('serviceDisplayName')).to.equal(test.result);
});
});
});
});