ambari-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ababiic...@apache.org
Subject [1/4] ambari git commit: AMBARI-10826 Move App.ServiceConfigProperty object to separate file. (ababiichuk)
Date Wed, 29 Apr 2015 12:10:20 GMT
Repository: ambari
Updated Branches:
  refs/heads/trunk 798f1072d -> 2514cda00


http://git-wip-us.apache.org/repos/asf/ambari/blob/11a09c57/ambari-web/test/models/service_config_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/models/service_config_test.js b/ambari-web/test/models/service_config_test.js
deleted file mode 100644
index f381ab8..0000000
--- a/ambari-web/test/models/service_config_test.js
+++ /dev/null
@@ -1,1418 +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');
-
-require('models/service_config');
-
-var serviceConfig,
-  serviceConfigCategory,
-  group,
-  serviceConfigProperty,
-  serviceConfigPropertyInit,
-  configsData = [
-    Ember.Object.create({
-      category: 'c0',
-      overrides: [
-        {
-          error: true,
-          errorMessage: 'error'
-        },
-        {
-          error: true
-        },
-        {}
-      ]
-    }),
-    Ember.Object.create({
-      category: 'c1',
-      isValid: false,
-      isVisible: true
-    }),
-    Ember.Object.create({
-      category: 'c0',
-      isValid: true,
-      isVisible: true
-    }),
-    Ember.Object.create({
-      category: 'c1',
-      isValid: false,
-      isVisible: false
-    })
-  ],
-  configCategoriesData = [
-    Em.Object.create({
-      name: 'c0',
-      slaveErrorCount: 1
-    }),
-    Em.Object.create({
-      name: 'c1',
-      slaveErrorCount: 2
-    })
-  ],
-  nameCases = [
-    {
-      name: 'DataNode',
-      primary: 'DATANODE'
-    },
-    {
-      name: 'TaskTracker',
-      primary: 'TASKTRACKER'
-    },
-    {
-      name: 'RegionServer',
-      primary: 'HBASE_REGIONSERVER'
-    },
-    {
-      name: 'name',
-      primary: null
-    }
-  ],
-  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'),
-  groupsData = {
-    groups: [
-      Em.Object.create({
-        errorCount: 1
-      }),
-      Em.Object.create({
-        errorCount: 2
-      })
-    ]
-  },
-  groupNoErrorsData = [].concat(configsData.slice(2)),
-  groupErrorsData = [configsData[1]],
-  overridableFalseData = [
-    {
-      isOverridable: false
-    },
-    {
-      isEditable: false,
-      overrides: configsData[0].overrides
-    },
-    {
-      displayType: 'masterHost'
-    }
-  ],
-  overridableTrueData = [
-    {
-      isOverridable: true,
-      isEditable: true
-    },    {
-      isOverridable: true,
-      overrides: []
-    },
-    {
-      isOverridable: true
-    }
-  ],
-  overriddenFalseData = [
-    {
-      overrides: null,
-      isOriginalSCP: true
-    },
-    {
-      overrides: [],
-      isOriginalSCP: true
-    }
-  ],
-  overriddenTrueData = [
-    {
-      overrides: configsData[0].overrides
-    },
-    {
-      isOriginalSCP: false
-    }
-  ],
-  removableFalseData = [
-    {
-      isEditable: false
-    },
-    {
-      hasOverrides: true
-    },
-    {
-      isUserProperty: false,
-      isOriginalSCP: true
-    }
-  ],
-  removableTrueData = [
-    {
-      isEditable: true,
-      hasOverrides: false,
-      isUserProperty: true
-    },
-    {
-      isEditable: true,
-      hasOverrides: false,
-      isOriginalSCP: false
-    }
-  ],
-  initPropertyData = [
-    {
-      initial: {
-        displayType: 'password',
-        value: 'value'
-      },
-      result: {
-        retypedPassword: 'value'
-      }
-    },
-    {
-      initial: {
-        id: 'puppet var',
-        value: '',
-        defaultValue: 'default'
-      },
-      result: {
-        value: 'default'
-      }
-    }
-  ],
-  notDefaultFalseData = [
-    {
-      isEditable: false
-    },
-    {
-      defaultValue: null
-    },
-    {
-      value: 'value',
-      defaultValue: 'value'
-    }
-  ],
-  notDefaultTrueData = {
-    isEditable: true,
-    value: 'value',
-    defaultValue: 'default'
-  },
-  types = ['masterHost', 'slaveHosts', 'masterHosts', 'slaveHost', 'radio button'],
-  classCases = [
-    {
-      initial: {
-        displayType: 'checkbox'
-      },
-      viewClass: App.ServiceConfigCheckbox
-    },
-    {
-      initial: {
-        displayType: 'checkbox',
-        dependentConfigPattern: 'somPattern'
-      },
-      viewClass: App.ServiceConfigCheckboxWithDependencies
-    },
-    {
-      initial: {
-        displayType: 'password'
-      },
-      viewClass: App.ServiceConfigPasswordField
-    },
-    {
-      initial: {
-        displayType: 'combobox'
-      },
-      viewClass: App.ServiceConfigComboBox
-    },
-    {
-      initial: {
-        displayType: 'radio button'
-      },
-      viewClass: App.ServiceConfigRadioButtons
-    },
-    {
-      initial: {
-        displayType: 'directories'
-      },
-      viewClass: App.ServiceConfigTextArea
-    },
-    {
-      initial: {
-        displayType: 'content'
-      },
-      viewClass: App.ServiceConfigTextAreaContent
-
-    },
-    {
-      initial: {
-        displayType: 'multiLine'
-      },
-      viewClass: App.ServiceConfigTextArea
-    },
-    {
-      initial: {
-        displayType: 'custom'
-      },
-      viewClass: App.ServiceConfigBigTextArea
-    },
-    {
-      initial: {
-        displayType: 'masterHost'
-      },
-      viewClass: App.ServiceConfigMasterHostView
-    },
-    {
-      initial: {
-        displayType: 'masterHosts'
-      },
-      viewClass: App.ServiceConfigMasterHostsView
-    },
-    {
-      initial: {
-        displayType: 'slaveHosts'
-      },
-      viewClass: App.ServiceConfigSlaveHostsView
-    },
-    {
-      initial: {
-        unit: true,
-        displayType: 'type'
-      },
-      viewClass: App.ServiceConfigTextFieldWithUnit
-    },
-    {
-      initial: {
-        unit: false,
-        displayType: 'type'
-      },
-      viewClass: App.ServiceConfigTextField
-    },
-    {
-      initial: {
-        unit: false,
-        displayType: 'supportTextConnection'
-      },
-      viewClass: App.checkConnectionView
-    }
-  ];
-
-
-describe('App.ServiceConfig', function () {
-
-  beforeEach(function () {
-    serviceConfig = App.ServiceConfig.create();
-  });
-
-  describe('#errorCount', function () {
-    it('should be 0', function () {
-      serviceConfig.setProperties({
-        configs: [],
-        configCategories: []
-      });
-      expect(serviceConfig.get('errorCount')).to.equal(0);
-    });
-    it('should sum counts of all errors', function () {
-      serviceConfig.setProperties({
-        configs: configsData,
-        configCategories: configCategoriesData
-      });
-      expect(serviceConfig.get('errorCount')).to.equal(6);
-      expect(serviceConfig.get('configCategories').findProperty('name', 'c0').get('nonSlaveErrorCount')).to.equal(2);
-      expect(serviceConfig.get('configCategories').findProperty('name', 'c1').get('nonSlaveErrorCount')).to.equal(1);
-    });
-  });
-
-});
-
-describe('App.ServiceConfigCategory', function () {
-
-  beforeEach(function () {
-    serviceConfigCategory = App.ServiceConfigCategory.create();
-  });
-
-  describe('#primaryName', function () {
-    nameCases.forEach(function (item) {
-      it('should return ' + item.primary, function () {
-        serviceConfigCategory.set('name', item.name);
-        expect(serviceConfigCategory.get('primaryName')).to.equal(item.primary);
-      })
-    });
-  });
-
-  describe('#isForMasterComponent', function () {
-    masters.forEach(function (item) {
-      it('should be true for ' + item.name, function () {
-        serviceConfigCategory.set('name', item.name);
-        expect(serviceConfigCategory.get('isForMasterComponent')).to.be.true;
-      });
-    });
-    it('should be false', function () {
-      serviceConfigCategory.set('name', 'name');
-      expect(serviceConfigCategory.get('isForMasterComponent')).to.be.false;
-    });
-  });
-
-  describe('#isForSlaveComponent', function () {
-    slaves.forEach(function (item) {
-      it('should be true for ' + item.name, function () {
-        serviceConfigCategory.set('name', item.name);
-        expect(serviceConfigCategory.get('isForSlaveComponent')).to.be.true;
-      });
-    });
-    it('should be false', function () {
-      serviceConfigCategory.set('name', 'name');
-      expect(serviceConfigCategory.get('isForSlaveComponent')).to.be.false;
-    });
-  });
-
-  describe('#slaveErrorCount', function () {
-    it('should be 0', function () {
-      serviceConfigCategory.set('slaveConfigs', []);
-      expect(serviceConfigCategory.get('slaveErrorCount')).to.equal(0);
-    });
-    it('should sum all errorCount values', function () {
-      serviceConfigCategory.set('slaveConfigs', groupsData);
-      expect(serviceConfigCategory.get('slaveErrorCount')).to.equal(3);
-    });
-  });
-
-  describe('#errorCount', function () {
-    it('should sum all errors for category', function () {
-      serviceConfigCategory.reopen({
-        slaveErrorCount: 1
-      });
-      expect(serviceConfigCategory.get('errorCount')).to.equal(1);
-      serviceConfigCategory.set('nonSlaveErrorCount', 2);
-      expect(serviceConfigCategory.get('errorCount')).to.equal(3);
-      serviceConfigCategory.set('slaveErrorCount', 0);
-      expect(serviceConfigCategory.get('errorCount')).to.equal(2);
-    });
-  });
-
-  describe('#isAdvanced', function () {
-    it('should be true', function () {
-      serviceConfigCategory.set('name', 'Advanced');
-      expect(serviceConfigCategory.get('isAdvanced')).to.be.true;
-    });
-    it('should be false', function () {
-      serviceConfigCategory.set('name', 'name');
-      expect(serviceConfigCategory.get('isAdvanced')).to.be.false;
-    });
-  });
-
-});
-
-describe('App.Group', function () {
-
-  beforeEach(function () {
-    group = App.Group.create();
-  });
-
-  describe('#errorCount', function () {
-    it('should be 0', function () {
-      group.set('properties', groupNoErrorsData);
-      expect(group.get('errorCount')).to.equal(0);
-    });
-    it('should be 1', function () {
-      group.set('properties', groupErrorsData);
-      expect(group.get('errorCount')).to.equal(1);
-    });
-  });
-
-});
-
-describe('App.ServiceConfigProperty', function () {
-
-  beforeEach(function () {
-    serviceConfigProperty = App.ServiceConfigProperty.create();
-  });
-
-  describe('#overrideErrorTrigger', function () {
-    it('should be an increment', function () {
-      serviceConfigProperty.set('overrides', configsData[0].overrides);
-      expect(serviceConfigProperty.get('overrideErrorTrigger')).to.equal(1);
-      serviceConfigProperty.set('overrides', []);
-      expect(serviceConfigProperty.get('overrideErrorTrigger')).to.equal(2);
-    });
-  });
-
-  describe('#isPropertyOverridable', function () {
-    overridableFalseData.forEach(function (item) {
-      it('should be false', function () {
-        Em.keys(item).forEach(function (prop) {
-          serviceConfigProperty.set(prop, item[prop]);
-        });
-        expect(serviceConfigProperty.get('isPropertyOverridable')).to.be.false;
-      });
-    });
-    overridableTrueData.forEach(function (item) {
-      it('should be true', function () {
-        Em.keys(item).forEach(function (prop) {
-          serviceConfigProperty.set(prop, item[prop]);
-        });
-        expect(serviceConfigProperty.get('isPropertyOverridable')).to.be.true;
-      });
-    });
-  });
-
-  describe('#isOverridden', function () {
-    overriddenFalseData.forEach(function (item) {
-      it('should be false', function () {
-        Em.keys(item).forEach(function (prop) {
-          serviceConfigProperty.set(prop, item[prop]);
-        });
-        expect(serviceConfigProperty.get('isOverridden')).to.be.false;
-      });
-    });
-    overriddenTrueData.forEach(function (item) {
-      it('should be true', function () {
-        Em.keys(item).forEach(function (prop) {
-          serviceConfigProperty.set(prop, item[prop]);
-        });
-        expect(serviceConfigProperty.get('isOverridden')).to.be.true;
-      });
-    });
-  });
-
-  describe('#isRemovable', function () {
-    removableFalseData.forEach(function (item) {
-      it('should be false', function () {
-        Em.keys(item).forEach(function (prop) {
-          serviceConfigProperty.set(prop, item[prop]);
-        });
-        expect(serviceConfigProperty.get('isRemovable')).to.be.false;
-      });
-    });
-    removableTrueData.forEach(function (item) {
-      it('should be true', function () {
-        Em.keys(item).forEach(function (prop) {
-          serviceConfigProperty.set(prop, item[prop]);
-        });
-        expect(serviceConfigProperty.get('isRemovable')).to.be.true;
-      });
-    });
-  });
-
-  describe('#init', function () {
-    initPropertyData.forEach(function (item) {
-      it('should set initial data', function () {
-        serviceConfigPropertyInit = App.ServiceConfigProperty.create(item.initial);
-        Em.keys(item.result).forEach(function (prop) {
-          expect(serviceConfigPropertyInit.get(prop)).to.equal(item.result[prop]);
-        });
-      });
-    });
-  });
-
-  describe('#isNotDefaultValue', function () {
-    notDefaultFalseData.forEach(function (item) {
-      it('should be false', function () {
-        Em.keys(item).forEach(function (prop) {
-          serviceConfigProperty.set(prop, item[prop]);
-        });
-        expect(serviceConfigProperty.get('isNotDefaultValue')).to.be.false;
-      });
-    });
-    it('should be true', function () {
-      Em.keys(notDefaultTrueData).forEach(function (prop) {
-        serviceConfigProperty.set(prop, notDefaultTrueData[prop]);
-      });
-      expect(serviceConfigProperty.get('isNotDefaultValue')).to.be.true;
-    });
-  });
-
-  describe('#cantBeUndone', function () {
-    types.forEach(function (item) {
-      it('should be true', function () {
-        serviceConfigProperty.set('displayType', item);
-        expect(serviceConfigProperty.get('cantBeUndone')).to.be.true;
-      });
-    });
-    it('should be false', function () {
-      serviceConfigProperty.set('displayType', 'type');
-      expect(serviceConfigProperty.get('cantBeUndone')).to.be.false;
-    });
-  });
-
-  describe('#setDefaultValue', function () {
-    it('should change the default value', function () {
-      serviceConfigProperty.set('defaultValue', 'value0');
-      serviceConfigProperty.setDefaultValue(/\d/, '1');
-      expect(serviceConfigProperty.get('defaultValue')).to.equal('value1');
-    });
-  });
-
-  describe('#isValid', function () {
-    it('should be true', function () {
-      serviceConfigProperty.set('errorMessage', '');
-      expect(serviceConfigProperty.get('isValid')).to.be.true;
-    });
-    it('should be false', function () {
-      serviceConfigProperty.set('errorMessage', 'message');
-      expect(serviceConfigProperty.get('isValid')).to.be.false;
-    });
-  });
-
-  describe('#viewClass', function () {
-    classCases.forEach(function (item) {
-      it ('should be ' + item.viewClass, function () {
-        Em.keys(item.initial).forEach(function (prop) {
-          serviceConfigProperty.set(prop, item.initial[prop]);
-        });
-        expect(serviceConfigProperty.get('viewClass')).to.eql(item.viewClass);
-      });
-    });
-  });
-
-  describe('#validate', function () {
-    it('not required', function () {
-      serviceConfigProperty.setProperties({
-        isRequired: false,
-        value: ''
-      });
-      expect(serviceConfigProperty.get('errorMessage')).to.be.empty;
-      expect(serviceConfigProperty.get('error')).to.be.false;
-    });
-    it('should validate', function () {
-      serviceConfigProperty.setProperties({
-        isRequired: true,
-        value: 'value'
-      });
-      expect(serviceConfigProperty.get('errorMessage')).to.be.empty;
-      expect(serviceConfigProperty.get('error')).to.be.false;
-    });
-    it('should fail', function () {
-      serviceConfigProperty.setProperties({
-        isRequired: true,
-        value: 'value'
-      });
-      serviceConfigProperty.set('value', '');
-      expect(serviceConfigProperty.get('errorMessage')).to.equal('This is required');
-      expect(serviceConfigProperty.get('error')).to.be.true;
-    });
-  });
-
-  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',
-          defaultValue: 'host0,host1',
-          title: 'should set ZooKeeper Server hostnames'
-        },
-        {
-          filename: 'ams-hbase-site.xml',
-          value: 'localhost',
-          defaultValue: '',
-          title: 'should ignore ZooKeeper Server hostnames'
-        }
-      ],
-      'hbase.tmp.dir': [
-        {
-          filename: 'hbase-site.xml',
-          isUnionAllMountPointsCalled: true,
-          title: 'unionAllMountPoints should be called'
-        },
-        {
-          filename: 'ams-hbase-site.xml',
-          isUnionAllMountPointsCalled: false,
-          title: 'unionAllMountPoints shouldn\'t be called'
-        }
-      ],
-      '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'
-        },
-        defaultValue: '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'
-        },
-        defaultValue: 'hive.metastore.local=false,hive.metastore.uris=thrift://localhost:9933,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'
-        },
-        defaultValue: 'localhost:2181',
-        value: 'h0:2182',
-        title: 'should add ZK host and port dynamically'
-      },
-      'oozieserver_host': {
-        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'
-        });
-        serviceConfigProperty.initialValue(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
-        });
-        serviceConfigProperty.initialValue({});
-        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
-        });
-        serviceConfigProperty.initialValue({
-          masterComponentHosts: {
-            filterProperty: function () {
-              return {
-                mapProperty: function () {
-                  return ['host0', 'host1'];
-                }
-              };
-            }
-          }
-        });
-        expect(serviceConfigProperty.get('value')).to.equal(item.value);
-        expect(serviceConfigProperty.get('defaultValue')).to.equal(item.defaultValue);
-      });
-    });
-
-    cases['hbase.tmp.dir'].forEach(function (item) {
-      var isOnlyFirstOneNeeded = true,
-        localDB = {
-          p: 'v'
-        };
-      it(item.title, function () {
-        sinon.stub(serviceConfigProperty, 'unionAllMountPoints', Em.K);
-        serviceConfigProperty.setProperties({
-          name: 'hbase.tmp.dir',
-          filename: item.filename
-        });
-        serviceConfigProperty.initialValue(localDB);
-        expect(serviceConfigProperty.unionAllMountPoints.calledWith(isOnlyFirstOneNeeded, localDB)).to.equal(item.isUnionAllMountPointsCalled);
-        serviceConfigProperty.unionAllMountPoints.restore();
-      });
-    });
-
-    it(cases['hivemetastore_host'].title, function () {
-      serviceConfigProperty.set('name', 'hivemetastore_host');
-      serviceConfigProperty.initialValue(cases['hivemetastore_host'].localDB);
-      expect(serviceConfigProperty.get('value')).to.eql(cases['hivemetastore_host'].value);
-    });
-
-    it(cases['hive_master_hosts'].title, function () {
-      serviceConfigProperty.set('name', 'hive_master_hosts');
-      serviceConfigProperty.initialValue(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',
-        defaultValue: cases['hive.metastore.uris'].defaultValue
-      });
-      serviceConfigProperty.initialValue(cases['hive.metastore.uris'].localDB, cases['hive.metastore.uris'].dependencies);
-      expect(serviceConfigProperty.get('value')).to.equal(cases['hive.metastore.uris'].value);
-      expect(serviceConfigProperty.get('defaultValue')).to.equal(cases['hive.metastore.uris'].value);
-    });
-
-    it(cases['templeton.hive.properties'].title, function () {
-      serviceConfigProperty.setProperties({
-        name: 'templeton.hive.properties',
-        defaultValue: cases['templeton.hive.properties'].defaultValue,
-        value: cases['templeton.hive.properties'].defaultValue
-      });
-      serviceConfigProperty.initialValue(cases['templeton.hive.properties'].localDB, cases['templeton.hive.properties'].dependencies);
-      expect(serviceConfigProperty.get('value')).to.equal(cases['templeton.hive.properties'].value);
-      expect(serviceConfigProperty.get('defaultValue')).to.equal(cases['templeton.hive.properties'].value);
-    });
-
-    it(cases['yarn.resourcemanager.zk-address'].title, function () {
-      serviceConfigProperty.setProperties({
-        name: 'yarn.resourcemanager.zk-address',
-        defaultValue: cases['yarn.resourcemanager.zk-address'].defaultValue
-      });
-      serviceConfigProperty.initialValue(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('defaultValue')).to.equal(cases['yarn.resourcemanager.zk-address'].value);
-    });
-
-    it(cases['oozieserver_host'].title, function () {
-      serviceConfigProperty.set('name', 'oozieserver_host');
-      serviceConfigProperty.initialValue(cases['oozieserver_host'].localDB);
-      expect(serviceConfigProperty.get('value')).to.eql(cases['oozieserver_host'].value);
-    });
-
-    it(cases['knox_gateway_host'].title, function () {
-      serviceConfigProperty.set('name', 'knox_gateway_host');
-      serviceConfigProperty.initialValue(cases['knox_gateway_host'].localDB);
-      expect(serviceConfigProperty.get('value')).to.eql(cases['knox_gateway_host'].value);
-    });
-
-  });
-
-  describe('#getHiveMetastoreUris', function () {
-
-    var cases = [
-      {
-        hosts: [
-          {
-            hostName: 'h0',
-            component: 'HIVE_SERVER'
-          },
-          {
-            hostName: 'h1',
-            component: 'HIVE_METASTORE'
-          },
-          {
-            hostName: 'h2',
-            component: 'HIVE_METASTORE'
-          }
-        ],
-        defaultValue: 'thrift://localhost:9083',
-        expected: 'thrift://h1:9083,thrift://h2:9083',
-        title: 'typical case'
-      },
-      {
-        hosts: [
-          {
-            hostName: 'h0',
-            component: 'HIVE_SERVER'
-          }
-        ],
-        defaultValue: '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'
-          }
-        ],
-        defaultValue: '',
-        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(serviceConfigProperty.getHiveMetastoreUris(item.hosts, item.defaultValue)).to.equal(item.expected);
-      });
-    });
-
-  });
-
-  describe('#unionAllMountPoints', 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: 'dataDir',
-          isOnlyFirstOneNeeded: true,
-          value: '/media/disk0/default'
-        },
-        {
-          name: 'oozie_data_dir',
-          isOnlyFirstOneNeeded: true,
-          value: '/media/disk0/default'
-        },
-        {
-          name: 'hbase.tmp.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,
-          defaultDirectory: '/default'
-        });
-        serviceConfigProperty.unionAllMountPoints(item.isOnlyFirstOneNeeded, localDB);
-        expect(serviceConfigProperty.get('value')).to.equal(item.value);
-        expect(serviceConfigProperty.get('defaultValue')).to.equal(item.value);
-      });
-    });
-
-  });
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/11a09c57/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
new file mode 100644
index 0000000..54b6eb8
--- /dev/null
+++ b/ambari-web/test/utils/configs/config_property_helper_test.js
@@ -0,0 +1,865 @@
+/**
+ * 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('#setDefaultValue', function () {
+    it('should change the default value', function () {
+      serviceConfigProperty.set('defaultValue', 'value0');
+      configPropertyHelper.setDefaultValue(serviceConfigProperty, /\d/, '1');
+      expect(serviceConfigProperty.get('defaultValue')).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',
+          defaultValue: 'host0,host1',
+          title: 'should set ZooKeeper Server hostnames'
+        },
+        {
+          filename: 'ams-hbase-site.xml',
+          value: 'localhost',
+          defaultValue: '',
+          title: 'should ignore ZooKeeper Server hostnames'
+        }
+      ],
+      'hbase.tmp.dir': [
+        {
+          filename: 'hbase-site.xml',
+          isUnionAllMountPointsCalled: true,
+          title: 'unionAllMountPoints should be called'
+        },
+        {
+          filename: 'ams-hbase-site.xml',
+          isUnionAllMountPointsCalled: false,
+          title: 'unionAllMountPoints shouldn\'t be called'
+        }
+      ],
+      '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'
+        },
+        defaultValue: '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'
+        },
+        defaultValue: 'hive.metastore.local=false,hive.metastore.uris=thrift://localhost:9933,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'
+        },
+        defaultValue: 'localhost:2181',
+        value: 'h0:2182',
+        title: 'should add ZK host and port dynamically'
+      },
+      'oozieserver_host': {
+        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('defaultValue')).to.equal(item.defaultValue);
+      });
+    });
+
+    cases['hbase.tmp.dir'].forEach(function (item) {
+      var isOnlyFirstOneNeeded = true,
+        localDB = {
+          p: 'v'
+        };
+      it(item.title, function () {
+        sinon.stub(configPropertyHelper, 'unionAllMountPoints', Em.K);
+        serviceConfigProperty.setProperties({
+          name: 'hbase.tmp.dir',
+          filename: item.filename
+        });
+        configPropertyHelper.initialValue(serviceConfigProperty, localDB);
+        expect(configPropertyHelper.unionAllMountPoints.calledWith(serviceConfigProperty, isOnlyFirstOneNeeded, localDB)).to.equal(item.isUnionAllMountPointsCalled);
+        configPropertyHelper.unionAllMountPoints.restore();
+      });
+    });
+
+    it(cases['hivemetastore_host'].title, function () {
+      serviceConfigProperty.set('name', 'hivemetastore_host');
+      configPropertyHelper.initialValue(serviceConfigProperty, cases['hivemetastore_host'].localDB);
+      expect(serviceConfigProperty.get('value')).to.eql(cases['hivemetastore_host'].value);
+    });
+
+    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',
+        defaultValue: cases['hive.metastore.uris'].defaultValue
+      });
+      configPropertyHelper.initialValue(serviceConfigProperty, cases['hive.metastore.uris'].localDB, cases['hive.metastore.uris'].dependencies);
+      expect(serviceConfigProperty.get('value')).to.equal(cases['hive.metastore.uris'].value);
+      expect(serviceConfigProperty.get('defaultValue')).to.equal(cases['hive.metastore.uris'].value);
+    });
+
+    it(cases['templeton.hive.properties'].title, function () {
+      serviceConfigProperty.setProperties({
+        name: 'templeton.hive.properties',
+        defaultValue: cases['templeton.hive.properties'].defaultValue,
+        value: cases['templeton.hive.properties'].defaultValue
+      });
+      configPropertyHelper.initialValue(serviceConfigProperty, cases['templeton.hive.properties'].localDB, cases['templeton.hive.properties'].dependencies);
+      expect(serviceConfigProperty.get('value')).to.equal(cases['templeton.hive.properties'].value);
+      expect(serviceConfigProperty.get('defaultValue')).to.equal(cases['templeton.hive.properties'].value);
+    });
+
+    it(cases['yarn.resourcemanager.zk-address'].title, function () {
+      serviceConfigProperty.setProperties({
+        name: 'yarn.resourcemanager.zk-address',
+        defaultValue: cases['yarn.resourcemanager.zk-address'].defaultValue
+      });
+      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('defaultValue')).to.equal(cases['yarn.resourcemanager.zk-address'].value);
+    });
+
+    it(cases['oozieserver_host'].title, function () {
+      serviceConfigProperty.set('name', 'oozieserver_host');
+      configPropertyHelper.initialValue(serviceConfigProperty, cases['oozieserver_host'].localDB);
+      expect(serviceConfigProperty.get('value')).to.eql(cases['oozieserver_host'].value);
+    });
+
+    it(cases['knox_gateway_host'].title, function () {
+      serviceConfigProperty.set('name', 'knox_gateway_host');
+      configPropertyHelper.initialValue(serviceConfigProperty, cases['knox_gateway_host'].localDB);
+      expect(serviceConfigProperty.get('value')).to.eql(cases['knox_gateway_host'].value);
+    });
+
+  });
+
+  describe('#getHiveMetastoreUris', function () {
+
+    var cases = [
+      {
+        hosts: [
+          {
+            hostName: 'h0',
+            component: 'HIVE_SERVER'
+          },
+          {
+            hostName: 'h1',
+            component: 'HIVE_METASTORE'
+          },
+          {
+            hostName: 'h2',
+            component: 'HIVE_METASTORE'
+          }
+        ],
+        defaultValue: 'thrift://localhost:9083',
+        expected: 'thrift://h1:9083,thrift://h2:9083',
+        title: 'typical case'
+      },
+      {
+        hosts: [
+          {
+            hostName: 'h0',
+            component: 'HIVE_SERVER'
+          }
+        ],
+        defaultValue: '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'
+          }
+        ],
+        defaultValue: '',
+        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.defaultValue)).to.equal(item.expected);
+      });
+    });
+
+  });
+
+  describe('#unionAllMountPoints', 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: 'dataDir',
+          isOnlyFirstOneNeeded: true,
+          value: '/media/disk0/default'
+        },
+        {
+          name: 'oozie_data_dir',
+          isOnlyFirstOneNeeded: true,
+          value: '/media/disk0/default'
+        },
+        {
+          name: 'hbase.tmp.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,
+          defaultDirectory: '/default'
+        });
+        configPropertyHelper.unionAllMountPoints(serviceConfigProperty, item.isOnlyFirstOneNeeded, localDB);
+        expect(serviceConfigProperty.get('value')).to.equal(item.value);
+        expect(serviceConfigProperty.get('defaultValue')).to.equal(item.value);
+      });
+    });
+
+  });
+});
\ No newline at end of file


Mime
View raw message