blob: ceed065612c17367b22a7a74b9b49fbb60862b0e [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/configs/objects/service_config_property');
require('utils/configs/config_initializer');
var serviceConfigProperty;
describe('App.ConfigInitializer', function () {
beforeEach(function () {
serviceConfigProperty = App.ServiceConfigProperty.create();
});
describe('#setRecommendedValue', function () {
it('should change the recommended value', function () {
serviceConfigProperty.set('recommendedValue', 'value0');
App.ConfigInitializer.setRecommendedValue(serviceConfigProperty, /\d/, '1');
expect(serviceConfigProperty.get('recommendedValue')).to.equal('value1');
});
});
describe('#initialValue', function () {
var cases = {
'kafka.ganglia.metrics.host': [
{
message: 'kafka.ganglia.metrics.host property should have the value of ganglia hostname when ganglia is selected',
localDB: {
masterComponentHosts: [
{
component: 'GANGLIA_SERVER',
hostName: 'c6401'
}
]
},
expected: 'c6401'
},
{
message: 'kafka.ganglia.metrics.host property should have the value "localhost" when ganglia is not selected',
localDB: {
masterComponentHosts: [
{
component: 'NAMENODE',
hostName: 'c6401'
}
]
},
expected: 'localhost'
}
],
'hive_database': [
{
alwaysEnableManagedMySQLForHive: true,
currentStateName: '',
isManagedMySQLForHiveEnabled: false,
receivedValue: 'New MySQL Database',
value: 'New MySQL Database',
options: [
{
displayName: 'New MySQL Database'
}
],
hidden: false
},
{
alwaysEnableManagedMySQLForHive: false,
currentStateName: 'configs',
isManagedMySQLForHiveEnabled: false,
receivedValue: 'New MySQL Database',
value: 'New MySQL Database',
options: [
{
displayName: 'New MySQL Database'
}
],
hidden: false
},
{
alwaysEnableManagedMySQLForHive: false,
currentStateName: '',
isManagedMySQLForHiveEnabled: true,
receivedValue: 'New MySQL Database',
value: 'New MySQL Database',
options: [
{
displayName: 'New MySQL Database'
}
],
hidden: false
},
{
alwaysEnableManagedMySQLForHive: false,
currentStateName: '',
isManagedMySQLForHiveEnabled: false,
receivedValue: 'New MySQL Database',
value: 'Existing MySQL Database',
options: [
{
displayName: 'New MySQL Database'
}
],
hidden: true
},
{
alwaysEnableManagedMySQLForHive: false,
currentStateName: '',
isManagedMySQLForHiveEnabled: false,
receivedValue: 'New PostgreSQL Database',
value: 'New PostgreSQL Database',
options: [
{
displayName: 'New MySQL Database'
}
],
hidden: true
}
],
'hbase.zookeeper.quorum': [
{
filename: 'hbase-site.xml',
value: 'host0,host1',
recommendedValue: 'host0,host1',
title: 'should set ZooKeeper Server hostnames'
},
{
filename: 'ams-hbase-site.xml',
value: 'localhost',
recommendedValue: null,
title: 'should ignore ZooKeeper Server hostnames'
}
],
'hivemetastore_host': {
localDB: {
masterComponentHosts: [
{
component: 'HIVE_METASTORE',
hostName: 'h0'
},
{
component: 'HIVE_METASTORE',
hostName: 'h1'
}
]
},
value: ['h0', 'h1'],
title: 'array that contains names of hosts with Hive Metastore'
},
'hive_master_hosts': {
localDB: {
masterComponentHosts: [
{
component: 'HIVE_SERVER',
hostName: 'h0'
},
{
component: 'HIVE_METASTORE',
hostName: 'h0'
},
{
component: 'HIVE_METASTORE',
hostName: 'h1'
},
{
component: 'WEBHCAT_SERVER',
hostName: 'h2'
}
]
},
value: 'h0,h1',
title: 'comma separated list of hosts with Hive Server and Metastore'
},
'hive.metastore.uris': {
localDB: {
masterComponentHosts: [
{
component: 'HIVE_METASTORE',
hostName: 'h0'
},
{
component: 'HIVE_METASTORE',
hostName: 'h1'
}
]
},
dependencies: {
'hive.metastore.uris': 'thrift://localhost:9083'
},
filename: 'hive-site.xml',
recommendedValue: 'thrift://localhost:9083',
value: 'thrift://h0:9083,thrift://h1:9083',
title: 'comma separated list of Metastore hosts with thrift prefix and port'
},
'templeton.hive.properties': {
localDB: {
masterComponentHosts: [
{
component: 'HIVE_METASTORE',
hostName: 'h0'
},
{
component: 'HIVE_METASTORE',
hostName: 'h1'
}
]
},
dependencies: {
'hive.metastore.uris': 'thrift://localhost:9083'
},
recommendedValue: 'hive.metastore.local=false,hive.metastore.uris=thrift://localhost:9083,hive.metastore.sasl.enabled=false',
value: 'hive.metastore.local=false,hive.metastore.uris=thrift://h0:9083\\,thrift://h1:9083,hive.metastore.sasl.enabled=false,hive.metastore.execute.setugi=true',
title: 'should add relevant hive.metastore.uris value'
},
'yarn.resourcemanager.zk-address': {
localDB: {
masterComponentHosts: [
{
component: 'ZOOKEEPER_SERVER',
hostName: 'h0'
},
{
component: 'ZOOKEEPER_SERVER',
hostName: 'h1'
}
]
},
dependencies: {
clientPort: '2182'
},
recommendedValue: 'localhost:2181',
value: 'h0:2182,h1:2182',
title: 'should add ZK host and port dynamically'
},
'knox_gateway_host': {
localDB: {
masterComponentHosts: [
{
component: 'KNOX_GATEWAY',
hostName: 'h0'
},
{
component: 'KNOX_GATEWAY',
hostName: 'h1'
}
]
},
value: ['h0', 'h1'],
title: 'array that contains names of hosts with Knox Gateway'
},
'atlas.rest.address': [
{
localDB: {
masterComponentHosts: [
{
component: 'ZOOKEEPER_SERVER',
hostName: 'h0'
},
{
component: 'ZOOKEEPER_SERVER',
hostName: 'h1'
}
]
},
dependencies: {
'atlas.enableTLS': false,
'atlas.server.http.port': 21000,
'atlas.server.https.port': 21443
},
value: 'http://h0:21000,http://h1:21000',
title: 'TLS is not enabled'
},
{
localDB: {
masterComponentHosts: [
{
component: 'ZOOKEEPER_SERVER',
hostName: 'h0'
},
{
component: 'ZOOKEEPER_SERVER',
hostName: 'h1'
}
]
},
dependencies: {
'atlas.enableTLS': true,
'atlas.server.http.port': 21000,
'atlas.server.https.port': 21443
},
value: 'https://h0:21443,https://h1:21443',
title: 'TLS is enabled'
}
]
};
cases['atlas.rest.address'].forEach(function (test) {
it(test.title, function () {
serviceConfigProperty.setProperties({
name: 'atlas.rest.address',
value: ''
});
App.ConfigInitializer.initialValue(serviceConfigProperty, test.localDB, test.dependencies);
expect(serviceConfigProperty.get('value')).to.equal(test.value);
expect(serviceConfigProperty.get('recommendedValue')).to.equal(test.value);
});
});
cases['kafka.ganglia.metrics.host'].forEach(function (item) {
it(item.message, function () {
serviceConfigProperty.setProperties({
name: 'kafka.ganglia.metrics.host',
value: 'localhost'
});
App.ConfigInitializer.initialValue(serviceConfigProperty, item.localDB, []);
expect(serviceConfigProperty.get('value')).to.equal(item.expected);
});
});
describe('hive_database', function () {
beforeEach(function () {
this.stub = sinon.stub(App, 'get');
});
afterEach(function () {
App.get.restore();
});
cases.hive_database.forEach(function (item) {
var title = 'hive_database value should be set to {0}';
describe(title.format(item.value), function () {
beforeEach(function () {
this.stub
.withArgs('supports.alwaysEnableManagedMySQLForHive').returns(item.alwaysEnableManagedMySQLForHive)
.withArgs('router.currentState.name').returns(item.currentStateName)
.withArgs('isManagedMySQLForHiveEnabled').returns(item.isManagedMySQLForHiveEnabled);
serviceConfigProperty.setProperties({
name: 'hive_database',
value: item.receivedValue,
options: item.options
});
App.ConfigInitializer.initialValue(serviceConfigProperty, {}, []);
});
it('value is ' + item.value, function () {
expect(serviceConfigProperty.get('value')).to.equal(item.value);
});
it('`New MySQL Database` is ' + (item.hidden ? '' : 'not') + ' hidden', function () {
expect(serviceConfigProperty.get('options').findProperty('displayName', 'New MySQL Database').hidden).to.equal(item.hidden);
});
});
});
});
cases['hbase.zookeeper.quorum'].forEach(function (item) {
it(item.title, function () {
serviceConfigProperty.setProperties({
name: 'hbase.zookeeper.quorum',
value: 'localhost',
'filename': item.filename
});
App.ConfigInitializer.initialValue(serviceConfigProperty, {
masterComponentHosts: {
filterProperty: function () {
return {
mapProperty: function () {
return ['host0', 'host1'];
}
};
}
}
}, []);
expect(serviceConfigProperty.get('value')).to.equal(item.value);
expect(serviceConfigProperty.get('recommendedValue')).to.equal(item.recommendedValue);
});
});
it(cases.hive_master_hosts.title, function () {
serviceConfigProperty.set('name', 'hive_master_hosts');
App.ConfigInitializer.initialValue(serviceConfigProperty, cases.hive_master_hosts.localDB, []);
expect(serviceConfigProperty.get('value')).to.equal(cases.hive_master_hosts.value);
});
it(cases['hive.metastore.uris'].title, function () {
serviceConfigProperty.setProperties({
name: 'hive.metastore.uris',
recommendedValue: cases['hive.metastore.uris'].recommendedValue,
filename: 'hive-site.xml'
});
App.ConfigInitializer.initialValue(serviceConfigProperty, cases['hive.metastore.uris'].localDB, {'hive.metastore.uris': cases['hive.metastore.uris'].recommendedValue});
expect(serviceConfigProperty.get('value')).to.equal(cases['hive.metastore.uris'].value);
expect(serviceConfigProperty.get('recommendedValue')).to.equal(cases['hive.metastore.uris'].value);
});
it(cases['templeton.hive.properties'].title, function () {
serviceConfigProperty.setProperties({
name: 'templeton.hive.properties',
recommendedValue: cases['templeton.hive.properties'].recommendedValue,
value: cases['templeton.hive.properties'].recommendedValue
});
App.ConfigInitializer.initialValue(serviceConfigProperty, cases['templeton.hive.properties'].localDB, {'hive.metastore.uris': cases['templeton.hive.properties'].recommendedValue});
expect(serviceConfigProperty.get('value')).to.equal(cases['templeton.hive.properties'].value);
expect(serviceConfigProperty.get('recommendedValue')).to.equal(cases['templeton.hive.properties'].value);
});
it(cases['yarn.resourcemanager.zk-address'].title, function () {
serviceConfigProperty.setProperties({
name: 'yarn.resourcemanager.zk-address',
recommendedValue: cases['yarn.resourcemanager.zk-address'].recommendedValue
});
App.ConfigInitializer.initialValue(serviceConfigProperty, cases['yarn.resourcemanager.zk-address'].localDB, cases['yarn.resourcemanager.zk-address'].dependencies);
expect(serviceConfigProperty.get('value')).to.equal(cases['yarn.resourcemanager.zk-address'].value);
expect(serviceConfigProperty.get('recommendedValue')).to.equal(cases['yarn.resourcemanager.zk-address'].value);
});
function getLocalDBForSingleComponent(component) {
return {
masterComponentHosts: [
{
component: component,
hostName: 'h1'
},
{
component: 'FAKE_COMPONENT',
hostName: 'FAKE_HOST'
}
]
};
}
function getLocalDBForMultipleComponents(component, count) {
var ret = {
masterComponentHosts: [{
component: 'FAKE_COMPONENT',
hostName: 'FAKE_HOST'
}]
};
for (var i = 1; i <= count; i++) {
ret.masterComponentHosts.push({
component: component,
hostName: 'h' + i
})
}
return ret;
}
Em.A([
{
config: 'dfs.namenode.rpc-address',
localDB: getLocalDBForSingleComponent('NAMENODE'),
rValue: 'c6401.ambari.apache.org:8020',
expectedValue: 'h1:8020'
},
{
config: 'dfs.http.address',
localDB: getLocalDBForSingleComponent('NAMENODE'),
rValue: 'c6401.ambari.apache.org:8020',
expectedValue: 'h1:8020'
},
{
config: 'dfs.namenode.http-address',
localDB: getLocalDBForSingleComponent('NAMENODE'),
rValue: 'c6401.ambari.apache.org:8020',
expectedValue: 'h1:8020'
},
{
config: 'dfs.https.address',
localDB: getLocalDBForSingleComponent('NAMENODE'),
rValue: 'c6401.ambari.apache.org:8020',
expectedValue: 'h1:8020'
},
{
config: 'dfs.namenode.https-address',
localDB: getLocalDBForSingleComponent('NAMENODE'),
rValue: 'c6401.ambari.apache.org:8020',
expectedValue: 'h1:8020'
},
{
config: 'fs.default.name',
localDB: getLocalDBForSingleComponent('NAMENODE'),
rValue: 'hdfs://c6401.ambari.apache.org:8020',
expectedValue: 'hdfs://h1:8020'
},
{
config: 'fs.defaultFS',
localDB: getLocalDBForSingleComponent('NAMENODE'),
rValue: 'hdfs://c6401.ambari.apache.org:8020',
expectedValue: 'hdfs://h1:8020'
},
{
config: 'hbase.rootdir',
localDB: getLocalDBForSingleComponent('NAMENODE'),
rValue: 'hdfs://c6401.ambari.apache.org:8020',
expectedValue: 'hdfs://h1:8020'
},
{
config: 'instance.volumes',
localDB: getLocalDBForSingleComponent('NAMENODE'),
rValue: 'hdfs://c6401.ambari.apache.org:8020',
expectedValue: 'hdfs://h1:8020'
},
{
config: 'dfs.secondary.http.address',
localDB: getLocalDBForSingleComponent('SECONDARY_NAMENODE'),
rValue: 'c6401.ambari.apache.org:50090',
expectedValue: 'h1:50090'
},
{
config: 'dfs.namenode.secondary.http-address',
localDB: getLocalDBForSingleComponent('SECONDARY_NAMENODE'),
rValue: 'c6401.ambari.apache.org:50090',
expectedValue: 'h1:50090'
},
{
config: 'yarn.log.server.url',
localDB: getLocalDBForSingleComponent('HISTORYSERVER'),
rValue: 'http://localhost:19888/jobhistory/logs',
expectedValue: 'http://h1:19888/jobhistory/logs'
},
{
config: 'mapreduce.jobhistory.webapp.address',
localDB: getLocalDBForSingleComponent('HISTORYSERVER'),
rValue: 'c6407.ambari.apache.org:19888',
expectedValue: 'h1:19888'
},
{
config: 'mapreduce.jobhistory.address',
localDB: getLocalDBForSingleComponent('HISTORYSERVER'),
rValue: 'c6407.ambari.apache.org:19888',
expectedValue: 'h1:19888'
},
{
config: 'yarn.resourcemanager.hostname',
localDB: getLocalDBForSingleComponent('RESOURCEMANAGER'),
rValue: 'c6407.ambari.apache.org',
expectedValue: 'h1'
},
{
config: 'yarn.resourcemanager.resource-tracker.address',
localDB: getLocalDBForSingleComponent('RESOURCEMANAGER'),
rValue: 'c6407.ambari.apache.org:123',
expectedValue: 'h1:123'
},
{
config: 'yarn.resourcemanager.webapp.https.address',
localDB: getLocalDBForSingleComponent('RESOURCEMANAGER'),
rValue: 'c6407.ambari.apache.org:123',
expectedValue: 'h1:123'
},
{
config: 'yarn.resourcemanager.webapp.address',
localDB: getLocalDBForSingleComponent('RESOURCEMANAGER'),
rValue: 'c6407.ambari.apache.org:123',
expectedValue: 'h1:123'
},
{
config: 'yarn.resourcemanager.scheduler.address',
localDB: getLocalDBForSingleComponent('RESOURCEMANAGER'),
rValue: 'c6407.ambari.apache.org:123',
expectedValue: 'h1:123'
},
{
config: 'yarn.resourcemanager.address',
localDB: getLocalDBForSingleComponent('RESOURCEMANAGER'),
rValue: 'c6407.ambari.apache.org:123',
expectedValue: 'h1:123'
},
{
config: 'yarn.resourcemanager.admin.address',
localDB: getLocalDBForSingleComponent('RESOURCEMANAGER'),
rValue: 'c6407.ambari.apache.org:123',
expectedValue: 'h1:123'
},
{
config: 'yarn.timeline-service.webapp.address',
localDB: getLocalDBForSingleComponent('APP_TIMELINE_SERVER'),
rValue: 'c6407.ambari.apache.org:432',
expectedValue: 'h1:432'
},
{
config: 'yarn.timeline-service.address',
localDB: getLocalDBForSingleComponent('APP_TIMELINE_SERVER'),
rValue: 'c6407.ambari.apache.org:432',
expectedValue: 'h1:432'
},
{
config: 'yarn.timeline-service.webapp.https.address',
localDB: getLocalDBForSingleComponent('APP_TIMELINE_SERVER'),
rValue: 'c6407.ambari.apache.org:432',
expectedValue: 'h1:432'
},
{
config: 'mapred.job.tracker',
localDB: getLocalDBForSingleComponent('JOBTRACKER'),
rValue: 'c6407.ambari.apache.org:111',
expectedValue: 'h1:111'
},
{
config: 'mapred.job.tracker.http.address',
localDB: getLocalDBForSingleComponent('JOBTRACKER'),
rValue: 'c6407.ambari.apache.org:111',
expectedValue: 'h1:111'
},
{
config: 'mapreduce.history.server.http.address',
localDB: getLocalDBForSingleComponent('HISTORYSERVER'),
rValue: 'c6407.ambari.apache.org:555',
expectedValue: 'h1:555'
},
{
config: 'oozie.base.url',
localDB: getLocalDBForSingleComponent('OOZIE_SERVER'),
rValue: 'http://localhost:11000/oozie',
expectedValue: 'http://h1:11000/oozie'
},
{
config: 'nimbus.host',
localDB: getLocalDBForSingleComponent('NIMBUS'),
rValue: 'localhost',
expectedValue: 'h1'
},
{
config: '*.broker.url',
localDB: getLocalDBForSingleComponent('FALCON_SERVER'),
rValue: 'tcp://localhost:61616',
expectedValue: 'tcp://h1:61616'
},
{
config: 'storm.zookeeper.servers',
localDB: getLocalDBForMultipleComponents('ZOOKEEPER_SERVER', 3),
rValue: "['c6401.ambari.apache.org','c6402.ambari.apache.org']",
expectedValue: ['h1', 'h2', 'h3']
},
{
config: 'nimbus.seeds',
localDB: getLocalDBForMultipleComponents('NIMBUS', 3),
rValue: "['c6401.ambari.apache.org','c6402.ambari.apache.org']",
expectedValue: ['h1', 'h2', 'h3']
},
{
config: 'hawq_master_address_host',
localDB: getLocalDBForSingleComponent('HAWQMASTER'),
rValue: 'localhost',
expectedValue: 'h1'
},
{
config: 'hawq_standby_address_host',
localDB: getLocalDBForSingleComponent('HAWQSTANDBY'),
rValue: 'localhost',
expectedValue: 'h1'
},
{
config: 'hawq_dfs_url',
localDB: getLocalDBForSingleComponent('NAMENODE'),
rValue: 'localhost:8020/hawq_data',
expectedValue: 'h1:8020/hawq_data'
},
{
config: 'hawq_rm_yarn_address',
localDB: getLocalDBForSingleComponent('RESOURCEMANAGER'),
rValue: 'localhost:8032',
expectedValue: 'h1:8032'
},
{
config: 'hawq_rm_yarn_scheduler_address',
localDB: getLocalDBForSingleComponent('RESOURCEMANAGER'),
rValue: 'localhost:8030',
expectedValue: 'h1:8030'
},
{
config: 'hadoop_host',
localDB: getLocalDBForSingleComponent('NAMENODE'),
rValue: 'localhost',
expectedValue: 'h1'
},
{
config: 'hive_master_hosts',
localDB: getLocalDBForMultipleComponents('HIVE_METASTORE', 3),
rValue: '',
expectedValue: 'h1,h2,h3'
},
{
config: 'hive_master_hosts',
localDB: getLocalDBForMultipleComponents('HIVE_SERVER', 3),
rValue: '',
expectedValue: 'h1,h2,h3'
},
{
config: 'zookeeper.connect',
localDB: getLocalDBForMultipleComponents('ZOOKEEPER_SERVER', 3),
rValue: 'localhost:2181',
expectedValue: 'h1:2181,h2:2181,h3:2181'
},
{
config: 'hive.zookeeper.quorum',
localDB: getLocalDBForMultipleComponents('ZOOKEEPER_SERVER', 3),
rValue: 'localhost:2181',
expectedValue: 'h1:2181,h2:2181,h3:2181'
},
{
config: 'templeton.zookeeper.hosts',
localDB: getLocalDBForMultipleComponents('ZOOKEEPER_SERVER', 3),
rValue: 'localhost:2181',
expectedValue: 'h1:2181,h2:2181,h3:2181'
},
{
config: 'hadoop.registry.zk.quorum',
localDB: getLocalDBForMultipleComponents('ZOOKEEPER_SERVER', 3),
rValue: 'localhost:2181',
expectedValue: 'h1:2181,h2:2181,h3:2181'
},
{
config: 'hive.cluster.delegation.token.store.zookeeper.connectString',
localDB: getLocalDBForMultipleComponents('ZOOKEEPER_SERVER', 3),
rValue: 'localhost:2181',
expectedValue: 'h1:2181,h2:2181,h3:2181'
},
{
config: 'instance.zookeeper.host',
localDB: getLocalDBForMultipleComponents('ZOOKEEPER_SERVER', 3),
rValue: 'localhost:2181',
expectedValue: 'h1:2181,h2:2181,h3:2181'
},
{
config: 'templeton.hive.properties',
localDB: getLocalDBForMultipleComponents('HIVE_METASTORE', 2),
rValue: 'hive.metastore.local=false,hive.metastore.uris=thrift://localhost:9933,hive.metastore.sasl.enabled=false',
dependencies: {
'hive.metastore.uris': 'thrift://localhost:9083'
},
expectedValue: 'hive.metastore.local=false,hive.metastore.uris=thrift://h1:9083\\,thrift://h2:9083,hive.metastore.sasl.enabled=false'
},
{
config: 'hbase.zookeeper.quorum',
m: 'hbase.zookeeper.quorum hbase-site.xml',
localDB: getLocalDBForMultipleComponents('ZOOKEEPER_SERVER', 3),
rValue: 'c6401.ambari.apache.org,c6402.ambari.apache.org',
expectedValue: 'h1,h2,h3',
filename: 'hbase-site.xml'
},
{
config: 'hbase.zookeeper.quorum',
m: 'hbase.zookeeper.quorum not-hbase-site.xml',
localDB: getLocalDBForMultipleComponents('ZOOKEEPER_SERVER', 3),
rValue: 'localhost',
expectedValue: '',
expectedRValue: 'localhost',
filename: 'not-hbase-site.xml'
},
{
config: 'yarn.resourcemanager.zk-address',
localDB: getLocalDBForMultipleComponents('ZOOKEEPER_SERVER', 3),
rValue: 'localhost:2181',
dependencies: {
'clientPort': '3333'
},
expectedValue: 'h1:3333,h2:3333,h3:3333'
},
{
config: 'RANGER_HOST',
localDB: getLocalDBForSingleComponent('RANGER_ADMIN'),
rValue: 'locahost',
expectedValue: 'h1'
},
{
config: 'hive.metastore.uris',
filename: 'hive-site.xml',
localDB: getLocalDBForMultipleComponents('HIVE_METASTORE', 2),
dependencies: {
'hive.metastore.uris': 'thrift://localhost:9083'
},
rValue: 'thrift://localhost:9083',
expectedValue: 'thrift://h1:9083,thrift://h2:9083'
}
]).forEach(function (test) {
describe(test.m || test.config, function () {
beforeEach(function () {
serviceConfigProperty.setProperties({
name: test.config,
recommendedValue: test.rValue,
filename: test.filename
});
App.ConfigInitializer.initialValue(serviceConfigProperty, test.localDB, test.dependencies);
});
it('value is ' + test.expectedValue, function () {
expect(serviceConfigProperty.get('value')).to.eql(test.expectedValue);
});
if (Em.isNone(test.expectedRValue)) {
it('recommendedValue is ' + test.expectedValue, function () {
expect(serviceConfigProperty.get('recommendedValue')).to.eql(test.expectedValue);
});
}
else {
it('recommendedValue is ' + test.expectedRValue, function () {
expect(serviceConfigProperty.get('recommendedValue')).to.eql(test.expectedRValue);
});
}
});
});
});
describe('#getHiveMetastoreUris', function () {
var cases = [
{
hosts: [
{
hostName: 'h0',
component: 'HIVE_SERVER'
},
{
hostName: 'h1',
component: 'HIVE_METASTORE'
},
{
hostName: 'h2',
component: 'HIVE_METASTORE'
}
],
recommendedValue: 'thrift://localhost:9083',
expected: 'thrift://h1:9083,thrift://h2:9083',
title: 'typical case'
},
{
hosts: [
{
hostName: 'h0',
component: 'HIVE_SERVER'
}
],
recommendedValue: 'thrift://localhost:9083',
expected: '',
title: 'no Metastore hosts in DB'
},
{
hosts: [
{
hostName: 'h0',
component: 'HIVE_SERVER'
},
{
hostName: 'h1',
component: 'HIVE_METASTORE'
},
{
hostName: 'h2',
component: 'HIVE_METASTORE'
}
],
recommendedValue: '',
expected: '',
title: 'default value without port'
},
{
hosts: [
{
hostName: 'h0',
component: 'HIVE_SERVER'
},
{
hostName: 'h1',
component: 'HIVE_METASTORE'
},
{
hostName: 'h2',
component: 'HIVE_METASTORE'
}
],
expected: '',
title: 'no default value specified'
}
];
cases.forEach(function (item) {
it(item.title, function () {
expect(App.ConfigInitializer.getHiveMetastoreUris(item.hosts, item.recommendedValue)).to.equal(item.expected);
});
});
});
describe('initializerTypes', function () {
var types = App.ConfigInitializer.get('initializerTypes');
Em.keys(types).forEach(function(type) {
it(type, function() {
var methodName = types[type].method;
expect(methodName).to.be.a.string;
expect(methodName).to.have.length.above(0);
expect(App.ConfigInitializer[methodName]).to.be.a.function;
});
});
});
describe('initializers', function () {
var initializers = App.ConfigInitializer.get('initializers');
var types = App.ConfigInitializer.get('initializerTypes');
var typeNames = types.mapProperty('name');
Em.keys(initializers).forEach(function (configName) {
it(configName, function () {
var type = initializers[configName].type;
expect(typeNames).to.contain(type);
});
});
});
describe('uniqueInitializers', function () {
var uniqueInitializers = App.ConfigInitializer.get('uniqueInitializers');
var uniqueInitializersNames = Em.keys(uniqueInitializers).map(function (key) {
return uniqueInitializers[key];
});
it('should contains only unique methods', function () {
expect(uniqueInitializersNames.length).to.equal(uniqueInitializersNames.uniq().length);
});
uniqueInitializersNames.forEach(function (name) {
it(name, function () {
expect(App.ConfigInitializer[name]).to.be.a.function;
});
});
});
});