blob: 20efb8e8dabcf4a56f92dedd4ee1876120afb3ff [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('mixins/wizard/assign_master_components');
var c;
describe('App.AssignMasterComponents', function () {
var baseObject = Em.Object.extend(App.AssignMasterComponents);
var data;
beforeEach(function () {
c = baseObject.create();
c.set('content', {});
var hosts = [];
for(var i = 1; i <= 4; ++i) {
hosts.push(App.Host.createRecord({
'host_name': 'h' + i
}));
}
c.set('hosts', hosts);
data = {
"resources": [
{
"recommendations": {
"blueprint": {
"host_groups": [
{
"name": "host-group-1",
"components": [{"name": "c1"}, {"name": "c3"}, {"name": "c2"}]
},
{
"name": "host-group-2",
"components": [{"name": "c1"}, {"name": "c2"}]
},
{
"name": "host-group-3",
"components": [{"name": "c1"}]
}
]
},
"blueprint_cluster_binding": {
"host_groups": [
{
"name": "host-group-1",
"hosts": [{"fqdn": "h1"}]
},
{
"name": "host-group-3",
"hosts": [{"fqdn": "h3"}]
},
{
"name": "host-group-2",
"hosts": [{"fqdn": "h2"}, {"fqdn": "h4"}]
}
]
}
}
}
]
};
});
describe('#loadRecommendationsSuccessCallback', function () {
it('should set recommendations', function() {
c.loadRecommendationsSuccessCallback(data);
expect(c.get('recommendations')).to.eq(data.resources[0].recommendations);
});
it('should set recommendedHostsForComponents and content.recommendations for wizard page', function() {
c.set('content.controllerName','installerController');
c.loadRecommendationsSuccessCallback(data);
var expected = {
"c1": ["h1", "h2", "h4", "h3"],
"c3": ["h1"],
"c2": ["h1", "h2", "h4"]
};
expect(JSON.stringify(c.get('content.recommendedHostsForComponents'))).to.equal(JSON.stringify(expected));
expect(c.get('content.recommendations')).to.eq(data.resources[0].recommendations);
});
});
describe('#getHostForMaster', function () {
var allMasters;
beforeEach(function () {
allMasters = [
{
"component_name": "c1",
"selectedHost": "h1"
},
{
"component_name": "c1",
"selectedHost": "h2"
},
{
"component_name": "c1",
"selectedHost": "h3"
},
{
"component_name": "c1",
"selectedHost": "h4"
},
{
"component_name": "c2",
"selectedHost": "h1"
},
{
"component_name": "c5",
"selectedHost": "h1"
}
];
});
it('should return the recommended host', function() {
c.loadRecommendationsSuccessCallback(data);
expect(c.getHostForMaster('c2', allMasters)).to.eq('h2');
});
it('should return the first available host from the list of existing hosts', function() {
c.loadRecommendationsSuccessCallback(data);
expect(c.getHostForMaster('c6', allMasters)).to.eq('h1');
});
it('should return the next available host from the list of existing hosts', function() {
c.loadRecommendationsSuccessCallback(data);
expect(c.getHostForMaster('c5', allMasters)).to.eq('h2');
});
it('should return false if the component is already on all hosts', function() {
c.loadRecommendationsSuccessCallback(data);
expect(c.getHostForMaster('c1', allMasters)).to.eq(false);
});
});
describe('#sortComponentsByServiceName', function () {
var components = [{
"component_name": "METRICS_COLLECTOR",
"serviceId": "AMBARI_METRICS"
}, {
"component_name": "ZOOKEEPER_SERVER",
"serviceId": "ZOOKEEPER"
}, {
"component_name": "NAMENODE",
"serviceId": "HDFS"
}, {
"component_name": "DRPC_SERVER",
"serviceId": "STORM"
}, {
"component_name": "APP_TIMELINE_SERVER",
"serviceId": "YARN"
}, {
"component_name": "RESOURCEMANAGER",
"serviceId": "YARN"
}, {
"component_name": "SECONDARY_NAMENODE",
"serviceId": "HDFS"
}, {
"component_name": "ZOOKEEPER_SERVER",
"serviceId": "ZOOKEEPER"
}, {
"component_name": "HISTORYSERVER",
"serviceId": "MAPREDUCE2"
}, {
"component_name": "HAWQSTANDBY",
"serviceId": "HAWQ"
}, {
"component_name": "NIMBUS",
"serviceId": "STORM"
}, {
"component_name": "HAWQMASTER",
"serviceId": "HAWQ"
}, {
"component_name": "STORM_UI_SERVER",
"serviceId": "STORM"
}];
it('should place ZOOKEEPER_SERVER one after another', function () {
var sorted = c.sortComponentsByServiceName(components);
expect(sorted.mapProperty('component_name').join('|').contains('ZOOKEEPER_SERVER|ZOOKEEPER_SERVER')).to.be.true;
});
it('should place HAWQMASTER just before HAWQSTANDBY', function () {
var sorted = c.sortComponentsByServiceName(components);
expect(sorted.mapProperty('component_name').join('|').contains('HAWQMASTER|HAWQSTANDBY')).to.be.true;
});
});
App.TestAliases.testAsComputedOr(baseObject.create(),
'nextButtonDisabled', ['App.router.btnClickInProgress', 'submitDisabled', 'validationInProgress', '!isLoaded']);
});