Repository: ambari Updated Branches: refs/heads/trunk 618d843c1 -> da8ca2ae3
http://git-wip-us.apache.org/repos/asf/ambari/blob/da8ca2ae/ambari-web/test/utils/configs/config_initializer_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/utils/configs/config_initializer_test.js b/ambari-web/test/utils/configs/config_initializer_test.js new file mode 100644 index 0000000..fe55e69 --- /dev/null +++ b/ambari-web/test/utils/configs/config_initializer_test.js @@ -0,0 +1,1271 @@ +/** + * 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 serviceConfig, + group, + serviceConfigProperty, + + components = [ + { + name: 'NameNode', + master: true + }, + { + name: 'SNameNode', + master: true + }, + { + name: 'JobTracker', + master: true + }, + { + name: 'HBase Master', + master: true + }, + { + name: 'Oozie Master', + master: true + }, + { + name: 'Hive Metastore', + master: true + }, + { + name: 'WebHCat Server', + master: true + }, + { + name: 'ZooKeeper Server', + master: true + }, + { + name: 'Ganglia', + master: true + }, + { + name: 'DataNode', + slave: true + }, + { + name: 'TaskTracker', + slave: true + }, + { + name: 'RegionServer', + slave: true + } + ], + masters = components.filterProperty('master'), + slaves = components.filterProperty('slave'); + +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' + }, + 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' + }, + 'oozie_hostname': { + localDB: { + masterComponentHosts: [ + { + component: 'OOZIE_SERVER', + hostName: 'h0' + }, + { + component: 'OOZIE_SERVER', + hostName: 'h1' + } + ] + }, + value: ['h0', 'h1'], + title: 'array that contains names of hosts with Oozie Server' + }, + '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' + } + }; + + 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); + }); + }); + + cases['hive_database'].forEach(function (item) { + var title = 'hive_database value should be set to {0}'; + it(title.format(item.value), function () { + sinon.stub(App, 'get') + .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, {}, []); + expect(serviceConfigProperty.get('value')).to.equal(item.value); + expect(serviceConfigProperty.get('options').findProperty('displayName', 'New MySQL Database').hidden).to.equal(item.hidden); + App.get.restore(); + }); + }); + + 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 + }); + 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: 'hive_hostname', + localDB: getLocalDBForSingleComponent('HIVE_SERVER'), + rValue: 'c6407.ambari.apache.org', + expectedValue: 'h1' + }, + { + config: 'oozie_hostname', + localDB: getLocalDBForSingleComponent('OOZIE_SERVER'), + rValue: 'c6407.ambari.apache.org', + expectedValue: 'h1' + }, + { + 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_default', + expectedValue: 'h1:8020/hawq_default' + }, + { + 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', + 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) { + it(test.m || test.config, function () { + serviceConfigProperty.setProperties({ + name: test.config, + recommendedValue: test.rValue, + filename: test.filename + }); + App.ConfigInitializer.initialValue(serviceConfigProperty, test.localDB, test.dependencies); + expect(serviceConfigProperty.get('value')).to.eql(test.expectedValue); + if (Em.isNone(test.expectedRValue)) { + expect(serviceConfigProperty.get('recommendedValue')).to.eql(test.expectedValue); + } + else { + 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('config with mount points', function () { + + var localDB = { + masterComponentHosts: [ + { + component: 'NAMENODE', + hostName: 'h0' + }, + { + component: 'SECONDARY_NAMENODE', + hostName: 'h4' + }, + { + component: 'APP_TIMELINE_SERVER', + hostName: 'h0' + }, + { + component: 'ZOOKEEPER_SERVER', + hostName: 'h0' + }, + { + component: 'ZOOKEEPER_SERVER', + hostName: 'h1' + }, + { + component: 'OOZIE_SERVER', + hostName: 'h0' + }, + { + component: 'OOZIE_SERVER', + hostName: 'h1' + }, + { + component: 'NIMBUS', + hostName: 'h2' + }, + { + component: 'FALCON_SERVER', + hostName: 'h3' + }, + { + component: 'KAFKA_BROKER', + hostName: 'h0' + }, + { + component: 'KAFKA_BROKER', + hostName: 'h1' + } + ], + slaveComponentHosts: [ + { + componentName: 'DATANODE', + hosts: [ + { + hostName: 'h0' + }, + { + hostName: 'h1' + } + ] + }, + { + componentName: 'TASKTRACKER', + hosts: [ + { + hostName: 'h0' + }, + { + hostName: 'h1' + } + ] + }, + { + componentName: 'NODEMANAGER', + hosts: [ + { + hostName: 'h0' + }, + { + hostName: 'h1' + }, + { + hostName: 'h4' + } + ] + }, + { + componentName: 'HBASE_REGIONSERVER', + hosts: [ + { + hostName: 'h0' + }, + { + hostName: 'h1' + } + ] + }, + { + componentName: 'SUPERVISOR', + hosts: [ + { + hostName: 'h0' + }, + { + hostName: 'h1' + } + ] + } + ], + hosts: { + h0: { + disk_info: [ + { + mountpoint: '/' + }, + { + mountpoint: '/home' + }, + { + mountpoint: '/boot' + }, + { + mountpoint: '/boot/efi' + }, + { + mountpoint: '/mnt' + }, + { + mountpoint: '/mnt/efi' + }, + { + mountpoint: '/media/disk0', + available: '100000000' + }, + { + mountpoint: '/mount0', + available: '100000000' + } + ] + }, + h4: { + disk_info: [ + { + mountpoint: 'c:', + available: '100000000' + } + ] + } + } + }, + cases = [ + { + name: 'dfs.namenode.name.dir', + isOnlyFirstOneNeeded: false, + value: '/media/disk0/default\n/mount0/default\n' + }, + { + name: 'dfs.name.dir', + isOnlyFirstOneNeeded: false, + value: '/media/disk0/default\n/mount0/default\n' + }, + { + name: 'fs.checkpoint.dir', + isOnlyFirstOneNeeded: true, + value: 'file:///c:/default\n' + }, + { + name: 'dfs.namenode.checkpoint.dir', + isOnlyFirstOneNeeded: true, + value: 'file:///c:/default\n' + }, + { + name: 'dfs.data.dir', + isOnlyFirstOneNeeded: false, + value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n' + }, + { + name: 'dfs.datanode.data.dir', + isOnlyFirstOneNeeded: false, + value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n' + }, + { + name: 'mapred.local.dir', + isOnlyFirstOneNeeded: false, + value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n' + }, + { + name: 'yarn.nodemanager.log-dirs', + isOnlyFirstOneNeeded: false, + value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\nc:\\default\n' + }, + { + name: 'yarn.nodemanager.local-dirs', + isOnlyFirstOneNeeded: false, + value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\nc:\\default\n' + }, + { + name: 'yarn.timeline-service.leveldb-timeline-store.path', + isOnlyFirstOneNeeded: true, + value: '/media/disk0/default' + }, + { + name: 'yarn.timeline-service.leveldb-state-store.path', + isOnlyFirstOneNeeded: true, + value: '/media/disk0/default' + }, + { + name: 'dataDir', + isOnlyFirstOneNeeded: true, + value: '/media/disk0/default' + }, + { + name: 'oozie_data_dir', + isOnlyFirstOneNeeded: true, + value: '/media/disk0/default' + }, + { + name: 'storm.local.dir', + isOnlyFirstOneNeeded: true, + value: '/media/disk0/default' + }, + { + name: '*.falcon.graph.storage.directory', + isOnlyFirstOneNeeded: true, + value: '/default' + }, + { + name: '*.falcon.graph.serialize.path', + isOnlyFirstOneNeeded: true, + value: '/default' + }, + { + name: 'log.dirs', + isOnlyFirstOneNeeded: false, + value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n' + } + ]; + + beforeEach(function () { + sinon.stub(App.Host, 'find').returns([ + Em.Object.create({ + id: 'h1', + diskInfo: [ + { + mountpoint: '/media/disk1', + type: 'devtmpfs' + }, + { + mountpoint: '/media/disk1', + type: 'tmpfs' + }, + { + mountpoint: '/media/disk1', + type: 'vboxsf' + }, + { + mountpoint: '/media/disk1', + type: 'CDFS' + }, + { + mountpoint: '/media/disk1', + available: '0' + }, + { + mountpoint: '/media/disk1', + available: '100000000' + }, + { + mountpoint: '/mount1', + available: '100000000' + } + ] + }), + Em.Object.create({ + id: 'h2', + diskInfo: [ + { + mountpoint: '/' + } + ] + }), + Em.Object.create({ + id: 'h3', + diskInfo: [] + }) + ]); + }); + + afterEach(function () { + App.Host.find.restore(); + }); + + cases.forEach(function (item) { + it(item.name, function () { + serviceConfigProperty.setProperties({ + name: item.name, + recommendedValue: '/default' + }); + App.ConfigInitializer.initialValue(serviceConfigProperty, localDB, {}); + expect(serviceConfigProperty.get('value')).to.equal(item.value); + expect(serviceConfigProperty.get('recommendedValue')).to.equal(item.value); + }); + }); + + }); + + describe('initializerTypes', function () { + var types = App.ConfigInitializer.__testGetInitializerTypes(); + 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.__testGetInitializers(); + var types = App.ConfigInitializer.__testGetInitializerTypes(); + var typeNames = Em.keys(types); + + 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.__testGetUniqueInitializers(); + 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; + }); + }); + + }); + + describe('winReplacersMap', function () { + + var winReplacersMap = App.ConfigInitializer.__testGetWinReplacersMap(); + var winReplacerNames = Em.keys(winReplacersMap).map(function (key) { + return winReplacersMap[key]; + }); + + it('should contains only unique methods', function () { + expect(winReplacerNames.length).to.equal(winReplacerNames.uniq().length); + }); + + winReplacerNames.forEach(function (name) { + it(name, function () { + expect(App.ConfigInitializer[name]).to.be.a.function; + }); + }); + + }); + +}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/da8ca2ae/ambari-web/test/utils/configs/config_property_helper_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/utils/configs/config_property_helper_test.js b/ambari-web/test/utils/configs/config_property_helper_test.js deleted file mode 100644 index 84ebb25..0000000 --- a/ambari-web/test/utils/configs/config_property_helper_test.js +++ /dev/null @@ -1,1271 +0,0 @@ -/** - * 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'); -var configPropertyHelper = require('utils/configs/config_property_helper'); - -require('models/configs/objects/service_config_property'); - -var serviceConfig, - group, - serviceConfigProperty, - - components = [ - { - name: 'NameNode', - master: true - }, - { - name: 'SNameNode', - master: true - }, - { - name: 'JobTracker', - master: true - }, - { - name: 'HBase Master', - master: true - }, - { - name: 'Oozie Master', - master: true - }, - { - name: 'Hive Metastore', - master: true - }, - { - name: 'WebHCat Server', - master: true - }, - { - name: 'ZooKeeper Server', - master: true - }, - { - name: 'Ganglia', - master: true - }, - { - name: 'DataNode', - slave: true - }, - { - name: 'TaskTracker', - slave: true - }, - { - name: 'RegionServer', - slave: true - } - ], - masters = components.filterProperty('master'), - slaves = components.filterProperty('slave'); - -describe('configPropertyHelper', function () { - - beforeEach(function () { - serviceConfigProperty = App.ServiceConfigProperty.create(); - }); - - describe('#setRecommendedValue', function () { - it('should change the recommended value', function () { - serviceConfigProperty.set('recommendedValue', 'value0'); - configPropertyHelper.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' - }, - 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' - }, - 'oozie_hostname': { - localDB: { - masterComponentHosts: [ - { - component: 'OOZIE_SERVER', - hostName: 'h0' - }, - { - component: 'OOZIE_SERVER', - hostName: 'h1' - } - ] - }, - value: ['h0', 'h1'], - title: 'array that contains names of hosts with Oozie Server' - }, - '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' - } - }; - - cases['kafka.ganglia.metrics.host'].forEach(function (item) { - it(item.message, function () { - serviceConfigProperty.setProperties({ - name: 'kafka.ganglia.metrics.host', - value: 'localhost' - }); - configPropertyHelper.initialValue(serviceConfigProperty, item.localDB, []); - expect(serviceConfigProperty.get('value')).to.equal(item.expected); - }); - }); - - cases['hive_database'].forEach(function (item) { - var title = 'hive_database value should be set to {0}'; - it(title.format(item.value), function () { - sinon.stub(App, 'get') - .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 - }); - configPropertyHelper.initialValue(serviceConfigProperty, {}, []); - expect(serviceConfigProperty.get('value')).to.equal(item.value); - expect(serviceConfigProperty.get('options').findProperty('displayName', 'New MySQL Database').hidden).to.equal(item.hidden); - App.get.restore(); - }); - }); - - cases['hbase.zookeeper.quorum'].forEach(function (item) { - it(item.title, function () { - serviceConfigProperty.setProperties({ - name: 'hbase.zookeeper.quorum', - value: 'localhost', - 'filename': item.filename - }); - configPropertyHelper.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'); - configPropertyHelper.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 - }); - configPropertyHelper.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 - }); - configPropertyHelper.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 - }); - configPropertyHelper.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: 'hive_hostname', - localDB: getLocalDBForSingleComponent('HIVE_SERVER'), - rValue: 'c6407.ambari.apache.org', - expectedValue: 'h1' - }, - { - config: 'oozie_hostname', - localDB: getLocalDBForSingleComponent('OOZIE_SERVER'), - rValue: 'c6407.ambari.apache.org', - expectedValue: 'h1' - }, - { - 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_default', - expectedValue: 'h1:8020/hawq_default' - }, - { - 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', - 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) { - it(test.m || test.config, function () { - serviceConfigProperty.setProperties({ - name: test.config, - recommendedValue: test.rValue, - filename: test.filename - }); - configPropertyHelper.initialValue(serviceConfigProperty, test.localDB, test.dependencies); - expect(serviceConfigProperty.get('value')).to.eql(test.expectedValue); - if (Em.isNone(test.expectedRValue)) { - expect(serviceConfigProperty.get('recommendedValue')).to.eql(test.expectedValue); - } - else { - 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(configPropertyHelper.getHiveMetastoreUris(item.hosts, item.recommendedValue)).to.equal(item.expected); - }); - }); - - }); - - describe('config with mount points', function () { - - var localDB = { - masterComponentHosts: [ - { - component: 'NAMENODE', - hostName: 'h0' - }, - { - component: 'SECONDARY_NAMENODE', - hostName: 'h4' - }, - { - component: 'APP_TIMELINE_SERVER', - hostName: 'h0' - }, - { - component: 'ZOOKEEPER_SERVER', - hostName: 'h0' - }, - { - component: 'ZOOKEEPER_SERVER', - hostName: 'h1' - }, - { - component: 'OOZIE_SERVER', - hostName: 'h0' - }, - { - component: 'OOZIE_SERVER', - hostName: 'h1' - }, - { - component: 'NIMBUS', - hostName: 'h2' - }, - { - component: 'FALCON_SERVER', - hostName: 'h3' - }, - { - component: 'KAFKA_BROKER', - hostName: 'h0' - }, - { - component: 'KAFKA_BROKER', - hostName: 'h1' - } - ], - slaveComponentHosts: [ - { - componentName: 'DATANODE', - hosts: [ - { - hostName: 'h0' - }, - { - hostName: 'h1' - } - ] - }, - { - componentName: 'TASKTRACKER', - hosts: [ - { - hostName: 'h0' - }, - { - hostName: 'h1' - } - ] - }, - { - componentName: 'NODEMANAGER', - hosts: [ - { - hostName: 'h0' - }, - { - hostName: 'h1' - }, - { - hostName: 'h4' - } - ] - }, - { - componentName: 'HBASE_REGIONSERVER', - hosts: [ - { - hostName: 'h0' - }, - { - hostName: 'h1' - } - ] - }, - { - componentName: 'SUPERVISOR', - hosts: [ - { - hostName: 'h0' - }, - { - hostName: 'h1' - } - ] - } - ], - hosts: { - h0: { - disk_info: [ - { - mountpoint: '/' - }, - { - mountpoint: '/home' - }, - { - mountpoint: '/boot' - }, - { - mountpoint: '/boot/efi' - }, - { - mountpoint: '/mnt' - }, - { - mountpoint: '/mnt/efi' - }, - { - mountpoint: '/media/disk0', - available: '100000000' - }, - { - mountpoint: '/mount0', - available: '100000000' - } - ] - }, - h4: { - disk_info: [ - { - mountpoint: 'c:', - available: '100000000' - } - ] - } - } - }, - cases = [ - { - name: 'dfs.namenode.name.dir', - isOnlyFirstOneNeeded: false, - value: '/media/disk0/default\n/mount0/default\n' - }, - { - name: 'dfs.name.dir', - isOnlyFirstOneNeeded: false, - value: '/media/disk0/default\n/mount0/default\n' - }, - { - name: 'fs.checkpoint.dir', - isOnlyFirstOneNeeded: true, - value: 'file:///c:/default\n' - }, - { - name: 'dfs.namenode.checkpoint.dir', - isOnlyFirstOneNeeded: true, - value: 'file:///c:/default\n' - }, - { - name: 'dfs.data.dir', - isOnlyFirstOneNeeded: false, - value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n' - }, - { - name: 'dfs.datanode.data.dir', - isOnlyFirstOneNeeded: false, - value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n' - }, - { - name: 'mapred.local.dir', - isOnlyFirstOneNeeded: false, - value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n' - }, - { - name: 'yarn.nodemanager.log-dirs', - isOnlyFirstOneNeeded: false, - value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\nc:\\default\n' - }, - { - name: 'yarn.nodemanager.local-dirs', - isOnlyFirstOneNeeded: false, - value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\nc:\\default\n' - }, - { - name: 'yarn.timeline-service.leveldb-timeline-store.path', - isOnlyFirstOneNeeded: true, - value: '/media/disk0/default' - }, - { - name: 'yarn.timeline-service.leveldb-state-store.path', - isOnlyFirstOneNeeded: true, - value: '/media/disk0/default' - }, - { - name: 'dataDir', - isOnlyFirstOneNeeded: true, - value: '/media/disk0/default' - }, - { - name: 'oozie_data_dir', - isOnlyFirstOneNeeded: true, - value: '/media/disk0/default' - }, - { - name: 'storm.local.dir', - isOnlyFirstOneNeeded: true, - value: '/media/disk0/default' - }, - { - name: '*.falcon.graph.storage.directory', - isOnlyFirstOneNeeded: true, - value: '/default' - }, - { - name: '*.falcon.graph.serialize.path', - isOnlyFirstOneNeeded: true, - value: '/default' - }, - { - name: 'log.dirs', - isOnlyFirstOneNeeded: false, - value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n' - } - ]; - - beforeEach(function () { - sinon.stub(App.Host, 'find').returns([ - Em.Object.create({ - id: 'h1', - diskInfo: [ - { - mountpoint: '/media/disk1', - type: 'devtmpfs' - }, - { - mountpoint: '/media/disk1', - type: 'tmpfs' - }, - { - mountpoint: '/media/disk1', - type: 'vboxsf' - }, - { - mountpoint: '/media/disk1', - type: 'CDFS' - }, - { - mountpoint: '/media/disk1', - available: '0' - }, - { - mountpoint: '/media/disk1', - available: '100000000' - }, - { - mountpoint: '/mount1', - available: '100000000' - } - ] - }), - Em.Object.create({ - id: 'h2', - diskInfo: [ - { - mountpoint: '/' - } - ] - }), - Em.Object.create({ - id: 'h3', - diskInfo: [] - }) - ]); - }); - - afterEach(function () { - App.Host.find.restore(); - }); - - cases.forEach(function (item) { - it(item.name, function () { - serviceConfigProperty.setProperties({ - name: item.name, - recommendedValue: '/default' - }); - configPropertyHelper.initialValue(serviceConfigProperty, localDB, {}); - expect(serviceConfigProperty.get('value')).to.equal(item.value); - expect(serviceConfigProperty.get('recommendedValue')).to.equal(item.value); - }); - }); - - }); - - describe('initializerTypes', function () { - var types = configPropertyHelper.__testGetInitializerTypes(); - 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(configPropertyHelper[methodName]).to.be.a.function; - }); - }); - }); - - describe('initializers', function () { - - var initializers = configPropertyHelper.__testGetInitializers(); - var types = configPropertyHelper.__testGetInitializerTypes(); - var typeNames = Em.keys(types); - - Em.keys(initializers).forEach(function (configName) { - it(configName, function () { - var type = initializers[configName].type; - expect(typeNames).to.contain(type); - }); - }); - - }); - - describe('uniqueInitializers', function () { - - var uniqueInitializers = configPropertyHelper.__testGetUniqueInitializers(); - 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(configPropertyHelper[name]).to.be.a.function; - }); - }); - - }); - - describe('winReplacersMap', function () { - - var winReplacersMap = configPropertyHelper.__testGetWinReplacersMap(); - var winReplacerNames = Em.keys(winReplacersMap).map(function (key) { - return winReplacersMap[key]; - }); - - it('should contains only unique methods', function () { - expect(winReplacerNames.length).to.equal(winReplacerNames.uniq().length); - }); - - winReplacerNames.forEach(function (name) { - it(name, function () { - expect(configPropertyHelper[name]).to.be.a.function; - }); - }); - - }); - -}); \ No newline at end of file