You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by on...@apache.org on 2014/05/16 15:43:45 UTC
git commit: AMBARI-5787. Unit tests for step controllers (7) with
refactor. (onechiporenko)
Repository: ambari
Updated Branches:
refs/heads/trunk 0982aa2e3 -> 4b0cd8fd4
AMBARI-5787. Unit tests for step controllers (7) with refactor. (onechiporenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4b0cd8fd
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4b0cd8fd
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4b0cd8fd
Branch: refs/heads/trunk
Commit: 4b0cd8fd47fa0715ee2fd8bfdb514b44fe423834
Parents: 0982aa2
Author: Oleg Nechiporenko <on...@apache.org>
Authored: Fri May 16 16:39:58 2014 +0300
Committer: Oleg Nechiporenko <on...@apache.org>
Committed: Fri May 16 16:43:37 2014 +0300
----------------------------------------------------------------------
.../app/controllers/wizard/step7_controller.js | 361 +++++++++++-------
.../test/controllers/wizard/step7_test.js | 369 +++++++++++++++++--
2 files changed, 567 insertions(+), 163 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/4b0cd8fd/ambari-web/app/controllers/wizard/step7_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step7_controller.js b/ambari-web/app/controllers/wizard/step7_controller.js
index 30b72ac..5de14f5 100644
--- a/ambari-web/app/controllers/wizard/step7_controller.js
+++ b/ambari-web/app/controllers/wizard/step7_controller.js
@@ -55,7 +55,7 @@ App.WizardStep7Controller = Em.Controller.extend({
/**
* @type {string}
*/
- gangliaMoutDir:'/',
+ gangliaMoutDir: '/',
overrideToAdd: null,
@@ -128,7 +128,7 @@ App.WizardStep7Controller = Em.Controller.extend({
*/
installedServiceNames: function () {
var serviceNames = this.get('content.services').filterProperty('isInstalled').mapProperty('serviceName');
- if(this.get('content.controllerName') !== 'installerController') {
+ if (this.get('content.controllerName') !== 'installerController') {
return serviceNames.without('SQOOP').without('HCATALOG');
}
return serviceNames;
@@ -197,7 +197,7 @@ App.WizardStep7Controller = Em.Controller.extend({
* @method loadInstalledServicesConfigGroups
*/
loadInstalledServicesConfigGroups: function (servicesNames) {
- servicesNames.forEach(function(serviceName) {
+ servicesNames.forEach(function (serviceName) {
App.ajax.send({
name: 'config.tags_and_groups',
sender: this,
@@ -210,29 +210,52 @@ App.WizardStep7Controller = Em.Controller.extend({
}, this);
},
- /**
- * Load config groups success callback
- * @param {object} data
- * @param {object} opt
- * @param {object} params
- * @method loadServiceTagsSuccess
- */
- loadServiceTagsSuccess: function (data, opt, params) {
- var serviceConfigsDef = params.serviceConfigsDef;
- var serviceName = params.serviceName;
- var service = this.get('stepConfigs').findProperty('serviceName', serviceName);
- // Create default configuration group
- var defaultConfigGroupHosts = this.get('wizardController.allHosts').mapProperty('hostName');
- var selectedConfigGroup;
+ /**
+ * Create site to tag map. Format:
+ * <code>
+ * {
+ * site1: tag1,
+ * site1: tag2,
+ * site2: tag3
+ * ...
+ * }
+ * </code>
+ * @param {object} desired_configs
+ * @param {string[]} sites
+ * @returns {object}
+ * @private
+ * @method _createSiteToTagMap
+ */
+ _createSiteToTagMap: function (desired_configs, sites) {
var siteToTagMap = {};
- for (var site in data.Clusters.desired_configs) {
- if (serviceConfigsDef.sites.indexOf(site) > -1) {
- siteToTagMap[site] = data.Clusters.desired_configs[site].tag;
+ for (var site in desired_configs) {
+ if (desired_configs.hasOwnProperty(site)) {
+ if (sites.indexOf(site) > -1) {
+ siteToTagMap[site] = desired_configs[site].tag;
+ }
}
}
- this.loadedClusterSiteToTagMap = siteToTagMap;
+ return siteToTagMap;
+ },
+
+ /**
+ * Load config groups success callback
+ * @param {object} data
+ * @param {object} opt
+ * @param {object} params
+ * @method loadServiceTagsSuccess
+ */
+ loadServiceTagsSuccess: function (data, opt, params) {
+ var serviceName = params.serviceName,
+ service = this.get('stepConfigs').findProperty('serviceName', serviceName),
+ defaultConfigGroupHosts = this.get('wizardController.allHosts').mapProperty('hostName'),
+ siteToTagMap = this._createSiteToTagMap(data.Clusters.desired_configs, params.serviceConfigsDef.sites),
+ selectedConfigGroup;
+
+ this.set('loadedClusterSiteToTagMap', siteToTagMap);
+
//parse loaded config groups
- if (App.supports.hostOverrides) {
+ if (App.get('supports.hostOverrides')) {
var configGroups = [];
if (data.config_groups.length) {
data.config_groups.forEach(function (item) {
@@ -280,10 +303,10 @@ App.WizardStep7Controller = Em.Controller.extend({
}
configGroups = configGroups.sortProperty('name');
configGroups.unshift(defaultConfigGroup);
- if (App.supports.hostOverrides) {
+ if (App.get('supports.hostOverrides')) {
service.set('configGroups', configGroups);
var loadedGroupToOverrideSiteToTagMap = {};
- if (App.supports.hostOverrides) {
+ if (App.get('supports.hostOverrides')) {
var configGroupsWithOverrides = selectedConfigGroup.get('isDefault') ? service.get('configGroups') : [selectedConfigGroup];
configGroupsWithOverrides.forEach(function (item) {
var groupName = item.get('name');
@@ -306,103 +329,191 @@ App.WizardStep7Controller = Em.Controller.extend({
},
/**
- *
- * @param {Ember.Object[]} configs
- * @param {Ember.Object} componentConfig
- * @param {Ember.Object} component
- * @method loadComponentConfigs
- */
- loadComponentConfigs: function (configs, componentConfig, component) {
- var localDB = App.router.get('mainServiceInfoConfigsController').getInfoForDefaults();
- var recommendedDefaults = {};
- var s = this.get('serviceConfigsData').findProperty('serviceName', component.get('serviceName'));
- var defaultGroupSelected = component.get('selectedConfigGroup.isDefault');
- var defaults = [];
+ * Get object with recommended default values for config properties
+ * Format:
+ * <code>
+ * {
+ * configName1: configValue1,
+ * configName2: configValue2
+ * ...
+ * }
+ * </code>
+ * @param {string} serviceName
+ * @returns {object}
+ * @method _getRecommendedDefaultsForComponent
+ */
+ _getRecommendedDefaultsForComponent: function (serviceName) {
+ var s = this.get('serviceConfigsData').findProperty('serviceName', serviceName),
+ recommendedDefaults = {},
+ localDB = App.router.get('mainServiceInfoConfigsController').getInfoForDefaults();
if (s.defaultsProviders) {
- s.defaultsProviders.forEach(function(defaultsProvider) {
+ s.defaultsProviders.forEach(function (defaultsProvider) {
var d = defaultsProvider.getDefaults(localDB);
- defaults.push(d);
for (var name in d) {
- recommendedDefaults[name] = d[name];
+ if (d.hasOwnProperty(name)) {
+ recommendedDefaults[name] = d[name];
+ }
}
});
}
- if (s.configsValidator) {
- s.configsValidator.set('recommendedDefaults', recommendedDefaults);
+ return recommendedDefaults;
+ },
+
+ /**
+ * By default <code>value</code>-property is string "true|false".
+ * Should update it to boolean type
+ * Also affects <code>defaultValue</code>
+ * @param {Ember.Object} serviceConfigProperty
+ * @returns {Ember.Object} Updated config-object
+ * @method _updateValueForCheckBoxConfig
+ */
+ _updateValueForCheckBoxConfig: function (serviceConfigProperty) {
+ var v = serviceConfigProperty.get('value');
+ switch (serviceConfigProperty.get('value')) {
+ case 'true':
+ v = true;
+ break;
+ case 'false':
+ v = false;
+ break;
}
- configs.forEach(function (serviceConfigProperty) {
- if (!serviceConfigProperty) return;
- var overrides = serviceConfigProperty.get('overrides');
- // we will populate the override properties below
- serviceConfigProperty.set('overrides', null);
+ serviceConfigProperty.setProperties({value: v, defaultValue: v});
+ return serviceConfigProperty;
+ },
- if (serviceConfigProperty.isOverridable === undefined) {
- serviceConfigProperty.set('isOverridable', true);
+ /**
+ * Set <code>isEditable</code>-property to <code>serviceConfigProperty</code>
+ * Based on user's permissions and selected config group
+ * @param {Ember.Object} serviceConfigProperty
+ * @param {bool} defaultGroupSelected
+ * @returns {Ember.Object} Updated config-object
+ * @method _updateIsEditableFlagForConfig
+ */
+ _updateIsEditableFlagForConfig: function (serviceConfigProperty, defaultGroupSelected) {
+ if (App.get('isAdmin')) {
+ if (defaultGroupSelected && !this.get('isHostsConfigsPage')) {
+ serviceConfigProperty.set('isEditable', serviceConfigProperty.get('isReconfigurable'));
+ }
+ else {
+ serviceConfigProperty.set('isEditable', false);
}
- if (serviceConfigProperty.displayType === 'checkbox') {
- switch (serviceConfigProperty.value) {
- case 'true':
- serviceConfigProperty.set('value', true);
- serviceConfigProperty.set('defaultValue', true);
- break;
- case 'false':
- serviceConfigProperty.set('value', false);
- serviceConfigProperty.set('defaultValue', false);
- break;
+ }
+ else {
+ serviceConfigProperty.set('isEditable', false);
+ }
+ return serviceConfigProperty;
+ },
+
+ /**
+ * Set <code>overrides</code>-property to <code>serviceConfigProperty<code>
+ * @param {Ember.Object} serviceConfigProperty
+ * @param {Ember.Object} component
+ * @return {Ember.Object} Updated config-object
+ * @method _updateOverridesForConfig
+ */
+ _updateOverridesForConfig: function (serviceConfigProperty, component) {
+
+ var overrides = serviceConfigProperty.get('overrides');
+
+ if (Em.isNone(overrides)) {
+ serviceConfigProperty.set('overrides', Em.A([]));
+ return serviceConfigProperty;
+ }
+ serviceConfigProperty.set('overrides', null);
+ var defaultGroupSelected = component.get('selectedConfigGroup.isDefault');
+
+ // Wrap each override to App.ServiceConfigProperty
+ overrides.forEach(function (override) {
+ var newSCP = App.ServiceConfigProperty.create(serviceConfigProperty);
+ newSCP.set('value', override.value);
+ newSCP.set('isOriginalSCP', false); // indicated this is overridden value,
+ newSCP.set('parentSCP', serviceConfigProperty);
+ if (App.get('supports.hostOverrides') && defaultGroupSelected) {
+ var group = component.get('configGroups').findProperty('name', override.group.get('name'));
+ // prevent cycle in proto object, clean link
+ if (group.get('properties').length == 0) {
+ group.set('properties', Em.A([]));
}
+ group.get('properties').push(newSCP);
+ newSCP.set('group', override.group);
+ newSCP.set('isEditable', false);
}
- if (serviceConfigProperty.get('serviceName') === component.get('serviceName')) {
- if (s.configsValidator) {
- var validators = s.configsValidator.get('configValidators');
- for (var validatorName in validators) {
- if (serviceConfigProperty.name == validatorName) {
- serviceConfigProperty.set('serviceValidator', s.configsValidator);
+ var parentOverridesArray = serviceConfigProperty.get('overrides');
+ if (Em.isNone(parentOverridesArray)) {
+ parentOverridesArray = Em.A([]);
+ serviceConfigProperty.set('overrides', parentOverridesArray);
+ }
+ serviceConfigProperty.get('overrides').pushObject(newSCP);
+ }, this);
+ return serviceConfigProperty;
+ },
+
+ /**
+ * Set <code>serviceValidator</code>-property to <code>serviceConfigProperty</code> if config's serviceName is equal
+ * to component's serviceName
+ * othervise set <code>isVisible</code>-property to <code>false</code>
+ * @param {Ember.Object} serviceConfigProperty
+ * @param {Ember.Object} component
+ * @param {object} serviceConfigsData
+ * @returns {Ember.Object} updated config-object
+ * @mrthod _updateValidatorsForConfig
+ */
+ _updateValidatorsForConfig: function (serviceConfigProperty, component, serviceConfigsData) {
+ if (serviceConfigProperty.get('serviceName') === component.get('serviceName')) {
+ if (serviceConfigsData.configsValidator) {
+ var validators = serviceConfigsData.configsValidator.get('configValidators');
+ for (var validatorName in validators) {
+ if (validators.hasOwnProperty(validatorName)) {
+ if (serviceConfigProperty.get('name') == validatorName) {
+ serviceConfigProperty.set('serviceValidator', serviceConfigsData.configsValidator);
}
}
}
- } else {
- serviceConfigProperty.set('isVisible', false);
}
- if (overrides != null) {
- overrides.forEach(function (override) {
- var newSCP = App.ServiceConfigProperty.create(serviceConfigProperty);
- newSCP.set('value', override.value);
- newSCP.set('isOriginalSCP', false); // indicated this is overridden value,
- newSCP.set('parentSCP', serviceConfigProperty);
- if (App.supports.hostOverrides && defaultGroupSelected) {
- var group = component.get('configGroups').findProperty('name', override.group.get('name'));
- // prevent cycle in proto object, clean link
- if (group.get('properties').length == 0)
- group.set('properties', Em.A([]));
- group.get('properties').push(newSCP);
- newSCP.set('group', override.group);
- newSCP.set('isEditable', false);
- }
- var parentOverridesArray = serviceConfigProperty.get('overrides');
- if (parentOverridesArray == null) {
- parentOverridesArray = Em.A([]);
- serviceConfigProperty.set('overrides', parentOverridesArray);
- }
- serviceConfigProperty.get('overrides').pushObject(newSCP);
- }, this);
- } else {
- serviceConfigProperty.set('overrides', Em.A([]));
+ }
+ else {
+ serviceConfigProperty.set('isVisible', false);
+ }
+ return serviceConfigProperty;
+ },
+
+ /**
+ * Set configs with overrides, recommended defaults to component
+ * @param {Ember.Object[]} configs
+ * @param {Ember.Object} componentConfig
+ * @param {Ember.Object} component
+ * @method loadComponentConfigs
+ */
+ loadComponentConfigs: function (configs, componentConfig, component) {
+ var s = this.get('serviceConfigsData').findProperty('serviceName', component.get('serviceName')),
+ defaultGroupSelected = component.get('selectedConfigGroup.isDefault');
+
+ if (s.configsValidator) {
+ var recommendedDefaults = this._getRecommendedDefaultsForComponent(component.get('serviceName'));
+ s.configsValidator.set('recommendedDefaults', recommendedDefaults);
+ }
+
+ configs.forEach(function (serviceConfigProperty) {
+ if (!serviceConfigProperty) return;
+
+ if (Em.isNone(serviceConfigProperty.get('isOverridable'))) {
+ serviceConfigProperty.set('isOverridable', true);
}
- if (App.get('isAdmin')) {
- if(defaultGroupSelected && !this.get('isHostsConfigsPage')){
- serviceConfigProperty.set('isEditable', serviceConfigProperty.get('isReconfigurable'));
- } else {
- serviceConfigProperty.set('isEditable', false);
- }
- } else {
- serviceConfigProperty.set('isEditable', false);
+ if (serviceConfigProperty.get('displayType') === 'checkbox') {
+ this._updateValueForCheckBoxConfig(serviceConfigProperty);
}
+ this._updateValidatorsForConfig(serviceConfigProperty, component, s);
+ this._updateOverridesForConfig(serviceConfigProperty, component);
+ this._updateIsEditableFlagForConfig(serviceConfigProperty, defaultGroupSelected);
+
componentConfig.get('configs').pushObject(serviceConfigProperty);
serviceConfigProperty.validate();
+
}, this);
+
var overrideToAdd = this.get('overrideToAdd');
if (overrideToAdd) {
- overrideToAdd = componentConfig.configs.findProperty('name', overrideToAdd.name);
+ overrideToAdd = componentConfig.get('configs').findProperty('name', overrideToAdd.name);
if (overrideToAdd) {
this.addOverrideProperty(overrideToAdd);
component.set('overrideToAdd', null);
@@ -431,17 +542,17 @@ App.WizardStep7Controller = Em.Controller.extend({
* @param {Ember.Enumerable} configs
* @method resolveStormConfigs
*/
- resolveStormConfigs: function(configs) {
+ resolveStormConfigs: function (configs) {
var dependentConfigs, gangliaServerHost;
dependentConfigs = ['nimbus.childopts', 'supervisor.childopts', 'worker.childopts'];
// if Ganglia selected or installed, set ganglia host to configs
if (this.get('installedServiceNames').contains('STORM') && this.get('installedServiceNames').contains('GANGLIA')) return;
if (this.get('allSelectedServiceNames').contains('GANGLIA') || this.get('installedServiceNames').contains('GANGLIA')) {
gangliaServerHost = this.get('wizardController').getDBProperty('masterComponentHosts').findProperty('component', 'GANGLIA_SERVER').hostName;
- dependentConfigs.forEach(function(configName) {
+ dependentConfigs.forEach(function (configName) {
var config = configs.findProperty('name', configName);
var replaceStr = '.jar=host=';
- config.value = config.defaultValue = config.value.replace(replaceStr, replaceStr+gangliaServerHost);
+ config.value = config.defaultValue = config.value.replace(replaceStr, replaceStr + gangliaServerHost);
config.forceUpdate = true;
}, this);
}
@@ -501,7 +612,7 @@ App.WizardStep7Controller = Em.Controller.extend({
* and (if some services are already installed) load config groups for installed services
* @method checkHostOverrideInstaller
*/
- checkHostOverrideInstaller: function() {
+ checkHostOverrideInstaller: function () {
if (App.get('supports.hostOverridesInstaller')) {
this.loadConfigGroups(this.get('content.configGroups'));
if (this.get('installedServiceNames').length > 0) {
@@ -518,7 +629,7 @@ App.WizardStep7Controller = Em.Controller.extend({
* @param {Ember.Object[]} storedConfigs
* @method setStepConfigs
*/
- setStepConfigs: function(configs, storedConfigs) {
+ setStepConfigs: function (configs, storedConfigs) {
var localDB = {
hosts: this.get('wizardController').getDBProperty('hosts'),
masterComponentHosts: this.get('wizardController').getDBProperty('masterComponentHosts'),
@@ -528,8 +639,8 @@ App.WizardStep7Controller = Em.Controller.extend({
if (this.get('wizardController.name') === 'addServiceController') {
serviceConfigs.setEach('showConfig', true);
serviceConfigs.setEach('selected', false);
- this.get('selectedServiceNames').forEach(function(serviceName) {
- if(!serviceConfigs.findProperty('serviceName', serviceName)) return;
+ this.get('selectedServiceNames').forEach(function (serviceName) {
+ if (!serviceConfigs.findProperty('serviceName', serviceName)) return;
serviceConfigs.findProperty('serviceName', serviceName).set('selected', true);
});
@@ -537,7 +648,7 @@ App.WizardStep7Controller = Em.Controller.extend({
if (App.get('isHaEnabled')) {
var c = serviceConfigs.findProperty('serviceName', 'HDFS').configs;
var removedConfigs = c.filterProperty('category', 'SNameNode');
- removedConfigs.map(function(config) {
+ removedConfigs.map(function (config) {
c = c.without(config);
});
serviceConfigs.findProperty('serviceName', 'HDFS').configs = c;
@@ -552,7 +663,7 @@ App.WizardStep7Controller = Em.Controller.extend({
* Select first service at all in other cases
* @method selectProperService
*/
- selectProperService: function() {
+ selectProperService: function () {
if (this.get('wizardController.name') === 'addServiceController') {
this.set('selectedService', this.get('stepConfigs').filterProperty('selected', true).get('firstObject'));
}
@@ -566,7 +677,7 @@ App.WizardStep7Controller = Em.Controller.extend({
* @return {$.ajax|null}
* @method getConfigTags
*/
- getConfigTags: function() {
+ getConfigTags: function () {
return App.ajax.send({
name: 'config.tags.sync',
sender: this,
@@ -583,19 +694,21 @@ App.WizardStep7Controller = Em.Controller.extend({
getConfigTagsSuccess: function (data) {
var installedServiceSites = [];
this.get('serviceConfigsData').filter(function (service) {
- if (this.get('installedServiceNames').contains(service.serviceName)){
+ if (this.get('installedServiceNames').contains(service.serviceName)) {
installedServiceSites = installedServiceSites.concat(service.sites);
}
}, this);
installedServiceSites = installedServiceSites.uniq();
var serviceConfigTags = [];
for (var site in data.Clusters.desired_configs) {
- if (installedServiceSites.contains(site)) {
- serviceConfigTags.push({
- siteName: site,
- tagName: data.Clusters.desired_configs[site].tag,
- newTagName: null
- });
+ if (data.Clusters.desired_configs.hasOwnProperty(site)) {
+ if (installedServiceSites.contains(site)) {
+ serviceConfigTags.push({
+ siteName: site,
+ tagName: data.Clusters.desired_configs[site].tag,
+ newTagName: null
+ });
+ }
}
}
this.set('serviceConfigTags', serviceConfigTags);
@@ -609,7 +722,7 @@ App.WizardStep7Controller = Em.Controller.extend({
*/
setInstalledServiceConfigs: function (serviceConfigTags, configs) {
var configsMap = {};
- App.router.get('configurationController').getConfigsByTags(serviceConfigTags).forEach(function(configSite){
+ App.router.get('configurationController').getConfigsByTags(serviceConfigTags).forEach(function (configSite) {
$.extend(configsMap, configSite.properties);
});
configs.forEach(function (_config) {
@@ -629,9 +742,9 @@ App.WizardStep7Controller = Em.Controller.extend({
* @param {Ember.Object[]} groups
* @method setGroupsToDelete
*/
- setGroupsToDelete: function(groups) {
+ setGroupsToDelete: function (groups) {
var groupsToDelete = this.get('groupsToDelete');
- groups.forEach(function(group) {
+ groups.forEach(function (group) {
if (group.get('id'))
groupsToDelete.push({
id: group.get('id')
@@ -691,7 +804,7 @@ App.WizardStep7Controller = Em.Controller.extend({
serviceRawGroups.filterProperty('isDefault', false).forEach(function (configGroup) {
var readyGroup = App.ConfigGroup.create(configGroup);
var wrappedProperties = [];
- readyGroup.get('properties').forEach(function(property){
+ readyGroup.get('properties').forEach(function (property) {
wrappedProperties.pushObject(App.ServiceConfigProperty.create(property));
});
wrappedProperties.setEach('group', readyGroup);
@@ -725,7 +838,7 @@ App.WizardStep7Controller = Em.Controller.extend({
selectedGroup = this.get('selectedConfigGroup'),
overrideToAdd = this.get('overrideToAdd'),
overrides = [];
- if(!selectedGroup) return;
+ if (!selectedGroup) return;
var displayedConfigGroups = this._getDisplayedConfigGroups();
displayedConfigGroups.forEach(function (group) {
@@ -743,7 +856,7 @@ App.WizardStep7Controller = Em.Controller.extend({
* @return {Array}
* @method _getDisplayedConfigGroups
*/
- _getDisplayedConfigGroups: function() {
+ _getDisplayedConfigGroups: function () {
var selectedGroup = this.get('selectedConfigGroup');
if (!selectedGroup) return [];
return (selectedGroup.get('isDefault')) ?
@@ -757,7 +870,7 @@ App.WizardStep7Controller = Em.Controller.extend({
* @return {Ember.Object} updated config-object
* @method _setEditableValue
*/
- _setEditableValue: function(config) {
+ _setEditableValue: function (config) {
var selectedGroup = this.get('selectedConfigGroup');
if (!selectedGroup) return config;
var isEditable = config.get('isEditable'),
@@ -779,7 +892,7 @@ App.WizardStep7Controller = Em.Controller.extend({
* @returns {Ember.Object}
* @method _setOverrides
*/
- _setOverrides: function(config, overrides) {
+ _setOverrides: function (config, overrides) {
var selectedGroup = this.get('selectedConfigGroup'),
overrideToAdd = this.get('overrideToAdd'),
configOverrides = overrides.filterProperty('name', config.get('name'));
http://git-wip-us.apache.org/repos/asf/ambari/blob/4b0cd8fd/ambari-web/test/controllers/wizard/step7_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step7_test.js b/ambari-web/test/controllers/wizard/step7_test.js
index 52e00dd..b49c29c 100644
--- a/ambari-web/test/controllers/wizard/step7_test.js
+++ b/ambari-web/test/controllers/wizard/step7_test.js
@@ -870,7 +870,7 @@ describe('App.InstallerStep7Controller', function () {
})
});
});
- afterEach(function() {
+ afterEach(function () {
App.config.renderConfigs.restore();
});
it('if wizard isn\'t addService, should set output of App.config.renderConfigs', function () {
@@ -897,8 +897,8 @@ describe('App.InstallerStep7Controller', function () {
expect(installerStep7Controller.get('stepConfigs').findProperty('serviceName', 's2').get('selected')).to.equal(true);
});
it('addServiceWizard used, HA enabled', function () {
- sinon.stub(App, 'get', function(k) {
- if(k === 'isHaEnabled') {
+ sinon.stub(App, 'get', function (k) {
+ if (k === 'isHaEnabled') {
return true;
}
return Em.get(App, k);
@@ -929,12 +929,12 @@ describe('App.InstallerStep7Controller', function () {
});
});
- describe('#checkHostOverrideInstaller', function() {
- beforeEach(function() {
+ describe('#checkHostOverrideInstaller', function () {
+ beforeEach(function () {
sinon.stub(installerStep7Controller, 'loadConfigGroups', Em.K);
sinon.stub(installerStep7Controller, 'loadInstalledServicesConfigGroups', Em.K);
});
- afterEach(function() {
+ afterEach(function () {
installerStep7Controller.loadConfigGroups.restore();
installerStep7Controller.loadInstalledServicesConfigGroups.restore();
App.get.restore();
@@ -976,9 +976,9 @@ describe('App.InstallerStep7Controller', function () {
loadInstalledServicesConfigGroups: true
}
}
- ]).forEach(function(test) {
- it(test.m, function() {
- sinon.stub(App, 'get', function(k) {
+ ]).forEach(function (test) {
+ it(test.m, function () {
+ sinon.stub(App, 'get', function (k) {
if (k === 'supports.hostOverridesInstaller') return test.hostOverridesInstaller;
return Em.get(App, k);
});
@@ -1000,12 +1000,14 @@ describe('App.InstallerStep7Controller', function () {
});
});
- describe('#loadStep', function() {
- beforeEach(function() {
+ describe('#loadStep', function () {
+ beforeEach(function () {
installerStep7Controller.reopen({
content: {services: []},
wizardController: Em.Object.create({
- getDBProperty: function(k) {return this.get(k);}
+ getDBProperty: function (k) {
+ return this.get(k);
+ }
})
});
sinon.stub(App.config, 'mergePreDefinedWithStored', Em.K);
@@ -1022,7 +1024,7 @@ describe('App.InstallerStep7Controller', function () {
sinon.stub(installerStep7Controller, 'selectProperService', Em.K);
sinon.stub(App.router, 'send', Em.K);
});
- afterEach(function() {
+ afterEach(function () {
App.config.mergePreDefinedWithStored.restore();
App.config.addAdvancedConfigs.restore();
App.config.addCustomConfigs.restore();
@@ -1037,16 +1039,16 @@ describe('App.InstallerStep7Controller', function () {
installerStep7Controller.selectProperService.restore();
App.router.send.restore();
});
- it('should call clearStep', function() {
+ it('should call clearStep', function () {
installerStep7Controller.loadStep();
expect(installerStep7Controller.clearStep.calledOnce).to.equal(true);
});
- it('shouldn\'t do nothing if isAdvancedConfigLoaded is false', function() {
+ it('shouldn\'t do nothing if isAdvancedConfigLoaded is false', function () {
installerStep7Controller.set('isAdvancedConfigLoaded', false);
installerStep7Controller.loadStep();
expect(installerStep7Controller.clearStep.called).to.equal(false);
});
- it('should use App.config to map configs', function() {
+ it('should use App.config to map configs', function () {
installerStep7Controller.loadStep();
expect(App.config.mergePreDefinedWithStored.calledOnce).to.equal(true);
expect(App.config.addAdvancedConfigs.calledOnce).to.equal(true);
@@ -1075,14 +1077,14 @@ describe('App.InstallerStep7Controller', function () {
}
]).forEach(function (test) {
it('allSelectedServiceNames = ' + JSON.stringify(test.allSelectedServiceNames) + ', capacitySchedulerUi = ' + test.capacitySchedulerUi.toString(), function () {
- sinon.stub(App, 'get', function(k) {
+ sinon.stub(App, 'get', function (k) {
if (k === 'supports.capacitySchedulerUi') return test.capacitySchedulerUi;
return Em.get(App, k);
});
installerStep7Controller.reopen({allSelectedServiceNames: test.allSelectedServiceNames});
installerStep7Controller.loadStep();
if (test.e) {
- expect(App.config.fileConfigsIntoTextarea.calledOnce).to.equal(true);
+ expect(App.config.fileConfigsIntoTextarea.calledOnce).to.equal(true);
}
else {
expect(App.config.fileConfigsIntoTextarea.called).to.equal(false);
@@ -1090,19 +1092,19 @@ describe('App.InstallerStep7Controller', function () {
App.get.restore();
});
});
- it('should call getConfigTags, setInstalledServiceConfigs for addServiceController', function() {
+ it('should call getConfigTags, setInstalledServiceConfigs for addServiceController', function () {
installerStep7Controller.set('wizardController.name', 'addServiceController');
installerStep7Controller.loadStep();
expect(installerStep7Controller.getConfigTags.calledOnce).to.equal(true);
expect(installerStep7Controller.setInstalledServiceConfigs.calledOnce).to.equal(true);
});
Em.A([
- {
- allSelectedServiceNames: ['STORM'],
- installedServiceNames: ['STORM'],
- m: 'allSelectedServiceNames contains STORM, installedServiceNames contains STORM',
- e: true
- },
+ {
+ allSelectedServiceNames: ['STORM'],
+ installedServiceNames: ['STORM'],
+ m: 'allSelectedServiceNames contains STORM, installedServiceNames contains STORM',
+ e: true
+ },
{
allSelectedServiceNames: [],
installedServiceNames: ['STORM'],
@@ -1121,8 +1123,8 @@ describe('App.InstallerStep7Controller', function () {
m: 'allSelectedServiceNames doesn\'t contain STORM, installedServiceNames doesn\'t contain STORM',
e: false
}
- ]).forEach(function(test) {
- it(test.m, function() {
+ ]).forEach(function (test) {
+ it(test.m, function () {
installerStep7Controller.reopen({
allSelectedServiceNames: test.allSelectedServiceNames,
installedServiceNames: test.installedServiceNames
@@ -1136,19 +1138,19 @@ describe('App.InstallerStep7Controller', function () {
}
});
});
- it('should call setStepConfigs', function() {
+ it('should call setStepConfigs', function () {
installerStep7Controller.loadStep();
expect(installerStep7Controller.setStepConfigs.calledOnce).to.equal(true);
});
- it('should call checkHostOverrideInstaller', function() {
+ it('should call checkHostOverrideInstaller', function () {
installerStep7Controller.loadStep();
expect(installerStep7Controller.checkHostOverrideInstaller.calledOnce).to.equal(true);
});
- it('should call activateSpecialConfigs', function() {
+ it('should call activateSpecialConfigs', function () {
installerStep7Controller.loadStep();
expect(installerStep7Controller.activateSpecialConfigs.calledOnce).to.equal(true);
});
- it('should call selectProperService', function() {
+ it('should call selectProperService', function () {
installerStep7Controller.loadStep();
expect(installerStep7Controller.selectProperService.calledOnce).to.equal(true);
});
@@ -1163,17 +1165,306 @@ describe('App.InstallerStep7Controller', function () {
skipConfigStep: false,
e: false
}
- ]).forEach(function(test) {
- it(test.m, function() {
- installerStep7Controller.set('content.skipConfigStep', test.skipConfigStep);
- installerStep7Controller.loadStep();
- if (test.e) {
- expect(App.router.send.calledWith('next')).to.equal(true);
+ ]).forEach(function (test) {
+ it(test.m, function () {
+ installerStep7Controller.set('content.skipConfigStep', test.skipConfigStep);
+ installerStep7Controller.loadStep();
+ if (test.e) {
+ expect(App.router.send.calledWith('next')).to.equal(true);
+ }
+ else {
+ expect(App.router.send.called).to.equal(false);
+ }
+ });
+ });
+ });
+
+ describe('#_updateValueForCheckBoxConfig', function () {
+ Em.A([
+ {
+ v: 'true',
+ e: true
+ },
+ {
+ v: 'false',
+ e: false
}
- else {
- expect(App.router.send.called).to.equal(false);
+ ]).forEach(function (test) {
+ it(test.v, function () {
+ var serviceConfigProperty = Em.Object.create({value: test.v});
+ installerStep7Controller._updateValueForCheckBoxConfig(serviceConfigProperty);
+ expect(serviceConfigProperty.get('value')).to.equal(test.e);
+ expect(serviceConfigProperty.get('defaultValue')).to.equal(test.e);
+ });
+ });
+ });
+
+ describe('#_updateIsEditableFlagForConfig', function () {
+ Em.A([
+ {
+ isAdmin: false,
+ isReconfigurable: false,
+ isHostsConfigsPage: true,
+ defaultGroupSelected: false,
+ m: 'false for non-admin users',
+ e: false
+ },
+ {
+ isAdmin: true,
+ isReconfigurable: false,
+ isHostsConfigsPage: true,
+ defaultGroupSelected: false,
+ m: 'false if defaultGroupSelected is false and isHostsConfigsPage is true',
+ e: false
+ },
+ {
+ isAdmin: true,
+ isReconfigurable: false,
+ isHostsConfigsPage: true,
+ defaultGroupSelected: true,
+ m: 'false if defaultGroupSelected is true and isHostsConfigsPage is true',
+ e: false
+ },
+ {
+ isAdmin: true,
+ isReconfigurable: false,
+ isHostsConfigsPage: false,
+ defaultGroupSelected: false,
+ m: 'false if defaultGroupSelected is false and isHostsConfigsPage is false',
+ e: false
+ },
+ {
+ isAdmin: true,
+ isReconfigurable: true,
+ isHostsConfigsPage: false,
+ defaultGroupSelected: true,
+ m: 'equal to isReconfigurable if defaultGroupSelected is true and isHostsConfigsPage is false',
+ e: true
}
+ ]).forEach(function (test) {
+ it(test.m, function () {
+ sinon.stub(App, 'get', function (k) {
+ if (k === 'isAdmin') return test.isAdmin;
+ return Em.get(App, k);
+ });
+ installerStep7Controller.reopen({isHostsConfigsPage: test.isHostsConfigsPage});
+ var serviceConfigProperty = Em.Object.create({
+ isReconfigurable: test.isReconfigurable
+ });
+ installerStep7Controller._updateIsEditableFlagForConfig(serviceConfigProperty, test.defaultGroupSelected);
+ App.get.restore();
+ expect(serviceConfigProperty.get('isEditable')).to.equal(test.e);
+ });
});
+ });
+
+ describe('#_updateOverridesForConfig', function () {
+
+ it('should set empty array', function () {
+ var serviceConfigProperty = Em.Object.create({
+ overrides: null
+ }), component = Em.Object.create();
+ installerStep7Controller._updateOverridesForConfig(serviceConfigProperty, component);
+ expect(serviceConfigProperty.get('overrides')).to.eql(Em.A([]));
+ });
+
+ it('host overrides not supported', function () {
+ var serviceConfigProperty = Em.Object.create({
+ overrides: [
+ {value: 'new value'}
+ ]
+ }), component = Em.Object.create({selectedConfigGroup: {isDefault: false}});
+ installerStep7Controller._updateOverridesForConfig(serviceConfigProperty, component);
+ expect(serviceConfigProperty.get('overrides').length).to.equal(1);
+ expect(serviceConfigProperty.get('overrides.firstObject.value')).to.equal('new value');
+ expect(serviceConfigProperty.get('overrides.firstObject.isOriginalSCP')).to.equal(false);
+ expect(serviceConfigProperty.get('overrides.firstObject.parentSCP')).to.eql(serviceConfigProperty);
+ });
+
+ it('host overrides supported', function () {
+ sinon.stub(App, 'get', function (k) {
+ if (k === 'supports.hostOverrides') return true;
+ return Em.get(App, k);
+ });
+ var serviceConfigProperty = Em.Object.create({
+ overrides: [
+ {value: 'new value', group: Em.Object.create({name: 'n1'})}
+ ]
+ }),
+ component = Em.Object.create({
+ selectedConfigGroup: {isDefault: true},
+ configGroups: Em.A([
+ Em.Object.create({name: 'n1', properties: []})
+ ])
+ });
+ installerStep7Controller._updateOverridesForConfig(serviceConfigProperty, component);
+ App.get.restore();
+ expect(serviceConfigProperty.get('overrides').length).to.equal(1);
+ expect(serviceConfigProperty.get('overrides.firstObject.value')).to.equal('new value');
+ expect(serviceConfigProperty.get('overrides.firstObject.isOriginalSCP')).to.equal(false);
+ expect(serviceConfigProperty.get('overrides.firstObject.parentSCP')).to.eql(serviceConfigProperty);
+ expect(component.get('configGroups.firstObject.properties').length).to.equal(1);
+ expect(component.get('configGroups.firstObject.properties.firstObject.isEditable')).to.equal(false);
+ expect(component.get('configGroups.firstObject.properties.firstObject.group')).to.be.object;
+ });
+
+ });
+
+ describe('#_updateValidatorsForConfig', function () {
+
+ it('should set isVisible to false', function () {
+ var serviceConfigProperty = Em.Object.create({serviceName: 's1', isVisible: true}),
+ component = Em.Object.create({serviceName: 's2'}),
+ serviceConfigsData = {};
+ installerStep7Controller._updateValidatorsForConfig(serviceConfigProperty, component, serviceConfigsData);
+ expect(serviceConfigProperty.get('isVisible')).to.equal(false);
+ });
+
+ it('should set serviceValidator', function () {
+ var serviceConfigProperty = Em.Object.create({serviceName: 's1', name: 'n1', serviceValidator: null}),
+ component = Em.Object.create({serviceName: 's1'}),
+ serviceConfigsData = {
+ configsValidator: Em.Object.create({
+ configValidators: {
+ n1: {},
+ n2: {}
+ }
+ })
+ };
+ installerStep7Controller._updateValidatorsForConfig(serviceConfigProperty, component, serviceConfigsData);
+ expect(serviceConfigProperty.get('serviceValidator')).to.be.object;
+ expect(Em.keys(serviceConfigProperty.get('serviceValidator.configValidators'))).to.eql(['n1', 'n2']);
+ });
+
+ });
+
+ describe('#getRecommendedDefaultsForComponent', function () {
+ beforeEach(function () {
+ sinon.stub(App.router, 'get', function (k) {
+ if (k === 'mainServiceInfoConfigsController') return Em.Object.create({
+ getInfoForDefaults: Em.K
+ });
+ return Em.get(App.router, k);
+ });
+ });
+ afterEach(function () {
+ App.router.get.restore();
+ });
+ it('should return empty object', function () {
+ var serviceConfigsData = [
+ {serviceName: 's1'}
+ ],
+ serviceName = 's1';
+ installerStep7Controller.reopen({serviceConfigsData: serviceConfigsData});
+ var r = installerStep7Controller._getRecommendedDefaultsForComponent(serviceName);
+ expect(r).to.eql({});
+ });
+
+ it('should return recommendedDefaults', function () {
+ var serviceConfigsData = [
+ {serviceName: 's1', defaultsProviders: [
+ {getDefaults: function () {
+ return {c1: 'v1', c2: 'v2'};
+ }},
+ {getDefaults: function () {
+ return {c3: 'v3', c4: 'v4'};
+ }}
+ ]}
+ ],
+ serviceName = 's1';
+ installerStep7Controller.reopen({serviceConfigsData: serviceConfigsData});
+ var r = installerStep7Controller._getRecommendedDefaultsForComponent(serviceName);
+ expect(r).to.eql({c1: 'v1', c2: 'v2', c3: 'v3', c4: 'v4'});
+ });
+
+ });
+
+ describe('#loadComponentConfigs', function () {
+
+ beforeEach(function () {
+ sinon.stub(installerStep7Controller, '_updateValidatorsForConfig', Em.K);
+ sinon.stub(installerStep7Controller, '_updateOverridesForConfig', Em.K);
+ sinon.stub(installerStep7Controller, '_updateIsEditableFlagForConfig', Em.K);
+ });
+
+ afterEach(function () {
+ installerStep7Controller._updateIsEditableFlagForConfig.restore();
+ installerStep7Controller._updateOverridesForConfig.restore();
+ installerStep7Controller._updateValidatorsForConfig.restore();
+ });
+
+ it('should set recommended defaults', function () {
+ var configs = [],
+ serviceConfigsData = [
+ {serviceName: 's1', configsValidator: Em.Object.create({recommendedDefaults: {}})}
+ ],
+ component = Em.Object.create({serviceName: 's1'}),
+ componentConfig = {},
+ recommendedDefaults = {c1: 'v1', c2: 'v2'};
+ installerStep7Controller.reopen({serviceConfigsData: serviceConfigsData});
+ sinon.stub(installerStep7Controller, '_getRecommendedDefaultsForComponent', function () {
+ return recommendedDefaults;
+ });
+ installerStep7Controller.loadComponentConfigs(configs, componentConfig, component);
+ installerStep7Controller._getRecommendedDefaultsForComponent.restore();
+ expect(installerStep7Controller.get('serviceConfigsData.firstObject.configsValidator.recommendedDefaults')).to.eql(recommendedDefaults);
+ });
+
+ it('should skip null configs', function () {
+ var configs = [null, null, null],
+ serviceConfigsData = [
+ {serviceName: 's1'}
+ ],
+ component = Em.Object.create({serviceName: 's1'}),
+ componentConfig = Em.Object.create({configs: []});
+ installerStep7Controller.reopen({serviceConfigsData: serviceConfigsData});
+ installerStep7Controller.loadComponentConfigs(configs, componentConfig, component);
+ expect(componentConfig.get('configs.length')).to.equal(0);
+ });
+
+ it('should update isOverridable flag', function () {
+ var configs = [Em.Object.create({validate: Em.K}), Em.Object.create({validate: Em.K})],
+ componentConfig = Em.Object.create({configs: []}),
+ serviceConfigsData = [
+ {serviceName: 's1'}
+ ],
+ component = Em.Object.create({serviceName: 's1'});
+ installerStep7Controller.reopen({serviceConfigsData: serviceConfigsData});
+ installerStep7Controller.loadComponentConfigs(configs, componentConfig, component);
+ expect(componentConfig.get('configs').getEach('isOverridable')).to.eql([true, true]);
+ });
+
+ it('should update value for checkboxes', function () {
+ var configs = [
+ Em.Object.create({displayType: 'checkbox', value: 'true', validate: Em.K}),
+ Em.Object.create({displayType: 'checkbox', value: 'false', validate: Em.K})
+ ],
+ componentConfig = Em.Object.create({configs: []}),
+ serviceConfigsData = [
+ {serviceName: 's1'}
+ ],
+ component = Em.Object.create({serviceName: 's1'});
+ installerStep7Controller.reopen({serviceConfigsData: serviceConfigsData});
+ installerStep7Controller.loadComponentConfigs(configs, componentConfig, component);
+ expect(componentConfig.get('configs').getEach('value')).to.eql([true, false]);
+ expect(componentConfig.get('configs').getEach('defaultValue')).to.eql([true, false]);
+ });
+
+ });
+
+ describe('#_createSiteToTagMap', function () {
+ it('should map sites', function () {
+ var desired_configs = {
+ s1: {tag: 't1'},
+ s2: {tag: 't1'},
+ s3: {tag: 't3'},
+ s4: {tag: 't1'},
+ s5: {tag: 't2'}
+ },
+ sites = ['s1', 's2', 's3'],
+ expected = {s1: 't1', s2: 't1', s3: 't3'};
+ var r = installerStep7Controller._createSiteToTagMap(desired_configs, sites);
+ expect(r).to.eql(expected);
});
});