You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2016/01/21 20:21:00 UTC
[01/22] ambari git commit: AMBARI-14724. Provide option to +Add Oozie
Server in Service Actions menu (akovalenko)
Repository: ambari
Updated Branches:
refs/heads/branch-dev-patch-upgrade fc402ebc5 -> abc961a13
AMBARI-14724. Provide option to +Add Oozie Server in Service Actions menu (akovalenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/8b7aa920
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/8b7aa920
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/8b7aa920
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 8b7aa920bb7d34361e4b2ee2059c547fe01ca238
Parents: a7a9796
Author: Aleksandr Kovalenko <ak...@hortonworks.com>
Authored: Tue Jan 19 18:34:08 2016 +0200
Committer: Aleksandr Kovalenko <ak...@hortonworks.com>
Committed: Wed Jan 20 19:00:23 2016 +0200
----------------------------------------------------------------------
ambari-web/app/controllers/main/service/item.js | 176 +++++++++++--------
.../app/mixins/common/configs/configs_saver.js | 4 +
ambari-web/app/views/main/service/item.js | 120 +++++++------
ambari-web/test/views/main/service/item_test.js | 16 +-
4 files changed, 184 insertions(+), 132 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/8b7aa920/ambari-web/app/controllers/main/service/item.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/item.js b/ambari-web/app/controllers/main/service/item.js
index 2c1d4cc..59559eb 100644
--- a/ambari-web/app/controllers/main/service/item.js
+++ b/ambari-web/app/controllers/main/service/item.js
@@ -45,6 +45,20 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow
},
/**
+ * Map of service names and lists of sites they need to load
+ */
+ serviceConfigsMap: {
+ 'OOZIE': ['oozie-env']
+ },
+
+ /**
+ * Configs loaded to use for service actions menu
+ *
+ * format: {config-type: {property-name1: property-value1, property-name2: property-value2, ...}}
+ */
+ configs: {},
+
+ /**
* @type {boolean}
* @default true
*/
@@ -56,42 +70,11 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow
*/
isServicesInfoLoaded: false,
- initHosts: function() {
- if (App.get('components.masters').length !== 0) {
- ['HBASE_MASTER', 'HIVE_METASTORE', 'ZOOKEEPER_SERVER', 'FLUME_HANDLER', 'HIVE_SERVER', 'RANGER_KMS_SERVER', 'NIMBUS'].forEach(function(componentName) {
- this.loadHostsWithoutComponent(componentName);
- }, this);
- }
- }.observes('App.components.masters', 'content.hostComponents.length'),
-
- loadHostsWithoutComponent: function (componentName) {
- var self = this;
- var hostsWithComponent = App.HostComponent.find().filterProperty('componentName', componentName).mapProperty('hostName');
-
- var hostsWithoutComponent = App.get('allHostNames').filter(function(hostName) {
- return !hostsWithComponent.contains(hostName);
- });
-
- self.set('add' + componentName, function() {
- App.get('router.mainAdminKerberosController').getKDCSessionState(function() {
- self.addComponent(componentName);
- });
- });
-
- Em.defineProperty(self, 'addDisabledTooltip-' + componentName, Em.computed('isAddDisabled-' + componentName, 'addDisabledMsg-' + componentName, function() {
- if (self.get('isAddDisabled-' + componentName)) {
- return self.get('addDisabledMsg-' + componentName);
- }
- }));
-
- Em.defineProperty(self, 'isAddDisabled-' + componentName, Em.computed('hostsWithoutComponent-' + componentName, function() {
- return self.get('hostsWithoutComponent-' + componentName).length === 0 ? 'disabled' : '';
- }));
-
- var disabledMsg = Em.I18n.t('services.summary.allHostsAlreadyRunComponent').format(componentName);
- self.set('hostsWithoutComponent-' + componentName, hostsWithoutComponent);
- self.set('addDisabledMsg-' + componentName, disabledMsg);
- },
+ /**
+ * Define whether configs for service actions menu were loaded
+ * @type {Boolean}
+ */
+ isServiceConfigsLoaded: false,
/**
* flag to control router switch between service summary and configs
@@ -123,6 +106,48 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow
}.property('content.serviceName'),
/**
+ * Load all config tags for loading configs
+ */
+ loadConfigs: function(){
+ if (this.get('serviceConfigsMap')[this.get('content.serviceName')]) {
+ this.set('isServiceConfigsLoaded', false);
+ App.ajax.send({
+ name: 'config.tags',
+ sender: this,
+ success: 'onLoadConfigsTags',
+ error: 'onTaskError'
+ });
+ } else {
+ this.set('isServiceConfigsLoaded', true);
+ }
+ },
+
+ /**
+ * Load all configs for sites from <code>serviceConfigsMap</code> for current service
+ * @param data
+ */
+ onLoadConfigsTags: function (data) {
+ var self = this;
+ var sitesToLoad = this.get('serviceConfigsMap')[this.get('content.serviceName')];
+ var loadedSites = data.Clusters.desired_configs;
+ var siteTagsToLoad = [];
+ for (var site in loadedSites) {
+ if (sitesToLoad.contains(site)) {
+ siteTagsToLoad.push({
+ siteName: site,
+ tagName: loadedSites[site].tag
+ });
+ }
+ }
+ App.router.get('configurationController').getConfigsByTags(siteTagsToLoad).done(function (configs) {
+ configs.forEach(function (site) {
+ self.get('configs')[site.type] = site.properties;
+ });
+ self.set('isServiceConfigsLoaded', true);
+ });
+ },
+
+ /**
* Common method for ajax (start/stop service) responses
* @param data
* @param ajaxOptions
@@ -779,60 +804,59 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow
var component = App.StackServiceComponent.find().findProperty('componentName', componentName);
var componentDisplayName = component.get('displayName');
- self.loadHostsWithoutComponent(componentName);
+ App.get('router.mainAdminKerberosController').getKDCSessionState(function () {
+ return App.ModalPopup.show({
+ primary: Em.computed.ifThenElse('anyHostsWithoutComponent', Em.I18n.t('hosts.host.addComponent.popup.confirm'), undefined),
- return App.ModalPopup.show({
- primary: Em.computed.ifThenElse('anyHostsWithoutComponent', Em.I18n.t('hosts.host.addComponent.popup.confirm'), undefined),
+ header: Em.I18n.t('popup.confirmation.commonHeader'),
- header: Em.I18n.t('popup.confirmation.commonHeader'),
+ addComponentMsg: Em.I18n.t('hosts.host.addComponent.msg').format(componentDisplayName),
- addComponentMsg: Em.I18n.t('hosts.host.addComponent.msg').format(componentDisplayName),
+ selectHostMsg: Em.computed.i18nFormat('services.summary.selectHostForComponent', 'componentDisplayName'),
- selectHostMsg: Em.computed.i18nFormat('services.summary.selectHostForComponent', 'componentDisplayName'),
+ thereIsNoHostsMsg: Em.computed.i18nFormat('services.summary.allHostsAlreadyRunComponent', 'componentDisplayName'),
- thereIsNoHostsMsg: Em.computed.i18nFormat('services.summary.allHostsAlreadyRunComponent', 'componentDisplayName'),
+ hostsWithoutComponent: function () {
+ var hostsWithComponent = App.HostComponent.find().filterProperty('componentName', componentName).mapProperty('hostName');
+ var result = App.get('allHostNames');
- hostsWithoutComponent: function() {
- return self.get("hostsWithoutComponent-" + this.get('componentName'));
- }.property('componentName', 'self.hostsWithoutComponent-' + this.get('componentName')),
+ hostsWithComponent.forEach(function (host) {
+ result = result.without(host);
+ });
- anyHostsWithoutComponent: Em.computed.gt('hostsWithoutComponent.length', 0),
+ return result;
+ }.property(),
- selectedHost: null,
+ anyHostsWithoutComponent: Em.computed.gt('hostsWithoutComponent.length', 0),
- componentName: componentName,
+ selectedHost: null,
- componentDisplayName: componentDisplayName,
+ componentName: componentName,
- bodyClass: Em.View.extend({
- templateName: require('templates/main/service/add_host_popup')
- }),
+ componentDisplayName: componentDisplayName,
- onPrimary: function () {
- var selectedHost = this.get('selectedHost');
-
- // Install
- if(['HIVE_METASTORE', 'RANGER_KMS_SERVER', 'NIMBUS'].contains(component.get('componentName')) && !!selectedHost){
- App.router.get('mainHostDetailsController').addComponentWithCheck(
- {
- context: component,
- selectedHost: selectedHost
- }
- );
- } else {
- self.installHostComponentCall(selectedHost, component);
- }
+ bodyClass: Em.View.extend({
+ templateName: require('templates/main/service/add_host_popup')
+ }),
- // Remove host from 'without' collection to immediate recalculate add menu item state
- var hostsWithoutComponent = this.get('hostsWithoutComponent');
- var index = hostsWithoutComponent.indexOf(this.get('selectedHost'));
- if (index > -1) {
- hostsWithoutComponent.splice(index, 1);
- }
+ onPrimary: function () {
+ var selectedHost = this.get('selectedHost');
- self.set('hostsWithoutComponent-' + this.get('componentName'), hostsWithoutComponent);
- this.hide();
- }
+ // Install
+ if (['HIVE_METASTORE', 'RANGER_KMS_SERVER', 'NIMBUS'].contains(component.get('componentName')) && !!selectedHost) {
+ App.router.get('mainHostDetailsController').addComponentWithCheck(
+ {
+ context: component,
+ selectedHost: selectedHost
+ }
+ );
+ } else {
+ self.installHostComponentCall(selectedHost, component);
+ }
+
+ this.hide();
+ }
+ });
});
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/8b7aa920/ambari-web/app/mixins/common/configs/configs_saver.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/configs_saver.js b/ambari-web/app/mixins/common/configs/configs_saver.js
index 383e4d0..d2b2623 100644
--- a/ambari-web/app/mixins/common/configs/configs_saver.js
+++ b/ambari-web/app/mixins/common/configs/configs_saver.js
@@ -619,6 +619,10 @@ App.ConfigsSaverMixin = Em.Mixin.create({
App.QuickViewLinks.proto().set('content', currentService);
App.QuickViewLinks.proto().loadTags();
}
+
+ // update configs for service actions
+ App.router.get('mainServiceItemController').loadConfigs();
+
this.showSaveConfigsPopup(header, flag, message, messageClass, value, status, urlParams);
this.clearAllRecommendations();
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/8b7aa920/ambari-web/app/views/main/service/item.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/item.js b/ambari-web/app/views/main/service/item.js
index cb9782c..659a0a5 100644
--- a/ambari-web/app/views/main/service/item.js
+++ b/ambari-web/app/views/main/service/item.js
@@ -41,52 +41,58 @@ App.MainServiceItemView = Em.View.extend({
addActionMap: function() {
return [
- {
- cssClass: 'icon-plus',
- 'label': '{0} {1}'.format(Em.I18n.t('add'), Em.I18n.t('dashboard.services.hbase.masterServer')),
- service: 'HBASE',
- component: 'HBASE_MASTER'
- },
- {
- cssClass: 'icon-plus',
- 'label': '{0} {1}'.format(Em.I18n.t('add'), Em.I18n.t('dashboard.services.hive.metastore')),
- service: 'HIVE',
- component: 'HIVE_METASTORE',
- isHidden: !App.get('isHadoop22Stack')
- },
- {
- cssClass: 'icon-plus',
- 'label': '{0} {1}'.format(Em.I18n.t('add'), Em.I18n.t('dashboard.services.hive.server2')),
- service: 'HIVE',
- component: 'HIVE_SERVER',
- isHidden: !App.get('isHadoop22Stack')
- },
- {
- cssClass: 'icon-plus',
- 'label': '{0} {1}'.format(Em.I18n.t('add'), Em.I18n.t('dashboard.services.zookeeper.server')),
- service: 'ZOOKEEPER',
- component: 'ZOOKEEPER_SERVER'
- },
- {
- cssClass: 'icon-plus',
- 'label': '{0} {1}'.format(Em.I18n.t('add'), Em.I18n.t('dashboard.services.flume.agentLabel')),
- service: 'FLUME',
- component: 'FLUME_HANDLER'
- },
- {
- cssClass: 'icon-plus',
- 'label': '{0} {1}'.format(Em.I18n.t('add'), App.format.role('RANGER_KMS_SERVER')),
- service: 'RANGER_KMS',
- component: 'RANGER_KMS_SERVER'
- },
- {
- cssClass: 'icon-plus',
- 'label': '{0} {1}'.format(Em.I18n.t('add'), App.format.role('NIMBUS')),
- service: 'STORM',
- component: 'NIMBUS'
- }
- ]
- },
+ {
+ cssClass: 'icon-plus',
+ 'label': '{0} {1}'.format(Em.I18n.t('add'), Em.I18n.t('dashboard.services.hbase.masterServer')),
+ service: 'HBASE',
+ component: 'HBASE_MASTER'
+ },
+ {
+ cssClass: 'icon-plus',
+ 'label': '{0} {1}'.format(Em.I18n.t('add'), Em.I18n.t('dashboard.services.hive.metastore')),
+ service: 'HIVE',
+ component: 'HIVE_METASTORE',
+ isHidden: !App.get('isHadoop22Stack')
+ },
+ {
+ cssClass: 'icon-plus',
+ 'label': '{0} {1}'.format(Em.I18n.t('add'), Em.I18n.t('dashboard.services.hive.server2')),
+ service: 'HIVE',
+ component: 'HIVE_SERVER',
+ isHidden: !App.get('isHadoop22Stack')
+ },
+ {
+ cssClass: 'icon-plus',
+ 'label': '{0} {1}'.format(Em.I18n.t('add'), Em.I18n.t('dashboard.services.zookeeper.server')),
+ service: 'ZOOKEEPER',
+ component: 'ZOOKEEPER_SERVER'
+ },
+ {
+ cssClass: 'icon-plus',
+ 'label': '{0} {1}'.format(Em.I18n.t('add'), Em.I18n.t('dashboard.services.flume.agentLabel')),
+ service: 'FLUME',
+ component: 'FLUME_HANDLER'
+ },
+ {
+ cssClass: 'icon-plus',
+ 'label': '{0} {1}'.format(Em.I18n.t('add'), App.format.role('RANGER_KMS_SERVER')),
+ service: 'RANGER_KMS',
+ component: 'RANGER_KMS_SERVER'
+ },
+ {
+ cssClass: 'icon-plus',
+ 'label': '{0} {1}'.format(Em.I18n.t('add'), App.format.role('NIMBUS')),
+ service: 'STORM',
+ component: 'NIMBUS'
+ },
+ {
+ cssClass: 'icon-plus',
+ 'label': '{0} {1}'.format(Em.I18n.t('add'), App.format.role('OOZIE_SERVER')),
+ service: 'OOZIE',
+ component: 'OOZIE_SERVER'
+ }
+ ]
+ },
/**
* Create option for MOVE_COMPONENT or ROLLING_RESTART task.
*
@@ -103,7 +109,7 @@ App.MainServiceItemView = Em.View.extend({
isMaintenanceSet: false,
observeMaintenance: function() {
- if (!this.get('isMaintenanceSet') && this.get('controller.isServicesInfoLoaded')) {
+ if (!this.get('isMaintenanceSet') && this.get('controller.isServicesInfoLoaded') && this.get('controller.isServiceConfigsLoaded')) {
this.observeMaintenanceOnce();
}
Em.run.once(this, 'clearIsMaintenanceSet');
@@ -200,15 +206,24 @@ App.MainServiceItemView = Em.View.extend({
component: hawqMasterComponent.get('componentName'),
command: customCommandToStopCluster
}
- }))
+ }));
}
}
self.addActionMap().filterProperty('service', serviceName).forEach(function(item) {
if (App.get('components.addableToHost').contains(item.component)) {
- item.action = 'add' + item.component;
- item.disabled = self.get('controller.isAddDisabled-' + item.component);
- item.tooltip = self.get('controller.addDisabledTooltip' + item.component);
+
+ var isEnabled = App.HostComponent.find().filterProperty('componentName', item.component).length < App.get('allHostNames.length');
+
+ if (item.component === 'OOZIE_SERVER') {
+ isEnabled = isEnabled && !(Em.isEmpty(self.get('controller.configs.oozie-env.oozie_database')) || self.get('controller.configs.oozie-env.oozie_database') === 'New Derby Database');
+ }
+
+ item.action = 'addComponent';
+ item.disabled = isEnabled ? '' : 'disabled';
+ item.tooltip = isEnabled ? '' : Em.I18n.t('services.summary.allHostsAlreadyRunComponent').format(item.component);
+ item.context = item.component;
+
options.push(item);
}
});
@@ -282,10 +297,11 @@ App.MainServiceItemView = Em.View.extend({
this.get('controller').setStartStopState();
},
- maintenanceObsFields: ['isStopDisabled', 'isClientsOnlyService', 'content.isRestartRequired', 'isServicesInfoLoaded'],
+ maintenanceObsFields: ['isStopDisabled', 'isClientsOnlyService', 'content.isRestartRequired', 'isServicesInfoLoaded', 'isServiceConfigsLoaded'],
willInsertElement: function () {
var self = this;
+ this.get('controller').loadConfigs();
this.get('maintenanceObsFields').forEach(function (field) {
self.addObserver('controller.' + field, self, 'observeMaintenance');
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/8b7aa920/ambari-web/test/views/main/service/item_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/service/item_test.js b/ambari-web/test/views/main/service/item_test.js
index af94f01..9feb187 100644
--- a/ambari-web/test/views/main/service/item_test.js
+++ b/ambari-web/test/views/main/service/item_test.js
@@ -84,24 +84,28 @@ describe('App.MainServiceItemView', function () {
{
isMaintenanceSet: true,
isServicesInfoLoaded: true,
+ isServiceConfigsLoaded: true,
observeMaintenanceOnceCallCount: 0,
title: 'actions array set, services info loaded'
},
{
isMaintenanceSet: true,
isServicesInfoLoaded: false,
+ isServiceConfigsLoaded: true,
observeMaintenanceOnceCallCount: 0,
title: 'actions array set, services info not loaded'
},
{
isMaintenanceSet: false,
isServicesInfoLoaded: true,
+ isServiceConfigsLoaded: true,
observeMaintenanceOnceCallCount: 1,
title: 'actions array not set, services info loaded'
},
{
isMaintenanceSet: false,
isServicesInfoLoaded: false,
+ isServiceConfigsLoaded: true,
observeMaintenanceOnceCallCount: 0,
title: 'actions array not set, services info not loaded'
}
@@ -119,7 +123,8 @@ describe('App.MainServiceItemView', function () {
it(item.title, function () {
view.setProperties({
'isMaintenanceSet': item.isMaintenanceSet,
- 'controller.isServicesInfoLoaded': item.isServicesInfoLoaded
+ 'controller.isServicesInfoLoaded': item.isServicesInfoLoaded,
+ 'controller.isServiceConfigsLoaded': item.isServiceConfigsLoaded
});
view.observeMaintenance();
expect(view.observeMaintenanceOnce.callCount).to.equal(item.observeMaintenanceOnceCallCount);
@@ -206,7 +211,7 @@ describe('App.MainServiceItemView', function () {
{"action": "restartAllHostComponents", "context": "ZOOKEEPER", "label": "Restart All", "cssClass": "icon-repeat", "disabled": false},
{"action": "runSmokeTest", "label": "Run Service Check", "cssClass": "icon-thumbs-up-alt", "disabled": false},
{"action": "turnOnOffPassive", "context": "Turn On Maintenance Mode for ZooKeeper", "label": "Turn On Maintenance Mode", "cssClass": "icon-medkit", "disabled": false},
- {"cssClass": "icon-plus", "label": "Add ZooKeeper Server", "service": "ZOOKEEPER", "component": "ZOOKEEPER_SERVER", "action": "addZOOKEEPER_SERVER", "disabled": "disabled", tooltip: ''},
+ {"cssClass": "icon-plus", "label": "Add ZooKeeper Server", "service": "ZOOKEEPER", "component": "ZOOKEEPER_SERVER", "action": "addComponent", "disabled": "", tooltip: ''},
{"action": "downloadClientConfigs", "label": "Download Client Configs", "cssClass": "icon-download-alt", "isHidden": false, "disabled": false, "hasSubmenu": false, "submenuOptions": []}
]
},
@@ -319,7 +324,7 @@ describe('App.MainServiceItemView', function () {
{"action": "rollingRestart", "label": "Restart Flumes", "cssClass": "icon-time", "disabled": false, "context": "FLUME_HANDLER"},
{"action": "runSmokeTest", "label": "Run Service Check", "cssClass": "icon-thumbs-up-alt", "disabled": false},
{"action": "turnOnOffPassive", "context": "Turn On Maintenance Mode for Flume", "label": "Turn On Maintenance Mode", "cssClass": "icon-medkit", "disabled": false},
- {"cssClass": "icon-plus", "label": "Add Flume Component", "service": "FLUME", "component": "FLUME_HANDLER", "action": "addFLUME_HANDLER", "disabled": '', tooltip: ''},
+ {"cssClass": "icon-plus", "label": "Add Flume Component", "service": "FLUME", "component": "FLUME_HANDLER", "action": "addComponent", "disabled": '', tooltip: ''},
{"action": "downloadClientConfigs", "label": "Download Client Configs", "cssClass": "icon-download-alt", "isHidden": true, "disabled": false, "hasSubmenu": false, "submenuOptions": []}
]
},
@@ -355,7 +360,7 @@ describe('App.MainServiceItemView', function () {
{"action": "rollingRestart", "label": "Restart RegionServers", "cssClass": "icon-time", "disabled": false, "context": "HBASE_REGIONSERVER"},
{"action": "runSmokeTest", "label": "Run Service Check", "cssClass": "icon-thumbs-up-alt", "disabled": false},
{"action": "turnOnOffPassive", "context": "Turn On Maintenance Mode for HBase", "label": "Turn On Maintenance Mode", "cssClass": "icon-medkit", "disabled": false},
- {"cssClass": "icon-plus", "label": "Add HBase Master", "service": "HBASE", "component": "HBASE_MASTER", "action": "addHBASE_MASTER", "disabled": '', tooltip: ''},
+ {"cssClass": "icon-plus", "label": "Add HBase Master", "service": "HBASE", "component": "HBASE_MASTER", "action": "addComponent", "disabled": '', tooltip: ''},
{"action": "downloadClientConfigs", "label": "Download Client Configs", "cssClass": "icon-download-alt", "isHidden": false, "disabled": false, "hasSubmenu": false, "submenuOptions": []}
]
},
@@ -382,6 +387,7 @@ describe('App.MainServiceItemView', function () {
{"action": "reassignMaster", "context": "OOZIE_SERVER", "label": "Move Oozie Server", "cssClass": "icon-share-alt", "disabled": false},
{"action": "runSmokeTest", "label": "Run Service Check", "cssClass": "icon-thumbs-up-alt", "disabled": false},
{"action": "turnOnOffPassive", "context": "Turn On Maintenance Mode for Oozie", "label": "Turn On Maintenance Mode", "cssClass": "icon-medkit", "disabled": false},
+ {"cssClass": "icon-plus", "label": "Add Oozie Server", "service": "OOZIE", "component": "OOZIE_SERVER", "action": "addComponent", "disabled": "disabled", tooltip: Em.I18n.t('services.summary.allHostsAlreadyRunComponent').format('OOZIE_SERVER')},
{"action": "downloadClientConfigs", "label": "Download Client Configs", "cssClass": "icon-download-alt", "isHidden": false, "disabled": false, "hasSubmenu": false, "submenuOptions": []}
]
},
@@ -449,6 +455,8 @@ describe('App.MainServiceItemView', function () {
return ["HDFS", "MAPREDUCE2", "YARN", "HIVE", "HBASE", "PIG", "SQOOP", "OOZIE", "ZOOKEEPER", "FALCON", "STORM", "FLUME", "SLIDER", "KNOX", "KAFKA"];
case 'components.addableToHost':
return ["DATANODE", "HDFS_CLIENT", "MAPREDUCE2_CLIENT", "NODEMANAGER", "YARN_CLIENT", "TEZ_CLIENT", "GANGLIA_MONITOR", "HCAT", "HIVE_CLIENT", "HIVE_METASTORE", "HIVE_SERVER", "WEBHCAT_SERVER", "HBASE_CLIENT", "HBASE_MASTER", "HBASE_REGIONSERVER", "PIG", "SQOOP", "OOZIE_CLIENT", "OOZIE_SERVER", "ZOOKEEPER_CLIENT", "ZOOKEEPER_SERVER", "FALCON_CLIENT", "SUPERVISOR", "FLUME_HANDLER", "METRICS_MONITOR", "KAFKA_BROKER", "KERBEROS_CLIENT", "KNOX_GATEWAY", "SLIDER", "SPARK_CLIENT"];
+ case 'allHostNames.length':
+ return 2;
default:
return Em.get(App, k);
}
[17/22] ambari git commit: AMBARI-14710. AMBARI-14710 : Add retry
logic for REST calls between Ambari and Ranger (aonishuk)
Posted by nc...@apache.org.
AMBARI-14710. AMBARI-14710 : Add retry logic for REST calls between Ambari and Ranger (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1217a56d
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1217a56d
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1217a56d
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 1217a56dcfba4ffec9ec87c4baa12790b31b45a2
Parents: 3c45529
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Thu Jan 21 16:11:29 2016 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Thu Jan 21 16:11:29 2016 +0200
----------------------------------------------------------------------
.../resource_management/libraries/functions/ranger_functions.py | 2 +-
.../resource_management/libraries/functions/ranger_functions_v2.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/1217a56d/ambari-common/src/main/python/resource_management/libraries/functions/ranger_functions.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/ranger_functions.py b/ambari-common/src/main/python/resource_management/libraries/functions/ranger_functions.py
index c59dc8d..e302235 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/ranger_functions.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/ranger_functions.py
@@ -207,7 +207,7 @@ class Rangeradmin:
except TimeoutError:
raise Fail("Connection to Ranger Admin failed. Reason - timeout")
- @safe_retry(times=5, sleep_time=8, backoff_factor=1.5, err_class=Fail, return_on_fail=None)
+ @safe_retry(times=15, sleep_time=8, backoff_factor=1.5, err_class=Fail, return_on_fail=None)
def check_ranger_login_urllib2(self, url):
"""
:param url: ranger admin host url
http://git-wip-us.apache.org/repos/asf/ambari/blob/1217a56d/ambari-common/src/main/python/resource_management/libraries/functions/ranger_functions_v2.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/ranger_functions_v2.py b/ambari-common/src/main/python/resource_management/libraries/functions/ranger_functions_v2.py
index a72be33..6624c89 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/ranger_functions_v2.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/ranger_functions_v2.py
@@ -170,7 +170,7 @@ class RangeradminV2:
except TimeoutError:
raise Fail("Connection to Ranger Admin failed. Reason - timeout")
- @safe_retry(times=5, sleep_time=8, backoff_factor=1.5, err_class=Fail, return_on_fail=None)
+ @safe_retry(times=15, sleep_time=8, backoff_factor=1.5, err_class=Fail, return_on_fail=None)
def check_ranger_login_urllib2(self, url):
"""
:param url: ranger admin host url
[22/22] ambari git commit: Merge branch 'trunk' into
branch-dev-patch-upgrade
Posted by nc...@apache.org.
Merge branch 'trunk' into branch-dev-patch-upgrade
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/abc961a1
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/abc961a1
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/abc961a1
Branch: refs/heads/branch-dev-patch-upgrade
Commit: abc961a13a15cdced7bb3678e4ac67364ba656aa
Parents: fc402eb 77ea2eb
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu Jan 21 14:20:49 2016 -0500
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Thu Jan 21 14:20:49 2016 -0500
----------------------------------------------------------------------
.../python/resource_management/TestScript.py | 4 +-
.../src/main/python/ambari_commons/firewall.py | 6 +-
.../libraries/functions/get_lzo_packages.py | 5 +-
.../libraries/functions/package_conditions.py | 64 ++++
.../libraries/functions/ranger_functions.py | 2 +-
.../libraries/functions/ranger_functions_v2.py | 2 +-
.../libraries/script/script.py | 21 +-
.../2.1.1/services/AMBARI_METRICS/metainfo.xml | 1 +
.../metrics/timeline/PhoenixHBaseAccessor.java | 2 +-
.../aggregators/TimelineMetricReadHelper.java | 4 +-
.../server/checks/AbstractCheckDescriptor.java | 4 +
.../ambari/server/checks/CheckDescription.java | 7 +
.../HiveDynamicServiceDiscoveryCheck.java | 2 +-
.../checks/HiveMultipleMetastoreCheck.java | 2 +-
.../server/checks/HostMaintenanceModeCheck.java | 2 +-
.../checks/HostsMasterMaintenanceCheck.java | 2 +-
.../server/checks/InstallPackagesCheck.java | 2 +-
...apReduce2JobHistoryStatePreservingCheck.java | 2 +-
.../server/checks/PreviousUpgradeCompleted.java | 144 +++++++++
.../server/checks/RangerPasswordCheck.java | 2 +-
.../checks/SecondaryNamenodeDeletedCheck.java | 2 +-
.../checks/ServicesMaintenanceModeCheck.java | 2 +-
.../ServicesMapReduceDistributedCacheCheck.java | 2 +-
.../ServicesNamenodeHighAvailabilityCheck.java | 2 +-
.../checks/ServicesNamenodeTruncateCheck.java | 2 +-
.../ServicesTezDistributedCacheCheck.java | 2 +-
.../checks/ServicesYarnWorkPreservingCheck.java | 2 +-
.../server/checks/StormRestAPIDeletedCheck.java | 2 +-
.../checks/YarnRMHighAvailabilityCheck.java | 2 +-
.../YarnTimelineServerStatePreservingCheck.java | 2 +-
.../AmbariManagementControllerImpl.java | 9 +
.../ambari/server/orm/dao/ClusterDAO.java | 19 ++
.../server/orm/dao/HostRoleCommandDAO.java | 9 +
.../apache/ambari/server/state/ServiceImpl.java | 28 +-
.../ambari/server/state/ServiceOsSpecific.java | 17 +-
.../server/topology/ClusterTopologyImpl.java | 7 +-
.../server/upgrade/SchemaUpgradeHelper.java | 1 +
.../server/upgrade/UpgradeCatalog240.java | 298 +++++++++++++++++++
.../0.1.0/package/scripts/metrics_monitor.py | 4 +-
.../0.96.0.2.0/configuration/hbase-env.xml | 2 +-
.../HBASE/0.96.0.2.0/package/scripts/hbase.py | 3 +-
.../0.96.0.2.0/package/scripts/hbase_client.py | 4 +-
.../0.96.0.2.0/package/scripts/hbase_master.py | 3 +-
.../package/scripts/hbase_regionserver.py | 3 +-
.../0.96.0.2.0/package/scripts/params_linux.py | 5 -
.../package/scripts/phoenix_queryserver.py | 3 +-
.../common-services/HDFS/2.1.0.2.0/metainfo.xml | 4 +
.../HDFS/2.1.0.2.0/package/scripts/datanode.py | 4 +-
.../2.1.0.2.0/package/scripts/hdfs_client.py | 4 +-
.../2.1.0.2.0/package/scripts/journalnode.py | 4 +-
.../HDFS/2.1.0.2.0/package/scripts/namenode.py | 4 +-
.../2.1.0.2.0/package/scripts/nfsgateway.py | 2 +-
.../2.1.0.2.0/package/scripts/params_linux.py | 4 -
.../HDFS/2.1.0.2.0/package/scripts/snamenode.py | 2 +-
.../2.1.0.2.0/package/scripts/zkfc_slave.py | 2 +-
.../HIVE/0.12.0.2.0/metainfo.xml | 4 +
.../0.12.0.2.0/package/scripts/hcat_client.py | 2 +-
.../0.12.0.2.0/package/scripts/hive_client.py | 2 +-
.../package/scripts/hive_metastore.py | 2 +-
.../0.12.0.2.0/package/scripts/hive_server.py | 2 +-
.../0.12.0.2.0/package/scripts/mysql_server.py | 2 +-
.../0.12.0.2.0/package/scripts/params_linux.py | 18 +-
.../package/scripts/params_windows.py | 2 -
.../package/scripts/webhcat_server.py | 2 +-
.../KERBEROS/1.10.3-10/metainfo.xml | 6 +
.../package/scripts/kerberos_client.py | 2 +-
.../common-services/PXF/3.0.0/metainfo.xml | 6 +
.../PXF/3.0.0/package/scripts/params.py | 31 +-
.../PXF/3.0.0/package/scripts/pxf_constants.py | 26 ++
.../PXF/3.0.0/package/scripts/pxf_utils.py | 49 +++
.../PXF/3.0.0/package/scripts/service_check.py | 266 +++++++++++++++++
.../SQOOP/1.4.4.2.0/metainfo.xml | 1 +
.../custom_actions/scripts/install_packages.py | 17 +-
.../stacks/HDP/2.1/services/HIVE/metainfo.xml | 4 +
.../stacks/HDP/2.2/services/HBASE/metainfo.xml | 2 +
.../stacks/HDP/2.2/services/HDFS/metainfo.xml | 4 +
.../stacks/HDP/2.2/services/HIVE/metainfo.xml | 5 +
.../stacks/HDP/2.2/services/OOZIE/metainfo.xml | 1 +
.../stacks/HDP/2.2/services/SQOOP/metainfo.xml | 1 +
.../HDP/2.2/upgrades/nonrolling-upgrade-2.3.xml | 6 +
.../HDP/2.2/upgrades/nonrolling-upgrade-2.4.xml | 6 +
.../stacks/HDP/2.2/upgrades/upgrade-2.3.xml | 3 +
.../stacks/HDP/2.2/upgrades/upgrade-2.4.xml | 3 +
.../stacks/HDP/2.3/role_command_order.json | 6 +-
.../stacks/HDP/2.3/services/HDFS/metainfo.xml | 3 +
.../stacks/HDP/2.3/services/HIVE/metainfo.xml | 7 +
.../stacks/HDP/2.3/services/OOZIE/metainfo.xml | 1 +
.../stacks/HDP/2.3/upgrades/config-upgrade.xml | 17 ++
.../HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml | 6 +
.../HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml | 9 +
.../stacks/HDP/2.3/upgrades/upgrade-2.3.xml | 5 +
.../stacks/HDP/2.3/upgrades/upgrade-2.4.xml | 5 +
.../stacks/HDP/2.4/upgrades/config-upgrade.xml | 23 ++
.../server/checks/UpgradeCheckOrderTest.java | 26 +-
.../AmbariManagementControllerImplTest.java | 5 +
.../timeline/AMSPropertyProviderTest.java | 179 ++++++++++-
.../ambari/server/state/CheckHelperTest.java | 2 +
.../server/state/cluster/ClusterTest.java | 19 +-
.../topology/ClusterTopologyImplTest.java | 28 +-
.../server/upgrade/UpgradeCatalog240Test.java | 130 ++++++++
.../src/test/python/TestAmbariServer.py | 4 +-
.../configs/install_packages_config.json | 4 +-
.../stacks/2.0.6/configs/hbase_no_phx.json | 2 +-
.../stacks/2.0.6/configs/hbase_with_phx.json | 2 +-
.../python/stacks/2.3/configs/pxf_default.json | 2 +-
.../ams/single_host_component_metrics_h1.json | 21 ++
.../ams/single_host_component_metrics_h2.json | 22 ++
ambari-web/app/assets/test/tests.js | 43 +++
ambari-web/app/controllers/main/service/item.js | 176 ++++++-----
.../app/mixins/common/configs/configs_saver.js | 4 +
.../mixins/common/widgets/time_range_mixin.js | 32 +-
ambari-web/app/router.js | 3 +
ambari-web/app/utils/ajax/ajax.js | 6 +-
ambari-web/app/utils/ajax/ajax_queue.js | 29 +-
ambari-web/app/utils/helper.js | 2 +-
.../app/views/common/chart/linear_time.js | 18 +-
.../app/views/common/custom_date_popup.js | 7 +-
.../app/views/common/select_custom_date_view.js | 4 +-
ambari-web/app/views/main/service/item.js | 120 ++++----
ambari-web/package.json | 2 +-
ambari-web/test/controllers/application_test.js | 24 +-
.../global/background_operations_test.js | 19 +-
.../global/cluster_controller_test.js | 71 ++---
.../global/update_controller_test.js | 23 +-
.../global/user_settings_controller_test.js | 4 -
ambari-web/test/controllers/installer_test.js | 10 -
.../progress_controller_test.js | 11 +-
.../progress_popup_controller_test.js | 43 +--
.../resourceManager/step3_controller_test.js | 11 +-
.../controllers/main/admin/kerberos_test.js | 30 +-
.../admin/stack_and_upgrade_controller_test.js | 175 ++++-------
.../main/alert_definitions_controller_test.js | 9 +-
.../add_alert_definition_controller_test.js | 20 +-
.../alerts/alert_instances_controller_test.js | 21 +-
.../definitions_configs_controller_test.js | 10 +-
.../definitions_details_controller_test.js | 37 +--
...anage_alert_notifications_controller_test.js | 15 +-
.../controllers/main/charts/heatmap_test.js | 61 +---
.../dashboard/config_history_controller_test.js | 26 +-
.../main/host/add_controller_test.js | 42 ++-
.../test/controllers/main/host/details_test.js | 197 ++++++------
ambari-web/test/controllers/main/host_test.js | 14 +-
.../main/service/add_controller_test.js | 75 +----
.../main/service/info/config_test.js | 21 +-
.../main/service/info/summary_test.js | 107 +------
.../test/controllers/main/service/item_test.js | 27 +-
.../service/reassign/step1_controller_test.js | 27 +-
.../service/reassign/step4_controller_test.js | 201 ++++++-------
.../service/reassign/step6_controller_test.js | 24 +-
.../service/reassign/step7_controller_test.js | 53 ++--
.../test/controllers/main/service_test.js | 31 +-
.../controllers/main/views_controller_test.js | 9 +-
ambari-web/test/controllers/main_test.js | 25 +-
.../test/controllers/wizard/step2_test.js | 11 +-
.../test/controllers/wizard/step3_test.js | 95 ++----
.../test/controllers/wizard/step6_test.js | 9 -
.../test/controllers/wizard/step7_test.js | 18 +-
.../test/controllers/wizard/step8_test.js | 85 ++----
.../test/controllers/wizard/step9_test.js | 31 +-
ambari-web/test/controllers/wizard_test.js | 8 +-
ambari-web/test/helpers.js | 77 +++++
.../common/table_server_view_mixin_test.js | 1 +
.../test/mixins/common/widget_mixin_test.js | 91 +++---
.../common/widgets/export_metrics_mixin_test.js | 15 +-
.../common/widgets/time_range_mixin_test.js | 10 +-
.../host_components/decommissionable_test.js | 25 +-
.../host_components/install_component_test.js | 97 +++---
.../wizard/wizardProgressPageController_test.js | 24 +-
ambari-web/test/models/cluster_states_test.js | 2 -
ambari-web/test/models/host_test.js | 4 -
ambari-web/test/router_test.js | 40 +--
ambari-web/test/utils/ajax/ajax_queue_test.js | 8 -
ambari-web/test/utils/ajax/ajax_test.js | 17 +-
.../test/utils/batch_scheduled_requests_test.js | 71 -----
.../test/utils/host_progress_popup_test.js | 2 -
ambari-web/test/utils/updater_test.js | 149 +++++-----
.../test/views/common/chart/linear_time_test.js | 16 +-
.../common/configs/config_history_flow_test.js | 12 +-
.../test/views/common/controls_view_test.js | 9 +-
.../test/views/common/quick_link_view_test.js | 59 ++--
.../common/select_custom_date_view_test.js | 49 +++
.../common/widget/gauge_widget_view_test.js | 24 +-
.../common/widget/graph_widget_view_test.js | 12 +-
.../common/widget/number_widget_view_test.js | 24 +-
.../stack_upgrade/upgrade_group_view_test.js | 16 +-
.../stack_upgrade/upgrade_wizard_view_test.js | 107 ++++---
.../admin/stack_upgrade/version_view_test.js | 85 +++---
.../test/views/main/dashboard/widget_test.js | 11 +-
.../main/dashboard/widgets/namenode_cpu_test.js | 31 +-
.../test/views/main/dashboard/widgets_test.js | 18 +-
.../host_component_views/datanode_view_test.js | 15 +-
.../decommissionable_test.js | 28 +-
ambari-web/test/views/main/service/item_test.js | 16 +-
.../views/main/service/services/ranger_test.js | 10 -
194 files changed, 3023 insertions(+), 2076 deletions(-)
----------------------------------------------------------------------
[11/22] ambari git commit: AMBARI-14733: HAWQ Service check should be
executed after HAWQ SEGMENTS are started. (bhuvnesh2703 via jaoki)
Posted by nc...@apache.org.
AMBARI-14733: HAWQ Service check should be executed after HAWQ SEGMENTS are started. (bhuvnesh2703 via jaoki)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/03a0f9f5
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/03a0f9f5
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/03a0f9f5
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 03a0f9f508a3a32e21f4124f89b6ab9badd873ad
Parents: 109311d
Author: Jun Aoki <ja...@apache.org>
Authored: Wed Jan 20 14:54:28 2016 -0800
Committer: Jun Aoki <ja...@apache.org>
Committed: Wed Jan 20 14:54:28 2016 -0800
----------------------------------------------------------------------
.../src/main/resources/stacks/HDP/2.3/role_command_order.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/03a0f9f5/ambari-server/src/main/resources/stacks/HDP/2.3/role_command_order.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/role_command_order.json b/ambari-server/src/main/resources/stacks/HDP/2.3/role_command_order.json
index 1b6eefc..f164ab2 100755
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/role_command_order.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/role_command_order.json
@@ -10,10 +10,10 @@
"PHOENIX_QUERY_SERVER-START": ["HBASE_MASTER-START"],
"ATLAS_SERVICE_CHECK-SERVICE_CHECK": ["ATLAS_SERVER-START"],
"SPARK_THRIFTSERVER-START" : ["NAMENODE-START", "HIVE_METASTORE-START"],
- "HAWQMASTER-START" : ["NAMENODE-START", "DATANODE-START"],
- "HAWQSTANDBY-START" : ["NAMENODE-START", "DATANODE-START", "HAWQMASTER-START"],
+ "HAWQMASTER-START" : ["NAMENODE-START", "DATANODE-START", "NODEMANAGER-START"],
+ "HAWQSTANDBY-START" : ["HAWQMASTER-START"],
"HAWQSEGMENT-START" : ["HAWQMASTER-START", "HAWQSTANDBY-START"],
- "HAWQ_SERVICE_CHECK-SERVICE_CHECK" : ["HAWQMASTER-START", "HDFS_SERVICE_CHECK-SERVICE_CHECK"],
+ "HAWQ_SERVICE_CHECK-SERVICE_CHECK" : ["HAWQSEGMENT-START", "HDFS_SERVICE_CHECK-SERVICE_CHECK", "YARN_SERVICE_CHECK-SERVICE_CHECK"],
"KNOX_GATEWAY-START" : ["RANGER_USERSYNC-START", "NAMENODE-START"],
"KAFKA_BROKER-START" : ["ZOOKEEPER_SERVER-START", "RANGER_USERSYNC-START", "NAMENODE-START"],
"NIMBUS-START" : ["ZOOKEEPER_SERVER-START", "RANGER_USERSYNC-START", "NAMENODE-START"],
[04/22] ambari git commit: AMBARI-14741. Ambari Web Unit Test failure
on trunk (App.WizardStep8Controller) (onechiporenko)
Posted by nc...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/host/details_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/host/details_test.js b/ambari-web/test/controllers/main/host/details_test.js
index a108c8d..51e649c 100644
--- a/ambari-web/test/controllers/main/host/details_test.js
+++ b/ambari-web/test/controllers/main/host/details_test.js
@@ -24,6 +24,7 @@ require('models/host_component');
require('models/host_stack_version');
var batchUtils = require('utils/batch_scheduled_requests');
var hostsManagement = require('utils/hosts');
+var testHelpers = require('test/helpers');
var controller;
function getController() {
@@ -36,17 +37,9 @@ function getController() {
describe('App.MainHostDetailsController', function () {
beforeEach(function () {
- sinon.stub(App.ajax, 'send').returns({
- then: Em.K,
- complete: Em.K
- });
controller = getController();
});
- afterEach(function () {
- App.ajax.send.restore();
- });
-
App.TestAliases.testAsComputedFilterBy(getController(), 'serviceNonClientActiveComponents', 'serviceActiveComponents', 'isClient', false);
describe('#routeHome()', function () {
@@ -140,14 +133,12 @@ describe('App.MainHostDetailsController', function () {
describe("#pullNnCheckPointTime()", function() {
it("valid request is sent", function() {
controller.pullNnCheckPointTime('host1');
- expect(App.ajax.send.calledWith({
- name: 'common.host_component.getNnCheckPointTime',
- sender: controller,
- data: {
- host: 'host1'
- },
- success: 'parseNnCheckPointTime'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'common.host_component.getNnCheckPointTime');
+ expect(args[0]).to.exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ host: 'host1'
+ });
});
});
@@ -166,11 +157,14 @@ describe('App.MainHostDetailsController', function () {
});
it('1st call endpoint is valid', function () {
- expect(App.ajax.send.getCall(0).args[0].name).to.be.equal('common.host.host_component.update');
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.update');
+ expect(args).to.exists;
});
it('1st call data is valid', function () {
- expect(App.ajax.send.getCall(0).args[0].data).to.be.eql({
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.update');
+ expect(args[0]).to.exists;
+ expect(args[0].data).to.be.eql({
"hostName": "host1",
"context": {},
"component": component,
@@ -201,11 +195,14 @@ describe('App.MainHostDetailsController', function () {
});
it('1st call endpoint is valid', function () {
- expect(App.ajax.send.getCall(0).args[0].name).to.be.equal('common.host.host_components.update');
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_components.update');
+ expect(args).exists;
});
it('1st call data is valid', function () {
- expect(App.ajax.send.getCall(0).args[0].data).to.be.eql({
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_components.update');
+ expect(args[0]).exists;
+ expect(args[0].data).to.be.eql({
"hostName": "host1",
"context": {},
"component": component,
@@ -231,14 +228,12 @@ describe('App.MainHostDetailsController', function () {
beforeEach(function () {
sinon.stub(controller, 'mimicWorkStatusChange', Em.K);
sinon.stub(controller, 'showBackgroundOperationsPopup', Em.K);
- sinon.stub(App, 'get').withArgs('testMode').returns(false);
controller.sendComponentCommandSuccessCallback({}, {}, params);
});
afterEach(function () {
controller.showBackgroundOperationsPopup.restore();
controller.mimicWorkStatusChange.restore();
- App.get.restore();
});
it('mimicWorkStatusChange is not called', function () {
@@ -466,7 +461,8 @@ describe('App.MainHostDetailsController', function () {
var popup = controller.upgradeComponent({context: Em.Object.create()});
expect(App.showConfirmationPopup.calledOnce).to.be.true;
popup.onPrimary();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'host.host_component.upgrade');
+ expect(args).exists;
});
});
@@ -475,9 +471,7 @@ describe('App.MainHostDetailsController', function () {
beforeEach(function () {
sinon.spy(App, "showConfirmationPopup");
sinon.stub(batchUtils, "restartHostComponents", Em.K);
- sinon.stub(controller, 'checkNnLastCheckpointTime', function(callback) {
- callback();
- });
+ sinon.stub(controller, 'checkNnLastCheckpointTime', Em.clb);
});
afterEach(function () {
App.showConfirmationPopup.restore();
@@ -636,15 +630,12 @@ describe('App.MainHostDetailsController', function () {
}
}
}});
- expect(App.ajax.send.calledWith({
- name: 'admin.get.all_configurations',
- sender: controller,
- data: {
- urlParams: '(type=oozie-env&tag=tag)'
- },
- success: 'onLoadOozieConfigs',
- error: 'onLoadConfigsErrorCallback'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'admin.get.all_configurations');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ urlParams: '(type=oozie-env&tag=tag)'
+ });
});
});
@@ -657,14 +648,12 @@ describe('App.MainHostDetailsController', function () {
}
}
}});
- expect(App.ajax.send.calledWith({
- name: 'admin.get.all_configurations',
- sender: controller,
- data: {
- urlParams: '(type=storm-site&tag=tag)'
- },
- success: 'onLoadStormConfigs'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'admin.get.all_configurations');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ urlParams: '(type=storm-site&tag=tag)'
+ });
});
});
@@ -730,14 +719,12 @@ describe('App.MainHostDetailsController', function () {
}
}
}});
- expect(App.ajax.send.calledWith({
- name: 'admin.get.all_configurations',
- sender: controller,
- data: {
- urlParams: '(type=hive-site&tag=tag)|(type=webhcat-site&tag=tag)|(type=hive-env&tag=tag)|(type=core-site&tag=tag)'
- },
- success: 'onLoadHiveConfigs'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'admin.get.all_configurations');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ urlParams: '(type=hive-site&tag=tag)|(type=webhcat-site&tag=tag)|(type=hive-env&tag=tag)|(type=core-site&tag=tag)'
+ });
});
});
@@ -756,14 +743,12 @@ describe('App.MainHostDetailsController', function () {
}
}
}});
- expect(App.ajax.send.calledWith({
- name: 'admin.get.all_configurations',
- sender: controller,
- data: {
- urlParams: '(type=core-site&tag=tag)|(type=hdfs-site&tag=tag)|(type=kms-env&tag=tag)'
- },
- success: 'onLoadRangerConfigs'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'admin.get.all_configurations');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ urlParams: '(type=core-site&tag=tag)|(type=hdfs-site&tag=tag)|(type=kms-env&tag=tag)'
+ });
});
});
@@ -902,14 +887,16 @@ describe('App.MainHostDetailsController', function () {
host: {}
});
controller.sendRefreshComponentConfigsCommand(component, {});
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'host.host_component.refresh_configs');
+ expect(args[0]).exists;
});
});
describe('#loadConfigs()', function () {
it('Query should be sent', function () {
controller.loadConfigs();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'config.tags');
+ expect(args).exists;
});
});
@@ -1031,12 +1018,13 @@ describe('App.MainHostDetailsController', function () {
it('url params is empty', function () {
expect(controller.loadConfigsSuccessCallback()).to.be.false;
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'reassign.load_configs');
+ expect(args).not.exists;
});
it('url params are correct', function () {
mockUrlParams = ['param1'];
- expect(controller.loadConfigsSuccessCallback()).to.be.true;
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'reassign.load_configs');
+ expect(args).exists;
});
});
@@ -1263,15 +1251,18 @@ describe('App.MainHostDetailsController', function () {
describe("#saveConfigsBatch()", function () {
it("no groups", function () {
controller.saveConfigsBatch([]);
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.filterAjaxRequests('name', 'common.service.configurations');
+ expect(args).to.be.empty;
});
it("configs is empty", function () {
controller.saveConfigsBatch([{}]);
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.filterAjaxRequests('name', 'common.service.configurations');
+ expect(args).to.be.empty;
});
it("configs is correct", function () {
controller.saveConfigsBatch([{'properties': {'site': {}}, 'properties_attributes': {'site': {}}}]);
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.filterAjaxRequests('name', 'common.service.configurations');
+ expect(args).to.have.property('length').equal(1);
});
});
@@ -1582,7 +1573,8 @@ describe('App.MainHostDetailsController', function () {
var popup = controller.installComponent(event);
expect(App.ModalPopup.show.calledOnce).to.be.true;
popup.onPrimary();
- expect(App.ajax.send.called).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.update');
+ expect(args).exists;
});
});
@@ -1695,14 +1687,16 @@ describe('App.MainHostDetailsController', function () {
describe('#doDecommission()', function () {
it('Query should be sent', function () {
controller.doDecommission('', '', '', '');
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'host.host_component.decommission_slave');
+ expect(args).exists;
});
});
describe('#doDecommissionRegionServer()', function () {
it('Query should be sent', function () {
controller.doDecommissionRegionServer('', '', '', '');
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'host.host_component.recommission_and_restart');
+ expect(args).exists;
});
});
@@ -1743,7 +1737,9 @@ describe('App.MainHostDetailsController', function () {
expect(result).to.be.an('object');
});
it('request is sent with correct data', function () {
- expect(App.ajax.send.getCall(0).args[0].data.hostNames).to.equal('host1');
+ var args = testHelpers.findAjaxRequest('name', 'host.region_servers.in_inservice');
+ expect(args[0]).exists;
+ expect(args[0].data.hostNames).to.be.equal('host1');
});
});
@@ -1834,7 +1830,8 @@ describe('App.MainHostDetailsController', function () {
describe('#doRecommissionAndStart()', function () {
it('Query should be sent', function () {
controller.doRecommissionAndStart('', '', '', '');
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'host.host_component.recommission_and_restart');
+ expect(args).exists;
});
});
@@ -1991,7 +1988,8 @@ describe('App.MainHostDetailsController', function () {
describe('#hostPassiveModeRequest()', function () {
it('Query should be sent', function () {
controller.hostPassiveModeRequest('', '');
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'bulk_request.hosts.passive_state');
+ expect(args).exists;
});
});
@@ -2618,7 +2616,8 @@ describe('App.MainHostDetailsController', function () {
var popup = controller.executeCustomCommand({context: Em.Object.create()});
expect(App.showConfirmationPopup.calledOnce).to.be.true;
popup.onPrimary();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'service.item.executeCustomCommand');
+ expect(args).exists;
});
});
@@ -2627,8 +2626,9 @@ describe('App.MainHostDetailsController', function () {
controller.set('content.hostName', 'host1');
var component = Em.Object.create({componentName: 'COMP'});
controller._doDeleteHostComponent(component);
- expect(App.ajax.send.getCall(0).args[0].name).to.be.equal('common.delete.host_component');
- expect(App.ajax.send.getCall(0).args[0].data).to.be.eql({
+ var args = testHelpers.findAjaxRequest('name', 'common.delete.host_component');
+ expect(args[0]).exists;
+ expect(args[0].data).to.be.eql({
componentName: 'COMP',
hostName: 'host1'
});
@@ -2636,8 +2636,9 @@ describe('App.MainHostDetailsController', function () {
it('all components', function () {
controller.set('content.hostName', 'host1');
controller._doDeleteHostComponent(null);
- expect(App.ajax.send.getCall(0).args[0].name).to.be.equal('common.delete.host');
- expect(App.ajax.send.getCall(0).args[0].data).to.be.eql({
+ var args = testHelpers.findAjaxRequest('name', 'common.delete.host');
+ expect(args[0]).exists;
+ expect(args[0].data).to.be.eql({
componentName: '',
hostName: 'host1'
});
@@ -2723,16 +2724,7 @@ describe('App.MainHostDetailsController', function () {
controller.mimicWorkStatusChange.restore();
controller.showBackgroundOperationsPopup.restore();
});
- it('testMode is true', function () {
- App.set('testMode', true);
-
- controller.upgradeComponentSuccessCallback({}, {}, {component: "COMP"});
- expect(controller.mimicWorkStatusChange.calledWith("COMP", App.HostComponentStatus.starting, App.HostComponentStatus.started)).to.be.true;
- expect(controller.showBackgroundOperationsPopup.calledOnce).to.be.true;
- });
it('testMode is false', function () {
- App.set('testMode', false);
-
controller.upgradeComponentSuccessCallback({}, {}, {component: "COMP"});
expect(controller.mimicWorkStatusChange.called).to.be.false;
expect(controller.showBackgroundOperationsPopup.calledOnce).to.be.true;
@@ -2822,12 +2814,10 @@ describe('App.MainHostDetailsController', function () {
beforeEach(function () {
sinon.stub(controller, 'showBackgroundOperationsPopup', Em.K);
sinon.stub(controller, 'mimicWorkStatusChange', Em.K);
- sinon.stub(App, 'get').withArgs('testMode').returns(false);
});
afterEach(function () {
controller.mimicWorkStatusChange.restore();
controller.showBackgroundOperationsPopup.restore();
- App.get.restore();
});
it('testMode is false', function () {
@@ -2877,7 +2867,9 @@ describe('App.MainHostDetailsController', function () {
componentName: 'COMP1'
});
controller.updateComponentPassiveState(component, 'state', 'message');
- expect(App.ajax.send.getCall(0).args[0].data).to.be.eql({
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.passive');
+ expect(args[0]).exists;
+ expect(args[0].data).to.be.eql({
"hostName": "host1",
"componentName": "COMP1",
"component": component,
@@ -3174,16 +3166,17 @@ describe('App.MainHostDetailsController', function () {
beforeEach(function () {
controller.set('content.hostComponents', Em.A([]));
controller.doDeleteHost(Em.K);
+ this.args = testHelpers.findAjaxRequest('name', 'common.delete.host');
});
it('fromDeleteHost is true', function () {
expect(controller.get('fromDeleteHost')).to.be.true;
});
it('1st request is to delete host', function () {
- expect(App.ajax.send.getCall(0).args[0].name).to.be.equal('common.delete.host');
+ expect(this.args[0]).exists;
});
it('1st request is done with valid hostName', function () {
- expect(App.ajax.send.getCall(0).args[0].data.hostName).to.be.equal('host1');
+ expect(this.args[0].data.hostName).to.be.equal('host1');
});
});
@@ -3205,10 +3198,12 @@ describe('App.MainHostDetailsController', function () {
expect(controller.get('fromDeleteHost')).to.be.true;
});
it('1st request is to delete host', function () {
- expect(App.ajax.send.getCall(0).args[0].name).to.be.equal('common.delete.host');
+ var args = testHelpers.findAjaxRequest('name', 'common.delete.host');
+ expect(args[0]).exists;
});
it('1st request is done with valid hostName', function () {
- expect(App.ajax.send.getCall(0).args[0].data.hostName).to.be.equal('host1');
+ var args = testHelpers.findAjaxRequest('name', 'common.delete.host');
+ expect(args[0].data.hostName).to.be.equal('host1');
});
});
@@ -3311,14 +3306,12 @@ describe('App.MainHostDetailsController', function () {
it("call App.ajax.send", function () {
controller.set('content.hostName', 'host1');
controller.installVersion({context: {}});
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'host.stack_versions.install',
- sender: controller,
- data: {
- hostName: 'host1',
- version: {}
- },
- success: 'installVersionSuccessCallback'
+ var args = testHelpers.findAjaxRequest('name', 'host.stack_versions.install');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ hostName: 'host1',
+ version: {}
});
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/host_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/host_test.js b/ambari-web/test/controllers/main/host_test.js
index 386434b..1242374 100644
--- a/ambari-web/test/controllers/main/host_test.js
+++ b/ambari-web/test/controllers/main/host_test.js
@@ -25,11 +25,15 @@ describe('MainHostController', function () {
var hostController, db;
- describe('#getRegExp()', function() {
- before(function() {
- hostController = App.MainHostController.create({});
- });
+ beforeEach(function () {
+ hostController = App.MainHostController.create({});
+ });
+ afterEach(function () {
+ hostController.destroy();
+ });
+
+ describe('#getRegExp()', function() {
var message = '`{0}` should convert to `{1}`',
tests = [
{ value: '.*', expected: '.*' },
@@ -55,7 +59,6 @@ describe('MainHostController', function () {
describe('#getQueryParameters', function() {
beforeEach(function() {
- hostController = App.MainHostController.create({});
sinon.spy(hostController, 'getRegExp');
sinon.stub(App.db, 'getFilterConditions', function() {
return [{
@@ -88,7 +91,6 @@ describe('MainHostController', function () {
db = {mainHostController: [
{name: 'hostName', status: 'sorting'}
]};
- hostController = App.MainHostController.create({});
sinon.stub(App.db, 'getSortingStatuses', function (k) {
return db[k];
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/service/add_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/add_controller_test.js b/ambari-web/test/controllers/main/service/add_controller_test.js
index 3c7639c..5621ff4 100644
--- a/ambari-web/test/controllers/main/service/add_controller_test.js
+++ b/ambari-web/test/controllers/main/service/add_controller_test.js
@@ -20,6 +20,7 @@ var App = require('app');
require('controllers/wizard');
require('controllers/main/service/add_controller');
var addServiceController = null;
+var testHelpers = require('test/helpers');
describe('App.AddServiceController', function() {
@@ -27,68 +28,6 @@ describe('App.AddServiceController', function() {
addServiceController = App.AddServiceController.create({});
});
- describe('#installAdditionalClients', function() {
-
- var t = {
- additionalClients: {
- componentName: "TEZ_CLIENT",
- hostNames: ["hostName1", "hostName2"]
- },
- additionalClientsWithoutHosts: {
- componentName: "TEZ_CLIENT",
- hostNames: []
- },
- RequestInfo: {
- "context": Em.I18n.t('requestInfo.installHostComponent') + ' ' + App.format.role("TEZ_CLIENT"),
- "query": "HostRoles/component_name=TEZ_CLIENT&HostRoles/host_name.in(hostName1,hostName2)"
- },
- Body: {
- HostRoles: {
- state: 'INSTALLED'
- }
- }
- };
-
- beforeEach(function () {
- sinon.spy($, 'ajax');
- sinon.stub(App, 'get', function(k) {
- if ('clusterName' === k) return 'tdk';
- return Em.get(App, k);
- });
- addServiceController.set('installClietsQueue', App.ajaxQueue.create())
- });
-
- afterEach(function () {
- $.ajax.restore();
- App.get.restore();
- });
-
- describe('send request to install client', function () {
-
- beforeEach(function () {
- addServiceController.set("content.additionalClients", [t.additionalClients]);
- addServiceController.installAdditionalClients();
- });
-
- it('1 request is sent', function () {
- expect($.ajax.calledOnce).to.equal(true);
- });
- it('data.Body is valid', function () {
- expect(JSON.parse($.ajax.args[0][0].data).Body).to.deep.eql(t.Body);
- });
- it('data.RequestInfo is valid', function () {
- expect(JSON.parse($.ajax.args[0][0].data).RequestInfo).to.eql(t.RequestInfo);
- });
-
- });
-
- it('should not send request to install client', function () {
- addServiceController.set("content.additionalClients", [t.additionalClientsWithoutHosts]);
- expect($.ajax.called).to.be.false;
- });
-
- });
-
describe('#generateDataForInstallServices', function() {
var tests = [{
selected: ["YARN","HBASE"],
@@ -204,17 +143,8 @@ describe('App.AddServiceController', function() {
}
];
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', function () {
- return {
- promise: Em.K
- };
- });
- });
-
afterEach(function () {
addServiceController.getDBProperty.restore();
- App.ajax.send.restore();
});
cases.forEach(function (item) {
@@ -223,10 +153,11 @@ describe('App.AddServiceController', function() {
beforeEach(function () {
sinon.stub(addServiceController, 'getDBProperty').withArgs('hosts').returns(item.hosts);
addServiceController.loadHosts();
+ this.args = testHelpers.findAjaxRequest('name', 'hosts.confirmed');
});
it('request is ' + (item.isAjaxRequestSent ? '' : 'not') + ' sent', function () {
- expect(App.ajax.send.calledOnce).to.equal(item.isAjaxRequestSent);
+ expect(Em.isNone(this.args)).to.be.equal(!item.isAjaxRequestSent);
});
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/service/info/config_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/info/config_test.js b/ambari-web/test/controllers/main/service/info/config_test.js
index 9ebd914..fd7b23a 100644
--- a/ambari-web/test/controllers/main/service/info/config_test.js
+++ b/ambari-web/test/controllers/main/service/info/config_test.js
@@ -20,6 +20,7 @@ var App = require('app');
require('controllers/main/service/info/configs');
var batchUtils = require('utils/batch_scheduled_requests');
var mainServiceInfoConfigsController = null;
+var testHelpers = require('test/helpers');
function getController() {
return App.MainServiceInfoConfigsController.create({
@@ -471,16 +472,15 @@ describe("App.MainServiceInfoConfigsController", function () {
sinon.stub(App.router, 'getClusterName', function() {
return 'clName';
});
- sinon.stub(App.ajax, "send", Em.K);
});
afterEach(function () {
- App.ajax.send.restore();
App.router.getClusterName.restore();
});
it("ajax request to put cluster cfg", function () {
mainServiceInfoConfigsController.set('stepConfigs', sc);
expect(mainServiceInfoConfigsController.putChangedConfigurations([]));
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'common.across.services.configurations');
+ expect(args[0]).exists;
});
it('values should be parsed', function () {
mainServiceInfoConfigsController.set('stepConfigs', sc);
@@ -624,16 +624,12 @@ describe("App.MainServiceInfoConfigsController", function () {
}]
};
- beforeEach(function() {
- sinon.spy($,"ajax");
- });
- afterEach(function() {
- $.ajax.restore();
- });
-
it("updates configs groups", function() {
mainServiceInfoConfigsController.putConfigGroupChanges(t.data);
- expect(JSON.parse($.ajax.args[0][0].data)).to.deep.equal(t.request);
+ var args = testHelpers.findAjaxRequest('name', 'config_groups.update_config_group');
+ expect(args[0]).exists;
+ var data = JSON.parse(App.ajax.fakeGetUrl('config_groups.update_config_group').format(args[0].data).data);
+ expect(data).to.deep.equal(t.request);
});
});
@@ -770,7 +766,6 @@ describe("App.MainServiceInfoConfigsController", function () {
describe('#bodyClass', function () {
beforeEach(function() {
sinon.stub(App.StackService, 'find').returns([{dependentServiceNames: []}]);
- sinon.stub(App.ajax, 'send', Em.K);
// default implementation
bodyView = mainServiceInfoConfigsController.showSaveConfigsPopup().get('bodyClass').create({
parentView: Em.View.create()
@@ -778,13 +773,13 @@ describe("App.MainServiceInfoConfigsController", function () {
});
afterEach(function() {
- App.ajax.send.restore();
App.StackService.find.restore();
});
describe('#componentsFilterSuccessCallback', function () {
it('check components with unknown state', function () {
bodyView = mainServiceInfoConfigsController.showSaveConfigsPopup('', true, '', {}, '', 'unknown', '').get('bodyClass').create({
+ didInsertElement: Em.K,
parentView: Em.View.create()
});
bodyView.componentsFilterSuccessCallback({
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/service/info/summary_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/info/summary_test.js b/ambari-web/test/controllers/main/service/info/summary_test.js
index 868cf67..51dd595 100644
--- a/ambari-web/test/controllers/main/service/info/summary_test.js
+++ b/ambari-web/test/controllers/main/service/info/summary_test.js
@@ -18,7 +18,7 @@
var App = require('app');
require('controllers/main/service/info/summary');
-
+var testHelpers = require('test/helpers');
function getController() {
return App.MainServiceInfoSummaryController.create();
}
@@ -134,102 +134,6 @@ App.TestAliases.testAsComputedOr(getController(), 'showTimeRangeControl', ['!isS
});
- describe('#getRangerPluginsStatus', function () {
-
- var data = {
- 'Clusters': {
- 'desired_configs': {
- 'ranger-hdfs-plugin-properties': {
- 'tag': 'version1'
- },
- 'hive-env': {
- 'tag': 'version2'
- },
- 'ranger-hbase-plugin-properties': {
- 'tag': 'version3'
- }
- }
- }
- },
- cases = [
- {
- isPreviousRangerConfigsCallFailed: false,
- ajaxRequestSent: true,
- title: 'initial case'
- },
- {
- isPreviousRangerConfigsCallFailed: true,
- hdfsTag: 'version1',
- hiveTag: 'version2',
- hbaseTag: 'version3',
- ajaxRequestSent: true,
- title: 'previous call failed'
- },
- {
- isPreviousRangerConfigsCallFailed: false,
- hdfsTag: 'version2',
- hiveTag: 'version2',
- hbaseTag: 'version3',
- ajaxRequestSent: true,
- title: 'configs changed'
- },
- {
- isPreviousRangerConfigsCallFailed: false,
- hdfsTag: 'version1',
- hiveTag: 'version2',
- hbaseTag: 'version3',
- ajaxRequestSent: false,
- title: 'configs unchanged'
- }
- ];
-
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- sinon.stub(App.Service, 'find').returns([
- Em.Object.create({
- serviceName: 'HDFS'
- }),
- Em.Object.create({
- serviceName: 'HIVE'
- }),
- Em.Object.create({
- serviceName: 'HBASE'
- }),
- Em.Object.create({
- serviceName: 'YARN'
- })
- ]);
- });
-
- afterEach(function () {
- App.ajax.send.restore();
- App.Service.find.restore();
- });
-
- cases.forEach(function (item) {
- describe(item.title, function () {
-
- beforeEach(function () {
- controller.set('isPreviousRangerConfigsCallFailed', item.isPreviousRangerConfigsCallFailed);
- controller.get('rangerPlugins').findProperty('serviceName', 'HDFS').tag = item.hdfsTag;
- controller.get('rangerPlugins').findProperty('serviceName', 'HBASE').tag = item.hbaseTag;
- controller.getRangerPluginsStatus(data);
- });
-
- it('1 request is ' + item.ajaxRequestSent + ' sent', function () {
- expect(App.ajax.send.calledOnce).to.equal(item.ajaxRequestSent);
- });
-
- if (item.ajaxRequestSent) {
- it('request does not contains `ranger-yarn-plugin-properties`', function () {
- expect(App.ajax.send.getCall(0).args[0].data.urlParams.contains('ranger-yarn-plugin-properties')).to.be.false;
- });
- }
- });
- });
-
- });
-
describe('#getRangerPluginsStatusSuccess', function () {
beforeEach(function () {
@@ -281,19 +185,14 @@ App.TestAliases.testAsComputedOr(getController(), 'showTimeRangeControl', ['!isS
});
describe("#getActiveWidgetLayout() for Enhanced Dashboard", function () {
- before(function () {
- sinon.stub(App.ajax, 'send');
- });
- after(function () {
- App.ajax.send.restore();
- });
+
it("make GET call", function () {
var _controller = App.MainServiceInfoSummaryController.create({
isServiceWithEnhancedWidgets: true,
content: Em.Object.create({serviceName: 'HDFS'})
});
_controller.getActiveWidgetLayout();
- expect(App.ajax.send.getCall(0).args[0].name).to.equal('widgets.layouts.active.get');
+ expect(testHelpers.findAjaxRequest('name', 'widgets.layouts.active.get')).to.exists;
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/service/item_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/item_test.js b/ambari-web/test/controllers/main/service/item_test.js
index 55d27f7..e361bc7 100644
--- a/ambari-web/test/controllers/main/service/item_test.js
+++ b/ambari-web/test/controllers/main/service/item_test.js
@@ -27,6 +27,7 @@ require('controllers/global/cluster_controller');
require('controllers/main/service/reassign_controller');
require('controllers/main/service/item');
var batchUtils = require('utils/batch_scheduled_requests');
+var testHelpers = require('test/helpers');
describe('App.MainServiceItemController', function () {
@@ -977,12 +978,10 @@ describe('App.MainServiceItemController', function () {
describe("#runSmokeTestPrimary", function () {
beforeEach(function () {
sinon.stub(App, 'get').withArgs('clusterName').returns('myCluster');
- sinon.spy($, 'ajax');
});
afterEach(function () {
App.get.restore();
- $.ajax.restore();
});
var tests = [
@@ -1026,11 +1025,13 @@ describe('App.MainServiceItemController', function () {
mainServiceItemController.set("runSmokeTestErrorCallBack", Em.K);
mainServiceItemController.set("runSmokeTestSuccessCallBack", Em.K);
mainServiceItemController.runSmokeTestPrimary(test.data.query);
- this.data = JSON.parse($.ajax.args[0][0].data);
+ this.args = testHelpers.findAjaxRequest('name', 'service.item.smoke')[0];
+ this.data = this.args.data;
+ this.data = JSON.parse(App.ajax.fakeGetUrl('service.item.smoke').format(this.data).data);
});
it('ajax request is sent', function () {
- expect($.ajax.calledOnce).to.equal(true);
+ expect(this.args).exists;
});
it('RequestInfo.context is valid', function () {
@@ -1284,22 +1285,16 @@ describe('App.MainServiceItemController', function () {
beforeEach(function() {
mainServiceItemController = App.MainServiceItemController.create({});
- sinon.stub(App.ajax, 'send');
- });
- afterEach(function() {
- App.ajax.send.restore();
});
it("App.ajax.send should be called", function() {
mainServiceItemController.deleteServiceCall('S1');
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name : 'service.item.delete',
- sender: mainServiceItemController,
- data : {
- serviceName : 'S1'
- },
- success : 'deleteServiceCallSuccessCallback'
- })
+ var args = testHelpers.findAjaxRequest('name', 'service.item.delete');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(mainServiceItemController);
+ expect(args[0].data).to.be.eql({
+ serviceName : 'S1'
+ });
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/service/reassign/step1_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/reassign/step1_controller_test.js b/ambari-web/test/controllers/main/service/reassign/step1_controller_test.js
index f4a9714..a43d91f 100644
--- a/ambari-web/test/controllers/main/service/reassign/step1_controller_test.js
+++ b/ambari-web/test/controllers/main/service/reassign/step1_controller_test.js
@@ -20,6 +20,7 @@ var App = require('app');
require('controllers/main/service/reassign/step1_controller');
require('models/host_component');
+var testHelpers = require('test/helpers');
describe('App.ReassignMasterWizardStep1Controller', function () {
@@ -34,19 +35,17 @@ describe('App.ReassignMasterWizardStep1Controller', function () {
describe('#loadConfigTags', function() {
beforeEach(function() {
- sinon.stub(App.ajax, 'send', Em.K);
this.stub = sinon.stub(App.router, 'get');
});
afterEach(function() {
- App.ajax.send.restore();
this.stub.restore();
});
it('tests loadConfigTags', function() {
controller.loadConfigsTags();
-
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'config.tags');
+ expect(args).exists;
});
it('tests saveDatabaseType with type', function() {
@@ -203,29 +202,25 @@ describe('App.ReassignMasterWizardStep1Controller', function () {
describe("#onLoadConfigsTags()", function () {
beforeEach(function () {
this.mock = sinon.stub(controller, 'getConfigUrlParams');
- sinon.stub(App.ajax, 'send');
});
afterEach(function () {
this.mock.restore();
- App.ajax.send.restore();
});
it("empty params", function () {
this.mock.returns([]);
controller.onLoadConfigsTags();
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'reassign.load_configs');
+ expect(args).not.exists;
});
it("correct params", function () {
this.mock.returns(['p1', 'p2']);
controller.onLoadConfigsTags();
- expect(App.ajax.send.calledWith({
- name: 'reassign.load_configs',
- sender: controller,
- data: {
- urlParams: 'p1|p2'
- },
- success: 'onLoadConfigs',
- error: ''
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'reassign.load_configs');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ urlParams: 'p1|p2'
+ });
});
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/service/reassign/step4_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/reassign/step4_controller_test.js b/ambari-web/test/controllers/main/service/reassign/step4_controller_test.js
index e920ace..945718f 100644
--- a/ambari-web/test/controllers/main/service/reassign/step4_controller_test.js
+++ b/ambari-web/test/controllers/main/service/reassign/step4_controller_test.js
@@ -19,6 +19,7 @@
var App = require('app');
require('controllers/main/service/reassign/step4_controller');
+var testHelpers = require('test/helpers');
describe('App.ReassignMasterWizardStep4Controller', function () {
@@ -29,13 +30,6 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
})
});
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
- afterEach(function () {
- App.ajax.send.restore();
- });
-
describe('#setAdditionalConfigs()', function () {
beforeEach(function () {
@@ -149,8 +143,8 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
it('tests prepareDBCheckAction', function() {
controller.prepareDBCheckAction();
-
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'cluster.custom_action.create');
+ expect(args).exists;
});
});
@@ -427,7 +421,8 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
describe('#stopServices()', function () {
it('request is sent', function () {
controller.stopServices();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'common.services.update');
+ expect(args).exists;
});
});
@@ -486,13 +481,15 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
it('No host-components', function () {
controller.set('hostComponents', []);
controller.putHostComponentsInMaintenanceMode();
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.passive');
+ expect(args).not.exists;
expect(controller.get('multiTaskCounter')).to.equal(0);
});
it('One host-components', function () {
controller.set('hostComponents', [{}]);
controller.putHostComponentsInMaintenanceMode();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.passive');
+ expect(args).exists;
expect(controller.get('multiTaskCounter')).to.equal(0);
});
});
@@ -544,7 +541,8 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
describe('#loadConfigsTags()', function () {
it('request is sent', function () {
controller.loadConfigsTags();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'config.tags');
+ expect(args).exists;
});
});
@@ -700,6 +698,7 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
});
controller.set('content.reassign.component_name', 'COMP1');
controller.onLoadConfigsTags({});
+ this.args = testHelpers.findAjaxRequest('name', 'reassign.load_configs');
});
afterEach(function () {
@@ -707,7 +706,7 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
});
it('request is sent', function () {
- expect(App.ajax.send.calledOnce).to.be.true;
+ expect(this.args).exists;
});
it('getConfigUrlParams is called with correct data', function () {
@@ -770,6 +769,7 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
beforeEach(function () {
sinon.stub(controller, 'getServiceConfigData', Em.K);
controller.saveConfigsToServer([1]);
+ this.args = testHelpers.findAjaxRequest('name', 'common.across.services.configurations');
});
afterEach(function () {
controller.getServiceConfigData.restore();
@@ -778,7 +778,7 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
expect(controller.getServiceConfigData.calledWith([1])).to.be.true;
});
it('request is sent', function () {
- expect(App.ajax.send.calledOnce).to.be.true;
+ expect(this.args).exists;
});
});
@@ -966,12 +966,13 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
beforeEach(function () {
sinon.stub(App.router, 'get').returns({"skip.service.checks": "false"});
controller.startServices();
+ this.args = testHelpers.findAjaxRequest('name', 'common.services.update');
});
afterEach(function () {
App.router.get.restore();
});
it('request is sent', function () {
- expect(App.ajax.send.calledOnce).to.be.true;
+ expect(this.args).exists;
});
});
@@ -981,17 +982,20 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
controller.set('hostComponents', []);
controller.set('content.reassignHosts.source', 'host1');
controller.deleteHostComponents();
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'common.delete.host_component');
+ expect(args).not.exists;
});
it('delete two components', function () {
controller.set('hostComponents', [1, 2]);
controller.set('content.reassignHosts.source', 'host1');
controller.deleteHostComponents();
- expect(App.ajax.send.getCall(0).args[0].data).to.eql({
+ var args = testHelpers.filterAjaxRequests('name', 'common.delete.host_component');
+ expect(args).to.have.property('length').equal(2);
+ expect(args[0][0].data).to.eql({
"hostName": "host1",
"componentName": 1
});
- expect(App.ajax.send.getCall(1).args[0].data).to.eql({
+ expect(args[1][0].data).to.eql({
"hostName": "host1",
"componentName": 2
});
@@ -1138,30 +1142,24 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
it('component_name is C1', function () {
controller.set('content.reassign.component_name', 'C1');
controller.cleanMySqlServer();
- expect(App.ajax.send.calledWith({
- name: 'service.mysql.clean',
- sender: controller,
- data: {
- host: 'host1'
- },
- success: 'startPolling',
- error: 'onTaskError'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'service.mysql.clean');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ host: 'host1'
+ });
});
it('component_name is MYSQL_SERVER', function () {
controller.set('content.reassign.component_name', 'MYSQL_SERVER');
controller.set('content.reassignHosts.target', 'host2');
controller.cleanMySqlServer();
- expect(App.ajax.send.calledWith({
- name: 'service.mysql.clean',
- sender: controller,
- data: {
- host: 'host2'
- },
- success: 'startPolling',
- error: 'onTaskError'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'service.mysql.clean');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ host: 'host2'
+ });
});
});
@@ -1183,30 +1181,24 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
it('component_name is C1', function () {
controller.set('content.reassign.component_name', 'C1');
controller.configureMySqlServer();
- expect(App.ajax.send.calledWith({
- name: 'service.mysql.configure',
- sender: controller,
- data: {
- host: 'host1'
- },
- success: 'startPolling',
- error: 'onTaskError'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'service.mysql.configure');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ host: 'host1'
+ });
});
it('component_name is MYSQL_SERVER', function () {
controller.set('content.reassign.component_name', 'MYSQL_SERVER');
controller.set('content.reassignHosts.target', 'host2');
controller.configureMySqlServer();
- expect(App.ajax.send.calledWith({
- name: 'service.mysql.configure',
- sender: controller,
- data: {
- host: 'host2'
- },
- success: 'startPolling',
- error: 'onTaskError'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'service.mysql.configure');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ host: 'host2'
+ });
});
});
@@ -1243,21 +1235,18 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
});
it("valid request is sent", function() {
controller.startMySqlServer();
- expect(App.ajax.send.calledWith({
- name: 'common.host.host_component.update',
- sender: controller,
- data: {
- context: "Start MySQL Server",
- hostName: 'host1',
- serviceName: "HIVE",
- componentName: "MYSQL_SERVER",
- HostRoles: {
- state: "STARTED"
- }
- },
- success: 'startPolling',
- error: 'onTaskError'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.update');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ context: "Start MySQL Server",
+ hostName: 'host1',
+ serviceName: "HIVE",
+ componentName: "MYSQL_SERVER",
+ HostRoles: {
+ state: "STARTED"
+ }
+ });
});
});
@@ -1280,26 +1269,23 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
})
}));
controller.restartMySqlServer();
- expect(App.ajax.send.calledWith({
- name: 'restart.hostComponents',
- sender: controller,
- data: {
- context: 'Restart MySql Server',
- resource_filters: [{
- component_name: "MYSQL_SERVER",
- hosts: 'host1',
- service_name: "HIVE"
- }],
- operation_level: {
- level: "HOST_COMPONENT",
- cluster_name: 'cl1',
- service_name: "HIVE",
- hostcomponent_name: "MYSQL_SERVER"
- }
- },
- success: 'startPolling',
- error: 'onTaskError'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'restart.hostComponents');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ context: 'Restart MySql Server',
+ resource_filters: [{
+ component_name: "MYSQL_SERVER",
+ hosts: 'host1',
+ service_name: "HIVE"
+ }],
+ operation_level: {
+ level: "HOST_COMPONENT",
+ cluster_name: 'cl1',
+ service_name: "HIVE",
+ hostcomponent_name: "MYSQL_SERVER"
+ }
+ });
});
});
@@ -1312,24 +1298,21 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
})
}));
controller.startNewMySqlServer();
+ this.args = testHelpers.findAjaxRequest('name', 'common.host.host_component.update');
});
it('valid request is sent', function() {
- expect(App.ajax.send.calledWith({
- name: 'common.host.host_component.update',
- sender: controller,
- data: {
- context: "Start MySQL Server",
- hostName: 'host1',
- serviceName: "HIVE",
- componentName: "MYSQL_SERVER",
- HostRoles: {
- state: "STARTED"
- }
- },
- success: 'startPolling',
- error: 'onTaskError'
- })).to.be.true;
+ expect(this.args[0]).exists;
+ expect(this.args[0].sender).to.be.eql(controller);
+ expect(this.args[0].data).to.be.eql({
+ context: "Start MySQL Server",
+ hostName: 'host1',
+ serviceName: "HIVE",
+ componentName: "MYSQL_SERVER",
+ HostRoles: {
+ state: "STARTED"
+ }
+ });
});
});
@@ -1598,17 +1581,15 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
preparedDBProperties: {}
});
controller.prepareDBCheckAction();
+ this.args = testHelpers.findAjaxRequest('name', 'cluster.custom_action.create');
});
afterEach(function () {
App.router.get.restore();
controller.getConnectionProperty.restore();
});
it('valid request is sent', function () {
- var callArgs = App.ajax.send.getCall(0).args[0];
- expect(callArgs.name).to.equal('cluster.custom_action.create');
- expect(callArgs.success).to.equal('onCreateActionSuccess');
- expect(callArgs.error).to.equal('onTaskError');
- expect(callArgs.data).to.eql({
+ expect(this.args[0]).exists;
+ expect(this.args[0].data).to.eql({
requestInfo: {
"context": "Check host",
"action": "check_host",
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/service/reassign/step6_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/reassign/step6_controller_test.js b/ambari-web/test/controllers/main/service/reassign/step6_controller_test.js
index 9ab1144..5591347 100644
--- a/ambari-web/test/controllers/main/service/reassign/step6_controller_test.js
+++ b/ambari-web/test/controllers/main/service/reassign/step6_controller_test.js
@@ -20,6 +20,7 @@ App = require('app');
require('controllers/main/service/reassign/step6_controller');
var controller;
+var testHelpers = require('test/helpers');
describe('App.ReassignMasterWizardStep6Controller', function () {
@@ -31,12 +32,7 @@ describe('App.ReassignMasterWizardStep6Controller', function () {
}),
startServices: Em.K
});
- sinon.stub(App.ajax, 'send', Em.K);
});
- afterEach(function () {
- App.ajax.send.restore();
- });
-
describe('#initializeTasks()', function () {
it('No commands', function () {
@@ -155,17 +151,20 @@ describe('App.ReassignMasterWizardStep6Controller', function () {
controller.set('hostComponents', []);
controller.set('content.reassignHosts.source', 'host1');
controller.deleteHostComponents();
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'common.delete.host_component');
+ expect(args).not.exists;
});
it('delete two components', function () {
controller.set('hostComponents', [1, 2]);
controller.set('content.reassignHosts.source', 'host1');
controller.deleteHostComponents();
- expect(App.ajax.send.getCall(0).args[0].data).to.eql({
+ var args = testHelpers.filterAjaxRequests('name', 'common.delete.host_component');
+ expect(args).to.have.property('length').equal(2);
+ expect(args[0][0].data).to.eql({
"hostName": "host1",
"componentName": 1
});
- expect(App.ajax.send.getCall(1).args[0].data).to.eql({
+ expect(args[1][0].data).to.eql({
"hostName": "host1",
"componentName": 2
});
@@ -201,7 +200,8 @@ describe('App.ReassignMasterWizardStep6Controller', function () {
describe('#stopMysqlService()', function () {
it('stopMysqlService', function () {
controller.stopMysqlService();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.update');
+ expect(args[0]).exists;
});
});
@@ -216,13 +216,15 @@ describe('App.ReassignMasterWizardStep6Controller', function () {
it('No host-components', function () {
controller.set('hostComponents', []);
controller.putHostComponentsInMaintenanceMode();
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.passive');
+ expect(args).not.exists;
expect(controller.get('multiTaskCounter')).to.equal(0);
});
it('One host-components', function () {
controller.set('hostComponents', [{}]);
controller.putHostComponentsInMaintenanceMode();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.passive');
+ expect(args).exists;
expect(controller.get('multiTaskCounter')).to.equal(0);
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/service/reassign/step7_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/reassign/step7_controller_test.js b/ambari-web/test/controllers/main/service/reassign/step7_controller_test.js
index 238ebea..6f16f0f 100644
--- a/ambari-web/test/controllers/main/service/reassign/step7_controller_test.js
+++ b/ambari-web/test/controllers/main/service/reassign/step7_controller_test.js
@@ -20,11 +20,11 @@ App = require('app');
require('controllers/main/service/reassign/step7_controller');
var controller;
+var testHelpers = require('test/helpers');
describe('App.ReassignMasterWizardStep7Controller', function () {
beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
controller = App.ReassignMasterWizardStep7Controller.create({
content: Em.Object.create({
reassign: Em.Object.create(),
@@ -32,9 +32,6 @@ describe('App.ReassignMasterWizardStep7Controller', function () {
})
});
});
- afterEach(function () {
- App.ajax.send.restore();
- });
describe('#initializeTasks()', function () {
it('should set isLoaded to true', function () {
@@ -49,30 +46,29 @@ describe('App.ReassignMasterWizardStep7Controller', function () {
it("no host-components", function() {
controller.set('hostComponents', []);
controller.putHostComponentsInMaintenanceMode();
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.passive');
+ expect(args).not.exists;
expect(controller.get('multiTaskCounter')).to.equal(0);
});
it("one host-component", function() {
controller.set('hostComponents', ['C1']);
controller.set('content.reassignHosts.target', 'host1');
controller.putHostComponentsInMaintenanceMode();
- expect(App.ajax.send.calledWith({
- name: 'common.host.host_component.passive',
- sender: controller,
- data: {
- hostName: 'host1',
- passive_state: "ON",
- componentName: 'C1'
- },
- success: 'onComponentsTasksSuccess',
- error: 'onTaskError'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.passive');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ hostName: 'host1',
+ passive_state: "ON",
+ componentName: 'C1'
+ });
expect(controller.get('multiTaskCounter')).to.equal(0);
});
it("two host-components", function() {
controller.set('hostComponents', ['C1', 'C2']);
controller.putHostComponentsInMaintenanceMode();
- expect(App.ajax.send.calledTwice).to.be.true;
+ var args = testHelpers.filterAjaxRequests('name', 'common.host.host_component.passive');
+ expect(args).to.have.property('length').equal(2);
expect(controller.get('multiTaskCounter')).to.equal(0);
});
});
@@ -81,29 +77,28 @@ describe('App.ReassignMasterWizardStep7Controller', function () {
it("no host-components", function() {
controller.set('hostComponents', []);
controller.deleteHostComponents();
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'common.delete.host_component');
+ expect(args).not.exists;
expect(controller.get('multiTaskCounter')).to.equal(0);
});
it("one host-component", function() {
controller.set('hostComponents', ['C1']);
controller.set('content.reassignHosts.target', 'host1');
controller.deleteHostComponents();
- expect(App.ajax.send.calledWith({
- name: 'common.delete.host_component',
- sender: controller,
- data: {
- hostName: 'host1',
- componentName: 'C1'
- },
- success: 'onComponentsTasksSuccess',
- error: 'onDeleteHostComponentsError'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'common.delete.host_component');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ hostName: 'host1',
+ componentName: 'C1'
+ });
expect(controller.get('multiTaskCounter')).to.equal(0);
});
it("two host-components", function() {
controller.set('hostComponents', ['C1', 'C2']);
controller.deleteHostComponents();
- expect(App.ajax.send.calledTwice).to.be.true;
+ var args = testHelpers.filterAjaxRequests('name', 'common.delete.host_component');
+ expect(args).to.have.property('length').equal(2);
expect(controller.get('multiTaskCounter')).to.equal(0);
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/service_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service_test.js b/ambari-web/test/controllers/main/service_test.js
index 0e7f464..60e0e4d 100644
--- a/ambari-web/test/controllers/main/service_test.js
+++ b/ambari-web/test/controllers/main/service_test.js
@@ -19,6 +19,7 @@
var App = require('app');
require('controllers/main/service');
+var testHelpers = require('test/helpers');
var mainServiceController;
function getController() {
@@ -82,6 +83,10 @@ describe('App.MainServiceController', function () {
mainServiceController = getController();
});
+ afterEach(function () {
+ mainServiceController.destroy();
+ });
+
App.TestAliases.testAsComputedNotEqual(getController(), 'isStartStopAllClicked', 'App.router.backgroundOperationsController.allOperationsCount', 0);
describe('#isStartAllDisabled', function () {
@@ -277,28 +282,23 @@ describe('App.MainServiceController', function () {
query = 'some query';
beforeEach(function() {
- sinon.stub($, 'ajax', Em.K);
sinon.stub(App, 'get', function(k) {
- if ('testMode' === k) return false;
if ('clusterName' === k) return 'tdk';
return Em.get(App, k);
});
mainServiceController.allServicesCall(state, query);
- this.params = $.ajax.args[0][0];
+ var args = testHelpers.findAjaxRequest('name', 'common.services.update');
+ this.params = App.ajax.fakeGetUrl('common.services.update').format(args[0].data);
this.data = JSON.parse(this.params.data);
});
afterEach(function() {
- $.ajax.restore();
App.get.restore();
});
it('PUT request is sent', function() {
expect(this.params.type).to.equal('PUT');
});
- it('request is sent to `/services`', function() {
- expect(this.params.url.contains('/clusters/tdk/services?')).to.be.true;
- });
it('Body.ServiceInfo.state is ' + state, function() {
expect(this.data.Body.ServiceInfo.state).to.equal(state);
});
@@ -408,21 +408,4 @@ describe('App.MainServiceController', function () {
});
- describe('#restartHostComponents', function () {
-
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
-
- afterEach(function () {
- App.ajax.send.restore();
- });
-
- it('should send ajax request', function () {
- mainServiceController.restartHostComponents();
- expect(App.ajax.send.calledOnce).to.be.true;
- });
-
- });
-
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/views_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/views_controller_test.js b/ambari-web/test/controllers/main/views_controller_test.js
index 85c7521..41384d3 100644
--- a/ambari-web/test/controllers/main/views_controller_test.js
+++ b/ambari-web/test/controllers/main/views_controller_test.js
@@ -18,6 +18,7 @@
var App = require('app');
require('controllers/main/views_controller');
+var testHelpers = require('test/helpers');
var mainViewsController;
describe('MainViewsController', function () {
@@ -28,24 +29,24 @@ describe('MainViewsController', function () {
describe('#loadAmbariViews()', function () {
beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
this.stub = sinon.stub(App.router, 'get');
});
afterEach(function () {
App.router.get.restore();
- App.ajax.send.restore();
});
it('should load views if the user is logged in', function () {
this.stub.withArgs('loggedIn').returns(true);
mainViewsController.loadAmbariViews();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'views.info');
+ expect(args).to.exists;
});
it('should not load views if the user is not logged in', function () {
this.stub.withArgs('loggedIn').returns(false);
mainViewsController.loadAmbariViews();
- expect(App.ajax.send.notCalled).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'views.info');
+ expect(args).to.not.exists;
})
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main_test.js b/ambari-web/test/controllers/main_test.js
index 0061695..e367201 100644
--- a/ambari-web/test/controllers/main_test.js
+++ b/ambari-web/test/controllers/main_test.js
@@ -16,8 +16,8 @@
* limitations under the License.
*/
-
var App = require('app');
+var testHelpers = require('test/helpers');
describe('App.MainController', function () {
var mainController = App.MainController.create();
@@ -132,26 +132,13 @@ describe('App.MainController', function () {
});
describe('#getServerVersion', function() {
- var res;
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', function(data) {
- res = JSON.parse(JSON.stringify(data));
- });
- });
- afterEach(function () {
- App.ajax.send.restore();
- });
+
it ('Should send data', function() {
mainController.getServerVersion();
- expect(res).to.be.eql({
- "name": "ambari.service",
- "sender": {},
- "data": {
- "fields": "?fields=RootServiceComponents/component_version,RootServiceComponents/properties/server.os_family&minimal_response=true"
- },
- "success": "getServerVersionSuccessCallback",
- "error": "getServerVersionErrorCallback"
- });
+ var args = testHelpers.findAjaxRequest('name', 'ambari.service');
+ expect(args[0]).to.exists;
+ expect(args[0].sender).to.be.eql(mainController);
+ expect(args[0].data.fields).to.be.eql('?fields=RootServiceComponents/component_version,RootServiceComponents/properties/server.os_family&minimal_response=true');
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/wizard/step2_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step2_test.js b/ambari-web/test/controllers/wizard/step2_test.js
index 1a67ca9..63887ab 100644
--- a/ambari-web/test/controllers/wizard/step2_test.js
+++ b/ambari-web/test/controllers/wizard/step2_test.js
@@ -21,6 +21,7 @@ require('controllers/wizard/step2_controller');
require('models/host');
require('models/host_component');
require('messages');
+var testHelpers = require('test/helpers');
var c;
function getController() {
@@ -582,16 +583,12 @@ describe('App.WizardStep2Controller', function () {
});
describe('#setAmbariJavaHome', function() {
- beforeEach(function() {
- sinon.stub($, 'ajax', Em.K);
- });
- afterEach(function() {
- $.ajax.restore();
- });
+
it('should do ajax-request', function() {
var controller = App.WizardStep2Controller.create({onGetAmbariJavaHomeSuccess: Em.K, onGetAmbariJavaHomeError: Em.K});
controller.setAmbariJavaHome();
- expect($.ajax.calledOnce).to.equal(true);
+ var args = testHelpers.findAjaxRequest('name', 'ambari.service');
+ expect(args).exists;
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/wizard/step3_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step3_test.js b/ambari-web/test/controllers/wizard/step3_test.js
index 7b6684f..8c2fb6f 100644
--- a/ambari-web/test/controllers/wizard/step3_test.js
+++ b/ambari-web/test/controllers/wizard/step3_test.js
@@ -22,6 +22,7 @@ require('utils/ajax/ajax');
require('utils/http_client');
require('models/host');
require('controllers/wizard/step3_controller');
+var testHelpers = require('test/helpers');
function getController() {
return App.WizardStep3Controller.create({
@@ -41,16 +42,12 @@ describe('App.WizardStep3Controller', function () {
sinon.stub(App.db, 'getDisplayLength', Em.K);
sinon.stub(App.db, 'getFilterConditions').returns([]);
sinon.stub(App.router, 'send', Em.K);
- sinon.stub(App.ajax, 'send', function () {
- return {done: Em.K}
- });
});
afterEach(function () {
App.db.getDisplayLength.restore();
App.router.send.restore();
App.db.getFilterConditions.restore();
- App.ajax.send.restore();
});
App.TestAliases.testAsComputedGt(getController(), 'isHostHaveWarnings', 'warnings.length', 0);
@@ -153,14 +150,6 @@ describe('App.WizardStep3Controller', function () {
describe('#isWarningsBoxVisible', function () {
- beforeEach(function () {
- sinon.stub(App, 'get').withArgs('testMode').returns(false);
- });
-
- afterEach(function () {
- App.get.restore();
- });
-
it('for "real" mode should be based on isRegistrationInProgress', function () {
c.set('isRegistrationInProgress', false);
expect(c.get('isWarningsBoxVisible')).to.equal(true);
@@ -259,25 +248,9 @@ describe('App.WizardStep3Controller', function () {
afterEach(function () {
c.navigateStep.restore();
- App.set('testMode', false);
- });
-
- it('should set isLoaded to true', function () {
- App.set('testMode', true);
- c.set('content', {hosts: {}});
- c.loadHosts();
- expect(c.get('isLoaded')).to.equal(true);
- });
-
- it('should set bootStatus REGISTERED on testMode', function () {
- App.set('testMode', true);
- c.set('content', {hosts: {c: {name: 'name'}}});
- c.loadHosts();
- expect(c.get('hosts').everyProperty('bootStatus', 'REGISTERED')).to.equal(true);
});
it('should set bootStatus DONE on "real" mode and when installOptions.manualInstall is selected', function () {
- App.set('testMode', false);
c.set('content.installOptions', {manualInstall: true});
c.set('content.hosts', {c: {name: 'name'}});
c.loadHosts();
@@ -285,14 +258,12 @@ describe('App.WizardStep3Controller', function () {
});
it('should set bootStatus PENDING on "real" mode and when installOptions.manualInstall is not selected', function () {
- App.set('testMode', false);
c.set('content', {installOptions: {manualInstall: false}, hosts: {c: {name: 'name'}}});
c.loadHosts();
expect(c.get('hosts').everyProperty('bootStatus', 'PENDING')).to.equal(true);
});
it('should set bootStatus PENDING on "real" mode and when installOptions.manualInstall is not selected (2)', function () {
- App.set('testMode', true);
c.set('content', {hosts: {c: {name: 'name'}, d: {name: 'name1'}}});
c.loadHosts();
expect(c.get('hosts').everyProperty('isChecked', false)).to.equal(true);
@@ -754,14 +725,16 @@ describe('App.WizardStep3Controller', function () {
it('shouldn\'t do nothing if stopBootstrap is true', function () {
c.set('stopBootstrap', true);
c.doBootstrap();
- expect(App.ajax.send.called).to.equal(false);
+ var args = testHelpers.findAjaxRequest('name', 'wizard.step3.bootstrap');
+ expect(args).not.exists;
});
it('should increment numPolls if stopBootstrap is false', function () {
c.set('numPolls', 0);
c.set('stopBootstrap', false);
c.doBootstrap();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'wizard.step3.bootstrap');
+ expect(args).exists;
expect(c.get('numPolls')).to.equal(1);
});
@@ -796,13 +769,15 @@ describe('App.WizardStep3Controller', function () {
it('shouldn\'t do nothing if stopBootstrap is true', function () {
c.set('stopBootstrap', true);
c.isHostsRegistered();
- expect(App.ajax.send.called).to.equal(false);
+ var args = testHelpers.findAjaxRequest('name', 'wizard.step3.is_hosts_registered');
+ expect(args).not.exists;
});
it('should do ajax call if stopBootstrap is false', function () {
c.set('stopBootstrap', false);
c.isHostsRegistered();
- expect(App.ajax.send.called).to.equal(true);
+ var args = testHelpers.findAjaxRequest('name', 'wizard.step3.is_hosts_registered');
+ expect(args).exists;
});
});
@@ -905,7 +880,8 @@ describe('App.WizardStep3Controller', function () {
it('should call App.ajax.send', function () {
c.getAllRegisteredHosts();
- expect(App.ajax.send.calledOnce).to.equal(true);
+ var args = testHelpers.findAjaxRequest('name', 'wizard.step3.is_hosts_registered');
+ expect(args).exists;
});
});
@@ -1009,7 +985,8 @@ describe('App.WizardStep3Controller', function () {
it('should do ajax request', function () {
c.getHostInfo();
- expect(App.ajax.send.calledOnce).to.equal(true);
+ var args = testHelpers.findAjaxRequest('name', 'wizard.step3.host_info');
+ expect(args).exists;
});
});
@@ -1277,17 +1254,12 @@ describe('App.WizardStep3Controller', function () {
describe('#parseHostCheckWarnings', function () {
beforeEach(function () {
- sinon.stub(App, 'get', function (k) {
- if ('testMode' === k) return false;
- return Em.get(App, k);
- });
sinon.stub(c, 'filterHostsData', function (k) {
return k;
});
});
afterEach(function () {
- App.get.restore();
c.filterHostsData.restore();
});
@@ -1775,17 +1747,12 @@ describe('App.WizardStep3Controller', function () {
describe('#parseWarnings', function () {
beforeEach(function () {
- sinon.stub(App, 'get', function (k) {
- if ('testMode' === k) return false;
- return Em.get(App, k);
- });
sinon.stub(c, 'filterBootHosts', function (k) {
return k;
});
});
afterEach(function () {
- App.get.restore();
c.filterBootHosts.restore();
});
@@ -2327,17 +2294,12 @@ describe('App.WizardStep3Controller', function () {
setRegistrationInProgress: Em.K,
startRegistration: Em.K
});
- sinon.stub(App, 'get', function (k) {
- if ('testMode' === k) return false;
- return Em.get(App, k);
- });
sinon.spy(c, 'startRegistration');
c.navigateStep();
});
afterEach(function () {
- App.get.restore();
c.startRegistration.restore();
});
@@ -2540,7 +2502,6 @@ describe('App.WizardStep3Controller', function () {
sinon.spy(c, '_setHostDataWithSkipBootstrap');
sinon.stub(App, 'get', function (k) {
if ('skipBootstrap' === k) return skipBootstrap;
- if ('testMode' === k) return false;
return Em.get(App, k);
});
c.reopen({
@@ -2671,17 +2632,6 @@ describe('App.WizardStep3Controller', function () {
describe('#doCheckJDK', function () {
- beforeEach(function () {
- sinon.stub(App, 'get', function (k) {
- if ('testMode' === k) return false;
- return Em.get(App, k);
- });
- });
-
- afterEach(function () {
- App.get.restore();
- });
-
it('should do request to the ambari-server', function () {
var bootHosts = [
@@ -2696,24 +2646,14 @@ describe('App.WizardStep3Controller', function () {
jdkLocation: jdkLocation
});
c.doCheckJDK();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'wizard.step3.jdk_check');
+ expect(args).exists;
});
});
describe('#doCheckJDKsuccessCallback', function () {
- beforeEach(function () {
- sinon.stub(App, 'get', function (k) {
- if ('testMode' === k) return false;
- return Em.get(App, k);
- });
- });
-
- afterEach(function () {
- App.get.restore();
- });
-
it('should set jdkRequestIndex if data provided', function () {
var data = {
@@ -2742,7 +2682,8 @@ describe('App.WizardStep3Controller', function () {
c.set('jdkRequestIndex', jdkRequestIndex);
c.set('jdkCategoryWarnings', null);
c.doCheckJDKsuccessCallback(data);
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'wizard.step3.jdk_check.get_results');
+ expect(args).exists;
});
});
@@ -2834,7 +2775,6 @@ describe('App.WizardStep3Controller', function () {
describe('#getHostCheckTasksSuccess', function() {
beforeEach(function() {
- sinon.stub($, 'ajax', Em.K);
sinon.stub(c, 'getHostInfo', Em.K);
sinon.stub(c, 'parseHostNameResolution', Em.K);
sinon.stub(c, 'getGeneralHostCheck', Em.K);
@@ -2843,7 +2783,6 @@ describe('App.WizardStep3Controller', function () {
});
afterEach(function() {
- $.ajax.restore();
c.getHostInfo.restore();
c.parseHostNameResolution.restore();
c.getGeneralHostCheck.restore();
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/wizard/step6_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step6_test.js b/ambari-web/test/controllers/wizard/step6_test.js
index 4fdd642..61cf879 100644
--- a/ambari-web/test/controllers/wizard/step6_test.js
+++ b/ambari-web/test/controllers/wizard/step6_test.js
@@ -75,15 +75,6 @@ describe('App.WizardStep6Controller', function () {
beforeEach(function () {
controller = getController();
- sinon.stub(App.ajax, 'send', function () {
- return {
- then: Em.K
- };
- });
- });
-
- afterEach(function () {
- App.ajax.send.restore();
});
App.TestAliases.testAsComputedEqual(getController(), 'isAddHostWizard', 'content.controllerName', 'addHostController');
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/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 e93d3f7..434a8ba 100644
--- a/ambari-web/test/controllers/wizard/step7_test.js
+++ b/ambari-web/test/controllers/wizard/step7_test.js
@@ -19,6 +19,7 @@
var App = require('app');
require('mixins/common/localStorage');
require('controllers/wizard/step7_controller');
+var testHelpers = require('test/helpers');
var installerStep7Controller,
issuesFilterCases = [
@@ -108,17 +109,11 @@ function getController() {
describe('App.InstallerStep7Controller', function () {
beforeEach(function () {
- sinon.stub(App.ajax, 'send', function () {
- return {
- then: Em.K
- }
- });
sinon.stub(App.config, 'setPreDefinedServiceConfigs', Em.K);
installerStep7Controller = getController();
});
afterEach(function() {
- App.ajax.send.restore();
App.config.setPreDefinedServiceConfigs.restore();
installerStep7Controller.destroy();
});
@@ -434,14 +429,16 @@ describe('App.InstallerStep7Controller', function () {
it('should do ajax request for each received service name', function () {
var serviceNames = ['s1', 's2', 's3'];
installerStep7Controller.loadInstalledServicesConfigGroups(serviceNames);
- expect(App.ajax.send.callCount).to.equal(serviceNames.length);
+ var args = testHelpers.filterAjaxRequests('name', 'config.tags_and_groups');
+ expect(args).to.have.property('length').equal(serviceNames.length);
});
});
describe('#getConfigTags', function () {
it('should do ajax-request', function () {
installerStep7Controller.getConfigTags();
- expect(App.ajax.send.calledOnce).to.equal(true);
+ var args = testHelpers.findAjaxRequest('name', 'config.tags');
+ expect(args).exists;
});
});
@@ -475,7 +472,8 @@ describe('App.InstallerStep7Controller', function () {
describe('#checkMySQLHost', function () {
it('should send query', function () {
installerStep7Controller.checkMySQLHost();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'ambari.service');
+ expect(args).exists;
});
});
@@ -2179,7 +2177,7 @@ describe('App.InstallerStep7Controller', function () {
beforeEach(function () {
installerStep7Controller.loadServiceConfigGroupOverrides(serviceConfigs, loadedGroupToOverrideSiteToTagMap, configGroups);
- this.args = App.ajax.send.args[0][0].data;
+ this.args = testHelpers.findAjaxRequest('name', 'config.host_overrides')[0].data;
});
it('url params are valid', function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/wizard/step8_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step8_test.js b/ambari-web/test/controllers/wizard/step8_test.js
index 9eb5b1e..b40b91c 100644
--- a/ambari-web/test/controllers/wizard/step8_test.js
+++ b/ambari-web/test/controllers/wizard/step8_test.js
@@ -21,6 +21,7 @@ require('utils/ajax/ajax_queue');
require('controllers/main/service/info/configs');
require('controllers/wizard/step8_controller');
var installerStep8Controller, configurationController;
+var testHelpers = require('test/helpers');
var configs = Em.A([
Em.Object.create({filename: 'hdfs-site.xml', name: 'p1', value: 'v1'}),
@@ -867,7 +868,6 @@ describe('App.WizardStep8Controller', function () {
beforeEach(function () {
sinon.stub(App, 'get').withArgs('currentStackName').returns('HDP');
- sinon.stub(App.ajax, 'send', Em.K);
sinon.stub(App.StackVersion, 'find', function() {
return [
Em.Object.create({state: 'CURRENT', repositoryVersion: {repositoryVersion: '2.3.0.0-2208'}})
@@ -876,14 +876,13 @@ describe('App.WizardStep8Controller', function () {
});
afterEach(function () {
- App.ajax.send.restore();
App.get.restore();
App.StackVersion.find.restore();
});
it('should use current StackVersion', function() {
installerStep8Controller.loadRepoInfo();
- var data = App.ajax.send.args[0][0].data;
- expect(data).to.eql({stackName: 'HDP', repositoryVersion: '2.3.0.0-2208'});
+ var args = testHelpers.findAjaxRequest('name', 'cluster.load_repo_version');
+ expect(args[0].data).to.eql({stackName: 'HDP', repositoryVersion: '2.3.0.0-2208'});
});
});
@@ -1172,20 +1171,13 @@ describe('App.WizardStep8Controller', function () {
describe('#deleteClusters', function() {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
-
- afterEach(function () {
- App.ajax.send.restore();
- });
-
it('should call App.ajax.send for each provided clusterName', function() {
var clusterNames = ['h1', 'h2', 'h3'];
installerStep8Controller.deleteClusters(clusterNames);
- expect(App.ajax.send.callCount).to.equal(clusterNames.length);
+ var args = testHelpers.filterAjaxRequests('name', 'common.delete.cluster');
+ expect(args).to.have.property('length').equal(clusterNames.length);
clusterNames.forEach(function(n, i) {
- expect(App.ajax.send.getCall(i).args[0].data).to.eql({name: n, isLast: i === clusterNames.length - 1});
+ expect(args[i][0].data).to.eql({name: n, isLast: i === clusterNames.length - 1});
});
});
@@ -1249,24 +1241,8 @@ describe('App.WizardStep8Controller', function () {
});
describe('#addRequestToAjaxQueue', function() {
- describe('testMode = true', function() {
- before(function() {
- App.set('testMode', true);
- });
- after(function() {
- App.set('testMode', false);
- });
- it('shouldn\'t do nothing', function() {
- installerStep8Controller.set('ajaxRequestsQueue', App.ajaxQueue.create());
- installerStep8Controller.get('ajaxRequestsQueue').clear();
- installerStep8Controller.addRequestToAjaxQueue({});
- expect(installerStep8Controller.get('ajaxRequestsQueue.queue.length')).to.equal(0);
- });
- });
- describe('testMode = true', function() {
- before(function() {
- App.set('testMode', false);
- });
+
+ describe('testMode = false', function() {
it('should add request', function() {
var clusterName = 'c1';
installerStep8Controller.reopen({clusterName: clusterName});
@@ -1338,39 +1314,27 @@ describe('App.WizardStep8Controller', function () {
describe('#applyInstalledServicesConfigurationGroup', function() {
beforeEach(function() {
- sinon.stub($, 'ajax', function () {
- return {
- then: Em.K,
- retry: function () {
- return {then: Em.K}
- }
- }
- });
sinon.stub(App.router, 'get', function() {
return configurationController;
});
});
afterEach(function() {
- $.ajax.restore();
App.router.get.restore();
});
it('should do ajax request for each config group', function() {
var configGroups = [{ConfigGroup: {id:''}}, {ConfigGroup: {id:''}}];
installerStep8Controller.applyInstalledServicesConfigurationGroup(configGroups);
- expect($.ajax.callCount).to.equal(configGroups.length);
+ var args = testHelpers.filterAjaxRequests('name', 'config_groups.update_config_group');
+ expect(args).to.have.property('length').equal(configGroups.length);
});
});
describe('#getExistingClusterNames', function() {
- beforeEach(function() {
- sinon.stub(App.ajax, 'send', Em.K);
- });
- afterEach(function() {
- App.ajax.send.restore();
- });
+
it('should do ajax request', function() {
installerStep8Controller.getExistingClusterNames();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'wizard.step8.existing_cluster_names');
+ expect(args).exists;
});
});
@@ -1892,8 +1856,6 @@ describe('App.WizardStep8Controller', function () {
describe('#createNotification', function () {
beforeEach(function () {
- var stub = sinon.stub(App, 'get');
- stub.withArgs('testMode').returns(false);
installerStep8Controller.clearStep();
installerStep8Controller.set('content', {controllerName: 'installerController'});
installerStep8Controller.set('configs', [
@@ -1910,21 +1872,14 @@ describe('App.WizardStep8Controller', function () {
{name: 'some_p', value: 'some_v', serviceName: 'MISC', filename: 'alert_notification'}
]);
installerStep8Controller.get('ajaxRequestsQueue').clear();
- sinon.stub(App.ajax, 'send', function () {
- return {complete: Em.K}
- });
- });
-
- afterEach(function () {
- App.get.restore();
- App.ajax.send.restore();
});
it('should add request to queue', function () {
installerStep8Controller.createNotification();
expect(installerStep8Controller.get('ajaxRequestsQueue.queue.length')).to.equal(1);
installerStep8Controller.get('ajaxRequestsQueue').runNextRequest();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'alerts.create_alert_notification');
+ expect(args).exists;
});
describe('sent data should be valid', function () {
@@ -2443,7 +2398,6 @@ describe('App.WizardStep8Controller', function () {
beforeEach(function () {
sinon.stub(App.db, 'get').withArgs('KerberosWizard', 'kerberosDescriptorConfigs').returns(1234);
- sinon.stub(App.ajax, 'send', Em.K);
sinon.stub(installerStep8Controller, 'addRequestToAjaxQueue', Em.K);
sinon.stub(installerStep8Controller, 'get').withArgs('wizardController').returns(Em.Object.create({
getDBProperty: function() { return true; }
@@ -2452,21 +2406,22 @@ describe('App.WizardStep8Controller', function () {
afterEach(function () {
App.db.get.restore();
- App.ajax.send.restore();
installerStep8Controller.addRequestToAjaxQueue.restore();
installerStep8Controller.get.restore();
});
it('should send request instantly', function () {
installerStep8Controller.updateKerberosDescriptor(true);
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'admin.kerberos.cluster.artifact.update');
+ expect(args[0]).exists;
+ expect(args[0].data).to.be.eql(requestData);
expect(installerStep8Controller.addRequestToAjaxQueue.called).to.be.false;
- expect(App.ajax.send.args[0][0].data).to.be.eql(requestData);
});
it('should add request to the queue', function () {
installerStep8Controller.updateKerberosDescriptor(false);
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'admin.kerberos.cluster.artifact.update');
+ expect(args).not.exists;
expect(installerStep8Controller.addRequestToAjaxQueue.calledOnce).to.be.true;
expect(installerStep8Controller.addRequestToAjaxQueue.args[0][0].data).to.be.eql(requestData);
});
[08/22] ambari git commit: AMBARI-14718. on region server restart
ambari is setting /tmp to hbase:hadoop (aonishuk)
Posted by nc...@apache.org.
AMBARI-14718. on region server restart ambari is setting /tmp to hbase:hadoop (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/2c80cab2
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/2c80cab2
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/2c80cab2
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 2c80cab2fef0167da13ec1836c5ba98fdc897c0b
Parents: f8fe788
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Wed Jan 20 21:19:09 2016 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Wed Jan 20 21:19:09 2016 +0200
----------------------------------------------------------------------
.../HBASE/0.96.0.2.0/package/scripts/hbase.py | 2 --
.../HBASE/0.96.0.2.0/package/scripts/params_linux.py | 2 --
.../src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py | 4 ----
.../src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py | 6 ------
.../python/stacks/2.0.6/HBASE/test_hbase_regionserver.py | 8 --------
.../python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py | 4 ----
6 files changed, 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/2c80cab2/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
index c407a93..1240e7c 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
@@ -57,8 +57,6 @@ def hbase(name=None):
)
Directory(params.java_io_tmpdir,
- owner = params.hbase_user,
- group = params.user_group,
create_parents = True,
mode=0777
)
http://git-wip-us.apache.org/repos/asf/ambari/blob/2c80cab2/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
index f37844c..337f09d 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
@@ -36,8 +36,6 @@ from resource_management.libraries.functions import is_empty
from resource_management.libraries.functions import get_unique_id_and_date
from resource_management.libraries.script.script import Script
-from resource_management.libraries.functions.substitute_vars import substitute_vars
-
# server configurations
config = Script.get_config()
exec_tmp_dir = Script.get_tmp_dir()
http://git-wip-us.apache.org/repos/asf/ambari/blob/2c80cab2/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py
index 9f3e19e..6dc4b0b 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py
@@ -47,8 +47,6 @@ class TestHBaseClient(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
- owner = 'hbase',
- group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -145,8 +143,6 @@ class TestHBaseClient(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
- owner = 'hbase',
- group = 'hadoop',
create_parents = True,
mode = 0777
)
http://git-wip-us.apache.org/repos/asf/ambari/blob/2c80cab2/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
index 7c6d10e..13b2e33 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
@@ -243,8 +243,6 @@ class TestHBaseMaster(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
- owner = 'hbase',
- group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -380,8 +378,6 @@ class TestHBaseMaster(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
- owner = 'hbase',
- group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -526,8 +522,6 @@ class TestHBaseMaster(RMFTestCase):
group = 'hadoop',
create_parents = True)
self.assertResourceCalled('Directory', '/tmp',
- owner = 'hbase',
- group = 'hadoop',
create_parents = True,
mode = 0777
)
http://git-wip-us.apache.org/repos/asf/ambari/blob/2c80cab2/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py
index c36bd89..58ca7ef 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py
@@ -136,8 +136,6 @@ class TestHbaseRegionServer(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
- owner = 'hbase',
- group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -234,8 +232,6 @@ class TestHbaseRegionServer(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
- owner = 'hbase',
- group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -342,8 +338,6 @@ class TestHbaseRegionServer(RMFTestCase):
group = 'hadoop',
create_parents = True)
self.assertResourceCalled('Directory', '/tmp',
- owner = 'hbase',
- group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -458,8 +452,6 @@ class TestHbaseRegionServer(RMFTestCase):
group = 'hadoop',
create_parents = True)
self.assertResourceCalled('Directory', '/tmp',
- owner = 'hbase',
- group = 'hadoop',
create_parents = True,
mode = 0777
)
http://git-wip-us.apache.org/repos/asf/ambari/blob/2c80cab2/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py
index 6f3199e..7722af0 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py
@@ -238,8 +238,6 @@ class TestPhoenixQueryServer(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
- owner = 'hbase',
- group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -351,8 +349,6 @@ class TestPhoenixQueryServer(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
- owner = 'hbase',
- group = 'hadoop',
create_parents = True,
mode = 0777
)
[10/22] ambari git commit: AMBARI-14730. After upgrade from 2.3.2 to
2.3.4, HBase fails to start, remove props for local indexing (alejandro)
Posted by nc...@apache.org.
AMBARI-14730. After upgrade from 2.3.2 to 2.3.4, HBase fails to start, remove props for local indexing (alejandro)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/109311d5
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/109311d5
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/109311d5
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 109311d5280cd453d1487434fdabaa274f865197
Parents: 6225849
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Tue Jan 19 14:01:10 2016 -0800
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Wed Jan 20 13:35:43 2016 -0800
----------------------------------------------------------------------
.../HDP/2.2/upgrades/nonrolling-upgrade-2.3.xml | 6 +++++
.../HDP/2.2/upgrades/nonrolling-upgrade-2.4.xml | 6 +++++
.../stacks/HDP/2.2/upgrades/upgrade-2.3.xml | 3 +++
.../stacks/HDP/2.2/upgrades/upgrade-2.4.xml | 3 +++
.../stacks/HDP/2.3/upgrades/config-upgrade.xml | 17 +++++++++++++++
.../HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml | 6 +++++
.../HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml | 9 ++++++++
.../stacks/HDP/2.3/upgrades/upgrade-2.3.xml | 5 +++++
.../stacks/HDP/2.3/upgrades/upgrade-2.4.xml | 5 +++++
.../stacks/HDP/2.4/upgrades/config-upgrade.xml | 23 ++++++++++++++++++++
10 files changed, 83 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/109311d5/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.3.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.3.xml
index df12920..55fc336 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.3.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.3.xml
@@ -406,6 +406,12 @@
<task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_delete_old_ranger_properties"/>
</execute-stage>
+ <!-- HBASE -->
+ <!-- These HBASE configs changed in HDP 2.3.4.0, but Ambari can't distinguish HDP 2.3.2.0 vs HDP 2.3.4.0, so easier to always do them. -->
+ <execute-stage service="HBASE" component="HBASE_MASTER" title="Apply config changes for HBASE Master">
+ <task xsi:type="configure" id="hdp_2_3_4_0_hbase_remove_local_indexing"/>
+ </execute-stage>
+
<!--TEZ-->
<execute-stage service="TEZ" component="TEZ_CLIENT" title="Apply config changes for Tez">
<task xsi:type="configure" id="hdp_2_3_0_0_tez_client_adjust_properties"/>
http://git-wip-us.apache.org/repos/asf/ambari/blob/109311d5/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.4.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.4.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.4.xml
index c5d74e2..b756deb 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.4.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.4.xml
@@ -440,6 +440,12 @@
<task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_delete_old_ranger_properties"/>
</execute-stage>
+ <!-- HBASE -->
+ <!-- These HBASE configs changed in HDP 2.3.4.0, but Ambari can't distinguish HDP 2.3.2.0 vs HDP 2.3.4.0, so easier to always do them. -->
+ <execute-stage service="HBASE" component="HBASE_MASTER" title="Apply config changes for HBASE Master">
+ <task xsi:type="configure" id="hdp_2_3_4_0_hbase_remove_local_indexing"/>
+ </execute-stage>
+
<!--TEZ-->
<execute-stage service="TEZ" component="TEZ_CLIENT" title="Apply config changes for Tez">
<task xsi:type="configure" id="hdp_2_3_0_0_tez_client_adjust_properties"/>
http://git-wip-us.apache.org/repos/asf/ambari/blob/109311d5/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
index 7e7138d..4415909 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
@@ -602,6 +602,9 @@
<task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_copy_ranger_policies"/>
<task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_delete_old_ranger_properties"/>
+
+ <!-- These HBASE configs changed in HDP 2.3.4.0, but Ambari can't distinguish HDP 2.3.2.0 vs HDP 2.3.4.0, so easier to always do them. -->
+ <task xsi:type="configure" id="hdp_2_3_4_0_hbase_remove_local_indexing"/>
</pre-upgrade>
<upgrade>
http://git-wip-us.apache.org/repos/asf/ambari/blob/109311d5/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.4.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.4.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.4.xml
index 6b5bcb1..d279ec1 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.4.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.4.xml
@@ -609,6 +609,9 @@
<task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_copy_ranger_policies"/>
<task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_delete_old_ranger_properties"/>
+
+ <!-- These HBASE configs changed in HDP 2.3.4.0, but Ambari can't distinguish HDP 2.3.2.0 vs HDP 2.3.4.0, so easier to always do them. -->
+ <task xsi:type="configure" id="hdp_2_3_4_0_hbase_remove_local_indexing"/>
</pre-upgrade>
<upgrade>
http://git-wip-us.apache.org/repos/asf/ambari/blob/109311d5/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/config-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/config-upgrade.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/config-upgrade.xml
index bdb4808..9e53c12 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/config-upgrade.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/config-upgrade.xml
@@ -505,6 +505,23 @@
<transfer operation="delete" delete-key="XAAUDIT.DB.DATABASE_NAME"/>
<transfer operation="delete" delete-key="XAAUDIT.DB.HOSTNAME"/>
</definition>
+
+ <!-- These HBASE configs changed in HDP 2.3.4.0, so upgrades like HDP 2.2 to 2.3.4.0+ still need them. -->
+ <definition xsi:type="configure" id="hdp_2_3_4_0_hbase_remove_local_indexing">
+ <type>hbase-site</type>
+ <set key="phoenix.functions.allowUserDefinedFunctions" value="true"/>
+ <transfer operation="delete" delete-key="hbase.master.loadbalancer.class"
+ if-key="hbase.master.loadbalancer.class"
+ if-type="hbase-site"
+ if-value="org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer"/>
+ <replace key="hbase.coprocessor.master.classes"
+ find="org.apache.phoenix.hbase.index.master.IndexMasterObserver"
+ replace-with="" />
+ <replace key="hbase.coprocessor.regionserver.classes"
+ find="org.apache.hadoop.hbase.regionserver.LocalIndexMerger"
+ replace-with="" />
+
+ </definition>
</changes>
</component>
</service>
http://git-wip-us.apache.org/repos/asf/ambari/blob/109311d5/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml
index 57b2f42..208aa52 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml
@@ -267,6 +267,12 @@
<direction>UPGRADE</direction> <!-- prevent config changes on downgrade -->
<skippable>true</skippable> <!-- May fix configuration problems manually -->
+ <!-- HBASE -->
+ <!-- These HBASE configs changed in HDP 2.3.4.0, but Ambari can't distinguish HDP 2.3.2.0 vs HDP 2.3.4.0, so easier to always do them. -->
+ <execute-stage service="HBASE" component="HBASE_MASTER" title="Apply config changes for HBASE Master">
+ <task xsi:type="configure" id="hdp_2_3_4_0_hbase_remove_local_indexing"/>
+ </execute-stage>
+
<execute-stage service="TEZ" component="TEZ_CLIENT" title="Apply config changes for Tez">
<task xsi:type="configure" id="hdp_2_3_0_0_tez_client_adjust_tez_lib_uris_property"/>
</execute-stage>
http://git-wip-us.apache.org/repos/asf/ambari/blob/109311d5/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml
index 45bf744..a93851b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml
@@ -268,10 +268,18 @@
<skippable>true</skippable> <!-- May fix configuration problems manually -->
<supports-auto-skip-failure>false</supports-auto-skip-failure>
+ <!-- YARN -->
<execute-stage service="YARN" component="RESOURCEMANAGER" title="Calculating Yarn Properties for Spark">
<task xsi:type="server_action" summary="Calculating Yarn Properties for Spark Shuffle" class="org.apache.ambari.server.serveraction.upgrades.SparkShufflePropertyConfig" />
</execute-stage>
+ <!-- HBASE -->
+ <!-- These HBASE configs changed in HDP 2.3.4.0, but Ambari can't distinguish HDP 2.3.2.0 vs HDP 2.3.4.0, so easier to always do them. -->
+ <execute-stage service="HBASE" component="HBASE_MASTER" title="Apply config changes for HBASE Master">
+ <task xsi:type="configure" id="hdp_2_4_0_0_hbase_remove_local_indexing"/>
+ </execute-stage>
+
+ <!-- HIVE, TEZ, -->
<execute-stage service="TEZ" component="TEZ_CLIENT" title="Apply config changes for Tez">
<task xsi:type="configure" id="hdp_2_4_0_0_tez_client_adjust_tez_lib_uris_property"/>
</execute-stage>
@@ -280,6 +288,7 @@
<task xsi:type="configure" id="hdp_2_4_0_0_webhcat_server_update_configuration_paths"/>
</execute-stage>
+ <!-- OOZIE -->
<execute-stage service="OOZIE" component="OOZIE_SERVER" title="Apply config changes for Oozie Server">
<task xsi:type="configure" id="hdp_2_4_0_0_oozie_remove_service_classes" />
</execute-stage>
http://git-wip-us.apache.org/repos/asf/ambari/blob/109311d5/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml
index ab955e4..cc6b394 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml
@@ -559,6 +559,11 @@
<service name="HBASE">
<component name="HBASE_MASTER">
+ <pre-upgrade>
+ <!-- These HBASE configs changed in HDP 2.3.4.0, but Ambari can't distinguish HDP 2.3.2.0 vs HDP 2.3.4.0, so easier to always do them. -->
+ <task xsi:type="configure" id="hdp_2_3_4_0_hbase_remove_local_indexing"/>
+ </pre-upgrade>
+
<upgrade>
<task xsi:type="restart-task"/>
</upgrade>
http://git-wip-us.apache.org/repos/asf/ambari/blob/109311d5/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml
index 682815f..aef9c79 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml
@@ -517,6 +517,11 @@
<service name="HBASE">
<component name="HBASE_MASTER">
+ <pre-upgrade>
+ <!-- These HBASE configs changed in HDP 2.3.4.0, but Ambari can't distinguish HDP 2.3.2.0 vs HDP 2.3.4.0, so easier to always do them. -->
+ <task xsi:type="configure" id="hdp_2_4_0_0_hbase_remove_local_indexing"/>
+ </pre-upgrade>
+
<pre-downgrade /> <!-- no-op to prevent config changes on downgrade -->
<upgrade>
http://git-wip-us.apache.org/repos/asf/ambari/blob/109311d5/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/config-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/config-upgrade.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/config-upgrade.xml
index 6b41c84..0f72e5d 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/config-upgrade.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/config-upgrade.xml
@@ -20,6 +20,29 @@
<services>
+ <service name="HBASE">
+ <component name="HBASE_MASTER">
+ <changes>
+ <!-- These HBASE configs changed in HDP 2.3.4.0, so upgrades like HDP 2.2 to 2.4 still need them. -->
+ <definition xsi:type="configure" id="hdp_2_4_0_0_hbase_remove_local_indexing">
+ <type>hbase-site</type>
+ <set key="phoenix.functions.allowUserDefinedFunctions" value="true"/>
+ <transfer operation="delete" delete-key="hbase.master.loadbalancer.class"
+ if-key="hbase.master.loadbalancer.class"
+ if-type="hbase-site"
+ if-value="org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer"/>
+ <replace key="hbase.coprocessor.master.classes"
+ find="org.apache.phoenix.hbase.index.master.IndexMasterObserver"
+ replace-with="" />
+ <replace key="hbase.coprocessor.regionserver.classes"
+ find="org.apache.hadoop.hbase.regionserver.LocalIndexMerger"
+ replace-with="" />
+
+ </definition>
+ </changes>
+ </component>
+ </service>
+
<service name="TEZ">
<component name="TEZ_CLIENT">
<changes>
[03/22] ambari git commit: AMBARI-14741. Ambari Web Unit Test failure
on trunk (App.WizardStep8Controller) (onechiporenko)
Posted by nc...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/wizard/step9_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step9_test.js b/ambari-web/test/controllers/wizard/step9_test.js
index 70365bb..2eb8709 100644
--- a/ambari-web/test/controllers/wizard/step9_test.js
+++ b/ambari-web/test/controllers/wizard/step9_test.js
@@ -24,6 +24,7 @@ require('controllers/installer');
require('controllers/wizard/step9_controller');
require('utils/helper');
require('utils/ajax/ajax');
+var testHelpers = require('test/helpers');
var modelSetup = require('test/init_model_test');
var c, obj;
@@ -54,6 +55,7 @@ describe('App.InstallerStep9Controller', function () {
modelSetup.setupStackServiceComponent();
c = getController();
obj = App.InstallerController.create();
+ App.ajax.send.restore();
sinon.stub(App.ajax, 'send', function() {
return {
then: function() {
@@ -72,7 +74,6 @@ describe('App.InstallerStep9Controller', function () {
afterEach(function () {
modelSetup.cleanStackServiceComponent();
- App.ajax.send.restore();
});
App.TestAliases.testAsComputedEqual(getController(), 'showRetry', 'content.cluster.status', 'INSTALL FAILED');
@@ -1340,17 +1341,6 @@ describe('App.InstallerStep9Controller', function () {
describe('#launchStartServicesErrorCallback', function () {
- beforeEach(function() {
- sinon.stub(App, 'get', function(k) {
- if ('testMode' === k) return true;
- return Em.get(App, k);
- });
- });
-
- afterEach(function() {
- App.get.restore();
- });
-
it('Main progress bar on the screen should be finished (100%) with red color', function () {
var hosts = Em.A([Em.Object.create({name: 'host1', progress: '33', status: 'info'}), Em.Object.create({name: 'host2', progress: '33', status: 'info'})]);
c.reopen({hosts: hosts, content: {controllerName: 'installerController', cluster: {status: 'PENDING', name: 'c1'}}});
@@ -1492,7 +1482,8 @@ describe('App.InstallerStep9Controller', function () {
it('shouldn\'t call App.ajax.send if no currentOpenTaskId', function () {
c.set('currentOpenTaskId', null);
c.loadCurrentTaskLog();
- expect(App.ajax.send.called).to.equal(false);
+ var args = testHelpers.findAjaxRequest('name', 'background_operations.get_by_task');
+ expect(args).not.exists;
});
it('should call App.ajax.send with provided data', function () {
@@ -1500,7 +1491,9 @@ describe('App.InstallerStep9Controller', function () {
c.set('currentOpenTaskRequestId', 2);
c.set('content', {cluster: {name: 3}});
c.loadCurrentTaskLog();
- expect(App.ajax.send.args[0][0].data).to.eql({taskId: 1, requestId: 2, clusterName: 3});
+ var args = testHelpers.findAjaxRequest('name', 'background_operations.get_by_task');
+ expect(args[0]).exists;
+ expect(args[0].data).to.be.eql({taskId: 1, requestId: 2, clusterName: 3});
});
});
@@ -1597,14 +1590,6 @@ describe('App.InstallerStep9Controller', function () {
c.togglePreviousSteps.restore();
});
- it('should increment numPolls if testMode', function () {
- App.set('testMode', true);
- c.set('numPolls', 0);
- c.doPolling();
- expect(c.get('numPolls')).to.equal(1);
- App.set('testMode', false);
- });
-
it('should call getLogsByRequest', function () {
c.set('content', {cluster: {requestId: 1}});
c.doPolling();
@@ -1635,7 +1620,6 @@ describe('App.InstallerStep9Controller', function () {
sinon.stub(c, 'loadStep', Em.K);
sinon.stub(c, 'loadLogData', Em.K);
sinon.stub(c, 'startPolling', Em.K);
- sinon.stub(App, 'get', function(k) {if('testMode' === k) return false; return Em.get(App, k);});
});
afterEach(function () {
@@ -1643,7 +1627,6 @@ describe('App.InstallerStep9Controller', function () {
c.loadStep.restore();
c.loadLogData.restore();
c.startPolling.restore();
- App.get.restore();
});
it('isCompleted = true, requestId = 1', function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/wizard_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard_test.js b/ambari-web/test/controllers/wizard_test.js
index 1abbfd7..06729dd 100644
--- a/ambari-web/test/controllers/wizard_test.js
+++ b/ambari-web/test/controllers/wizard_test.js
@@ -612,11 +612,9 @@ describe('App.WizardController', function () {
sinon.stub(wizardController,'showLaunchBootstrapPopup').returns({
name: 'popup'
});
- sinon.stub(App.ajax,'send', Em.K);
});
afterEach(function(){
wizardController.showLaunchBootstrapPopup.restore();
- App.ajax.send.restore();
});
it('should return popup', function () {
expect(wizardController.launchBootstrap()).to.be.eql({
@@ -680,13 +678,9 @@ describe('App.WizardController', function () {
sinon.stub(wizardController,'saveClusterStatus', function(data){
res = JSON.parse(JSON.stringify(data));
});
- sinon.stub(App.ajax,'send').returns({
- then: function() {}
- });
});
afterEach(function(){
wizardController.saveClusterStatus.restore();
- App.ajax.send.restore();
});
it('should call callbeck with data', function () {
wizardController.set('content', Em.Object.create({
@@ -1491,7 +1485,7 @@ describe('App.WizardController', function () {
describe('#loadConfigThemes', function() {
beforeEach(function () {
sinon.stub(wizardController, 'loadConfigThemeForServices').returns({
- always: function(callback) {callback();}
+ always: Em.clb
});
sinon.stub(App.themesMapper, 'generateAdvancedTabs').returns(true);
sinon.stub(App.config, 'loadConfigsFromStack').returns({
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/helpers.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/helpers.js b/ambari-web/test/helpers.js
index 4c2a671..1bb65d0 100644
--- a/ambari-web/test/helpers.js
+++ b/ambari-web/test/helpers.js
@@ -47,6 +47,83 @@ module.exports = {
}
});
});
+ },
+
+ /**
+ * Get arguments for one <code>App.ajax.send</code> call according to the criteria
+ * Example:
+ * <pre>
+ * sinon.stub(App.ajax, 'send', Em.K);
+ * App.ajax.send({
+ * name: 'n1',
+ * sender: {},
+ * data: {
+ * f1: 'v1',
+ * f2: 'v2'
+ * }
+ * });
+ * App.ajax.send({
+ * name: 'n2',
+ * sender: {}
+ * });
+ * var args = findAjaxRequest('name', 'n1');
+ * console.log(args); // [{name: 'n1', sender: {}, data: {f1: 'v1', f2: 'v2'}}]
+ * App.ajax.send.restore();
+ * </pre>
+ *
+ * @param {string} property field to find
+ * @param {*} value value to find
+ * @returns {array|null}
+ */
+ findAjaxRequest: function(property, value) {
+ if (Em.typeOf(App.ajax.send.args) !== 'array') {
+ return null;
+ }
+ return App.ajax.send.args.find(function (request) {
+ return Em.get(request[0], property) === value;
+ });
+ },
+
+ /**
+ * Get arguments for several <code>App.ajax.send</code> calls according to the criteria
+ * Example:
+ * <pre>
+ * sinon.stub(App.ajax, 'send', Em.K);
+ * App.ajax.send({
+ * name: 'n1',
+ * sender: {},
+ * data: {
+ * f1: 'v1',
+ * f2: 'v2'
+ * }
+ * });
+ * App.ajax.send({
+ * name: 'n2',
+ * sender: {}
+ * });
+ * App.ajax.send({
+ * name: 'n2',
+ * sender: {},
+ * data: {
+ * d1: 1234
+ * }
+ * });
+ * var args = filterAjaxRequests('name', 'n2');
+ * console.log(args); // [[{name: 'n1', sender: {}}], [{name: 'n2', sender: {}, data: {d1: 1234}}]]
+ * App.ajax.send.restore();
+ * </pre>
+ *
+ * @param {string} property field to filter
+ * @param {*} value value to filter
+ * @returns {array}
+ */
+ filterAjaxRequests: function (property, value) {
+ if (Em.typeOf(App.ajax.send.args) !== 'array') {
+ return [];
+ }
+ return App.ajax.send.args.filter(function (request) {
+ return Em.get(request[0], property) === value;
+ });
}
};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/mixins/common/table_server_view_mixin_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/common/table_server_view_mixin_test.js b/ambari-web/test/mixins/common/table_server_view_mixin_test.js
index 05c5ef4..2a9c409 100644
--- a/ambari-web/test/mixins/common/table_server_view_mixin_test.js
+++ b/ambari-web/test/mixins/common/table_server_view_mixin_test.js
@@ -18,6 +18,7 @@
var App = require('app');
require('mixins/common/table_server_view_mixin');
+require('utils/load_timer');
describe('App.MainConfigHistoryView', function() {
var view = Em.View.create(App.TableServerViewMixin, {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/mixins/common/widget_mixin_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/common/widget_mixin_test.js b/ambari-web/test/mixins/common/widget_mixin_test.js
index e35f955..bc9192b 100644
--- a/ambari-web/test/mixins/common/widget_mixin_test.js
+++ b/ambari-web/test/mixins/common/widget_mixin_test.js
@@ -17,12 +17,22 @@
*/
var App = require('app');
+var testHelpers = require('test/helpers');
describe('App.WidgetMixin', function () {
var mixinClass = Em.Object.extend(App.WidgetMixin, {metrics: [], content: {}});
+ var mixinObject;
+
+ beforeEach(function () {
+ mixinObject = mixinClass.create();
+ });
+
+ afterEach(function () {
+ clearTimeout(mixinObject.get('timeoutId'));
+ mixinObject.destroy();
+ });
describe('#loadMetrics()', function () {
- var mixinObject = mixinClass.create();
beforeEach(function () {
this.mock = sinon.stub(mixinObject, 'getRequestData');
sinon.stub(App.WidgetLoadAggregator, 'add');
@@ -48,7 +58,6 @@ describe('App.WidgetMixin', function () {
});
describe("#extractExpressions()", function () {
- var mixinObject = mixinClass.create();
var testCases = [
{
data: '',
@@ -179,13 +188,7 @@ describe('App.WidgetMixin', function () {
});
describe("#getServiceComponentMetrics()", function () {
- var mixinObject = mixinClass.create();
- before(function () {
- sinon.stub(App.ajax, 'send');
- });
- after(function () {
- App.ajax.send.restore();
- });
+
it("valid request is sent", function () {
var request = {
service_name: 'S1',
@@ -206,20 +209,18 @@ describe('App.WidgetMixin', function () {
]
};
mixinObject.getServiceComponentMetrics(request);
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'widgets.serviceComponent.metrics.get',
- sender: mixinObject,
- data: {
- serviceName: 'S1',
- componentName: 'C1',
- metricPaths: 'w1,w2'
- }
- })
+ var args = testHelpers.findAjaxRequest('name', 'widgets.serviceComponent.metrics.get');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(mixinObject);
+ expect(args[0].data).to.be.eql({
+ serviceName: 'S1',
+ componentName: 'C1',
+ metricPaths: 'w1,w2'
+ });
});
});
describe("#getMetricsSuccessCallback()", function () {
- var mixinObject = mixinClass.create();
it("metric is mapped from provided path", function () {
var data = {
metrics: {
@@ -243,13 +244,10 @@ describe('App.WidgetMixin', function () {
});
describe("#getHostComponentMetrics()", function () {
- var mixinObject = mixinClass.create();
- before(function () {
- sinon.stub(App.ajax, 'send');
+ beforeEach(function () {
sinon.stub(mixinObject, 'computeHostComponentCriteria').returns('criteria')
});
- after(function () {
- App.ajax.send.restore();
+ afterEach(function () {
mixinObject.computeHostComponentCriteria.restore();
});
it("valid request is sent", function () {
@@ -272,20 +270,18 @@ describe('App.WidgetMixin', function () {
host_component_criteria: 'c1'
};
mixinObject.getHostComponentMetrics(request);
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'widgets.hostComponent.metrics.get',
- sender: mixinObject,
- data: {
- componentName: 'C1',
- metricPaths: 'w1,w2',
- hostComponentCriteria: 'criteria'
- }
- })
+ var args = testHelpers.findAjaxRequest('name', 'widgets.hostComponent.metrics.get');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(mixinObject);
+ expect(args[0].data).to.be.eql({
+ componentName: 'C1',
+ metricPaths: 'w1,w2',
+ hostComponentCriteria: 'criteria'
+ });
});
});
describe("#calculateValues()", function () {
- var mixinObject = mixinClass.create();
beforeEach(function () {
sinon.stub(mixinObject, 'extractExpressions');
@@ -322,8 +318,6 @@ describe('App.WidgetMixin', function () {
});
describe("#computeExpression()", function () {
- var mixinObject = mixinClass.create();
-
it("expression missing metrics", function () {
var expressions = ['e.m1'];
var metrics = [];
@@ -354,14 +348,13 @@ describe('App.WidgetMixin', function () {
});
describe("#cloneWidget()", function () {
- var mixinObject = mixinClass.create();
var popup;
- before(function () {
+ beforeEach(function () {
sinon.spy(App, 'showConfirmationPopup');
sinon.stub(mixinObject, 'postWidgetDefinition', Em.K);
popup = mixinObject.cloneWidget();
});
- after(function () {
+ afterEach(function () {
App.showConfirmationPopup.restore();
mixinObject.postWidgetDefinition.restore();
});
@@ -375,25 +368,19 @@ describe('App.WidgetMixin', function () {
});
describe("#postWidgetDefinition()", function () {
- var mixinObject = mixinClass.create();
-
- before(function () {
- sinon.spy(App.ajax, 'send');
+ beforeEach(function () {
sinon.stub(mixinObject, 'collectWidgetData').returns({});
});
- after(function () {
- App.ajax.send.restore();
+ afterEach(function () {
mixinObject.collectWidgetData.restore();
});
it("valid request is sent", function () {
mixinObject.postWidgetDefinition();
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'widgets.wizard.add',
- sender: mixinObject,
- data: {
- data: {}
- },
- success: 'postWidgetDefinitionSuccessCallback'
+ var args = testHelpers.findAjaxRequest('name', 'widgets.wizard.add');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(mixinObject);
+ expect(args[0].data).to.be.eql({
+ data: {}
});
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/mixins/common/widgets/export_metrics_mixin_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/common/widgets/export_metrics_mixin_test.js b/ambari-web/test/mixins/common/widgets/export_metrics_mixin_test.js
index 9e91111..1cc0730 100644
--- a/ambari-web/test/mixins/common/widgets/export_metrics_mixin_test.js
+++ b/ambari-web/test/mixins/common/widgets/export_metrics_mixin_test.js
@@ -20,6 +20,7 @@ var App = require('app');
require('mixins/common/widgets/export_metrics_mixin');
var fileUtils = require('utils/file_utils');
+var testHelpers = require('test/helpers');
describe('App.ExportMetricsMixin', function () {
@@ -72,7 +73,6 @@ describe('App.ExportMetricsMixin', function () {
];
beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
obj.reopen({
targetView: {
ajaxIndex: 'index',
@@ -85,30 +85,23 @@ describe('App.ExportMetricsMixin', function () {
});
});
- afterEach(function () {
- App.ajax.send.restore();
- });
-
cases.forEach(function (item) {
describe(item.title, function () {
beforeEach(function () {
obj.set('isExportMenuHidden', item.isExportMenuHidden);
obj.exportGraphData(item.event);
- this.ajaxParams = App.ajax.send.firstCall.args[0];
+ this.ajaxParams = testHelpers.findAjaxRequest('name', 'index');
});
it('isExportMenuHidden is true', function () {
expect(obj.get('isExportMenuHidden')).to.be.true;
});
it('one request was done', function () {
- expect(App.ajax.send.calledOnce).to.be.true;
- });
- it('request to the valid end-point', function () {
- expect(this.ajaxParams.name).to.equal('index');
+ expect(this.ajaxParams[0]).exists;
});
it('ajax-request with correct data', function () {
- expect(this.ajaxParams.data).to.eql({
+ expect(this.ajaxParams[0].data).to.eql({
p: 'v',
isCSV: item.isCSV
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/mixins/main/host/details/host_components/decommissionable_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/main/host/details/host_components/decommissionable_test.js b/ambari-web/test/mixins/main/host/details/host_components/decommissionable_test.js
index e0ee689..958874b 100644
--- a/ambari-web/test/mixins/main/host/details/host_components/decommissionable_test.js
+++ b/ambari-web/test/mixins/main/host/details/host_components/decommissionable_test.js
@@ -18,6 +18,7 @@
var App = require('app');
var uiEffects = require('utils/ui_effects');
+var testHelpers = require('test/helpers');
require('mixins/main/host/details/host_components/decommissionable');
@@ -259,13 +260,6 @@ describe('App.Decommissionable', function () {
describe("#getDecommissionStatus()", function() {
- beforeEach(function() {
- sinon.stub(App.ajax, 'send');
- });
- afterEach(function() {
- App.ajax.send.restore();
- });
-
it("App.ajax.send should be called", function() {
decommissionable.setProperties({
componentForCheckDecommission: 'C1',
@@ -277,16 +271,13 @@ describe('App.Decommissionable', function () {
})
});
decommissionable.getDecommissionStatus();
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'host.host_component.decommission_status',
- sender: decommissionable,
- data: {
- hostName: 'host1',
- componentName: 'C1',
- serviceName: 'S1'
- },
- success: 'getDecommissionStatusSuccessCallback',
- error: 'getDecommissionStatusErrorCallback'
+ var args = testHelpers.findAjaxRequest('name', 'host.host_component.decommission_status');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(decommissionable);
+ expect(args[0].data).to.be.eql({
+ hostName: 'host1',
+ componentName: 'C1',
+ serviceName: 'S1'
});
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/mixins/main/host/details/host_components/install_component_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/main/host/details/host_components/install_component_test.js b/ambari-web/test/mixins/main/host/details/host_components/install_component_test.js
index f2e3513..56d582c 100644
--- a/ambari-web/test/mixins/main/host/details/host_components/install_component_test.js
+++ b/ambari-web/test/mixins/main/host/details/host_components/install_component_test.js
@@ -18,7 +18,7 @@
var App = require('app');
require('mixins/main/host/details/host_components/install_component');
-
+var testHelpers = require('test/helpers');
var installComponent;
describe('App.InstallComponent', function () {
@@ -35,12 +35,11 @@ describe('App.InstallComponent', function () {
beforeEach(function() {
sinon.stub(installComponent, 'updateAndCreateServiceComponent').returns({done: Em.clb});
- sinon.stub(App.ajax, 'send');
installComponent.installHostComponentCall('host1', component);
+ this.args = testHelpers.findAjaxRequest('name', 'host.host_component.add_new_component');
});
afterEach(function() {
installComponent.updateAndCreateServiceComponent.restore();
- App.ajax.send.restore();
});
it("updateAndCreateServiceComponent should be called", function() {
@@ -48,29 +47,25 @@ describe('App.InstallComponent', function () {
});
it("App.ajax.send should be called", function() {
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'host.host_component.add_new_component',
- sender: installComponent,
- data: {
- hostName: 'host1',
- component: component,
- data: JSON.stringify({
- RequestInfo: {
- "context": Em.I18n.t('requestInfo.installHostComponent') + ' c1'
- },
- Body: {
- host_components: [
- {
- HostRoles: {
- component_name: 'C1'
- }
+ expect(this.args[0]).exists;
+ expect(this.args[0].sender).to.be.eql(installComponent);
+ expect(this.args[0].data).to.be.eql({
+ hostName: 'host1',
+ component: component,
+ data: JSON.stringify({
+ RequestInfo: {
+ "context": Em.I18n.t('requestInfo.installHostComponent') + ' c1'
+ },
+ Body: {
+ host_components: [
+ {
+ HostRoles: {
+ component_name: 'C1'
}
- ]
- }
- })
- },
- success: 'addNewComponentSuccessCallback',
- error: 'ajaxErrorCallback'
+ }
+ ]
+ }
+ })
});
});
});
@@ -85,32 +80,20 @@ describe('App.InstallComponent', function () {
})
};
- beforeEach(function() {
- sinon.stub(App.ajax, 'send');
- });
- afterEach(function() {
- App.ajax.send.restore();
- });
-
-
it("App.ajax.send should be called", function() {
installComponent.addNewComponentSuccessCallback({}, {}, params);
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'common.host.host_component.update',
- sender: App.router.get('mainHostDetailsController'),
- data: {
- hostName: 'host1',
- componentName: 'C1',
- serviceName: 'S1',
- component: params.component,
- "context": Em.I18n.t('requestInfo.installNewHostComponent') + ' c1',
- HostRoles: {
- state: 'INSTALLED'
- },
- urlParams: "HostRoles/state=INIT"
+ var args = testHelpers.findAjaxRequest('name', 'common.host.host_component.update');
+ expect(args[0]).exists;
+ expect(args[0].data).to.be.eql({
+ hostName: 'host1',
+ componentName: 'C1',
+ serviceName: 'S1',
+ component: params.component,
+ "context": Em.I18n.t('requestInfo.installNewHostComponent') + ' c1',
+ HostRoles: {
+ state: 'INSTALLED'
},
- success: 'installNewComponentSuccessCallback',
- error: 'ajaxErrorCallback'
+ urlParams: "HostRoles/state=INIT"
});
});
});
@@ -118,7 +101,7 @@ describe('App.InstallComponent', function () {
describe("#ajaxErrorCallback()", function() {
beforeEach(function() {
- sinon.stub(App.ajax, 'defaultErrorHandler');
+ sinon.stub(App.ajax, 'defaultErrorHandler', Em.K);
});
afterEach(function() {
App.ajax.defaultErrorHandler.restore();
@@ -173,6 +156,8 @@ describe('App.InstallComponent', function () {
serviceName: 'S1'
})]);
sinon.spy(dfd, 'resolve');
+
+ App.ajax.send.restore();
sinon.stub(App.ajax, 'send').returns({complete: Em.clb});
this.mock = sinon.stub(App.Service, 'find');
this.mock.returns([{serviceName: "S1"}]);
@@ -183,7 +168,6 @@ describe('App.InstallComponent', function () {
App.StackServiceComponent.find.restore();
dfd.resolve.restore();
this.mock.restore();
- App.ajax.send.restore();
});
it("component already created", function() {
@@ -193,13 +177,12 @@ describe('App.InstallComponent', function () {
it("component not created", function() {
installComponent.createServiceComponent('C2', dfd);
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'common.create_component',
- sender: installComponent,
- data: {
- componentName: 'C2',
- serviceName: 'S1'
- }
+ var args = testHelpers.findAjaxRequest('name', 'common.create_component');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(installComponent);
+ expect(args[0].data).to.be.eql({
+ componentName: 'C2',
+ serviceName: 'S1'
});
expect(dfd.resolve.calledOnce).to.be.true;
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/mixins/wizard/wizardProgressPageController_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/wizard/wizardProgressPageController_test.js b/ambari-web/test/mixins/wizard/wizardProgressPageController_test.js
index 3d03292..ea0b3f7 100644
--- a/ambari-web/test/mixins/wizard/wizardProgressPageController_test.js
+++ b/ambari-web/test/mixins/wizard/wizardProgressPageController_test.js
@@ -17,6 +17,7 @@
*/
var App = require('app');
+var testHelpers = require('test/helpers');
describe('App.wizardProgressPageControllerMixin', function() {
var mixedObject = Em.Object.extend(App.wizardProgressPageControllerMixin, {});
@@ -25,15 +26,8 @@ describe('App.wizardProgressPageControllerMixin', function() {
var mixedObjectInstance;
beforeEach(function() {
mixedObjectInstance = mixedObject.create({});
- sinon.stub(App.ajax, 'send', function(params) {
- return $.extend(params,{complete: function(callback){
- callback();
- }});
- });
sinon.stub(mixedObjectInstance, "updateAndCreateServiceComponent").returns({
- done: function(callback) {
- return callback();
- }
+ done: Em.clb
});
sinon.spy(mixedObjectInstance, 'onCreateComponent');
sinon.spy(mixedObjectInstance, 'updateComponent');
@@ -68,7 +62,6 @@ describe('App.wizardProgressPageControllerMixin', function() {
});
afterEach(function() {
- App.ajax.send.restore();
App.StackServiceComponent.find.restore();
mixedObjectInstance.updateAndCreateServiceComponent.restore();
mixedObjectInstance.onCreateComponent.restore();
@@ -89,7 +82,7 @@ describe('App.wizardProgressPageControllerMixin', function() {
describe('no ZooKeeper Servers installed. install on host1, host2. ajax request should be called with appropriate params', function() {
beforeEach(function () {
mixedObjectInstance.createComponent('ZOOKEEPER_SERVER', ['host1', 'host2'], 'ZOOKEEPER');
- this.args = App.ajax.send.args[0][0];
+ this.args = testHelpers.findAjaxRequest('name', 'wizard.step8.register_host_to_component')[0];
this.queryObject = JSON.parse(this.args.data.data);
});
it('hostName is valid array', function () {
@@ -114,7 +107,7 @@ describe('App.wizardProgressPageControllerMixin', function() {
describe('ZooKeeper Client installed on host1. install on host1, host2. ajax request should be called with appropriate params', function() {
beforeEach(function () {
mixedObjectInstance.createComponent('ZOOKEEPER_CLIENT', ['host1', 'host2'], 'ZOOKEEPER');
- this.args = App.ajax.send.args[0][0];
+ this.args = testHelpers.findAjaxRequest('name', 'wizard.step8.register_host_to_component')[0];
this.queryObject = JSON.parse(this.args.data.data);
});
it('hostName is valid array', function () {
@@ -160,19 +153,14 @@ describe('App.wizardProgressPageControllerMixin', function() {
testsAjax.forEach(function(test) {
describe('called with params: ' + JSON.stringify(test.callParams), function() {
- before(function() {
- sinon.stub(App.ajax, 'send', Em.K);
+ beforeEach(function() {
var mixedObjectInstance = mixedObject.create({});
mixedObjectInstance.updateComponent.apply(mixedObjectInstance, test.callParams);
});
- after(function() {
- App.ajax.send.restore();
- });
-
test.e.forEach(function(eKey) {
it('key: {0} should have value: {1}'.format(eKey.key, eKey.value), function() {
- var args = App.ajax.send.args[0][0];
+ var args = testHelpers.findAjaxRequest('name', 'common.host_components.update')[0];
expect(args).to.have.deep.property(eKey.key, eKey.value);
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/models/cluster_states_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/models/cluster_states_test.js b/ambari-web/test/models/cluster_states_test.js
index d8d6adc..d07845f 100644
--- a/ambari-web/test/models/cluster_states_test.js
+++ b/ambari-web/test/models/cluster_states_test.js
@@ -72,7 +72,6 @@ describe('App.clusterStatus', function () {
describe('#setClusterStatus', function () {
beforeEach(function() {
- sinon.stub(App, 'get').withArgs('testMode').returns(false);
sinon.stub(status, 'postUserPref', function() {
return $.ajax();
});
@@ -80,7 +79,6 @@ describe('App.clusterStatus', function () {
afterEach(function () {
status.postUserPref.restore();
- App.get.restore();
});
it('should set cluster status in non-test mode', function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/models/host_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/models/host_test.js b/ambari-web/test/models/host_test.js
index 37092da..d047a70 100644
--- a/ambari-web/test/models/host_test.js
+++ b/ambari-web/test/models/host_test.js
@@ -53,10 +53,6 @@ describe('App.Host', function () {
}
];
- before(function() {
- App.set('testMode', false);
- });
-
App.Host.reopen({
hostComponents: []
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/router_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/router_test.js b/ambari-web/test/router_test.js
index cf638d9..de4b77a 100644
--- a/ambari-web/test/router_test.js
+++ b/ambari-web/test/router_test.js
@@ -17,34 +17,13 @@
*/
var App = require('app');
+var testHelpers = require('test/helpers');
require('router');
describe('App.Router', function () {
var router = App.Router.create();
- describe.skip('#loginSuccessCallback()', function() {
-
- beforeEach(function () {
- sinon.stub(App.usersMapper, 'map');
- sinon.stub(router, 'setUserLoggedIn');
- sinon.stub(App.ajax, 'send');
- });
-
- afterEach(function() {
- App.usersMapper.map.restore();
- router.setUserLoggedIn.restore();
- App.ajax.send.restore();
- });
-
- it('should log in user and load views', function () {
- var userName = 'test';
- router.loginSuccessCallback({},{},{loginName: userName});
- expect(router.setUserLoggedIn.calledOnce).to.be.true;
- expect(router.setUserLoggedIn.calledWith(userName)).to.be.true;
- })
- });
-
describe('#initAdmin()', function () {
var cases = [
@@ -373,20 +352,11 @@ describe('App.Router', function () {
});
describe("#transitionToAdminView()", function () {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send');
- });
- afterEach(function () {
- App.ajax.send.restore();
- });
+
it("valid request is sent", function () {
router.transitionToAdminView();
- expect(App.ajax.send.calledWith({
- name: 'ambari.service.load_server_version',
- sender: router,
- success: 'adminViewInfoSuccessCallback',
- error: 'adminViewInfoErrorCallback'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'ambari.service.load_server_version');
+ expect(args[0]).to.exists;
});
});
@@ -457,7 +427,6 @@ describe('App.Router', function () {
});
afterEach(function () {
- App.ajax.send.restore();
router.getCurrentLocationUrl.restore();
router.redirectByURL.restore();
this.mockGetCurrentLocationUrl.restore();
@@ -500,6 +469,7 @@ describe('App.Router', function () {
beforeEach(function () {
mockCurrentUrl = 'http://localhost:3333/#/some/hash';
router.set('location.lastSetURL', test.lastSetURL);
+ App.ajax.send.restore(); // default ajax-mock can't be used here
sinon.stub(App.ajax, 'send', function() {
if (!test.isResolved) {
router.onAuthenticationError(test.responseData);
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/utils/ajax/ajax_queue_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/ajax/ajax_queue_test.js b/ambari-web/test/utils/ajax/ajax_queue_test.js
index 3c7ac85..89c7f61 100644
--- a/ambari-web/test/utils/ajax/ajax_queue_test.js
+++ b/ambari-web/test/utils/ajax/ajax_queue_test.js
@@ -26,14 +26,12 @@ describe('App.ajaxQueue', function () {
ajaxQueue = App.ajaxQueue.create();
sinon.spy(ajaxQueue, 'runNextRequest');
sinon.spy(ajaxQueue, 'finishedCallback');
- sinon.spy(App.ajax, 'send');
});
afterEach(function() {
ajaxQueue.clear();
ajaxQueue.runNextRequest.restore();
ajaxQueue.finishedCallback.restore();
- App.ajax.send.restore();
});
describe('#clear', function() {
@@ -100,12 +98,6 @@ describe('App.ajaxQueue', function () {
ajaxQueue.runNextRequest();
expect(ajaxQueue.finishedCallback.called).to.equal(true);
});
- it('if abortOnError is false queue shouldn\'t be interrupted', function() {
- ajaxQueue.clear();
- ajaxQueue.set('abortOnError', false);
- ajaxQueue.addRequest({name:'some_fake', sender: Em.Object.create()}).addRequest({name: 'some_fake2', sender: Em.Object.create()}).start();
- expect(ajaxQueue.runNextRequest.callCount).to.equal(3); // One for empty-queue
- });
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/utils/ajax/ajax_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/ajax/ajax_test.js b/ambari-web/test/utils/ajax/ajax_test.js
index 693829c..b0749df 100644
--- a/ambari-web/test/utils/ajax/ajax_test.js
+++ b/ambari-web/test/utils/ajax/ajax_test.js
@@ -22,18 +22,13 @@ require('utils/ajax/ajax');
describe('App.ajax', function() {
beforeEach(function() {
+ App.ajax.send.restore();
+ sinon.spy(App.ajax, 'send'); // no sense to test stubbed function, so going to spy on it
App.set('apiPrefix', '/api/v1');
App.set('clusterName', 'tdk');
});
describe('#send', function() {
- beforeEach(function() {
- sinon.spy($, 'ajax');
- });
-
- afterEach(function() {
- $.ajax.restore();
- });
it('Without sender', function() {
expect(App.ajax.send({})).to.equal(null);
expect($.ajax.called).to.equal(false);
@@ -110,14 +105,6 @@ describe('App.ajax', function() {
describe('#formatRequest', function() {
- beforeEach(function () {
- sinon.stub(App, 'get').withArgs('testMode').returns(false);
- });
-
- afterEach(function () {
- App.get.restore();
- });
-
var tests = [
{
urlObj: {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/utils/batch_scheduled_requests_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/batch_scheduled_requests_test.js b/ambari-web/test/utils/batch_scheduled_requests_test.js
index f564824..c282350 100644
--- a/ambari-web/test/utils/batch_scheduled_requests_test.js
+++ b/ambari-web/test/utils/batch_scheduled_requests_test.js
@@ -131,75 +131,4 @@ describe('batch_scheduled_requests', function() {
});
- describe('#restartHostComponents', function() {
-
- beforeEach(function() {
- sinon.spy($, 'ajax');
- sinon.stub(App, 'get', function(k) {
- if ('testMode' === k) return true;
- return Em.get(App, k);
- });
- });
-
- afterEach(function() {
- $.ajax.restore();
- App.get.restore();
- });
-
- var tests = Em.A([
- {
- hostComponentList: Em.A([
- Em.Object.create({
- componentName: 'NAMENODE',
- hostName: 'h1'
- }),
- Em.Object.create({
- componentName: 'NAMENODE',
- hostName: 'h2'
- })
- ]),
- e: {
- ajaxCalledOnce: true,
- resource_filters: [{"service_name": "HDFS", "component_name":"NAMENODE","hosts":"h1,h2"}]
- },
- m: '1 component on 2 hosts'
- },
- {
- hostComponentList: Em.A([
- Em.Object.create({
- componentName: 'NAMENODE',
- hostName: 'h1'
- }),
- Em.Object.create({
- componentName: 'NAMENODE',
- hostName: 'h2'
- }),
- Em.Object.create({
- componentName: 'HBASE_MASTER',
- hostName: 'h2'
- })
- ]),
- e: {
- ajaxCalledOnce: true,
- resource_filters: [{"service_name": "HDFS", "component_name":"NAMENODE","hosts":"h1,h2"},{"service_name": "HBASE", "component_name":"HBASE_MASTER","hosts":"h2"}]
- },
- m: '1 component on 2 hosts, 1 on 1 host'
- }
- ]);
-
- tests.forEach(function(test) {
- it(test.m, function() {
- batchUtils.restartHostComponents(test.hostComponentList);
- expect($.ajax.calledOnce).to.equal(test.e.ajaxCalledOnce);
- expect( JSON.parse($.ajax.args[0][0].data)['Requests/resource_filters']).to.eql(test.e.resource_filters);
- });
- });
-
- it('Empty data', function() {
- batchUtils.restartHostComponents([]);
- expect($.ajax.called).to.equal(false);
- });
-
- });
-
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/utils/host_progress_popup_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/host_progress_popup_test.js b/ambari-web/test/utils/host_progress_popup_test.js
index 1d143a7..dea2666 100644
--- a/ambari-web/test/utils/host_progress_popup_test.js
+++ b/ambari-web/test/utils/host_progress_popup_test.js
@@ -302,11 +302,9 @@ describe('App.HostPopup', function () {
describe('#abortRequest', function () {
beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
sinon.spy(App, 'showConfirmationPopup');
});
afterEach(function () {
- App.ajax.send.restore();
App.showConfirmationPopup.restore();
});
it('should show confirmation popup', function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/utils/updater_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/updater_test.js b/ambari-web/test/utils/updater_test.js
index 1f0c90f..947411d 100644
--- a/ambari-web/test/utils/updater_test.js
+++ b/ambari-web/test/utils/updater_test.js
@@ -18,84 +18,87 @@
var App = require('app');
require('utils/updater');
-describe('utils/updater', function() {
- describe('#App.updater', function() {
- beforeEach(function() {
- this.clock = sinon.useFakeTimers();
- sinon.stub(App.router, "get").returns('test');
- });
+describe('utils/updater', function () {
+ beforeEach(function () {
+ this.clock = sinon.useFakeTimers();
+ sinon.stub(App.router, "get").returns('test');
+ App.updater.run.restore();
+ sinon.spy(App.updater, 'run');
+ App.updater.immediateRun.restore();
+ sinon.spy(App.updater, 'immediateRun');
+ });
- var tests = {
- t1: {
- obj: Em.Object.create({
- method: sinon.spy(),
- isWorking: true
- }),
- m: 'method called once with default interval in 15 000 ms'
- },
- t2: {
- obj: Em.Object.create({
- method: function() {}
- }),
- m: 'should return false if key name is invalid or absent'
- },
- t3: {
- obj: Em.Object.create({
- method2: sinon.spy(),
- isWorking: true
- }),
- m: 'method should be called immediately'
- },
- t4: {
- obj: Em.Object.create({
- method3: sinon.spy(),
- isWorking: true
- }),
- m: 'method call should be ignored if `isWorking` set to false'
- },
- t5: {
- obj: Em.Object.create({
- method4: sinon.spy(),
- isWorking: true
- }),
- m: 'method call should be ignored if urlPattern is not matching router location'
- }
- };
+ var tests = {
+ t1: {
+ obj: Em.Object.create({
+ method: sinon.spy(),
+ isWorking: true
+ }),
+ m: 'method called once with default interval in 15 000 ms'
+ },
+ t2: {
+ obj: Em.Object.create({
+ method: function () {
+ }
+ }),
+ m: 'should return false if key name is invalid or absent'
+ },
+ t3: {
+ obj: Em.Object.create({
+ method2: sinon.spy(),
+ isWorking: true
+ }),
+ m: 'method should be called immediately'
+ },
+ t4: {
+ obj: Em.Object.create({
+ method3: sinon.spy(),
+ isWorking: true
+ }),
+ m: 'method call should be ignored if `isWorking` set to false'
+ },
+ t5: {
+ obj: Em.Object.create({
+ method4: sinon.spy(),
+ isWorking: true
+ }),
+ m: 'method call should be ignored if urlPattern is not matching router location'
+ }
+ };
- it(tests.t1.m, function() {
- App.updater.run(tests.t1.obj, 'method', 'isWorking');
- this.clock.tick(15000);
- expect(tests.t1.obj.method.called).to.be.ok;
- });
+ it(tests.t1.m, function () {
+ App.updater.run(tests.t1.obj, 'method', 'isWorking');
+ this.clock.tick(3600000 * 1.5);
+ expect(tests.t1.obj.method.called).to.be.ok;
+ });
- it(tests.t2.m, function() {
- var methodCall = App.updater.run(tests.t2.obj, 'method', 'isWorking');
- expect(methodCall).to.be.false;
- });
+ it(tests.t2.m, function () {
+ var methodCall = App.updater.run(tests.t2.obj, 'method', 'isWorking');
+ expect(methodCall).to.be.false;
+ });
- it(tests.t3.m, function() {
- App.updater.run(tests.t3.obj, 'method2', 'isWorking');
- App.updater.immediateRun('method2');
- expect(tests.t3.obj.method2.called).to.be.ok;
- });
+ it(tests.t3.m, function () {
+ App.updater.run(tests.t3.obj, 'method2', 'isWorking');
+ App.updater.immediateRun('method2');
+ expect(tests.t3.obj.method2.called).to.be.ok;
+ });
- it(tests.t4.m, function() {
- App.updater.run(tests.t4.obj, 'method3', 'isWorking');
- this.clock.tick(10000);
- tests.t4.obj.set('isWorking', false);
- this.clock.tick(5000);
- expect(tests.t4.obj.method3.called).to.be.false;
- });
+ it(tests.t4.m, function () {
+ App.updater.run(tests.t4.obj, 'method3', 'isWorking');
+ this.clock.tick(10000);
+ tests.t4.obj.set('isWorking', false);
+ this.clock.tick(5000);
+ expect(tests.t4.obj.method3.called).to.be.false;
+ });
- it(tests.t5.m, function () {
- App.updater.run(tests.t5.obj, 'method4', 'isWorking', 15000, 'pattern');
- this.clock.tick(15000);
- expect(tests.t5.obj.method4.called).to.be.false;
- });
+ it(tests.t5.m, function () {
+ App.updater.run(tests.t5.obj, 'method4', 'isWorking', 15000, 'pattern');
+ this.clock.tick(15000);
+ expect(tests.t5.obj.method4.called).to.be.false;
+ });
- afterEach(function() {
- this.clock.restore();
- App.router.get.restore();
- });
+ afterEach(function () {
+ this.clock.restore();
+ App.router.get.restore();
});
-});
+});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/common/chart/linear_time_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/chart/linear_time_test.js b/ambari-web/test/views/common/chart/linear_time_test.js
index 377e392..40f11ac 100644
--- a/ambari-web/test/views/common/chart/linear_time_test.js
+++ b/ambari-web/test/views/common/chart/linear_time_test.js
@@ -18,6 +18,7 @@
var App = require('app');
require('views/common/chart/linear_time');
+var testHelpers = require('test/helpers');
describe('App.ChartLinearTimeView', function () {
@@ -464,6 +465,7 @@ describe('App.ChartLinearTimeView.LoadAggregator', function () {
sinon.stub(aggregator, 'formatRequestData', function(_request){
return _request.fields;
});
+ App.ajax.send.restore();
sinon.stub(App.ajax, 'send', function(){
return {
done: Em.K,
@@ -473,7 +475,6 @@ describe('App.ChartLinearTimeView.LoadAggregator', function () {
});
afterEach(function () {
aggregator.groupRequests.restore();
- App.ajax.send.restore();
aggregator.formatRequestData.restore();
});
it("valid request is sent", function () {
@@ -486,13 +487,12 @@ describe('App.ChartLinearTimeView.LoadAggregator', function () {
}
};
aggregator.runRequests(requests);
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'r1',
- sender: context,
- data: {
- fields: ['f3', 'f4'],
- hostName: 'host1'
- }
+ var args = testHelpers.findAjaxRequest('name', 'r1');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(context);
+ expect(args[0].data).to.be.eql({
+ fields: ['f3', 'f4'],
+ hostName: 'host1'
});
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/common/configs/config_history_flow_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/configs/config_history_flow_test.js b/ambari-web/test/views/common/configs/config_history_flow_test.js
index df777e9..0733bd8 100644
--- a/ambari-web/test/views/common/configs/config_history_flow_test.js
+++ b/ambari-web/test/views/common/configs/config_history_flow_test.js
@@ -18,7 +18,7 @@
var App = require('app');
require('views/common/configs/config_history_flow');
-
+var testHelpers = require('test/helpers');
describe.skip('App.ConfigHistoryFlowView', function () {
@@ -299,7 +299,7 @@ describe.skip('App.ConfigHistoryFlowView', function () {
App.tooltip.restore();
});
- it('App.tooltip is called on�e', function () {
+ it('App.tooltip is called on�e', function () {
expect(App.tooltip.calledOnce).to.be.true;
});
});
@@ -624,16 +624,12 @@ describe.skip('App.ConfigHistoryFlowView', function () {
describe('#sendRevertCall()', function () {
beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
view.sendRevertCall(Em.Object.create());
});
- afterEach(function () {
- App.ajax.send.restore();
- });
-
it('request is sent', function () {
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'service.serviceConfigVersion.revert');
+ expect(args).exists;
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/common/controls_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/controls_view_test.js b/ambari-web/test/views/common/controls_view_test.js
index a097151..b3ace8c 100644
--- a/ambari-web/test/views/common/controls_view_test.js
+++ b/ambari-web/test/views/common/controls_view_test.js
@@ -19,6 +19,7 @@
var App = require('app');
require('views/common/controls_view');
var validator = require('utils/validator');
+var testHelpers = require('test/helpers');
describe('App.ServiceConfigRadioButtons', function () {
@@ -793,23 +794,23 @@ describe('App.CheckDBConnectionView', function () {
getConnectionProperty: Em.K,
masterHostName: 'host1'
});
- sinon.stub(App.ajax, 'send');
this.mock = sinon.stub(App.Service, 'find');
});
afterEach(function () {
- App.ajax.send.restore();
this.mock.restore();
});
it("service not installed", function() {
this.mock.returns(Em.Object.create({isLoaded: false}));
view.createCustomAction();
- expect(App.ajax.send.getCall(0).args[0].name).to.equal('custom_action.create');
+ var args = testHelpers.findAjaxRequest('name', 'custom_action.create');
+ expect(args[0]).exists;
});
it("service is installed", function() {
this.mock.returns(Em.Object.create({isLoaded: true}));
view.createCustomAction();
- expect(App.ajax.send.getCall(0).args[0].name).to.equal('cluster.custom_action.create');
+ var args = testHelpers.findAjaxRequest('name', 'cluster.custom_action.create');
+ expect(args[0]).exists;
});
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/common/quick_link_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/quick_link_view_test.js b/ambari-web/test/views/common/quick_link_view_test.js
index b9aecee..7f9d1ed 100644
--- a/ambari-web/test/views/common/quick_link_view_test.js
+++ b/ambari-web/test/views/common/quick_link_view_test.js
@@ -18,6 +18,7 @@
var App = require('app');
require('views/common/quick_view_link_view');
+var testHelpers = require('test/helpers');
describe('App.QuickViewLinks', function () {
@@ -111,20 +112,12 @@ describe('App.QuickViewLinks', function () {
});
describe("#loadTags()", function () {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send');
- });
- afterEach(function () {
- App.ajax.send.restore();
- });
+
it("call $.ajax", function () {
quickViewLinks.loadTags();
- expect(App.ajax.send.calledWith({
- name: 'config.tags',
- sender: quickViewLinks,
- success: 'loadTagsSuccess',
- error: 'loadTagsError'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'config.tags');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(quickViewLinks);
});
});
@@ -132,9 +125,7 @@ describe('App.QuickViewLinks', function () {
beforeEach(function () {
sinon.stub(quickViewLinks, 'setConfigProperties', function () {
return {
- done: function (callback) {
- callback();
- }
+ done: Em.clb
}
});
sinon.stub(quickViewLinks, 'getQuickLinksHosts');
@@ -233,7 +224,6 @@ describe('App.QuickViewLinks', function () {
describe("#getQuickLinksHosts()", function () {
beforeEach(function () {
- sinon.stub(App.ajax, 'send');
sinon.stub(App.HostComponent, 'find').returns([
Em.Object.create({
isMaster: true,
@@ -242,35 +232,30 @@ describe('App.QuickViewLinks', function () {
]);
});
afterEach(function () {
- App.ajax.send.restore();
App.HostComponent.find.restore();
});
it("call $.ajax", function () {
quickViewLinks.getQuickLinksHosts();
- expect(App.ajax.send.calledWith({
- name: 'hosts.for_quick_links',
- sender: quickViewLinks,
- data: {
- clusterName: App.get('clusterName'),
- masterHosts: 'host1',
- urlParams: ''
- },
- success: 'setQuickLinksSuccessCallback'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'hosts.for_quick_links');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(quickViewLinks);
+ expect(args[0].data).to.be.eql({
+ clusterName: App.get('clusterName'),
+ masterHosts: 'host1',
+ urlParams: ''
+ });
});
it("call $.ajax, HBASE service", function () {
quickViewLinks.set('content.serviceName', 'HBASE');
quickViewLinks.getQuickLinksHosts();
- expect(App.ajax.send.calledWith({
- name: 'hosts.for_quick_links',
- sender: quickViewLinks,
- data: {
- clusterName: App.get('clusterName'),
- masterHosts: 'host1',
- urlParams: ',host_components/metrics/hbase/master/IsActiveMaster'
- },
- success: 'setQuickLinksSuccessCallback'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'hosts.for_quick_links');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(quickViewLinks);
+ expect(args[0].data).to.be.eql({
+ clusterName: App.get('clusterName'),
+ masterHosts: 'host1',
+ urlParams: ',host_components/metrics/hbase/master/IsActiveMaster'
+ });
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/common/widget/gauge_widget_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/widget/gauge_widget_view_test.js b/ambari-web/test/views/common/widget/gauge_widget_view_test.js
index 6ed4828..2ba4816 100644
--- a/ambari-web/test/views/common/widget/gauge_widget_view_test.js
+++ b/ambari-web/test/views/common/widget/gauge_widget_view_test.js
@@ -20,14 +20,24 @@ var App = require('app');
require('views/common/widget/gauge_widget_view');
describe('App.GaugeWidgetView', function () {
- var view = App.GaugeWidgetView.create({
- value: 0,
- content: {
- properties: {
- warning_threshold: 0,
- critical_threshold: 0
+
+ var view;
+
+ beforeEach(function () {
+ view = App.GaugeWidgetView.create({
+ value: 0,
+ content: {
+ properties: {
+ warning_threshold: 0,
+ critical_threshold: 0
+ }
}
- }
+ });
+ });
+
+ afterEach(function () {
+ clearTimeout(view.get('timeoutId'));
+ view.destroy();
});
describe("#chartView.contentColor()", function() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/common/widget/graph_widget_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/widget/graph_widget_view_test.js b/ambari-web/test/views/common/widget/graph_widget_view_test.js
index e34c081..31c9db0 100644
--- a/ambari-web/test/views/common/widget/graph_widget_view_test.js
+++ b/ambari-web/test/views/common/widget/graph_widget_view_test.js
@@ -21,7 +21,17 @@ require('views/common/widget/graph_widget_view');
var fileUtils = require('utils/file_utils');
describe('App.GraphWidgetView', function () {
- var view = App.GraphWidgetView.create();
+
+ var view;
+
+ beforeEach(function () {
+ view = App.GraphWidgetView.create();
+ });
+
+ afterEach(function () {
+ clearTimeout(view.get('timeoutId'));
+ view.destroy();
+ });
describe("#adjustData()", function() {
var testCases = [
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/common/widget/number_widget_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/widget/number_widget_view_test.js b/ambari-web/test/views/common/widget/number_widget_view_test.js
index 3a55314..f82819e 100644
--- a/ambari-web/test/views/common/widget/number_widget_view_test.js
+++ b/ambari-web/test/views/common/widget/number_widget_view_test.js
@@ -20,14 +20,24 @@ var App = require('app');
require('views/common/widget/number_widget_view');
describe('App.NumberWidgetView', function () {
- var view = App.NumberWidgetView.create({
- value: 0,
- content: {
- properties: {
- warning_threshold: 0,
- critical_threshold: 0
+
+ var view;
+
+ beforeEach(function () {
+ view = App.NumberWidgetView.create({
+ value: 0,
+ content: {
+ properties: {
+ warning_threshold: 0,
+ critical_threshold: 0
+ }
}
- }
+ });
+ });
+
+ afterEach(function () {
+ clearTimeout(view.get('timeoutId'));
+ view.destroy();
});
describe("#contentColor()", function() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/main/admin/stack_upgrade/upgrade_group_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_group_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_group_view_test.js
index 2aed7e9..3adb874 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_group_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_group_view_test.js
@@ -21,9 +21,19 @@ var App = require('app');
require('views/main/admin/stack_upgrade/upgrade_group_view');
describe('App.upgradeGroupView', function () {
- var view = App.upgradeGroupView.create({
- content: Em.Object.create({}),
- failedStatuses: ['FAILED']
+ var view;
+
+ beforeEach(function () {
+ view = App.upgradeGroupView.create({
+ content: Em.Object.create({}),
+ failedStatuses: ['FAILED']
+ });
+ });
+
+ afterEach(function () {
+ clearTimeout(view.get('timer'));
+ clearTimeout(view.get('upgradeItemTimer'));
+ view.destroy();
});
describe("#toggleExpanded()", function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
index 25182a1..6349dfe 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
@@ -19,12 +19,13 @@
var App = require('app');
require('views/main/admin/stack_upgrade/upgrade_wizard_view');
+var testHelpers = require('test/helpers');
-describe('App.upgradeWizardView', function () {
- var view = App.upgradeWizardView.create({
+function getView() {
+ var v = App.upgradeWizardView.create({
failedStatuses: ['FAILED']
});
- view.reopen({
+ v.reopen({
controller: Em.Object.create({
finalizeContext: 'Confirm Finalize',
upgradeData: Em.Object.create(),
@@ -35,21 +36,29 @@ describe('App.upgradeWizardView', function () {
}
})
});
- view.removeObserver('App.clusterName', view, 'startPolling');
+ v.removeObserver('App.clusterName', v, 'startPolling');
+ return v;
+}
+
+describe('App.upgradeWizardView', function () {
+ var view;
beforeEach(function () {
+ App.ajax.send.restore();
sinon.stub(App.ajax, 'send').returns({
complete: Em.clb
});
+ view = getView();
});
afterEach(function () {
- App.ajax.send.restore();
+ clearTimeout(view.get('upgradeItemTimer'));
+ view.destroy();
});
- App.TestAliases.testAsComputedOr(view, 'isManualProceedDisabled', ['!isManualDone', 'controller.requestInProgress']);
+ App.TestAliases.testAsComputedOr(getView(), 'isManualProceedDisabled', ['!isManualDone', 'controller.requestInProgress']);
- App.TestAliases.testAsComputedEqualProperties(view, 'isFinalizeItem', 'manualItem.context', 'controller.finalizeContext');
+ App.TestAliases.testAsComputedEqualProperties(getView(), 'isFinalizeItem', 'manualItem.context', 'controller.finalizeContext');
describe("#upgradeGroups", function () {
it("upgradeGroups is null", function () {
@@ -107,9 +116,7 @@ describe('App.upgradeWizardView', function () {
beforeEach(function () {
sinon.stub(view.get('controller'), 'loadUpgradeData', function () {
return {
- done: function (callback) {
- callback();
- }
+ done: Em.clb
}
});
sinon.stub(view, 'doPolling', Em.K);
@@ -135,10 +142,10 @@ describe('App.upgradeWizardView', function () {
});
describe("#willInsertElement()", function () {
- before(function () {
+ beforeEach(function () {
sinon.stub(view, 'startPolling', Em.K);
});
- after(function () {
+ afterEach(function () {
view.startPolling.restore();
});
it("call startPolling()", function () {
@@ -159,9 +166,7 @@ describe('App.upgradeWizardView', function () {
beforeEach(function () {
sinon.stub(view.get('controller'), 'loadUpgradeData', function () {
return {
- done: function (callback) {
- callback();
- }
+ done: Em.clb
}
});
sinon.spy(view, 'doPolling');
@@ -231,6 +236,13 @@ describe('App.upgradeWizardView', function () {
});
describe("#manualItem", function () {
+
+ beforeEach(function () {
+ view.reopen({
+ activeGroup: Em.Object.create()
+ });
+ });
+
it("no running item", function () {
view.set('activeGroup.upgradeItems', []);
view.propertyDidChange('manualItem');
@@ -252,6 +264,13 @@ describe('App.upgradeWizardView', function () {
});
describe("#failedItem", function () {
+
+ beforeEach(function () {
+ view.reopen({
+ activeGroup: Em.Object.create()
+ });
+ });
+
it("no running item", function () {
view.set('activeGroup.upgradeItems', []);
view.propertyDidChange('failedItem');
@@ -265,6 +284,13 @@ describe('App.upgradeWizardView', function () {
});
describe("#runningItem", function () {
+
+ beforeEach(function () {
+ view.reopen({
+ activeGroup: Em.Object.create()
+ });
+ });
+
it("no running item", function () {
view.set('activeGroup.upgradeItems', []);
view.propertyDidChange('runningItem');
@@ -395,7 +421,7 @@ describe('App.upgradeWizardView', function () {
});
});
- App.TestAliases.testAsComputedAnd(view, 'isDowngradeAvailable', ['!controller.isDowngrade', 'controller.downgradeAllowed']);
+ App.TestAliases.testAsComputedAnd(getView(), 'isDowngradeAvailable', ['!controller.isDowngrade', 'controller.downgradeAllowed']);
describe("#taskDetails", function () {
it("runningItem present", function () {
@@ -429,10 +455,10 @@ describe('App.upgradeWizardView', function () {
});
describe("#toggleDetails()", function () {
- before(function () {
+ beforeEach(function () {
sinon.stub(view, 'toggleProperty', Em.K);
});
- after(function () {
+ afterEach(function () {
view.toggleProperty.restore();
});
it("isDetailsOpened is toggled", function () {
@@ -442,6 +468,11 @@ describe('App.upgradeWizardView', function () {
});
describe("#upgradeStatusLabel", function () {
+
+ beforeEach(function () {
+ Em.setFullPath(view, 'controller.upgradeData.Upgrade', {});
+ });
+
[
{
data: {
@@ -604,19 +635,19 @@ describe('App.upgradeWizardView', function () {
beforeEach(function () {
sinon.stub(view.get('controller'), 'getUpgradeItem', function () {
return {
- complete: function (callback) {
- callback();
- }
+ complete: Em.clb
}
});
sinon.spy(view, 'doUpgradeItemPolling');
this.clock = sinon.useFakeTimers();
});
+
afterEach(function () {
view.get('controller').getUpgradeItem.restore();
view.doUpgradeItemPolling.restore();
this.clock.restore();
});
+
it("running item details", function () {
view.reopen({
runningItem: {},
@@ -628,24 +659,24 @@ describe('App.upgradeWizardView', function () {
this.clock.tick(App.bgOperationsUpdateInterval);
expect(view.doUpgradeItemPolling.calledTwice).to.be.true;
});
+
it("failed item details", function () {
view.reopen({
failedItem: {},
runningItem: null
});
view.set('isDetailsOpened', true);
- view.doUpgradeItemPolling();
expect(view.get('controller').getUpgradeItem.calledOnce).to.be.true;
this.clock.tick(App.bgOperationsUpdateInterval);
expect(view.doUpgradeItemPolling.calledTwice).to.be.true;
});
+
it("details not opened", function () {
view.set('isDetailsOpened', false);
//doUpgradeItemPolling triggered by observer
- expect(view.get('controller').getUpgradeItem.calledOnce).to.be.false;
- this.clock.tick(App.bgOperationsUpdateInterval);
- expect(view.doUpgradeItemPolling.calledOnce).to.be.true;
+ expect(view.get('controller').getUpgradeItem.called).to.be.false;
});
+
});
describe('#getSkippedServiceChecks()', function () {
@@ -689,17 +720,25 @@ describe('App.upgradeWizardView', function () {
view.propertyDidChange('isFinalizeItem');
});
- it('request is sent ' + item.ajaxSendCallCount + ' times', function (){
- expect(App.ajax.send.callCount).to.equal(item.ajaxSendCallCount);
- });
-
it('areSkippedServiceChecksLoaded is ' + item.areSkippedServiceChecksLoaded, function () {
expect(view.get('controller.areSkippedServiceChecksLoaded')).to.equal(item.areSkippedServiceChecksLoadedResult);
});
if (item.ajaxSendCallCount) {
+ it('request is sent ' + item.ajaxSendCallCount + ' times', function (){
+ var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.service_checks');
+ expect(args).to.have.property('length').equal(item.ajaxSendCallCount);
+ });
+
it('upgradeId is 1', function () {
- expect(App.ajax.send.firstCall.args[0].data.upgradeId).to.equal(1);
+ var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.service_checks');
+ expect(args[0].data.upgradeId).to.equal(1);
+ });
+ }
+ else {
+ it('request is not sent times', function () {
+ var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.service_checks');
+ expect(args).not.exists;
});
}
});
@@ -809,9 +848,7 @@ describe('App.upgradeWizardView', function () {
beforeEach(function () {
sinon.stub(view.get('controller'), 'getUpgradeItem', function () {
return {
- complete: function (callback) {
- callback();
- }
+ complete: Em.clb
}
});
view.set('controller.areSlaveComponentFailuresHostsLoaded', false);
@@ -841,9 +878,7 @@ describe('App.upgradeWizardView', function () {
beforeEach(function () {
sinon.stub(view.get('controller'), 'getUpgradeItem', function () {
return {
- complete: function (callback) {
- callback();
- }
+ complete: Em.clb
}
});
view.set('controller.areServiceCheckFailuresServicenamesLoaded', false);
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
index c4eaa74..511c549 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
@@ -19,16 +19,26 @@
var App = require('app');
require('views/main/admin/stack_upgrade/upgrade_wizard_view');
+var testHelpers = require('test/helpers');
describe('App.mainAdminStackVersionsView', function () {
- var view = App.MainAdminStackVersionsView.create({
- controller: {
- currentVersion: {
- repository_version: "2.2.1.0",
- runningCheckRequests: []
- },
- load: Em.K
- }
+ var view;
+
+ beforeEach(function () {
+ view = App.MainAdminStackVersionsView.create({
+ controller: {
+ currentVersion: {
+ repository_version: "2.2.1.0",
+ runningCheckRequests: []
+ },
+ load: Em.K
+ }
+ });
+ });
+
+ afterEach(function () {
+ clearTimeout(view.get('updateTimer'));
+ view.destroy();
});
describe("#filterBy()", function () {
@@ -226,10 +236,10 @@ describe('App.mainAdminStackVersionsView', function () {
});
describe("#didInsertElement()", function() {
- before(function () {
+ beforeEach(function () {
sinon.stub(view, 'observesCategories', Em.K);
});
- after(function () {
+ afterEach(function () {
view.observesCategories.restore();
});
it("observesCategories is called once", function() {
@@ -300,11 +310,11 @@ describe('App.mainAdminStackVersionsView', function () {
});
describe("#filterVersions()", function() {
- before(function () {
+ beforeEach(function () {
sinon.stub(view, 'filterBy').returns([{id: 1}]);
sinon.stub(view, 'observesCategories', Em.K);
});
- after(function () {
+ afterEach(function () {
view.filterBy.restore();
view.observesCategories.restore();
});
@@ -316,49 +326,54 @@ describe('App.mainAdminStackVersionsView', function () {
});
describe("#goToVersions()", function() {
+ var data = {
+ components: [{
+ 'RootServiceComponents': {
+ 'component_version': '1.9.0'
+ }
+ }, {
+ 'RootServiceComponents': {
+ 'component_version': '2.1.0'
+ }
+ }, {
+ 'RootServiceComponents': {
+ 'component_version': '2.0.0'
+ }
+ }]
+ };
before(function () {
sinon.spy(App, 'showConfirmationPopup');
sinon.stub(window.location, 'replace', Em.K);
- var data = {
- components: [{
- 'RootServiceComponents': {
- 'component_version': '1.9.0'
- }
- }, {
- 'RootServiceComponents': {
- 'component_version': '2.1.0'
- }
- }, {
- 'RootServiceComponents': {
- 'component_version': '2.0.0'
- }
- }]
- };
- sinon.stub(App.ajax, 'send').returns({
- then: function(callback) {
- callback(data);
- }
- });
});
after(function () {
App.showConfirmationPopup.restore();
window.location.replace.restore();
+ });
+
+ beforeEach(function () {
App.ajax.send.restore();
+ sinon.stub(App.ajax, 'send').returns({
+ then: function(callback) {
+ callback(data);
+ }
+ });
});
+
it("should go to link using the version retrieved by query", function() {
var popup = view.goToVersions();
expect(App.showConfirmationPopup.calledOnce).to.be.true;
popup.onPrimary();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'ambari.service.load_server_version');
+ expect(args[0]).exists;
expect(window.location.replace.calledWith('/views/ADMIN_VIEW/2.1.0/INSTANCE/#/stackVersions')).to.be.true;
});
});
describe("#willInsertElement()", function() {
- before(function () {
+ beforeEach(function () {
sinon.stub(view, 'poll', Em.K);
});
- after(function () {
+ afterEach(function () {
view.poll.restore();
});
it("poll is called once", function() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/main/dashboard/widget_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widget_test.js b/ambari-web/test/views/main/dashboard/widget_test.js
index e27d0f7..6450d1c 100644
--- a/ambari-web/test/views/main/dashboard/widget_test.js
+++ b/ambari-web/test/views/main/dashboard/widget_test.js
@@ -72,20 +72,13 @@ describe('App.DashboardWidgetView', function () {
complete: Em.K
});
});
+
afterEach(function () {
dashboardWidgetView.get('parentView').widgetsMapper.restore();
dashboardWidgetView.get('parentView').getUserPref.restore();
});
- it("testMode is on", function () {
- App.set('testMode', true);
- dashboardWidgetView.set('id', '1');
- dashboardWidgetView.deleteWidget();
- expect(dashboardWidgetView.get('parentView').widgetsMapper.calledWith('1')).to.be.true;
- expect(dashboardWidgetView.get('parentView.visibleWidgets')).to.be.empty;
- expect(dashboardWidgetView.get('parentView.hiddenWidgets')).to.not.be.empty;
- });
+
it("testMode is off", function () {
- App.set('testMode', false);
dashboardWidgetView.set('parentView.persistKey', 'key');
dashboardWidgetView.deleteWidget();
expect(dashboardWidgetView.get('parentView').getUserPref.calledWith('key')).to.be.true;
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/main/dashboard/widgets/namenode_cpu_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widgets/namenode_cpu_test.js b/ambari-web/test/views/main/dashboard/widgets/namenode_cpu_test.js
index 347d5d0..cb5da49 100644
--- a/ambari-web/test/views/main/dashboard/widgets/namenode_cpu_test.js
+++ b/ambari-web/test/views/main/dashboard/widgets/namenode_cpu_test.js
@@ -26,19 +26,28 @@ require('views/main/dashboard/widgets/namenode_cpu');
describe('App.NameNodeCpuPieChartView', function() {
- var model = Em.Object.create({
- used: null,
- max: null
- });
- var nameNodeCpuPieChartView = App.NameNodeCpuPieChartView.create({
- model_type: null,
- model: model,
- modelFieldUsed: 'used',
- modelFieldMax: 'max',
- widgetHtmlId: 'fake'
+ var model;
+ var nameNodeCpuPieChartView;
+
+ beforeEach(function () {
+ model = Em.Object.create({
+ used: null,
+ max: null
+ });
+ nameNodeCpuPieChartView = App.NameNodeCpuPieChartView.create({
+ model_type: null,
+ model: model,
+ modelFieldUsed: 'used',
+ modelFieldMax: 'max',
+ widgetHtmlId: 'fake'
+ });
+ nameNodeCpuPieChartView.calc();
});
- nameNodeCpuPieChartView.calc();
+ afterEach(function () {
+ nameNodeCpuPieChartView.destroy();
+ clearTimeout(nameNodeCpuPieChartView.get('intervalId'));
+ });
describe('#calcIsPieExists', function() {
var tests = [
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/main/dashboard/widgets_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widgets_test.js b/ambari-web/test/views/main/dashboard/widgets_test.js
index eb27237..ca0837a 100644
--- a/ambari-web/test/views/main/dashboard/widgets_test.js
+++ b/ambari-web/test/views/main/dashboard/widgets_test.js
@@ -232,20 +232,13 @@ describe('App.MainDashboardWidgetsView', function () {
});
sinon.stub(view, 'widgetsMapper').returns(widget);
});
+
afterEach(function () {
view.getUserPref.restore();
view.widgetsMapper.restore();
});
- it("testMode is on", function () {
- App.set('testMode', true);
- plusButtonFilterView.set('hiddenWidgets', [widget]);
- plusButtonFilterView.applyFilter();
- expect(view.getUserPref.called).to.be.false;
- expect(plusButtonFilterView.get('visibleWidgets')).not.to.be.empty;
- expect(plusButtonFilterView.get('hiddenWidgets')).to.be.empty;
- });
+
it("testMode is off", function () {
- App.set('testMode', false);
plusButtonFilterView.applyFilter();
expect(view.getUserPref.calledOnce).to.be.true;
});
@@ -350,18 +343,13 @@ describe('App.MainDashboardWidgetsView', function () {
sinon.stub(view, 'translateToReal', Em.K);
sinon.stub(view, 'getUserPref').returns({complete: Em.K});
});
+
afterEach(function () {
view.translateToReal.restore();
view.getUserPref.restore();
});
- it("testMode is true", function () {
- App.set('testMode', true);
- view.setOnLoadVisibleWidgets();
- expect(view.translateToReal.calledOnce).to.be.true;
- });
it("testMode is false", function () {
- App.set('testMode', false);
view.setOnLoadVisibleWidgets();
expect(view.getUserPref.calledOnce).to.be.true;
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/main/host/details/host_component_views/datanode_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/host/details/host_component_views/datanode_view_test.js b/ambari-web/test/views/main/host/details/host_component_views/datanode_view_test.js
index a217495..e7b7eef 100644
--- a/ambari-web/test/views/main/host/details/host_component_views/datanode_view_test.js
+++ b/ambari-web/test/views/main/host/details/host_component_views/datanode_view_test.js
@@ -18,6 +18,7 @@
var App = require('app');
require('views/main/host/details/host_component_views/datanode_view');
+var testHelpers = require('test/helpers');
describe('App.DataNodeComponentView', function () {
var view = App.DataNodeComponentView.create({
@@ -30,11 +31,9 @@ describe('App.DataNodeComponentView', function () {
beforeEach(function () {
this.stub = sinon.stub(App.HDFSService, 'find');
- sinon.stub(App.ajax, 'send');
});
afterEach(function () {
- App.ajax.send.restore();
this.stub.restore();
});
@@ -47,7 +46,9 @@ describe('App.DataNodeComponentView', function () {
})
]);
view.getDNDecommissionStatus();
- expect(App.ajax.send.getCall(0).args[0].data).to.eql({
+ var args = testHelpers.findAjaxRequest('name', 'host.host_component.decommission_status_datanode');
+ expect(args[0]).exists;
+ expect(args[0].data).to.be.eql({
"hostName": "host1",
"componentName": "NAMENODE"
});
@@ -62,7 +63,9 @@ describe('App.DataNodeComponentView', function () {
})
]);
view.getDNDecommissionStatus();
- expect(App.ajax.send.getCall(0).args[0].data).to.eql({
+ var args = testHelpers.findAjaxRequest('name', 'host.host_component.decommission_status_datanode');
+ expect(args[0]).exists;
+ expect(args[0].data).to.be.eql({
"hostName": "host1",
"componentName": "NAMENODE"
});
@@ -77,7 +80,9 @@ describe('App.DataNodeComponentView', function () {
})
]);
view.getDNDecommissionStatus();
- expect(App.ajax.send.getCall(0).args[0].data).to.eql({
+ var args = testHelpers.findAjaxRequest('name', 'host.host_component.decommission_status_datanode');
+ expect(args[0]).exists;
+ expect(args[0].data).to.be.eql({
"hostName": "host2",
"componentName": "NAMENODE"
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/main/host/details/host_component_views/decommissionable_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/host/details/host_component_views/decommissionable_test.js b/ambari-web/test/views/main/host/details/host_component_views/decommissionable_test.js
index b5cbbe5..caeaab0 100644
--- a/ambari-web/test/views/main/host/details/host_component_views/decommissionable_test.js
+++ b/ambari-web/test/views/main/host/details/host_component_views/decommissionable_test.js
@@ -21,6 +21,7 @@ require('models/host_component');
require('views/main/host/details/host_component_view');
require('mixins');
require('mixins/main/host/details/host_components/decommissionable');
+var testHelpers = require('test/helpers');
var hostComponentView;
@@ -223,18 +224,14 @@ describe('App.Decommissionable', function() {
});
describe("#getDesiredAdminState()", function() {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
- afterEach(function () {
- App.ajax.send.restore();
- });
+
it("content is null", function() {
hostComponentView = Em.View.create(App.Decommissionable, {
content: null
});
hostComponentView.getDesiredAdminState();
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'host.host_component.slave_desired_admin_state');
+ expect(args).not.exists;
});
it("content is correct", function() {
hostComponentView = Em.View.create(App.Decommissionable, {
@@ -244,16 +241,13 @@ describe('App.Decommissionable', function() {
})
});
hostComponentView.getDesiredAdminState();
- expect(App.ajax.send.calledWith({
- name: 'host.host_component.slave_desired_admin_state',
- sender: hostComponentView,
- data: {
- hostName: 'host1',
- componentName: 'C1'
- },
- success: 'getDesiredAdminStateSuccessCallback',
- error: 'getDesiredAdminStateErrorCallback'
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'host.host_component.slave_desired_admin_state');
+ expect(args[0]).exists;
+ expect(args[0].sender).to.be.eql(hostComponentView);
+ expect(args[0].data).to.be.eql({
+ hostName: 'host1',
+ componentName: 'C1'
+ });
});
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/views/main/service/services/ranger_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/service/services/ranger_test.js b/ambari-web/test/views/main/service/services/ranger_test.js
index c348b03..a7c683f 100644
--- a/ambari-web/test/views/main/service/services/ranger_test.js
+++ b/ambari-web/test/views/main/service/services/ranger_test.js
@@ -31,16 +31,6 @@ describe('App.MainDashboardServiceRangerView', function () {
describe('#didInsertElement', function () {
- beforeEach(function () {
- sinon.stub(App.updater, 'run', Em.K);
- sinon.stub(App.updater, 'immediateRun', Em.K);
- });
-
- afterEach(function () {
- App.updater.run.restore();
- App.updater.immediateRun.restore();
- });
-
it('should run updater', function () {
view.didInsertElement();
expect(App.updater.run.calledOnce).to.be.true;
[05/22] ambari git commit: AMBARI-14741. Ambari Web Unit Test failure
on trunk (App.WizardStep8Controller) (onechiporenko)
Posted by nc...@apache.org.
AMBARI-14741. Ambari Web Unit Test failure on trunk (App.WizardStep8Controller) (onechiporenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ddf479ef
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ddf479ef
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ddf479ef
Branch: refs/heads/branch-dev-patch-upgrade
Commit: ddf479ef9ef1f4754cbfae075f0a9f36d99c901e
Parents: 9f76f60
Author: Oleg Nechiporenko <on...@apache.org>
Authored: Wed Jan 20 17:30:49 2016 +0200
Committer: Oleg Nechiporenko <on...@apache.org>
Committed: Wed Jan 20 19:19:39 2016 +0200
----------------------------------------------------------------------
ambari-web/app/assets/test/tests.js | 43 ++++
ambari-web/app/router.js | 3 +
ambari-web/app/utils/ajax/ajax.js | 6 +-
ambari-web/app/utils/ajax/ajax_queue.js | 28 +--
ambari-web/app/utils/helper.js | 2 +-
ambari-web/package.json | 2 +-
ambari-web/test/controllers/application_test.js | 24 +--
.../global/background_operations_test.js | 19 +-
.../global/cluster_controller_test.js | 71 +++----
.../global/update_controller_test.js | 23 +--
.../global/user_settings_controller_test.js | 4 -
ambari-web/test/controllers/installer_test.js | 10 -
.../progress_controller_test.js | 11 +-
.../progress_popup_controller_test.js | 43 +---
.../resourceManager/step3_controller_test.js | 11 +-
.../controllers/main/admin/kerberos_test.js | 30 +--
.../admin/stack_and_upgrade_controller_test.js | 175 ++++++----------
.../main/alert_definitions_controller_test.js | 9 +-
.../add_alert_definition_controller_test.js | 20 +-
.../alerts/alert_instances_controller_test.js | 21 +-
.../definitions_configs_controller_test.js | 10 +-
.../definitions_details_controller_test.js | 37 +---
...anage_alert_notifications_controller_test.js | 15 +-
.../controllers/main/charts/heatmap_test.js | 61 ++----
.../dashboard/config_history_controller_test.js | 26 +--
.../main/host/add_controller_test.js | 42 ++--
.../test/controllers/main/host/details_test.js | 197 +++++++++---------
ambari-web/test/controllers/main/host_test.js | 14 +-
.../main/service/add_controller_test.js | 75 +------
.../main/service/info/config_test.js | 21 +-
.../main/service/info/summary_test.js | 107 +---------
.../test/controllers/main/service/item_test.js | 27 +--
.../service/reassign/step1_controller_test.js | 27 +--
.../service/reassign/step4_controller_test.js | 201 +++++++++----------
.../service/reassign/step6_controller_test.js | 24 ++-
.../service/reassign/step7_controller_test.js | 53 +++--
.../test/controllers/main/service_test.js | 31 +--
.../controllers/main/views_controller_test.js | 9 +-
ambari-web/test/controllers/main_test.js | 25 +--
.../test/controllers/wizard/step2_test.js | 11 +-
.../test/controllers/wizard/step3_test.js | 95 ++-------
.../test/controllers/wizard/step6_test.js | 9 -
.../test/controllers/wizard/step7_test.js | 18 +-
.../test/controllers/wizard/step8_test.js | 85 ++------
.../test/controllers/wizard/step9_test.js | 31 +--
ambari-web/test/controllers/wizard_test.js | 8 +-
ambari-web/test/helpers.js | 77 +++++++
.../common/table_server_view_mixin_test.js | 1 +
.../test/mixins/common/widget_mixin_test.js | 91 ++++-----
.../common/widgets/export_metrics_mixin_test.js | 15 +-
.../host_components/decommissionable_test.js | 25 +--
.../host_components/install_component_test.js | 97 ++++-----
.../wizard/wizardProgressPageController_test.js | 24 +--
ambari-web/test/models/cluster_states_test.js | 2 -
ambari-web/test/models/host_test.js | 4 -
ambari-web/test/router_test.js | 40 +---
ambari-web/test/utils/ajax/ajax_queue_test.js | 8 -
ambari-web/test/utils/ajax/ajax_test.js | 17 +-
.../test/utils/batch_scheduled_requests_test.js | 71 -------
.../test/utils/host_progress_popup_test.js | 2 -
ambari-web/test/utils/updater_test.js | 149 +++++++-------
.../test/views/common/chart/linear_time_test.js | 16 +-
.../common/configs/config_history_flow_test.js | 12 +-
.../test/views/common/controls_view_test.js | 9 +-
.../test/views/common/quick_link_view_test.js | 59 ++----
.../common/widget/gauge_widget_view_test.js | 24 ++-
.../common/widget/graph_widget_view_test.js | 12 +-
.../common/widget/number_widget_view_test.js | 24 ++-
.../stack_upgrade/upgrade_group_view_test.js | 16 +-
.../stack_upgrade/upgrade_wizard_view_test.js | 107 ++++++----
.../admin/stack_upgrade/version_view_test.js | 85 ++++----
.../test/views/main/dashboard/widget_test.js | 11 +-
.../main/dashboard/widgets/namenode_cpu_test.js | 31 ++-
.../test/views/main/dashboard/widgets_test.js | 18 +-
.../host_component_views/datanode_view_test.js | 15 +-
.../decommissionable_test.js | 28 +--
.../views/main/service/services/ranger_test.js | 10 -
77 files changed, 1151 insertions(+), 1763 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/app/assets/test/tests.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/test/tests.js b/ambari-web/app/assets/test/tests.js
index d6b0de8..2b801f0 100644
--- a/ambari-web/app/assets/test/tests.js
+++ b/ambari-web/app/assets/test/tests.js
@@ -341,9 +341,52 @@ var files = [
'test/views/main/service/menu_test'
];
+var ajaxSendMock = {
+ complete: Em.K,
+ success: Em.K,
+ then: Em.K,
+ promise: Em.K,
+ done: Em.clb,
+ error: Em.K,
+ retry: function () {
+ return {
+ then: Em.K,
+ complete: Em.K
+ }
+ },
+ fail: Em.K,
+ always: Em.clb
+};
+
+// don't poll anything while test are running
+App.bgOperationsUpdateInterval = 3600000;
+App.componentsUpdateInterval = 3600000;
+App.contentUpdateInterval = 3600000;
+App.hostStatusCountersUpdateInterval = 3600000;
+App.alertDefinitionsUpdateInterval = 3600000;
+App.alertInstancesUpdateInterval = 3600000;
+App.alertGroupsUpdateInterval = 3600000;
+
App.initialize();
describe('Ambari Web Unit tests', function() {
+ beforeEach(function () {
+ App.set('testMode', false); // don't even try to write tests for testMode = true
+ sinon.stub($, 'ajax', Em.K);
+ sinon.stub(App.ajax, 'send', function () {
+ return ajaxSendMock;
+ });
+ sinon.stub(App.updater, 'run', Em.K);
+ sinon.stub(App.updater, 'immediateRun', Em.K);
+ });
+
+ afterEach(function () {
+ App.ajax.send.restore();
+ $.ajax.restore();
+ App.updater.run.restore();
+ App.updater.immediateRun.restore();
+ });
+
files.forEach(function (file) {
describe(file, function() {
require(file);
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/app/router.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/router.js b/ambari-web/app/router.js
index 92b2bae..c7f59c0 100644
--- a/ambari-web/app/router.js
+++ b/ambari-web/app/router.js
@@ -687,6 +687,9 @@ App.Router = Em.Router.extend({
* If the user is already logged in, redirect to where the user was previously
*/
enter: function (router, context) {
+ if ($.mocho) {
+ return;
+ }
var location = router.location.location.hash;
router.getAuthenticated().done(function (loggedIn) {
if (loggedIn) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index a7c9e4e..4762d34 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -2808,7 +2808,6 @@ var formatRequest = function (data) {
type: this.type || 'GET',
timeout: App.timeout,
dataType: 'json',
- statusCode: require('data/statusCodes'),
headers: {}
};
if (App.get('testMode')) {
@@ -2823,6 +2822,11 @@ var formatRequest = function (data) {
if (this.format) {
jQuery.extend(opt, this.format(data, opt));
}
+ var statusCode = jQuery.extend({}, require('data/statusCodes'));
+ statusCode['404'] = function () {
+ console.log("Error code 404: URI not found. -> " + opt.url);
+ };
+ opt.statusCode = statusCode;
return opt;
};
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/app/utils/ajax/ajax_queue.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax_queue.js b/ambari-web/app/utils/ajax/ajax_queue.js
index 7187788..1c2106f 100644
--- a/ambari-web/app/utils/ajax/ajax_queue.js
+++ b/ambari-web/app/utils/ajax/ajax_queue.js
@@ -152,19 +152,21 @@ App.ajaxQueue = Em.Object.extend({
var r = App.ajax.send(queue.shift());
this.propertyDidChange('queue');
if (r) {
- r.complete(function(xhr) {
- if(xhr.status>=200 && xhr.status <= 299) {
- self.runNextRequest();
- }
- else {
- if (self.get('abortOnError')) {
- self.clear();
- }
- else {
- self.runNextRequest();
- }
- }
- });
+ r.complete(this._complete);
+ }
+ else {
+ if (this.get('abortOnError')) {
+ this.clear();
+ }
+ else {
+ this.runNextRequest();
+ }
+ }
+ },
+
+ _complete: function(xhr) {
+ if(xhr.status>=200 && xhr.status <= 299) {
+ this.runNextRequest();
}
else {
if (this.get('abortOnError')) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/app/utils/helper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/helper.js b/ambari-web/app/utils/helper.js
index 296a8e8..a1d4b30 100644
--- a/ambari-web/app/utils/helper.js
+++ b/ambari-web/app/utils/helper.js
@@ -736,7 +736,7 @@ App.popover = function (self, options) {
* @param {object} options
*/
App.tooltip = function (self, options) {
- if (!self) return;
+ if (!self || !self.tooltip) return;
self.tooltip(options);
/* istanbul ignore next */
self.on("remove", function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/package.json
----------------------------------------------------------------------
diff --git a/ambari-web/package.json b/ambari-web/package.json
index 10a9314..550d293 100644
--- a/ambari-web/package.json
+++ b/ambari-web/package.json
@@ -1,7 +1,7 @@
{
"name": "Ambari",
"description": "Front-end package for the Apache Ambari Project",
- "version": "2.2.0",
+ "version": "2.4.0",
"homepage": "http://ambari.apache.org/",
"repository": {
"type": "git",
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/application_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/application_test.js b/ambari-web/test/controllers/application_test.js
index efe5103..cdeb06e 100644
--- a/ambari-web/test/controllers/application_test.js
+++ b/ambari-web/test/controllers/application_test.js
@@ -19,6 +19,7 @@
var App = require('app');
require('models/cluster');
+var testHelpers = require('test/helpers');
function getController() {
return App.ApplicationController.create();
@@ -90,30 +91,15 @@ describe('App.ApplicationController', function () {
});
describe('#getStack', function() {
- var res;
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', function(data) {
- res = data;
- });
- });
- afterEach(function () {
- App.ajax.send.restore();
- });
+
it ('Should return send value', function() {
var callback = {
'callback': true
};
applicationController.getStack(callback);
- res = JSON.parse(JSON.stringify(res));
- expect(res).to.be.eql({
- "name": "router.login.clusters",
- "sender": {
- "isPollerRunning": true
- },
- "callback": {
- "callback": true
- }
- });
+ var args = testHelpers.findAjaxRequest('name', 'router.login.clusters');
+ expect(args[0]).to.exists;
+ expect(args[0].callback.callback).to.be.true;
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/global/background_operations_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/global/background_operations_test.js b/ambari-web/test/controllers/global/background_operations_test.js
index a602a32..445eeb0 100644
--- a/ambari-web/test/controllers/global/background_operations_test.js
+++ b/ambari-web/test/controllers/global/background_operations_test.js
@@ -41,7 +41,6 @@ describe('App.BackgroundOperationsController', function () {
*
*/
App.set('clusterName', 'testName');
- App.bgOperationsUpdateInterval = 100;
var tests = Em.A([
{
@@ -112,13 +111,6 @@ describe('App.BackgroundOperationsController', function () {
}
]);
- beforeEach(function () {
- App.testMode = false;
- });
- afterEach(function () {
- App.testMode = true;
- });
-
tests.forEach(function (test) {
it(test.m, function () {
controller.set('levelInfo', test.levelInfo);
@@ -133,11 +125,9 @@ describe('App.BackgroundOperationsController', function () {
describe('#startPolling()', function () {
beforeEach(function () {
- sinon.spy(App.updater, 'run');
sinon.spy(controller, 'requestMostRecent');
});
afterEach(function () {
- App.updater.run.restore();
controller.requestMostRecent.restore();
});
@@ -177,6 +167,15 @@ describe('App.BackgroundOperationsController', function () {
});
describe('#callBackForMostRecent()', function () {
+
+ beforeEach(function () {
+ sinon.stub(App.router.get('clusterController'), 'restoreUpgradeState', Em.K);
+ });
+
+ afterEach(function () {
+ App.router.get('clusterController').restoreUpgradeState.restore();
+ });
+
it('No requests exists', function () {
var data = {
items: []
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/global/cluster_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/global/cluster_controller_test.js b/ambari-web/test/controllers/global/cluster_controller_test.js
index f72d64f..a791b19 100644
--- a/ambari-web/test/controllers/global/cluster_controller_test.js
+++ b/ambari-web/test/controllers/global/cluster_controller_test.js
@@ -19,6 +19,7 @@
var App = require('app');
var credentialUtils = require('utils/credentials');
+var testHelpers = require('test/helpers');
require('controllers/global/cluster_controller');
require('models/host_component');
require('utils/http_client');
@@ -74,6 +75,7 @@ describe('App.clusterController', function () {
beforeEach(function () {
modelSetup.setupStackVersion(this, 'HDP-2.0.5');
+ App.ajax.send.restore(); // default ajax-mock can't be used here
sinon.stub(App.ajax, 'send', function () {
return {
then: function (successCallback) {
@@ -83,22 +85,22 @@ describe('App.clusterController', function () {
}
}
});
+ this.args = testHelpers.findAjaxRequest('name', 'cluster.load_cluster_name');
});
afterEach(function () {
modelSetup.restoreStackVersion(this);
- App.ajax.send.restore();
});
it('if clusterName is "mycluster" and reload is false then clusterName stays the same', function () {
App.set('clusterName', 'mycluster');
controller.loadClusterName(false);
- expect(App.ajax.send.called).to.be.false;
+ expect(this.args).to.not.exists;
expect(App.get('clusterName')).to.equal('mycluster');
});
it('reload is true and clusterName is not empty', function () {
controller.loadClusterName(true);
- expect(App.ajax.send.calledOnce).to.be.true;
+ expect(this.args).to.exists;
expect(App.get('clusterName')).to.equal('clusterNameFromServer');
expect(App.get('currentStackVersion')).to.equal('HDP-2.0.5');
});
@@ -106,7 +108,7 @@ describe('App.clusterController', function () {
it('reload is false and clusterName is empty', function () {
App.set('clusterName', '');
controller.loadClusterName(false);
- expect(App.ajax.send.calledOnce).to.be.true;
+ expect(this.args).to.exists;
expect(App.get('clusterName')).to.equal('clusterNameFromServer');
expect(App.get('currentStackVersion')).to.equal('HDP-2.0.5');
});
@@ -187,14 +189,8 @@ describe('App.clusterController', function () {
describe('#getUrl', function () {
controller.set('clusterName', 'tdk');
var tests = ['test1', 'test2', 'test3'];
- it('testMode = true', function () {
- App.testMode = true;
- tests.forEach(function (test) {
- expect(controller.getUrl(test, test)).to.equal(test);
- });
- });
+
it('testMode = false', function () {
- App.testMode = false;
tests.forEach(function (test) {
expect(controller.getUrl(test, test)).to.equal(App.apiPrefix + '/clusters/' + controller.get('clusterName') + test);
});
@@ -204,9 +200,6 @@ describe('App.clusterController', function () {
describe("#createKerberosAdminSession()", function() {
beforeEach(function () {
- sinon.stub(App.ajax, 'send', function() {
- return {success: Em.K}
- });
sinon.stub(credentialUtils, 'createOrUpdateCredentials', function() {
return $.Deferred().resolve().promise();
});
@@ -215,7 +208,6 @@ describe('App.clusterController', function () {
});
afterEach(function () {
- App.ajax.send.restore();
credentialUtils.createOrUpdateCredentials.restore();
App.get.restore();
});
@@ -227,18 +219,16 @@ describe('App.clusterController', function () {
key: 'pass',
type: 'persistent'
}, {});
-
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'common.cluster.update',
- sender: controller,
- data: {
- clusterName: 'test',
- data: [{
- session_attributes: {
- kerberos_admin: {principal: "admin", password: "pass"}
- }
- }]
- }
+ var args = testHelpers.findAjaxRequest('name', 'common.cluster.update');
+ expect(args[0]).to.exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ clusterName: 'test',
+ data: [{
+ session_attributes: {
+ kerberos_admin: {principal: "admin", password: "pass"}
+ }
+ }]
});
});
it("KDC Store supports enabled, credentials updated via credentials storage call", function() {
@@ -248,7 +238,8 @@ describe('App.clusterController', function () {
key: 'pass',
type: 'persistent'
}, {});
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'common.cluster.update');
+ expect(args).to.not.exists;
expect(credentialUtils.createOrUpdateCredentials.getCall(0).args).to.eql([
'test', 'kdc.admin.credential', {
principal: 'admin',
@@ -282,14 +273,7 @@ describe('App.clusterController', function () {
}
];
- beforeEach(function () {
- sinon.stub(App.ajax, 'send').returns({
- promise: Em.K
- });
- });
-
afterEach(function () {
- App.ajax.send.restore();
App.get.restore();
});
@@ -301,7 +285,8 @@ describe('App.clusterController', function () {
it('request is sent', function () {
controller.checkDetailedRepoVersion();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'cluster.load_detailed_repo_version');
+ expect(args).to.exists;
});
});
@@ -316,7 +301,8 @@ describe('App.clusterController', function () {
});
it('request is not sent', function () {
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'cluster.load_detailed_repo_version');
+ expect(args).to.not.exists;
});
it('App.isStormMetricsSupported is ' + item.isStormMetricsSupported, function () {
@@ -438,17 +424,10 @@ describe('App.clusterController', function () {
describe('#getAllUpgrades()', function () {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
-
- afterEach(function () {
- App.ajax.send.restore();
- });
-
it('should send request to get upgrades data', function () {
controller.getAllUpgrades();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'cluster.load_last_upgrade');
+ expect(args).to.exists;
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/global/update_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/global/update_controller_test.js b/ambari-web/test/controllers/global/update_controller_test.js
index 25b2c5b..c0a4760 100644
--- a/ambari-web/test/controllers/global/update_controller_test.js
+++ b/ambari-web/test/controllers/global/update_controller_test.js
@@ -20,6 +20,7 @@
var App = require('app');
require('utils/updater');
require('controllers/global/update_controller');
+var testHelpers = require('test/helpers');
describe('App.UpdateController', function () {
var controller = App.UpdateController.create({
@@ -34,14 +35,6 @@ describe('App.UpdateController', function () {
describe('#getUrl()', function () {
- beforeEach(function () {
- sinon.stub(App, 'get').withArgs('testMode').returns(false);
- });
-
- afterEach(function () {
- App.get.restore();
- });
-
it('testMode = false', function () {
expect(controller.getUrl('test', '/real')).to.equal('/api/v1/clusters//real');
});
@@ -54,12 +47,6 @@ describe('App.UpdateController', function () {
describe('#updateAll()', function () {
- beforeEach(function () {
- sinon.stub(App.updater, 'run', Em.K);
- });
- afterEach(function () {
- App.updater.run.restore();
- });
it('isWorking = false', function () {
controller.set('isWorking', false);
expect(App.updater.run.called).to.equal(false);
@@ -266,23 +253,23 @@ describe('App.UpdateController', function () {
this.mock = sinon.stub(App.Service, 'find');
sinon.stub(controller, 'computeParameters');
sinon.stub(controller, 'addParamsToHostsUrl');
- sinon.stub(App.ajax, 'send');
});
afterEach(function () {
App.Service.find.restore();
controller.computeParameters.restore();
controller.addParamsToHostsUrl.restore();
- App.ajax.send.restore();
});
it("AMBARI_METRICS is not started", function () {
this.mock.returns(Em.Object.create({isStarted: false}));
expect(controller.loadHostsMetric([])).to.be.null;
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'hosts.metrics.lazy_load');
+ expect(args).to.not.exists;
});
it("AMBARI_METRICS is started", function () {
this.mock.returns(Em.Object.create({isStarted: true}));
expect(controller.loadHostsMetric([])).to.be.object;
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'hosts.metrics.lazy_load');
+ expect(args).to.exists;
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/global/user_settings_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/global/user_settings_controller_test.js b/ambari-web/test/controllers/global/user_settings_controller_test.js
index 7c49645..849fb2f 100644
--- a/ambari-web/test/controllers/global/user_settings_controller_test.js
+++ b/ambari-web/test/controllers/global/user_settings_controller_test.js
@@ -22,14 +22,10 @@ var userSettingsController;
describe('App.UserSettingsController', function () {
beforeEach(function () {
- sinon.stub(App.ajax, 'send', function () {
- return {complete: Em.K}
- });
userSettingsController = App.UserSettingsController.create();
});
afterEach(function () {
- App.ajax.send.restore();
userSettingsController.destroy();
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/installer_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/installer_test.js b/ambari-web/test/controllers/installer_test.js
index cd75ed7..df4ab0e 100644
--- a/ambari-web/test/controllers/installer_test.js
+++ b/ambari-web/test/controllers/installer_test.js
@@ -30,16 +30,6 @@ describe('App.InstallerController', function () {
installerController.destroy();
});
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', function () {
- return {complete: Em.K};
- });
- });
-
- afterEach(function () {
- App.ajax.send.restore();
- });
-
describe('#init', function () {
var c;
beforeEach(function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/admin/highAvailability/progress_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/highAvailability/progress_controller_test.js b/ambari-web/test/controllers/main/admin/highAvailability/progress_controller_test.js
index 1c4d584..f002754 100644
--- a/ambari-web/test/controllers/main/admin/highAvailability/progress_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/highAvailability/progress_controller_test.js
@@ -123,12 +123,15 @@ describe('App.HighAvailabilityProgressPageController', function () {
}
]
}];
- beforeEach(function() {
- App.set('testMode', true);
+
+ beforeEach(function () {
+ sinon.stub(Date.prototype, 'getTime').returns(1);
});
- afterEach(function() {
- App.set('testMode', false);
+
+ afterEach(function () {
+ Date.prototype.getTime.restore();
});
+
it("reconfigures configs after HA", function() {
tests.forEach(function(t) {
controller.set('content', t.content);
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js b/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
index 2a9a4d7..8648181 100644
--- a/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
@@ -19,6 +19,7 @@
var App = require('app');
require('controllers/main/admin/highAvailability/progress_popup_controller');
+var testHelpers = require('test/helpers');
describe('App.HighAvailabilityProgressPopupController', function () {
@@ -34,16 +35,6 @@ describe('App.HighAvailabilityProgressPopupController', function () {
describe('#startTaskPolling', function () {
- beforeEach(function () {
- sinon.stub(App.updater, 'run', Em.K);
- sinon.stub(App.updater, 'immediateRun', Em.K);
- });
-
- afterEach(function () {
- App.updater.run.restore();
- App.updater.immediateRun.restore();
- });
-
describe('should start task polling', function () {
beforeEach(function () {
@@ -85,17 +76,10 @@ describe('App.HighAvailabilityProgressPopupController', function () {
describe('#updateTask', function () {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
-
- afterEach(function () {
- App.ajax.send.restore();
- });
-
it('should send polling request', function () {
controller.updateTask();
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'background_operations.get_by_task');
+ expect(args).to.exists;
});
});
@@ -200,14 +184,6 @@ describe('App.HighAvailabilityProgressPopupController', function () {
}
];
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
-
- afterEach(function () {
- App.ajax.send.restore();
- });
-
cases.forEach(function (item) {
describe(item.title, function () {
@@ -217,26 +193,29 @@ describe('App.HighAvailabilityProgressPopupController', function () {
stageId: item.stageId
});
controller.getHosts();
+ this.bgArgs = testHelpers.filterAjaxRequests('name', 'background_operations.get_by_request');
+ this.pollingArgs = testHelpers.filterAjaxRequests('name', 'common.request.polling');
+ this.args = item.name === 'background_operations.get_by_request' ? this.bgArgs : this.pollingArgs;
});
it('two requests are sent', function () {
- expect(App.ajax.send.calledTwice).to.be.true;
+ expect(this.args.length).to.be.equal(2);
});
it('1st call name is valid', function () {
- expect(App.ajax.send.firstCall.args[0].name).to.equal(item.name);
+ expect(this.args[0][0].name).to.equal(item.name);
});
it('2nd call name is valid', function () {
- expect(App.ajax.send.secondCall.args[0].name).to.equal(item.name);
+ expect(this.args[1][0].name).to.equal(item.name);
});
it('1st stageId is valid', function () {
- expect(App.ajax.send.firstCall.args[0].data.stageId).to.eql(item.stageIdPassed);
+ expect(this.args[0][0].data.stageId).to.eql(item.stageIdPassed);
});
it('2nd stageId is valid', function () {
- expect(App.ajax.send.secondCall.args[0].data.stageId).to.eql(item.stageIdPassed);
+ expect(this.args[1][0].data.stageId).to.eql(item.stageIdPassed);
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js b/ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js
index 9a24cf3..3e6f7bb 100644
--- a/ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js
@@ -18,6 +18,7 @@
var App = require('app');
require('controllers/main/admin/highAvailability/resourceManager/step3_controller');
+var testHelpers = require('test/helpers');
describe('App.RMHighAvailabilityWizardStep3Controller', function () {
@@ -54,14 +55,6 @@ describe('App.RMHighAvailabilityWizardStep3Controller', function () {
content: Em.Object.create({})
});
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
-
- afterEach(function () {
- App.ajax.send.restore();
- });
-
it('should send proper ajax request', function () {
controller.loadConfigTagsSuccessCallback({
'Clusters': {
@@ -80,7 +73,7 @@ describe('App.RMHighAvailabilityWizardStep3Controller', function () {
}, {}, {
'serviceConfig': {}
});
- var data = App.ajax.send.args[0][0].data;
+ var data = testHelpers.findAjaxRequest('name', 'reassign.load_configs')[0].data;
expect(data.urlParams).to.equal('(type=zoo.cfg&tag=1)|(type=yarn-site&tag=1)|(type=yarn-env&tag=1)');
expect(data.serviceConfig).to.eql({});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/admin/kerberos_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/kerberos_test.js b/ambari-web/test/controllers/main/admin/kerberos_test.js
index fa23082..d347416 100644
--- a/ambari-web/test/controllers/main/admin/kerberos_test.js
+++ b/ambari-web/test/controllers/main/admin/kerberos_test.js
@@ -17,6 +17,7 @@
*/
var App = require('app');
+var testHelpers = require('test/helpers');
describe('App.MainAdminKerberosController', function() {
@@ -131,13 +132,11 @@ describe('App.MainAdminKerberosController', function() {
beforeEach(function () {
sinon.spy(App.ModalPopup, "show");
- sinon.stub(App.ajax, 'send', Em.K);
sinon.spy(controller, 'restartServicesAfterRegenerate');
sinon.spy(controller, 'restartAllServices');
});
afterEach(function () {
App.ModalPopup.show.restore();
- App.ajax.send.restore();
controller.restartServicesAfterRegenerate.restore();
controller.restartAllServices.restore();
});
@@ -157,8 +156,8 @@ describe('App.MainAdminKerberosController', function() {
var popup2 = popup.onPrimary();
popup2.set('restartComponents', true)
popup2.onPrimary();
-
- expect(App.ajax.send.args[0][0].data.type).to.equal('missing');
+ var args = testHelpers.findAjaxRequest('name', 'admin.kerberos_security.regenerate_keytabs');
+ expect(args[0].data.type).to.be.equal('missing');
});
it('user didn\'t check regeneration only for missing host/components', function () {
@@ -169,7 +168,8 @@ describe('App.MainAdminKerberosController', function() {
popup2.set('restartComponents', true)
popup2.onPrimary();
- expect(App.ajax.send.args[0][0].data.type).to.equal('all');
+ var args = testHelpers.findAjaxRequest('name', 'admin.kerberos_security.regenerate_keytabs');
+ expect(args[0].data.type).to.be.equal('all');
});
it('user checked restart services automatically', function () {
@@ -180,7 +180,8 @@ describe('App.MainAdminKerberosController', function() {
popup2.set('restartComponents', true)
popup2.onPrimary();
- expect(App.ajax.send.args[0][0].data.withAutoRestart).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'admin.kerberos_security.regenerate_keytabs');
+ expect(args[0].data.withAutoRestart).to.be.true;
});
it('user didn\'t check restart services automatically', function () {
@@ -191,7 +192,8 @@ describe('App.MainAdminKerberosController', function() {
popup2.set('restartComponents', false)
popup2.onPrimary();
- expect(App.ajax.send.args[0][0].data.withAutoRestart).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'admin.kerberos_security.regenerate_keytabs');
+ expect(args[0].data.withAutoRestart).to.be.false;
});
});
@@ -200,7 +202,6 @@ describe('App.MainAdminKerberosController', function() {
var mock = {callback: Em.K};
beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
sinon.spy(mock, 'callback');
sinon.stub(controller, 'getSecurityType', function (c) {
c();
@@ -208,7 +209,6 @@ describe('App.MainAdminKerberosController', function() {
});
afterEach(function () {
- App.ajax.send.restore();
mock.callback.restore();
controller.getSecurityType.restore();
Em.tryInvoke(App.get, 'restore');
@@ -244,6 +244,7 @@ describe('App.MainAdminKerberosController', function() {
controller.set('securityEnabled', test.securityEnabled);
controller.set('kdc_type', test.kdc_type);
controller.getKDCSessionState(mock.callback);
+ this.args = testHelpers.findAjaxRequest('name', 'kerberos.session.state');
});
@@ -252,7 +253,7 @@ describe('App.MainAdminKerberosController', function() {
expect(mock.callback.calledOnce).to.be.false;
});
it('1 request is sent', function () {
- expect(App.ajax.send.calledOnce).to.be.true;
+ expect(this.args).to.exists;
});
}
else {
@@ -260,7 +261,7 @@ describe('App.MainAdminKerberosController', function() {
expect(mock.callback.calledOnce).to.be.true;
});
it('no request is sent', function () {
- expect(App.ajax.send.calledOnce).to.be.false;
+ expect(this.args).to.not.exists;
});
}
});
@@ -272,12 +273,10 @@ describe('App.MainAdminKerberosController', function() {
var mock = {callback: Em.K};
beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
sinon.spy(mock, 'callback');
});
afterEach(function () {
- App.ajax.send.restore();
mock.callback.restore();
Em.tryInvoke(App.get, 'restore');
});
@@ -312,6 +311,7 @@ describe('App.MainAdminKerberosController', function() {
controller.set('securityEnabled', test.securityEnabled);
controller.set('kdc_type', test.kdc_type);
controller.getSecurityType(mock.callback);
+ this.args = testHelpers.findAjaxRequest('name', 'admin.security.cluster_configs.kerberos');
});
if (test.result) {
@@ -319,14 +319,14 @@ describe('App.MainAdminKerberosController', function() {
expect(mock.callback.calledOnce).to.be.false;
});
it('1 request is sent', function () {
- expect(App.ajax.send.calledOnce).to.be.true;
+ expect(this.args).to.exists;
});
} else {
it('callback is called once', function () {
expect(mock.callback.calledOnce).to.be.true;
});
it('no request is sent', function () {
- expect(App.ajax.send.calledOnce).to.be.false;
+ expect(this.args).to.not.exists;
});
}
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index fe5d9c8..508e2dd 100644
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@ -20,6 +20,7 @@
var App = require('app');
require('controllers/main/admin/stack_and_upgrade_controller');
require('utils/string_utils');
+var testHelpers = require('test/helpers');
describe('App.MainAdminStackAndUpgradeController', function() {
@@ -139,43 +140,34 @@ describe('App.MainAdminStackAndUpgradeController', function() {
});
describe("#loadUpgradeData()", function() {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send').returns({
- then: Em.K,
- complete: Em.K
- });
- });
- afterEach(function () {
- App.ajax.send.restore();
- });
+
it("get entire data", function() {
controller.set('upgradeId', 1);
controller.loadUpgradeData();
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'admin.upgrade.data',
- sender: controller,
- data: {
- id: 1
- },
- success: 'loadUpgradeDataSuccessCallback'
- })
+ var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.data');
+ expect(args[0]).to.exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ id: 1
+ });
});
it("get only state", function() {
controller.set('upgradeId', 1);
controller.loadUpgradeData(true);
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'admin.upgrade.state',
- sender: controller,
- data: {
- id: 1
- },
- success: 'loadUpgradeDataSuccessCallback'
- })
+ var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.state');
+ expect(args[0]).to.exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ id: 1
+ });
});
it("upgrade id is null", function() {
controller.set('upgradeId', null);
controller.loadUpgradeData();
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.state');
+ var args2 = testHelpers.findAjaxRequest('name', 'admin.upgrade.data');
+ expect(args).to.not.exists;
+ expect(args2).to.not.exists;
});
});
@@ -263,12 +255,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
});
describe("#getUpgradeItem()", function() {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
- afterEach(function () {
- App.ajax.send.restore();
- });
+
it("default callback", function() {
var item = Em.Object.create({
request_id: 1,
@@ -276,15 +263,14 @@ describe('App.MainAdminStackAndUpgradeController', function() {
stage_id: 3
});
controller.getUpgradeItem(item);
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'admin.upgrade.upgrade_item',
- sender: controller,
- data: {
- upgradeId: 1,
- groupId: 2,
- stageId: 3
- },
- success: 'getUpgradeItemSuccessCallback'
+ var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.upgrade_item');
+ expect(args[0]).to.exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].success).to.be.equal('getUpgradeItemSuccessCallback');
+ expect(args[0].data).to.be.eql({
+ upgradeId: 1,
+ groupId: 2,
+ stageId: 3
});
});
it("custom callback", function() {
@@ -294,15 +280,14 @@ describe('App.MainAdminStackAndUpgradeController', function() {
stage_id: 3
});
controller.getUpgradeItem(item, 'customCallback');
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'admin.upgrade.upgrade_item',
- sender: controller,
- data: {
- upgradeId: 1,
- groupId: 2,
- stageId: 3
- },
- success: 'customCallback'
+ var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.upgrade_item');
+ expect(args[0]).to.exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].success).to.be.equal('customCallback');
+ expect(args[0].data).to.be.eql({
+ upgradeId: 1,
+ groupId: 2,
+ stageId: 3
});
});
});
@@ -321,12 +306,6 @@ describe('App.MainAdminStackAndUpgradeController', function() {
});
describe("#runPreUpgradeCheck()", function() {
- before(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
- after(function () {
- App.ajax.send.restore();
- });
it("make ajax call", function() {
controller.runPreUpgradeCheck(Em.Object.create({
repositoryVersion: '2.2',
@@ -335,18 +314,15 @@ describe('App.MainAdminStackAndUpgradeController', function() {
skipComponentFailures: false,
skipSCFailures: false
}));
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: "admin.upgrade.pre_upgrade_check",
- sender: controller,
- data: {
- value: '2.2',
- label: 'HDP-2.2',
- type: 'ROLLING',
- skipComponentFailures: 'false',
- skipSCFailures: 'false'
- },
- success: "runPreUpgradeCheckSuccess",
- error: "runPreUpgradeCheckError"
+ var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.pre_upgrade_check');
+ expect(args[0]).to.exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ value: '2.2',
+ label: 'HDP-2.2',
+ type: 'ROLLING',
+ skipComponentFailures: 'false',
+ skipSCFailures: 'false'
});
});
});
@@ -526,7 +502,6 @@ describe('App.MainAdminStackAndUpgradeController', function() {
var callArgs;
beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
sinon.stub(controller, 'setDBProperty', Em.K);
controller.set('currentVersion', {
repository_version: '2.2'
@@ -535,11 +510,10 @@ describe('App.MainAdminStackAndUpgradeController', function() {
value: '2.2',
label: 'HDP-2.2'
});
- callArgs = App.ajax.send.getCall(0).args[0];
+ callArgs = testHelpers.findAjaxRequest('name', 'admin.upgrade.start')[0];
});
afterEach(function () {
- App.ajax.send.restore();
controller.setDBProperty.restore();
});
@@ -991,7 +965,6 @@ describe('App.MainAdminStackAndUpgradeController', function() {
describe("#downgrade()", function() {
beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
sinon.stub(controller, 'abortUpgrade');
sinon.stub(App.RepositoryVersion, 'find').returns([
Em.Object.create({
@@ -1005,11 +978,10 @@ describe('App.MainAdminStackAndUpgradeController', function() {
repository_version: '2.2',
repository_name: 'HDP-2.2'
}), {context: 'context'});
- this.callArgs = App.ajax.send.getCall(0).args[0];
+ this.callArgs = testHelpers.findAjaxRequest('name', 'admin.downgrade.start')[0];
});
afterEach(function () {
- App.ajax.send.restore();
controller.abortUpgrade.restore();
App.RepositoryVersion.find.restore();
});
@@ -1018,7 +990,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
expect(controller.abortUpgrade.calledOnce).to.be.true;
});
it('request-data is valid', function () {
- expect(App.ajax.send.getCall(0).args[0].data).to.eql({
+ expect(this.callArgs.data).to.eql({
from: '2.3',
value: '2.2',
label: 'HDP-2.2',
@@ -1056,12 +1028,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
});
describe("#installRepoVersion()", function () {
- before(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
- after(function () {
- App.ajax.send.restore();
- });
+
it("make ajax call", function () {
var repo = Em.Object.create({
stackVersionType: 'HDP',
@@ -1070,7 +1037,8 @@ describe('App.MainAdminStackAndUpgradeController', function() {
repoId: 1
});
controller.installRepoVersion(repo);
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'admin.stack_version.install.repo_version');
+ expect(args).to.exists;
});
});
@@ -1109,22 +1077,13 @@ describe('App.MainAdminStackAndUpgradeController', function() {
describe("#setUpgradeItemStatus()", function () {
var item;
beforeEach(function () {
- sinon.stub(App.ajax, 'send', function () {
- return {
- done: Em.clb
- }
- });
item = Em.Object.create({
request_id: 1,
stage_id: 1,
group_id: 1
});
controller.setUpgradeItemStatus(item, 'PENDING');
- this.callArgs = App.ajax.send.getCall(0).args[0];
- });
-
- afterEach(function () {
- App.ajax.send.restore();
+ this.callArgs = testHelpers.findAjaxRequest('name', 'admin.upgrade.upgradeItem.setState')[0];
});
it('request-data is valid', function () {
@@ -1222,12 +1181,10 @@ describe('App.MainAdminStackAndUpgradeController', function() {
before(function(){
this.mock = sinon.stub(controller, 'validateRepoVersions');
sinon.stub(controller, 'prepareRepoForSaving', Em.K);
- sinon.stub(App.ajax, 'send').returns({success: Em.K});
});
after(function(){
this.mock.restore();
controller.prepareRepoForSaving.restore();
- App.ajax.send.restore();
});
describe("validation errors present", function() {
@@ -1236,6 +1193,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
done: function(callback) {callback([1]);}
});
controller.saveRepoOS(Em.Object.create({repoVersionId: 1}), true);
+ this.args = testHelpers.findAjaxRequest('name', 'admin.stack_versions.edit.repo');
});
it('validateRepoVersions is called with valid arguments', function () {
@@ -1247,7 +1205,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
});
it('no requests are sent', function () {
- expect(App.ajax.send.called).to.be.false;
+ expect(this.args).to.not.exists;
});
});
@@ -1269,15 +1227,11 @@ describe('App.MainAdminStackAndUpgradeController', function() {
});
describe("#validateRepoVersions()", function () {
- before(function () {
- sinon.stub(App.ajax, 'send').returns({success: Em.K, error: Em.K});
- });
- after(function () {
- App.ajax.send.restore();
- });
+
it("skip validation", function () {
controller.validateRepoVersions(Em.Object.create({repoVersionId: 1}), true);
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'admin.stack_versions.validate.repo');
+ expect(args).to.not.exists;
});
it("do validation", function () {
var repo = Em.Object.create({
@@ -1292,7 +1246,8 @@ describe('App.MainAdminStackAndUpgradeController', function() {
]
});
controller.validateRepoVersions(repo, false);
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'admin.stack_versions.validate.repo');
+ expect(args[0]).to.exists;
});
});
@@ -1304,6 +1259,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
realUpdateUrl: 'realUpdateUrl'
});
});
+
it("full load is true, stack is null", function() {
expect(controller.getUrl(null, true)).to.equal('realRepoUrl');
});
@@ -1401,13 +1357,11 @@ describe('App.MainAdminStackAndUpgradeController', function() {
describe('#updateFinalize', function () {
beforeEach(function() {
- sinon.stub($, 'ajax', Em.K);
controller.set('isFinalizeItem', true);
this.stub = sinon.stub(App, 'get');
});
afterEach(function () {
- $.ajax.restore();
this.stub.restore();
});
@@ -1416,10 +1370,11 @@ describe('App.MainAdminStackAndUpgradeController', function() {
beforeEach(function () {
this.stub.withArgs('upgradeState').returns('HOLDING');
controller.updateFinalize();
+ this.args = testHelpers.findAjaxRequest('name', 'admin.upgrade.finalizeContext');
});
it('request is sent', function () {
- expect($.ajax.calledOnce).to.be.true;
+ expect(this.args[0]).to.exists;
});
});
@@ -1429,10 +1384,11 @@ describe('App.MainAdminStackAndUpgradeController', function() {
beforeEach(function () {
this.stub.withArgs('upgradeState').returns('HOLDING_TIMEDOUT');
controller.updateFinalize();
+ this.args = testHelpers.findAjaxRequest('name', 'admin.upgrade.finalizeContext');
});
it('request is not sent', function () {
- expect($.ajax.called).to.be.false;
+ expect(this.args).to.not.exists;
});
it('isFinalizeItem is false', function () {
@@ -2052,12 +2008,12 @@ describe('App.MainAdminStackAndUpgradeController', function() {
action: 'a'
});
});
+ App.ajax.send.restore();
sinon.stub(App.ajax, 'send').returns({});
});
afterEach(function () {
appGetMock.restore();
- App.ajax.send.restore();
});
cases.forEach(function (item) {
@@ -2069,6 +2025,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
controller.runPreUpgradeCheckOnly({
type: item.type
});
+ this.ajaxCalls = testHelpers.filterAjaxRequests('name', 'admin.upgrade.pre_upgrade_check');
});
it('ROLLING properties', function () {
@@ -2080,7 +2037,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
});
it(item.ajaxCallCount + ' requests sent', function () {
- expect(App.ajax.send.callCount).to.equal(item.ajaxCallCount);
+ expect(this.ajaxCalls.length).to.be.equal(item.ajaxCallCount);
});
it('runningCheckRequests length is ' + item.runningCheckRequestsLength, function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/alert_definitions_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/alert_definitions_controller_test.js b/ambari-web/test/controllers/main/alert_definitions_controller_test.js
index 45bbd50..a1f2b9a 100644
--- a/ambari-web/test/controllers/main/alert_definitions_controller_test.js
+++ b/ambari-web/test/controllers/main/alert_definitions_controller_test.js
@@ -20,6 +20,7 @@ var App = require('app');
require('controllers/main/alert_definitions_controller');
require('models/alerts/alert_definition');
+var testHelpers = require('test/helpers');
var controller;
describe('App.MainAlertDefinitionsController', function() {
@@ -33,7 +34,6 @@ describe('App.MainAlertDefinitionsController', function() {
describe('#toggleDefinitionState', function() {
beforeEach(function() {
- sinon.stub(App.ajax, 'send', Em.K);
controller.reopen({
content: [
App.AlertDefinition.createRecord({id: 1, enabled: true})
@@ -41,14 +41,11 @@ describe('App.MainAlertDefinitionsController', function() {
});
});
- afterEach(function() {
- App.ajax.send.restore();
- });
-
it('should do ajax-request', function() {
var alertDefinition = controller.get('content')[0];
controller.toggleDefinitionState(alertDefinition);
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'alerts.update_alert_definition');
+ expect(args).to.exists;
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/alerts/add_alert_definition/add_alert_definition_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/alerts/add_alert_definition/add_alert_definition_controller_test.js b/ambari-web/test/controllers/main/alerts/add_alert_definition/add_alert_definition_controller_test.js
index 05ab913..bcde3c7 100644
--- a/ambari-web/test/controllers/main/alerts/add_alert_definition/add_alert_definition_controller_test.js
+++ b/ambari-web/test/controllers/main/alerts/add_alert_definition/add_alert_definition_controller_test.js
@@ -18,7 +18,7 @@
var App = require('app');
require('controllers/main/alerts/add_alert_definition/add_alert_definition_controller');
-
+var testHelpers = require('test/helpers');
var controller;
describe('App.AddAlertDefinitionController', function () {
@@ -28,22 +28,12 @@ describe('App.AddAlertDefinitionController', function () {
});
describe("#createNewAlertDefinition()", function () {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
- afterEach(function () {
- App.ajax.send.restore();
- });
-
it("valid request is sent", function () {
controller.createNewAlertDefinition('data');
- expect(App.ajax.send.getCall(0).args[0]).to.eql({
- name: 'alerts.create_alert_definition',
- sender: controller,
- data: {
- data: 'data'
- }
- });
+ var args = testHelpers.findAjaxRequest('name', 'alerts.create_alert_definition');
+ expect(args[0]).to.exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({data: 'data'});
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/alerts/alert_instances_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/alerts/alert_instances_controller_test.js b/ambari-web/test/controllers/main/alerts/alert_instances_controller_test.js
index 051202d..94653c7 100644
--- a/ambari-web/test/controllers/main/alerts/alert_instances_controller_test.js
+++ b/ambari-web/test/controllers/main/alerts/alert_instances_controller_test.js
@@ -17,6 +17,7 @@
*/
var App = require('app');
+var testHelpers = require('test/helpers');
var controller;
@@ -26,22 +27,18 @@ describe('App.MainAlertInstancesController', function () {
controller = App.MainAlertInstancesController.create({});
});
+ afterEach(function () {
+ clearTimeout(controller.get('updateTimer'));
+ });
+
describe('#fetchAlertInstances', function () {
describe('loading instances from correct endpoint', function () {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
-
- afterEach(function () {
- App.ajax.send.restore();
- });
-
it('should load by Host name', function () {
controller.loadAlertInstancesByHost('host');
- var callArgs = App.ajax.send.args[0][0];
+ var callArgs = testHelpers.findAjaxRequest('name', 'alerts.instances.by_host')[0];
expect(callArgs.name).to.equal('alerts.instances.by_host');
expect(callArgs.data.hostName).to.equal('host');
@@ -50,16 +47,16 @@ describe('App.MainAlertInstancesController', function () {
it('should load by AlertDefinition id', function () {
controller.loadAlertInstancesByAlertDefinition('1');
- var callArgs = App.ajax.send.args[0][0];
+ var callArgs = testHelpers.findAjaxRequest('name', 'alerts.instances.by_definition')[0];
expect(callArgs.name).to.equal('alerts.instances.by_definition');
expect(callArgs.data.definitionId).to.equal('1');
});
it('should load all', function () {
-
controller.loadAlertInstances();
- expect(App.ajax.send.args[0][0].name).to.equal('alerts.instances');
+ var callArgs = testHelpers.findAjaxRequest('name', 'alerts.instances')[0];
+ expect(callArgs).to.exists;
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js b/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
index f2f77aa..8cf61f2 100644
--- a/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
+++ b/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
@@ -17,7 +17,7 @@
*/
var App = require('app');
-
+var testHelpers = require('test/helpers');
var controller;
function getController() {
@@ -362,7 +362,6 @@ describe('App.MainAlertDefinitionConfigsController', function () {
describe('#saveConfigs()', function () {
beforeEach(function () {
- sinon.spy(App.ajax, 'send');
controller.set('configs', [
Em.Object.create({isDisabled: true}),
Em.Object.create({isDisabled: true}),
@@ -372,10 +371,6 @@ describe('App.MainAlertDefinitionConfigsController', function () {
controller.saveConfigs();
});
- afterEach(function () {
- App.ajax.send.restore();
- });
-
it('should set isDisabled for each config', function () {
expect(controller.get('configs').someProperty('isDisabled', false)).to.be.false;
});
@@ -383,7 +378,8 @@ describe('App.MainAlertDefinitionConfigsController', function () {
expect(controller.get('canEdit')).to.be.false;
});
it('should sent 1 request', function () {
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'alerts.update_alert_definition');
+ expect(args[0]).to.exists;
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/alerts/definitions_details_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/alerts/definitions_details_controller_test.js b/ambari-web/test/controllers/main/alerts/definitions_details_controller_test.js
index 28e1829..3b024f7 100644
--- a/ambari-web/test/controllers/main/alerts/definitions_details_controller_test.js
+++ b/ambari-web/test/controllers/main/alerts/definitions_details_controller_test.js
@@ -81,27 +81,6 @@ describe('App.MainAlertDefinitionDetailsController', function () {
});
- describe('#toggleDefinitionState()', function () {
- beforeEach(function() {
- sinon.stub(App.ajax, 'send', Em.K);
- controller.reopen({
- content: [
- App.AlertDefinition.createRecord({id: 1, enabled: true})
- ]
- });
- });
-
- afterEach(function() {
- App.ajax.send.restore();
- });
-
- it('should call App.ajax.send function', function () {
- var alertDefinition = controller.get('content')[0];
- controller.toggleDefinitionState(alertDefinition);
- expect(App.ajax.send.calledOnce).to.be.true;
- });
- });
-
describe("#deleteAlertDefinition()", function () {
beforeEach(function () {
sinon.stub(App.get('router'), 'transitionTo', Em.K);
@@ -116,24 +95,12 @@ describe('App.MainAlertDefinitionDetailsController', function () {
});
describe("#loadAlertInstancesHistory()", function () {
-
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
-
- afterEach(function () {
- App.ajax.send.restore();
- });
-
- it("should load alert instances history", function () {
-
+ it("should set lastDayAlertsCount = null", function () {
controller.set('lastDayAlertsCount', 'test');
-
controller.loadAlertInstancesHistory();
-
- expect(App.ajax.send.calledOnce).to.be.true;
expect(controller.get('lastDayAlertsCount')).to.equal(null);
});
+
});
describe("#loadAlertInstancesHistorySuccess()", function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/alerts/manage_alert_notifications_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/alerts/manage_alert_notifications_controller_test.js b/ambari-web/test/controllers/main/alerts/manage_alert_notifications_controller_test.js
index 9352116..84caec6 100644
--- a/ambari-web/test/controllers/main/alerts/manage_alert_notifications_controller_test.js
+++ b/ambari-web/test/controllers/main/alerts/manage_alert_notifications_controller_test.js
@@ -30,11 +30,6 @@ describe('App.ManageAlertNotificationsController', function () {
beforeEach(function () {
controller = getController();
- sinon.stub($, 'ajax', Em.K);
- });
-
- afterEach(function () {
- $.ajax.restore();
});
describe('#alertNotifications', function () {
@@ -795,8 +790,8 @@ describe('App.ManageAlertNotificationsController', function () {
it("should send ajax request", function () {
controller.createAlertNotification();
- expect($.ajax.calledOnce).to.be.true;
- expect($.ajax.args[0][0].url.contains('overwrite_existing=true')).to.be.false;
+ var args = helpers.findAjaxRequest('name', 'alerts.create_alert_notification');
+ expect(args[0]).to.exists;
});
});
@@ -831,7 +826,8 @@ describe('App.ManageAlertNotificationsController', function () {
it("should send ajax request", function () {
controller.updateAlertNotification();
- expect($.ajax.calledOnce).to.be.true;
+ var args = helpers.findAjaxRequest('name', 'alerts.update_alert_notification');
+ expect(args[0]).to.exists;
});
});
@@ -877,7 +873,8 @@ describe('App.ManageAlertNotificationsController', function () {
expect(App.showConfirmationPopup.calledOnce).to.be.true;
popup.onPrimary();
- expect($.ajax.calledOnce).to.be.true;
+ var args = helpers.findAjaxRequest('name', 'alerts.delete_alert_notification');
+ expect(args[0]).to.exists;
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/charts/heatmap_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/charts/heatmap_test.js b/ambari-web/test/controllers/main/charts/heatmap_test.js
index c3e70e8..a8ece22 100644
--- a/ambari-web/test/controllers/main/charts/heatmap_test.js
+++ b/ambari-web/test/controllers/main/charts/heatmap_test.js
@@ -21,6 +21,7 @@ var App = require('app');
var controller;
require('models/rack');
require('controllers/main/charts/heatmap');
+var testHelpers = require('test/helpers');
function getController() {
return App.MainChartsHeatmapController.create();
@@ -65,13 +66,6 @@ describe('MainChartsHeatmapController', function () {
describe('#showHeatMapMetric()', function () {
beforeEach(function () {
- sinon.stub(App.ajax, 'send', function () {
- return {
- done: function (callback) {
- callback();
- }
- }
- });
controller.setProperties({
activeWidgetLayout: Em.Object.create({
displayName: 'widget',
@@ -83,13 +77,10 @@ describe('MainChartsHeatmapController', function () {
});
});
- afterEach(function () {
- App.ajax.send.restore();
- });
-
it('should call App.ajax', function () {
controller.showHeatMapMetric({context:{id: 2}});
- expect(App.ajax.send.called).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'widget.layout.edit');
+ expect(args).to.exists;
});
});
@@ -248,55 +239,35 @@ describe('MainChartsHeatmapController', function () {
describe("#getAllHeatMaps()", function() {
- beforeEach(function() {
- sinon.stub(App.ajax, 'send');
- });
-
- afterEach(function() {
- App.ajax.send.restore();
- });
-
it("should call App.ajax.send", function() {
controller.reopen({
loadHeatmapsUrlParams: 'url',
sectionName: 's1'
});
controller.getAllHeatMaps();
- expect(App.ajax.send.calledWith({
- name: 'widgets.get',
- sender: controller,
- data: {
- urlParams: 'url',
- sectionName: 's1'
- }
- })).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'widgets.get');
+ expect(args[0]).to.exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ urlParams: 'url',
+ sectionName: 's1'
+ });
});
});
describe("#loadRacks()", function() {
- beforeEach(function() {
- sinon.stub(App.ajax, 'send');
- });
-
- afterEach(function() {
- App.ajax.send.restore();
- });
-
it("should call App.ajax.send", function() {
controller.reopen({
loadRacksUrlParams: 'url'
});
controller.loadRacks();
- expect(App.ajax.send.calledWith({
- name: 'hosts.heatmaps',
- sender: controller,
- data: {
- urlParams: 'url'
- },
- success: 'loadRacksSuccessCallback'
- })).to.be.true;
-
+ var args = testHelpers.findAjaxRequest('name', 'hosts.heatmaps');
+ expect(args[0]).to.exists;
+ expect(args[0].sender).to.be.eql(controller);
+ expect(args[0].data).to.be.eql({
+ urlParams: 'url'
+ });
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/dashboard/config_history_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/dashboard/config_history_controller_test.js b/ambari-web/test/controllers/main/dashboard/config_history_controller_test.js
index 7467bca..db3d10f 100644
--- a/ambari-web/test/controllers/main/dashboard/config_history_controller_test.js
+++ b/ambari-web/test/controllers/main/dashboard/config_history_controller_test.js
@@ -18,12 +18,21 @@
var App = require('app');
-
+var testHelpers = require('test/helpers');
require('controllers/main/dashboard/config_history_controller');
describe('MainConfigHistoryController', function () {
- var controller = App.MainConfigHistoryController.create();
+ var controller;
+
+ beforeEach(function () {
+ controller = App.MainConfigHistoryController.create();
+ });
+
+ afterEach(function () {
+ clearTimeout(controller.get('timeoutRef'));
+ controller.destroy();
+ });
describe('#realUrl', function () {
it('cluster name is empty', function () {
@@ -85,16 +94,12 @@ describe('MainConfigHistoryController', function () {
describe('#updateTotalCounter()', function () {
beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
controller.updateTotalCounter();
});
- afterEach(function () {
- App.ajax.send.restore();
- });
-
it('ajax-request is sent', function () {
- expect(App.ajax.send.calledOnce).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'service.serviceConfigVersions.get.total');
+ expect(args).to.exists;
});
});
@@ -113,14 +118,9 @@ describe('MainConfigHistoryController', function () {
}
}
});
- sinon.stub(App, 'get', function(k) {
- if ('testMode' === k) return false;
- return Em.get(App, k);
- });
});
afterEach(function () {
App.router.get.restore();
- App.get.restore();
});
it('query params is empty', function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ddf479ef/ambari-web/test/controllers/main/host/add_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/host/add_controller_test.js b/ambari-web/test/controllers/main/host/add_controller_test.js
index 6dcb2c9..ed8e78b 100644
--- a/ambari-web/test/controllers/main/host/add_controller_test.js
+++ b/ambari-web/test/controllers/main/host/add_controller_test.js
@@ -23,6 +23,7 @@ require('controllers/main/host/add_controller');
require('models/host_component');
require('models/service');
require('mappers/server_data_mapper');
+var testHelpers = require('test/helpers');
describe('App.AddHostController', function () {
@@ -302,30 +303,26 @@ describe('App.AddHostController', function () {
describe('#installServices()', function () {
- beforeEach(function () {
- sinon.spy(App.ajax, "send");
- });
- afterEach(function () {
- App.ajax.send.restore();
- });
-
it('No hosts', function () {
controller.set('content.cluster', {name: 'cl'});
controller.set('testDBHosts', {});
expect(controller.installServices()).to.be.false;
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'common.host_components.update');
+ expect(args).to.not.exists;
});
it('Cluster name is empty', function () {
controller.set('content.cluster', {name: ''});
controller.set('testDBHosts', {'host1': {}});
expect(controller.installServices()).to.be.false;
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'common.host_components.update');
+ expect(args).to.not.exists;
});
it('Cluster name is correct and hosts are present', function () {
controller.set('content.cluster', {name: 'cl'});
controller.set('testDBHosts', {'host1': {isInstalled: false}});
expect(controller.installServices()).to.be.true;
- expect(App.ajax.send.called).to.be.true;
+ var args = testHelpers.findAjaxRequest('name', 'common.host_components.update');
+ expect(args).to.exists;
});
});
@@ -412,7 +409,7 @@ describe('App.AddHostController', function () {
});
});
- describe("#loadServices", function () {
+ /*describe("#loadServices", function () {
var services = {
db: null,
stack: [],
@@ -590,7 +587,7 @@ describe('App.AddHostController', function () {
});
});
-
+*/
describe("#loadSlaveComponentHosts()", function () {
var mock = {
@@ -746,16 +743,12 @@ describe('App.AddHostController', function () {
});
describe("#applyConfigGroup()", function () {
- beforeEach(function () {
- sinon.stub(App.ajax, 'send', Em.K);
- });
- afterEach(function () {
- App.ajax.send.restore();
- });
+
it("No config groups", function () {
controller.set('content.configGroups', []);
controller.applyConfigGroup();
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'config_groups.update_config_group');
+ expect(args).to.not.exists;
});
it("selectedConfigGroup absent", function () {
controller.set('content.configGroups', [
@@ -765,7 +758,8 @@ describe('App.AddHostController', function () {
}
]);
controller.applyConfigGroup();
- expect(App.ajax.send.called).to.be.false;
+ var args = testHelpers.findAjaxRequest('name', 'config_groups.update_config_group');
+ expect(args).to.not.exists;
});
it("selectedConfigGroup present", function () {
controller.set('content.configGroups', [
@@ -784,9 +778,9 @@ describe('App.AddHostController', function () {
}
]);
controller.applyConfigGroup();
-
- expect(App.ajax.send.getCall(0).args[0].name).to.equal('config_groups.update_config_group');
- expect(App.ajax.send.getCall(0).args[0].data).to.eql({
+ var args = testHelpers.findAjaxRequest('name', 'config_groups.update_config_group');
+ expect(args[0]).to.exists;
+ expect(args[0].data).to.be.eql({
"id": 1,
"configGroup": {
"ConfigGroup": {
@@ -1362,7 +1356,6 @@ describe('App.AddHostController', function () {
beforeEach(function () {
sinon.stub(controller, 'clearAllSteps', Em.K);
sinon.stub(controller, 'clearStorageData', Em.K);
- sinon.stub(App.updater, 'immediateRun', Em.K);
sinon.stub(App.router, 'get').returns(mock);
sinon.spy(mock, 'updateAll');
sinon.spy(mock, 'getAllHostNames');
@@ -1371,7 +1364,6 @@ describe('App.AddHostController', function () {
afterEach(function () {
controller.clearAllSteps.restore();
controller.clearStorageData.restore();
- App.updater.immediateRun.restore();
App.router.get.restore();
mock.updateAll.restore();
mock.getAllHostNames.restore();
[09/22] ambari git commit: AMBARI-14742. Custom time range has broken
situations (alexantonenko)
Posted by nc...@apache.org.
AMBARI-14742. Custom time range has broken situations (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/6225849e
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6225849e
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6225849e
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 6225849e6910413a5c5810c18c22225a7ca862ed
Parents: 2c80cab
Author: Alex Antonenko <hi...@gmail.com>
Authored: Wed Jan 20 18:16:18 2016 +0200
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Wed Jan 20 22:20:48 2016 +0200
----------------------------------------------------------------------
.../mixins/common/widgets/time_range_mixin.js | 32 ++++++-------
.../app/views/common/chart/linear_time.js | 18 ++++---
.../app/views/common/custom_date_popup.js | 7 +--
.../app/views/common/select_custom_date_view.js | 4 +-
.../common/widgets/time_range_mixin_test.js | 10 ++--
.../common/select_custom_date_view_test.js | 49 ++++++++++++++++++++
6 files changed, 86 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/6225849e/ambari-web/app/mixins/common/widgets/time_range_mixin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/widgets/time_range_mixin.js b/ambari-web/app/mixins/common/widgets/time_range_mixin.js
index c88df56..e2a9c9b 100644
--- a/ambari-web/app/mixins/common/widgets/time_range_mixin.js
+++ b/ambari-web/app/mixins/common/widgets/time_range_mixin.js
@@ -87,35 +87,33 @@ App.TimeRangeMixin = Em.Mixin.create({
* onclick handler for a time range option
* @param {object} event
* @param {function} callback
+ * @param {object} context
*/
- setTimeRange: function (event, callback) {
- var prevIndex = this.get('currentTimeRangeIndex'),
- prevCustomTimeRange = {
- start: this.get('customStartTime'),
- end: this.get('customEndTime'),
- duration: this.get('customDurationFormatted')
- },
+ setTimeRange: function (event, callback, context) {
+ var prevCustomTimeRange = this.getProperties(['currentTimeRangeIndex', 'customStartTime', 'customEndTime', 'customDurationFormatted']),
index = event.context.index,
primary = function () {
+ var timeRange = {
+ customEndTime: timeRangePopup.endTime,
+ customStartTime: timeRangePopup.startTime,
+ customDurationFormatted: timeRangePopup.customDuration
+ };
if (callback) {
callback();
}
+ this.setProperties(timeRange);
+ if (context) {
+ context.setProperties(timeRange);
+ }
},
- secondary = function () {
- this.setProperties({
- currentTimeRangeIndex: prevIndex,
- customStartTime: prevCustomTimeRange.start,
- customEndTime: prevCustomTimeRange.end,
- customDurationFormatted: prevCustomTimeRange.duration
- });
- };
+ secondary = this.setProperties.bind(this, prevCustomTimeRange);
if (index === 8) {
// Custom start and end time is specified by user
var defaultStartTime,
defaultEndTime,
duration;
- if (prevIndex === 8) {
+ if (prevCustomTimeRange.currentTimeRangeIndex === 8) {
// Custom time range is active
defaultStartTime = new Date(this.get('customStartTime')).getTime();
defaultEndTime = new Date(this.get('customEndTime')).getTime();
@@ -129,7 +127,7 @@ App.TimeRangeMixin = Em.Mixin.create({
defaultEndTime.setMinutes(minutes);
defaultStartTime = defaultEndTime.getTime() - duration;
}
- timeRangePopup.showCustomDatePopup(this, primary.bind(this), secondary.bind(this), {
+ timeRangePopup.showCustomDatePopup(primary.bind(this), secondary.bind(this), {
startDate: App.formatDateTimeWithTimeZone(defaultStartTime, 'MM/DD/YYYY'),
hoursForStart: App.formatDateTimeWithTimeZone(defaultStartTime, 'hh'),
minutesForStart: App.formatDateTimeWithTimeZone(defaultStartTime, 'mm'),
http://git-wip-us.apache.org/repos/asf/ambari/blob/6225849e/ambari-web/app/views/common/chart/linear_time.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/chart/linear_time.js b/ambari-web/app/views/common/chart/linear_time.js
index 3bdcc80..7933643 100644
--- a/ambari-web/app/views/common/chart/linear_time.js
+++ b/ambari-web/app/views/common/chart/linear_time.js
@@ -930,9 +930,9 @@ App.ChartLinearTimeView = Ember.View.extend(App.ExportMetricsMixin, {
isReady: Em.computed.alias('parentView.graph.isPopupReady'),
currentTimeRangeIndex: self.get('currentTimeIndex'),
- customStartTime: self.get('customStartTime'),
- customEndTime: self.get('customEndTime'),
- customDurationFormatted: self.get('customDurationFormatted'),
+ customStartTime: self.get('currentTimeIndex') === 8 ? self.get('customStartTime') : null,
+ customEndTime: self.get('currentTimeIndex') === 8 ? self.get('customEndTime') : null,
+ customDurationFormatted: self.get('currentTimeIndex') === 8 ? self.get('customDurationFormatted') : null,
didInsertElement: function () {
var popupBody = this;
@@ -995,7 +995,7 @@ App.ChartLinearTimeView = Ember.View.extend(App.ExportMetricsMixin, {
setTimeRange: function (event) {
var index = event.context.index,
callback = this.get('parentView').reloadGraphByTime.bind(this.get('parentView'), index);
- this._super(event, callback);
+ this._super(event, callback, self);
// Preset time range is specified by user
if (index !== 8) {
@@ -1012,8 +1012,12 @@ App.ChartLinearTimeView = Ember.View.extend(App.ExportMetricsMixin, {
secondary: null,
onPrimary: function () {
+ var targetView = Em.isNone(self.get('parentView.currentTimeRangeIndex')) ? self.get('parentView.parentView') : self.get('parentView');
self.setProperties({
- currentTimeIndex: !Em.isNone(self.get('parentView.currentTimeRangeIndex')) ? self.get('parentView.currentTimeRangeIndex') : self.get('parentView.parentView.currentTimeRangeIndex'),
+ currentTimeIndex: targetView.get('currentTimeRangeIndex'),
+ customStartTime: targetView.get('customStartTime'),
+ customEndTime: targetView.get('customEndTime'),
+ customDurationFormatted: targetView.get('customDurationFormatted'),
isPopup: false
});
this._super();
@@ -1068,7 +1072,7 @@ App.ChartLinearTimeView = Ember.View.extend(App.ExportMetricsMixin, {
Em.run.once(this, function () {
this.loadData();
});
- }.observes('timeUnitSeconds', 'customStartTime', 'customStartTime'),
+ }.observes('timeUnitSeconds', 'customStartTime', 'customEndTime'),
timeStates: [
{name: Em.I18n.t('graphs.timeRange.hour'), seconds: 3600},
@@ -1111,7 +1115,7 @@ App.ChartLinearTimeView = Ember.View.extend(App.ExportMetricsMixin, {
// Custom start and end time is specified by user
this.propertyDidChange('timeUnitSeconds');
}
- }.observes('currentTimeIndex')
+ }.observes('currentTimeIndex', 'parentView.childViews.lastObject.customStartTime', 'parentView.childViews.lastObject.customEndTime')
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/6225849e/ambari-web/app/views/common/custom_date_popup.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/custom_date_popup.js b/ambari-web/app/views/common/custom_date_popup.js
index c5a2837..03adc30 100644
--- a/ambari-web/app/views/common/custom_date_popup.js
+++ b/ambari-web/app/views/common/custom_date_popup.js
@@ -26,7 +26,7 @@ module.exports = Em.Object.create({
customDuration: null,
- showCustomDatePopup: function (context, primary, secondary, defaults) {
+ showCustomDatePopup: function (primary, secondary, defaults) {
var self = this;
defaults = defaults || {
startDate: null,
@@ -43,11 +43,6 @@ module.exports = Em.Object.create({
return App.ModalPopup.show({
header: Em.I18n.t('jobs.table.custom.date.header'),
onPrimary: function () {
- context.setProperties({
- customEndTime: self.endTime,
- customStartTime: self.startTime,
- customDurationFormatted: self.customDuration
- });
if (primary) {
primary();
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/6225849e/ambari-web/app/views/common/select_custom_date_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/select_custom_date_view.js b/ambari-web/app/views/common/select_custom_date_view.js
index fb553c7..753a904 100644
--- a/ambari-web/app/views/common/select_custom_date_view.js
+++ b/ambari-web/app/views/common/select_custom_date_view.js
@@ -110,6 +110,9 @@ App.JobsCustomDatesSelectView = Em.View.extend({
initialOption = this.get('content').find(function (item) {
return duration === item.value || duration === item.label;
}, this);
+ if (!initialOption) {
+ initialOption = this.get('content').findProperty('value', 0);
+ }
this.set('selection', initialOption);
}
}),
@@ -117,7 +120,6 @@ App.JobsCustomDatesSelectView = Em.View.extend({
isCustomEndDate: Em.computed.equal('customDateFormFields.duration.value', 0),
didInsertElement: function () {
- this.validate();
$('.datepicker').datepicker({
format: 'mm/dd/yyyy'
}).on('changeDate', function() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/6225849e/ambari-web/test/mixins/common/widgets/time_range_mixin_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/common/widgets/time_range_mixin_test.js b/ambari-web/test/mixins/common/widgets/time_range_mixin_test.js
index f57808d..39ce6f1 100644
--- a/ambari-web/test/mixins/common/widgets/time_range_mixin_test.js
+++ b/ambari-web/test/mixins/common/widgets/time_range_mixin_test.js
@@ -65,6 +65,7 @@ describe('App.TimeRangeMixin', function () {
index: 1,
customStartTime: null,
customEndTime: null,
+ customDurationFormatted: null,
title: 'time range is preset',
testTitle: 'should reset time range boundaries'
},
@@ -72,6 +73,7 @@ describe('App.TimeRangeMixin', function () {
index: 8,
customStartTime: 1,
customEndTime: 1,
+ customDurationFormatted: '1 hour',
title: 'time range is custom',
testTitle: 'should not reset time range boundaries'
}
@@ -116,7 +118,8 @@ describe('App.TimeRangeMixin', function () {
beforeEach(function () {
obj.setProperties({
customStartTime: 1,
- customEndTime: 1
+ customEndTime: 1,
+ customDurationFormatted: '1 hour'
});
obj.setTimeRange({
context: {
@@ -126,9 +129,10 @@ describe('App.TimeRangeMixin', function () {
});
it(item.testTitle, function () {
- expect(obj.getProperties(['customStartTime', 'customEndTime'])).to.eql({
+ expect(obj.getProperties(['customStartTime', 'customEndTime', 'customDurationFormatted'])).to.eql({
customStartTime: item.customStartTime,
- customEndTime: item.customEndTime
+ customEndTime: item.customEndTime,
+ customDurationFormatted: item.customDurationFormatted
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/6225849e/ambari-web/test/views/common/select_custom_date_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/select_custom_date_view_test.js b/ambari-web/test/views/common/select_custom_date_view_test.js
index e7520cb..9d492e9 100644
--- a/ambari-web/test/views/common/select_custom_date_view_test.js
+++ b/ambari-web/test/views/common/select_custom_date_view_test.js
@@ -257,4 +257,53 @@ describe('App.JobsCustomDatesSelectView', function () {
});
+ describe('#durationSelect', function () {
+
+ var select;
+
+ beforeEach(function () {
+ select = view.get('durationSelect').create();
+ });
+
+ describe('#willInsertElement', function () {
+
+ var cases = [
+ {
+ duration: 1800000,
+ selection: {
+ value: 1800000,
+ label: Em.I18n.t('jobs.customDateFilter.duration.30min')
+ },
+ title: 'should detect preset option by value'
+ },
+ {
+ duration: Em.I18n.t('jobs.customDateFilter.duration.2hr'),
+ selection: {
+ value: 7200000,
+ label: Em.I18n.t('jobs.customDateFilter.duration.2hr')
+ },
+ title: 'should detect preset option by label'
+ },
+ {
+ duration: '40 minutes',
+ selection: {
+ value: 0,
+ label: Em.I18n.t('common.custom')
+ },
+ title: 'should set "Custom" option if preset one can\'t be detected'
+ }
+ ];
+
+ cases.forEach(function (item) {
+ it(item.title, function () {
+ select.set('selection', item.duration);
+ select.willInsertElement();
+ expect(select.get('selection')).to.eql(item.selection);
+ });
+ });
+
+ });
+
+ });
+
});
[14/22] ambari git commit: AMBARI-14741. Ambari Web Unit Test failure
on trunk (App.WizardStep8Controller) (onechiporenko)
Posted by nc...@apache.org.
AMBARI-14741. Ambari Web Unit Test failure on trunk (App.WizardStep8Controller) (onechiporenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c9bb7319
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c9bb7319
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c9bb7319
Branch: refs/heads/branch-dev-patch-upgrade
Commit: c9bb7319e75b3c50031296dfd29bcd7a10f3fa87
Parents: a8887eb
Author: Oleg Nechiporenko <on...@apache.org>
Authored: Thu Jan 21 14:23:15 2016 +0200
Committer: Oleg Nechiporenko <on...@apache.org>
Committed: Thu Jan 21 14:26:33 2016 +0200
----------------------------------------------------------------------
ambari-web/app/utils/ajax/ajax_queue.js | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/c9bb7319/ambari-web/app/utils/ajax/ajax_queue.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax_queue.js b/ambari-web/app/utils/ajax/ajax_queue.js
index 1c2106f..8a95d97 100644
--- a/ambari-web/app/utils/ajax/ajax_queue.js
+++ b/ambari-web/app/utils/ajax/ajax_queue.js
@@ -143,7 +143,6 @@ App.ajaxQueue = Em.Object.extend({
* @method runNextRequest
*/
runNextRequest: function() {
- var self = this;
var queue = this.get('queue');
if (queue.length === 0) {
this.finishedCallback();
@@ -152,7 +151,7 @@ App.ajaxQueue = Em.Object.extend({
var r = App.ajax.send(queue.shift());
this.propertyDidChange('queue');
if (r) {
- r.complete(this._complete);
+ r.complete(this._complete.bind(this));
}
else {
if (this.get('abortOnError')) {
[15/22] ambari git commit: AMBARI-14694 Unnecessary multiple TreeMap
creation (dsen)
Posted by nc...@apache.org.
AMBARI-14694 Unnecessary multiple TreeMap creation (dsen)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b0aeefc8
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b0aeefc8
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b0aeefc8
Branch: refs/heads/branch-dev-patch-upgrade
Commit: b0aeefc87daa7ed8040032a2998764f27bbdaa8d
Parents: c9bb731
Author: Dmytro Sen <ds...@apache.org>
Authored: Thu Jan 21 15:28:25 2016 +0200
Committer: Dmytro Sen <ds...@apache.org>
Committed: Thu Jan 21 15:28:25 2016 +0200
----------------------------------------------------------------------
.../metrics/timeline/PhoenixHBaseAccessor.java | 2 +-
.../metrics/timeline/aggregators/TimelineMetricReadHelper.java | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/b0aeefc8/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java
index c5d7b0c..8325fb1 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java
+++ b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java
@@ -207,7 +207,7 @@ public class PhoenixHBaseAccessor {
@SuppressWarnings("unchecked")
public static TreeMap<Long, Double> readMetricFromJSON(String json) throws IOException {
- return (TreeMap<Long, Double>) mapper.readValue(json, metricValuesTypeRef);
+ return mapper.readValue(json, metricValuesTypeRef);
}
private Connection getConnectionRetryingOnException()
http://git-wip-us.apache.org/repos/asf/ambari/blob/b0aeefc8/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/aggregators/TimelineMetricReadHelper.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/aggregators/TimelineMetricReadHelper.java b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/aggregators/TimelineMetricReadHelper.java
index dc27614..c5e60fe 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/aggregators/TimelineMetricReadHelper.java
+++ b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/aggregators/TimelineMetricReadHelper.java
@@ -40,8 +40,8 @@ public class TimelineMetricReadHelper {
public TimelineMetric getTimelineMetricFromResultSet(ResultSet rs)
throws SQLException, IOException {
TimelineMetric metric = getTimelineMetricCommonsFromResultSet(rs);
- TreeMap<Long, Double> sortedByTimeMetrics = new TreeMap<Long, Double>(
- PhoenixHBaseAccessor.readMetricFromJSON(rs.getString("METRICS")));
+ TreeMap<Long, Double> sortedByTimeMetrics =
+ PhoenixHBaseAccessor.readMetricFromJSON(rs.getString("METRICS"));
metric.setMetricValues(sortedByTimeMetrics);
return metric;
}
[21/22] ambari git commit: AMBARI-14734. RU/EU,
add PreCheck to prevent starting upgrade if a previous upgrade
skipped the step Save DB State (alejandro)
Posted by nc...@apache.org.
AMBARI-14734. RU/EU, add PreCheck to prevent starting upgrade if a previous upgrade skipped the step Save DB State (alejandro)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/77ea2eba
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/77ea2eba
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/77ea2eba
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 77ea2eba044f7ca9761e6e77799751d1b3a9f263
Parents: 780cb69
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Tue Jan 19 18:04:27 2016 -0800
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Thu Jan 21 11:14:54 2016 -0800
----------------------------------------------------------------------
.../server/checks/AbstractCheckDescriptor.java | 4 +
.../ambari/server/checks/CheckDescription.java | 7 +
.../HiveDynamicServiceDiscoveryCheck.java | 2 +-
.../checks/HiveMultipleMetastoreCheck.java | 2 +-
.../server/checks/HostMaintenanceModeCheck.java | 2 +-
.../checks/HostsMasterMaintenanceCheck.java | 2 +-
.../server/checks/InstallPackagesCheck.java | 2 +-
...apReduce2JobHistoryStatePreservingCheck.java | 2 +-
.../server/checks/PreviousUpgradeCompleted.java | 144 +++++++++++++++++++
.../server/checks/RangerPasswordCheck.java | 2 +-
.../checks/SecondaryNamenodeDeletedCheck.java | 2 +-
.../checks/ServicesMaintenanceModeCheck.java | 2 +-
.../ServicesMapReduceDistributedCacheCheck.java | 2 +-
.../ServicesNamenodeHighAvailabilityCheck.java | 2 +-
.../checks/ServicesNamenodeTruncateCheck.java | 2 +-
.../ServicesTezDistributedCacheCheck.java | 2 +-
.../checks/ServicesYarnWorkPreservingCheck.java | 2 +-
.../server/checks/StormRestAPIDeletedCheck.java | 2 +-
.../checks/YarnRMHighAvailabilityCheck.java | 2 +-
.../YarnTimelineServerStatePreservingCheck.java | 2 +-
.../server/orm/dao/HostRoleCommandDAO.java | 9 ++
.../server/checks/UpgradeCheckOrderTest.java | 26 ++--
.../ambari/server/state/CheckHelperTest.java | 2 +
23 files changed, 192 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
index 80f1c1c..8a81aa9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
@@ -29,6 +29,7 @@ import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.dao.UpgradeDAO;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
@@ -67,6 +68,9 @@ public abstract class AbstractCheckDescriptor {
Provider<RepositoryVersionDAO> repositoryVersionDaoProvider;
@Inject
+ Provider<UpgradeDAO> upgradeDaoProvider;
+
+ @Inject
Provider<RepositoryVersionHelper> repositoryVersionHelper;
@Inject
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
index d20203c..a8c0525 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
@@ -152,6 +152,13 @@ public enum CheckDescription {
"The following Services must be reinstalled: {{fails}}. Try to reinstall the service components in INSTALL_FAILED state.");
}}),
+ PREVIOUS_UPGRADE_COMPLETED(PrereqCheckType.CLUSTER,
+ "A previous upgrade did not complete.",
+ new HashMap<String, String>() {{
+ put(AbstractCheckDescriptor.DEFAULT,
+ "The last upgrade attempt did not complete. {{fails}}");
+ }}),
+
INSTALL_PACKAGES_CHECK(PrereqCheckType.CLUSTER,
"Install packages must be re-run",
new HashMap<String, String>() {{
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
index 9ecabc7..77a85b9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
@@ -39,7 +39,7 @@ import com.google.inject.Singleton;
* is properly configured for dynamic discovery.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 1.0f, required = true)
+@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 20.0f, required = true)
public class HiveDynamicServiceDiscoveryCheck extends AbstractCheckDescriptor {
static final String HIVE_DYNAMIC_SERVICE_DISCOVERY_ENABLED_KEY = "hive.dynamic-service.discovery.enabled.key";
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
index 14b8435..ea20a55 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
@@ -37,7 +37,7 @@ import com.google.inject.Singleton;
* Metastore instances in the cluster.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.MULTIPLE_COMPONENT_WARNING, order = 1.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.MULTIPLE_COMPONENT_WARNING, order = 20.1f)
public class HiveMultipleMetastoreCheck extends AbstractCheckDescriptor {
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java
index 8708ef4..5e7bdef 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostMaintenanceModeCheck.java
@@ -39,7 +39,7 @@ import com.google.inject.Singleton;
* @see HostsHeartbeatCheck
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 3.0f, required = true)
+@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 7.0f, required = true)
public class HostMaintenanceModeCheck extends AbstractCheckDescriptor {
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
index cdb7c61..eaedd3f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
@@ -40,7 +40,7 @@ import com.google.inject.Singleton;
* Checks that all hosts in maintenance state do not have master components.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 1.0f, required = true)
+@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 5.0f, required = true)
public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor {
static final String KEY_NO_UPGRADE_NAME = "no_upgrade_name";
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java
index 1099418..52546d2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/InstallPackagesCheck.java
@@ -42,7 +42,7 @@ import com.google.inject.Singleton;
* Checks if Install Packages needs to be re-run
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 2.0f, required = true)
+@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 3.0f, required = true)
public class InstallPackagesCheck extends AbstractCheckDescriptor {
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
index 626438f..06ca162 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
@@ -38,7 +38,7 @@ import java.util.Map;
* is used to check that the MR2 History server has state preserving mode enabled.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.CONFIGURATION_WARNING, order = 1.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.CONFIGURATION_WARNING, order = 17.0f)
public class MapReduce2JobHistoryStatePreservingCheck extends AbstractCheckDescriptor {
final static String MAPREDUCE2_JOBHISTORY_RECOVERY_ENABLE_KEY =
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java
new file mode 100644
index 0000000..dfe17e6
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/PreviousUpgradeCompleted.java
@@ -0,0 +1,144 @@
+/*
+ * 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.
+ */
+package org.apache.ambari.server.checks;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.actionmanager.HostRoleStatus;
+import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
+import org.apache.ambari.server.orm.dao.RequestDAO;
+import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
+import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
+import org.apache.ambari.server.orm.entities.HostVersionEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.RequestEntity;
+import org.apache.ambari.server.orm.entities.UpgradeEntity;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Host;
+import org.apache.ambari.server.state.MaintenanceState;
+import org.apache.ambari.server.state.RepositoryVersionState;
+import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.stack.PrereqCheckStatus;
+import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.upgrade.Direction;
+import org.apache.commons.lang.StringUtils;
+
+import javax.inject.Provider;
+import java.text.MessageFormat;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Checks if Install Packages needs to be re-run
+ */
+@Singleton
+@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 4.0f, required = true)
+public class PreviousUpgradeCompleted extends AbstractCheckDescriptor {
+
+ /**
+ * If this ever changes, we will need to keep the historic name.
+ */
+ public static final String FINALIZE_ACTION_CLASS_NAME = "org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction";
+ public static final String SET_CURRENT_COMMAND = "ambari-server set-current --cluster-name=$CLUSTERNAME --version-display-name=$VERSION_NAME";
+
+ @Inject
+ Provider<RequestDAO> requestDaoProvider;
+
+ @Inject
+ Provider<HostRoleCommandDAO> hostRoleCommandDaoProvider;
+
+ /**
+ * Constructor.
+ */
+ public PreviousUpgradeCompleted() {
+ super(CheckDescription.PREVIOUS_UPGRADE_COMPLETED);
+ }
+
+ @Override
+ public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
+ final String clusterName = request.getClusterName();
+ final Cluster cluster = clustersProvider.get().getCluster(clusterName);
+
+ String errorMessage = null;
+
+ List<UpgradeEntity> upgrades= upgradeDaoProvider.get().findAll();
+ if (upgrades != null) {
+ Long lastStartTime = 0L;
+ UpgradeEntity mostRecentUpgrade = null;
+ UpgradeEntity correspondingDowngrade = null;
+ for (UpgradeEntity upgrade : upgrades) {
+ // Find the most recent upgrade for this cluster
+ if (upgrade.getClusterId() == cluster.getClusterId() && upgrade.getDirection() == Direction.UPGRADE) {
+ Long requestId = upgrade.getRequestId();
+ RequestEntity upgradeRequest = requestDaoProvider.get().findByPK(requestId);
+ if (upgradeRequest != null && upgradeRequest.getStartTime() > lastStartTime) {
+ mostRecentUpgrade = upgrade;
+ lastStartTime = upgradeRequest.getStartTime();
+ }
+ }
+ }
+
+ // Check for the corresponding downgrade.
+ if (mostRecentUpgrade != null) {
+ for (UpgradeEntity downgrade : upgrades) {
+ // Surprisingly, a Downgrade's from and to version are identical.
+ if (downgrade.getClusterId() == cluster.getClusterId() && downgrade.getDirection() == Direction.DOWNGRADE &&
+ downgrade.getFromVersion().equals(mostRecentUpgrade.getToVersion())) {
+ correspondingDowngrade = downgrade;
+ break;
+ }
+ }
+ }
+
+ // If it has no downgrade, then the "Save Cluster State" step should have COMPLETED.
+ if (correspondingDowngrade == null) {
+ // Should have only 1 element.
+ List<HostRoleCommandEntity> finalizeCommandList = hostRoleCommandDaoProvider.get().
+ findSortedCommandsByRequestIdAndCustomCommandName(mostRecentUpgrade.getRequestId(), FINALIZE_ACTION_CLASS_NAME);
+
+ // If the action is not COMPLETED, then something went wrong.
+ if (finalizeCommandList != null) {
+ for (HostRoleCommandEntity command : finalizeCommandList) {
+ if (command.getStatus() != HostRoleStatus.COMPLETED) {
+ errorMessage = MessageFormat.format("Upgrade attempt (id: {0}, request id: {1}, from version: {2}, " +
+ "to version: {3}) did not complete task with id {4} since its state is {5} instead of COMPLETED.",
+ mostRecentUpgrade.getId(), mostRecentUpgrade.getRequestId(), mostRecentUpgrade.getFromVersion(),
+ mostRecentUpgrade.getToVersion(), command.getTaskId(), command.getStatus());
+ errorMessage += " Please ensure that you called:\n" + SET_CURRENT_COMMAND;
+ errorMessage += MessageFormat.format("\nFurther, change the status of host_role_command with " +
+ "id {0} to COMPLETED", mostRecentUpgrade.getId());
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (null != errorMessage) {
+ LinkedHashSet<String> failedOn = new LinkedHashSet<String>();
+ failedOn.add(cluster.getClusterName());
+ prerequisiteCheck.setFailedOn(failedOn);
+ prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
+ prerequisiteCheck.setFailReason(errorMessage);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java
index 72091a4..33f971a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/RangerPasswordCheck.java
@@ -50,7 +50,7 @@ import com.google.inject.Singleton;
* user had changed the password using the Ranger UI.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.CONFIGURATION_WARNING, order = 1.1f, required=true)
+@UpgradeCheck(group = UpgradeCheckGroup.CONFIGURATION_WARNING, order = 23.0f, required=true)
public class RangerPasswordCheck extends AbstractCheckDescriptor {
private static final Logger LOG = LoggerFactory.getLogger(RangerPasswordCheck.class);
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
index d7c27d7..4893098 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
@@ -41,7 +41,7 @@ import com.google.inject.Singleton;
* Checks that the Secondary NameNode is not present on any of the hosts.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.NAMENODE_HA, order = 2.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.NAMENODE_HA, order = 16.0f)
public class SecondaryNamenodeDeletedCheck extends AbstractCheckDescriptor {
@Inject
HostComponentStateDAO hostComponentStateDao;
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
index 8d578d8..18a5bde 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
@@ -33,7 +33,7 @@ import com.google.inject.Singleton;
* Checks that services are in the maintenance mode.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 2.0f, required = true)
+@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 6.0f, required = true)
public class ServicesMaintenanceModeCheck extends AbstractCheckDescriptor {
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
index 8e98c99..3970e9e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
@@ -39,7 +39,7 @@ import com.google.inject.Singleton;
* Checks that MR jobs reference hadoop libraries from the distributed cache.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.NAMENODE_HA, order = 3.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.NAMENODE_HA, order = 17.1f)
public class ServicesMapReduceDistributedCacheCheck extends AbstractCheckDescriptor {
static final String KEY_APP_CLASSPATH = "app_classpath";
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
index 44e183d..b7d2417 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
@@ -35,7 +35,7 @@ import com.google.inject.Singleton;
* Checks that namenode high availability is enabled.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.NAMENODE_HA, order = 1.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.NAMENODE_HA, order = 16.1f)
public class ServicesNamenodeHighAvailabilityCheck extends AbstractCheckDescriptor {
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
index cbb8623..35be754 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
@@ -33,7 +33,7 @@ import java.util.Map;
* Checks that namenode high availability is enabled.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.NAMENODE_HA, order = 1.1f)
+@UpgradeCheck(group = UpgradeCheckGroup.NAMENODE_HA, order = 16.2f)
public class ServicesNamenodeTruncateCheck extends AbstractCheckDescriptor {
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
index 0a866eb..5dadcdd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
@@ -39,7 +39,7 @@ import com.google.inject.Singleton;
* Checks that Tez jobs reference hadoop libraries from the distributed cache.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.NAMENODE_HA, order = 4.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.NAMENODE_HA, order = 21.0f)
public class ServicesTezDistributedCacheCheck extends AbstractCheckDescriptor {
static final String KEY_LIB_URI_MISSING = "tez_lib_uri_missing";
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
index 062c11f..77605c1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
@@ -33,7 +33,7 @@ import java.util.Arrays;
* Checks that YARN has work-preserving restart enabled.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 1.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 17.1f)
public class ServicesYarnWorkPreservingCheck extends AbstractCheckDescriptor {
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/StormRestAPIDeletedCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/StormRestAPIDeletedCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/StormRestAPIDeletedCheck.java
index d3672b1..7071681 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/StormRestAPIDeletedCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/StormRestAPIDeletedCheck.java
@@ -40,7 +40,7 @@ import java.util.Set;
* checks that STORM_REST_API Component is deleted when upgrading from HDP 2.1 to 2.2 or higher.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.TOPOLOGY, order = 1.0f, required= false)
+@UpgradeCheck(group = UpgradeCheckGroup.TOPOLOGY, order = 15.0f, required= false)
public class StormRestAPIDeletedCheck extends AbstractCheckDescriptor {
@Inject
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
index 9f3bd6e..9dd4877 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
@@ -35,7 +35,7 @@ import com.google.inject.Singleton;
* for ResourceManager..
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.MULTIPLE_COMPONENT_WARNING, order = 2.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.MULTIPLE_COMPONENT_WARNING, order = 17.2f)
public class YarnRMHighAvailabilityCheck extends AbstractCheckDescriptor {
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
index 5dbd0b4..8cb8020 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
@@ -38,7 +38,7 @@ import com.google.inject.Singleton;
* present in HDP 2.2.4.2+.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 1.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 17.3f)
public class YarnTimelineServerStatePreservingCheck extends AbstractCheckDescriptor {
private final static String YARN_TIMELINE_STATE_RECOVERY_ENABLED_KEY = "yarn.timeline-service.recovery.enabled";
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
index 6e3c6b2..4fd03e5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
@@ -208,6 +208,15 @@ public class HostRoleCommandDAO {
return daoUtils.selectList(query, role, status);
}
+ @RequiresSession
+ public List<HostRoleCommandEntity> findSortedCommandsByRequestIdAndCustomCommandName(Long requestId, String customCommandName) {
+ TypedQuery<HostRoleCommandEntity> query = entityManagerProvider.get().createQuery("SELECT hostRoleCommand " +
+ "FROM HostRoleCommandEntity hostRoleCommand " +
+ "WHERE hostRoleCommand.requestId=?1 AND hostRoleCommand.customCommandName=?2 " +
+ "ORDER BY hostRoleCommand.taskId", HostRoleCommandEntity.class);
+ return daoUtils.selectList(query, requestId, customCommandName);
+ }
+
@RequiresSession
public List<HostRoleCommandEntity> findSortedCommandsByStageAndHost(StageEntity stageEntity, HostEntity hostEntity) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/test/java/org/apache/ambari/server/checks/UpgradeCheckOrderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/UpgradeCheckOrderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/UpgradeCheckOrderTest.java
index 7d70311..d4ff566 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/UpgradeCheckOrderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/UpgradeCheckOrderTest.java
@@ -76,28 +76,20 @@ public class UpgradeCheckOrderTest {
for (AbstractCheckDescriptor check : checks) {
UpgradeCheckGroup group = UpgradeCheckGroup.DEFAULT;
UpgradeCheckGroup lastGroup = UpgradeCheckGroup.DEFAULT;
- Float order = 1.0f;
- Float lastOrder = 1.0f;
- if (null == lastCheck) {
- lastCheck = check;
- }
-
- UpgradeCheck annotation = check.getClass().getAnnotation(UpgradeCheck.class);
- UpgradeCheck lastAnnotation = lastCheck.getClass().getAnnotation(UpgradeCheck.class);
+ if (null != lastCheck) {
- if (null != annotation) {
- group = annotation.group();
- order = annotation.order();
- }
+ UpgradeCheck annotation = check.getClass().getAnnotation(UpgradeCheck.class);
+ UpgradeCheck lastAnnotation = lastCheck.getClass().getAnnotation(UpgradeCheck.class);
- if (null != lastAnnotation) {
- lastGroup = lastAnnotation.group();
- lastOrder = lastAnnotation.order();
+ if (null != annotation && null != lastAnnotation) {
+ group = annotation.group();
+ lastGroup = lastAnnotation.group();
+ Assert.assertTrue(lastGroup.getOrder().compareTo(group.getOrder()) <= 0);
+ }
}
- Assert.assertTrue(lastGroup.getOrder().compareTo(group.getOrder()) <= 0);
- Assert.assertTrue(lastOrder.compareTo(order) <= 0);
+ lastCheck = check;
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/77ea2eba/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
index 0176f94..283a3ca 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
@@ -34,6 +34,7 @@ import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.dao.UpgradeDAO;
import org.apache.ambari.server.state.stack.OsFamily;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.PrerequisiteCheck;
@@ -128,6 +129,7 @@ public class CheckHelperTest {
bind(Clusters.class).toInstance(clusters);
bind(ClusterVersionDAO.class).toProvider(Providers.<ClusterVersionDAO>of(null));
bind(HostVersionDAO.class).toProvider(Providers.<HostVersionDAO>of(null));
+ bind(UpgradeDAO.class).toProvider(Providers.<UpgradeDAO>of(null));
bind(RepositoryVersionDAO.class).toProvider(Providers.<RepositoryVersionDAO>of(null));
bind(RepositoryVersionHelper.class).toProvider(Providers.<RepositoryVersionHelper>of(null));
bind(AmbariMetaInfo.class).toProvider(Providers.<AmbariMetaInfo>of(null));
[02/22] ambari git commit: AMBARI-14739. Capture package requirements
that are optional and config dependent (aonishuk)
Posted by nc...@apache.org.
AMBARI-14739. Capture package requirements that are optional and config dependent (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9f76f601
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9f76f601
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9f76f601
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 9f76f6019d09464e0f3fd04aba3b02bf059d003d
Parents: 8b7aa92
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Wed Jan 20 19:08:04 2016 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Wed Jan 20 19:08:04 2016 +0200
----------------------------------------------------------------------
.../python/resource_management/TestScript.py | 4 +-
.../libraries/functions/get_lzo_packages.py | 5 +-
.../libraries/functions/package_conditions.py | 64 ++++++++++++++++++++
.../libraries/script/script.py | 21 ++++++-
.../2.1.1/services/AMBARI_METRICS/metainfo.xml | 1 +
.../ambari/server/state/ServiceOsSpecific.java | 17 +++++-
.../0.1.0/package/scripts/metrics_monitor.py | 4 +-
.../0.96.0.2.0/package/scripts/hbase_client.py | 4 +-
.../0.96.0.2.0/package/scripts/hbase_master.py | 3 +-
.../package/scripts/hbase_regionserver.py | 3 +-
.../0.96.0.2.0/package/scripts/params_linux.py | 5 --
.../package/scripts/phoenix_queryserver.py | 3 +-
.../common-services/HDFS/2.1.0.2.0/metainfo.xml | 4 ++
.../HDFS/2.1.0.2.0/package/scripts/datanode.py | 4 +-
.../2.1.0.2.0/package/scripts/hdfs_client.py | 4 +-
.../2.1.0.2.0/package/scripts/journalnode.py | 4 +-
.../HDFS/2.1.0.2.0/package/scripts/namenode.py | 4 +-
.../2.1.0.2.0/package/scripts/nfsgateway.py | 2 +-
.../2.1.0.2.0/package/scripts/params_linux.py | 4 --
.../HDFS/2.1.0.2.0/package/scripts/snamenode.py | 2 +-
.../2.1.0.2.0/package/scripts/zkfc_slave.py | 2 +-
.../HIVE/0.12.0.2.0/metainfo.xml | 4 ++
.../0.12.0.2.0/package/scripts/hcat_client.py | 2 +-
.../0.12.0.2.0/package/scripts/hive_client.py | 2 +-
.../package/scripts/hive_metastore.py | 2 +-
.../0.12.0.2.0/package/scripts/hive_server.py | 2 +-
.../0.12.0.2.0/package/scripts/mysql_server.py | 2 +-
.../0.12.0.2.0/package/scripts/params_linux.py | 18 +-----
.../package/scripts/params_windows.py | 2 -
.../package/scripts/webhcat_server.py | 2 +-
.../KERBEROS/1.10.3-10/metainfo.xml | 6 ++
.../package/scripts/kerberos_client.py | 2 +-
.../SQOOP/1.4.4.2.0/metainfo.xml | 1 +
.../custom_actions/scripts/install_packages.py | 17 ++----
.../stacks/HDP/2.1/services/HIVE/metainfo.xml | 4 ++
.../stacks/HDP/2.2/services/HBASE/metainfo.xml | 2 +
.../stacks/HDP/2.2/services/HDFS/metainfo.xml | 4 ++
.../stacks/HDP/2.2/services/HIVE/metainfo.xml | 5 ++
.../stacks/HDP/2.2/services/OOZIE/metainfo.xml | 1 +
.../stacks/HDP/2.2/services/SQOOP/metainfo.xml | 1 +
.../stacks/HDP/2.3/services/HDFS/metainfo.xml | 3 +
.../stacks/HDP/2.3/services/HIVE/metainfo.xml | 7 +++
.../stacks/HDP/2.3/services/OOZIE/metainfo.xml | 1 +
.../configs/install_packages_config.json | 4 +-
.../stacks/2.0.6/configs/hbase_no_phx.json | 2 +-
.../stacks/2.0.6/configs/hbase_with_phx.json | 2 +-
.../python/stacks/2.3/configs/pxf_default.json | 2 +-
47 files changed, 184 insertions(+), 80 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-agent/src/test/python/resource_management/TestScript.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/resource_management/TestScript.py b/ambari-agent/src/test/python/resource_management/TestScript.py
index fd31910..f6a5c8c 100644
--- a/ambari-agent/src/test/python/resource_management/TestScript.py
+++ b/ambari-agent/src/test/python/resource_management/TestScript.py
@@ -59,8 +59,8 @@ class TestScript(TestCase):
}
dummy_config = {
'hostLevelParams' : {
- 'package_list' : "[{\"type\":\"rpm\",\"name\":\"hbase\"},"
- "{\"type\":\"rpm\",\"name\":\"yet-another-package\"}]",
+ 'package_list' : "[{\"type\":\"rpm\",\"name\":\"hbase\", \"condition\": \"\"},"
+ "{\"type\":\"rpm\",\"name\":\"yet-another-package\", \"condition\": \"\"}]",
'repo_info' : "[{\"baseUrl\":\"http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.0\",\"osType\":\"centos6\",\"repoId\":\"HDP-2.0._\",\"repoName\":\"HDP\",\"defaultBaseUrl\":\"http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.0\"}]",
'service_repo_info' : "[{\"mirrorsList\":\"abc\",\"osType\":\"centos6\",\"repoId\":\"HDP-2.0._\",\"repoName\":\"HDP\",\"defaultBaseUrl\":\"http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.0\"}]"
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-common/src/main/python/resource_management/libraries/functions/get_lzo_packages.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/get_lzo_packages.py b/ambari-common/src/main/python/resource_management/libraries/functions/get_lzo_packages.py
index 0537ec3..afb4314 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/get_lzo_packages.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/get_lzo_packages.py
@@ -38,10 +38,7 @@ def get_lzo_packages(stack_version_unformatted):
hdp_stack_version = format_hdp_stack_version(stack_version_unformatted)
if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.2') >= 0:
- if OSCheck.is_redhat_family() or OSCheck.is_suse_family():
- lzo_packages += [format("hadooplzo_*")]
- elif OSCheck.is_ubuntu_family():
- lzo_packages += [format("hadooplzo_*")]
+ lzo_packages += ["hadooplzo_*"]
else:
lzo_packages += ["hadoop-lzo"]
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-common/src/main/python/resource_management/libraries/functions/package_conditions.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/package_conditions.py b/ambari-common/src/main/python/resource_management/libraries/functions/package_conditions.py
new file mode 100644
index 0000000..0fb0fe4
--- /dev/null
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/package_conditions.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+"""
+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.
+
+Ambari Agent
+
+"""
+__all__ = ["is_lzo_enabled", "should_install_phoenix", "should_install_ams_collector", "should_install_mysql", "should_install_mysl_connector"]
+
+import os
+from resource_management.libraries.script import Script
+from resource_management.libraries.functions.default import default
+
+def should_install_lzo():
+ config = Script.get_config()
+ io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None)
+ lzo_enabled = io_compression_codecs is not None and "com.hadoop.compression.lzo" in io_compression_codecs.lower()
+ return lzo_enabled
+
+def should_install_phoenix():
+ phoenix_hosts = default('/clusterHostInfo/phoenix_query_server_hosts', [])
+ phoenix_enabled = default('/configurations/hbase-env/phoenix_sql_enabled', False)
+ has_phoenix = len(phoenix_hosts) > 0
+ return phoenix_enabled or has_phoenix
+
+def should_install_ams_collector():
+ config = Script.get_config()
+ return 'role' in config and config['role'] == "METRICS_COLLECTOR"
+
+def should_install_mysql():
+ config = Script.get_config()
+ hive_database = config['configurations']['hive-env']['hive_database']
+ hive_use_existing_db = hive_database.startswith('Existing')
+
+ if hive_use_existing_db or 'role' in config and config['role'] != "MYSQL_SERVER":
+ return False
+ return True
+
+def should_install_mysl_connector():
+ mysql_jdbc_driver_jar = "/usr/share/java/mysql-connector-java.jar"
+ return not os.path.exists(mysql_jdbc_driver_jar)
+
+def should_install_hive_atlas():
+ atlas_hosts = default('/clusterHostInfo/atlas_server_hosts', [])
+ has_atlas = len(atlas_hosts) > 0
+ return has_atlas
+
+def should_install_kerberos_server():
+ config = Script.get_config()
+ return 'role' in config and config['role'] != "KERBEROS_CLIENT"
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-common/src/main/python/resource_management/libraries/script/script.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/script/script.py b/ambari-common/src/main/python/resource_management/libraries/script/script.py
index 7101386..3bef342 100644
--- a/ambari-common/src/main/python/resource_management/libraries/script/script.py
+++ b/ambari-common/src/main/python/resource_management/libraries/script/script.py
@@ -28,6 +28,7 @@ import logging
import platform
import inspect
import tarfile
+import resource_management
from ambari_commons import OSCheck, OSConst
from ambari_commons.constants import UPGRADE_TYPE_NON_ROLLING, UPGRADE_TYPE_ROLLING
from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
@@ -420,7 +421,7 @@ class Script(object):
"""
self.install_packages(env)
- def install_packages(self, env, exclude_packages=[]):
+ def install_packages(self, env):
"""
List of packages that are required< by service is received from the server
as a command parameter. The method installs all packages
@@ -442,7 +443,7 @@ class Script(object):
if isinstance(package_list_str, basestring) and len(package_list_str) > 0:
package_list = json.loads(package_list_str)
for package in package_list:
- if not Script.matches_any_regexp(package['name'], exclude_packages):
+ if Script.check_package_condition(package):
name = self.format_package_name(package['name'])
# HACK: On Windows, only install ambari-metrics packages using Choco Package Installer
# TODO: Update this once choco packages for hadoop are created. This is because, service metainfo.xml support
@@ -465,6 +466,22 @@ class Script(object):
reload_windows_env()
@staticmethod
+ def check_package_condition(package):
+ from resource_management.libraries.functions import package_conditions
+ condition = package['condition']
+ name = package['name']
+
+ if not condition:
+ return True
+
+ try:
+ chooser_method = getattr(package_conditions, condition)
+ except AttributeError:
+ raise Fail("Condition with name '{0}', when installing package {1}. Please check package_conditions.py.".format(condition, name))
+
+ return chooser_method()
+
+ @staticmethod
def matches_any_regexp(string, regexp_list):
for regex in regexp_list:
# we cannot use here Python regex, since * will create some troubles matching plaintext names.
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-funtest/src/test/resources/stacks/HDP/2.1.1/services/AMBARI_METRICS/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/resources/stacks/HDP/2.1.1/services/AMBARI_METRICS/metainfo.xml b/ambari-funtest/src/test/resources/stacks/HDP/2.1.1/services/AMBARI_METRICS/metainfo.xml
index aea1252..84735c2 100644
--- a/ambari-funtest/src/test/resources/stacks/HDP/2.1.1/services/AMBARI_METRICS/metainfo.xml
+++ b/ambari-funtest/src/test/resources/stacks/HDP/2.1.1/services/AMBARI_METRICS/metainfo.xml
@@ -69,6 +69,7 @@
<packages>
<package>
<name>ambari-metrics-collector</name>
+ <condition>package_chooser.should_install_ams_collector()</condition>
</package>
<package>
<name>ambari-metrics-monitor</name>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceOsSpecific.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceOsSpecific.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceOsSpecific.java
index 47e244f..5e1d5d3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceOsSpecific.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceOsSpecific.java
@@ -165,6 +165,7 @@ public class ServiceOsSpecific {
@XmlAccessorType(XmlAccessType.FIELD)
public static class Package {
private String name;
+ private String condition = "";
/**
* If true, package will not be attempted to be upgraded during RU.
@@ -180,6 +181,14 @@ public class ServiceOsSpecific {
public void setName(String name) {
this.name = name;
}
+
+ public String getCondition() {
+ return condition;
+ }
+
+ public void setCondition(String condition) {
+ this.condition = condition;
+ }
public Boolean getSkipUpgrade() {
return skipUpgrade;
@@ -200,14 +209,18 @@ public class ServiceOsSpecific {
Package aPackage = (Package) o;
if (!name.equals(aPackage.name)) return false;
- return skipUpgrade.equals(aPackage.skipUpgrade);
-
+ if (!skipUpgrade.equals(aPackage.skipUpgrade)) return false;
+ if (!condition.equals(aPackage.condition)) return false;
+
+ return true;
}
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + skipUpgrade.hashCode();
+ result = 31 * result + condition.hashCode();
+
return result;
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_monitor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_monitor.py b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_monitor.py
index a1d6a1d..d98384b 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_monitor.py
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_monitor.py
@@ -25,7 +25,9 @@ from status import check_service_status
class AmsMonitor(Script):
def install(self, env):
- self.install_packages(env, exclude_packages = ['ambari-metrics-collector'])
+ import params
+ env.set_params(params)
+ self.install_packages(env)
self.configure(env) # for security
def configure(self, env):
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_client.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_client.py
index 97213fd..ac34d40 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_client.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_client.py
@@ -30,8 +30,8 @@ from ambari_commons.os_family_impl import OsFamilyImpl
class HbaseClient(Script):
def install(self, env):
import params
-
- self.install_packages(env, params.exclude_packages)
+ env.set_params(params)
+ self.install_packages(env)
self.configure(env)
def configure(self, env):
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_master.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_master.py
index fdd8f5a..9515f61 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_master.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_master.py
@@ -40,7 +40,8 @@ class HbaseMaster(Script):
def install(self, env):
import params
- self.install_packages(env, params.exclude_packages)
+ env.set_params(params)
+ self.install_packages(env)
def decommission(self, env):
import params
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_regionserver.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_regionserver.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_regionserver.py
index ecab844..c17d219 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_regionserver.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_regionserver.py
@@ -34,7 +34,8 @@ from ambari_commons.os_family_impl import OsFamilyImpl
class HbaseRegionServer(Script):
def install(self, env):
import params
- self.install_packages(env, params.exclude_packages)
+ env.set_params(params)
+ self.install_packages(env)
def configure(self, env):
import params
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
index 4a44676..337f09d 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
@@ -113,11 +113,6 @@ phoenix_hosts = default('/clusterHostInfo/phoenix_query_server_hosts', [])
phoenix_enabled = default('/configurations/hbase-env/phoenix_sql_enabled', False)
has_phoenix = len(phoenix_hosts) > 0
-if not has_phoenix and not phoenix_enabled:
- exclude_packages = ['phoenix*']
-else:
- exclude_packages = []
-
underscored_version = stack_version_unformatted.replace('.', '_')
dashed_version = stack_version_unformatted.replace('.', '-')
if OSCheck.is_redhat_family() or OSCheck.is_suse_family():
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/phoenix_queryserver.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/phoenix_queryserver.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/phoenix_queryserver.py
index e894f95..693bb08 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/phoenix_queryserver.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/phoenix_queryserver.py
@@ -28,7 +28,8 @@ class PhoenixQueryServer(Script):
def install(self, env):
import params
- self.install_packages(env, params.exclude_packages)
+ env.set_params(params)
+ self.install_packages(env)
def get_stack_to_component(self):
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/metainfo.xml b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/metainfo.xml
index e3e16e3..752de0e 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/metainfo.xml
@@ -165,6 +165,7 @@
<package>
<name>hadoop-lzo</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_lzo</condition>
</package>
</packages>
</osSpecific>
@@ -181,10 +182,12 @@
<package>
<name>lzo</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_lzo</condition>
</package>
<package>
<name>hadoop-lzo-native</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_lzo</condition>
</package>
<package>
<name>hadoop-libhdfs</name>
@@ -204,6 +207,7 @@
<package>
<name>liblzo2-2</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_lzo</condition>
</package>
<package>
<name>hadoop-hdfs</name>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/datanode.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/datanode.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/datanode.py
index 1d242e1..5adeab4 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/datanode.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/datanode.py
@@ -46,8 +46,8 @@ class DataNode(Script):
def install(self, env):
import params
- self.install_packages(env, params.exclude_packages)
env.set_params(params)
+ self.install_packages(env)
def configure(self, env):
import params
@@ -161,7 +161,7 @@ class DataNodeDefault(DataNode):
class DataNodeWindows(DataNode):
def install(self, env):
import install_params
- self.install_packages(env, install_params.exclude_packages)
+ self.install_packages(env)
if __name__ == "__main__":
DataNode().execute()
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_client.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_client.py
index 16218b6..21c0eda 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_client.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_client.py
@@ -31,8 +31,8 @@ class HdfsClient(Script):
def install(self, env):
import params
- self.install_packages(env, params.exclude_packages)
env.set_params(params)
+ self.install_packages(env)
self.configure(env)
def configure(self, env):
@@ -113,7 +113,7 @@ class HdfsClientDefault(HdfsClient):
class HdfsClientWindows(HdfsClient):
def install(self, env):
import install_params
- self.install_packages(env, install_params.exclude_packages)
+ self.install_packages(env)
self.configure(env)
if __name__ == "__main__":
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py
index ad4283c..7715f6c 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py
@@ -36,8 +36,8 @@ from ambari_commons import OSConst
class JournalNode(Script):
def install(self, env):
import params
- self.install_packages(env, params.exclude_packages)
env.set_params(params)
+ self.install_packages(env)
@OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT)
class JournalNodeDefault(JournalNode):
@@ -164,7 +164,7 @@ class JournalNodeDefault(JournalNode):
class JournalNodeWindows(JournalNode):
def install(self, env):
import install_params
- self.install_packages(env, install_params.exclude_packages)
+ self.install_packages(env)
def start(self, env):
import params
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
index 9a42702..910bc0a 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
@@ -82,8 +82,8 @@ class NameNode(Script):
def install(self, env):
import params
- self.install_packages(env, params.exclude_packages)
env.set_params(params)
+ self.install_packages(env)
#TODO we need this for HA because of manual steps
self.configure(env)
@@ -347,7 +347,7 @@ class NameNodeDefault(NameNode):
class NameNodeWindows(NameNode):
def install(self, env):
import install_params
- self.install_packages(env, install_params.exclude_packages)
+ self.install_packages(env)
#TODO we need this for HA because of manual steps
self.configure(env)
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/nfsgateway.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/nfsgateway.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/nfsgateway.py
index df5569e..4b9ad06 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/nfsgateway.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/nfsgateway.py
@@ -39,7 +39,7 @@ class NFSGateway(Script):
env.set_params(params)
- self.install_packages(env, params.exclude_packages)
+ self.install_packages(env)
def pre_upgrade_restart(self, env, upgrade_type=None):
import params
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_linux.py
index c923e23..29c4784 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_linux.py
@@ -341,10 +341,6 @@ HdfsResource = functools.partial(
io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None)
lzo_enabled = io_compression_codecs is not None and "com.hadoop.compression.lzo" in io_compression_codecs.lower()
lzo_packages = get_lzo_packages(stack_version_unformatted)
-
-exclude_packages = []
-if not lzo_enabled:
- exclude_packages += lzo_packages
name_node_params = default("/commandParams/namenode", None)
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/snamenode.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/snamenode.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/snamenode.py
index 1748955..b8a1726 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/snamenode.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/snamenode.py
@@ -36,7 +36,7 @@ class SNameNode(Script):
def install(self, env):
import params
env.set_params(params)
- self.install_packages(env, params.exclude_packages)
+ self.install_packages(env)
def configure(self, env):
import params
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/zkfc_slave.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/zkfc_slave.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/zkfc_slave.py
index 148e605..3558681 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/zkfc_slave.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/zkfc_slave.py
@@ -39,7 +39,7 @@ class ZkfcSlave(Script):
def install(self, env):
import params
env.set_params(params)
- self.install_packages(env, params.exclude_packages)
+ self.install_packages(env)
def configure(self, env):
import params
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/metainfo.xml b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/metainfo.xml
index 634b2fc..fc93ee6 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/metainfo.xml
@@ -255,6 +255,7 @@
<package>
<name>mysql-connector-java</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysl_connector</condition>
</package>
</packages>
</osSpecific>
@@ -273,6 +274,7 @@
<package>
<name>mysql-server</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
</packages>
</osSpecific>
@@ -282,10 +284,12 @@
<package>
<name>mysql-community-release</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
<package>
<name>mysql-community-server</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
</packages>
</osSpecific>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hcat_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hcat_client.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hcat_client.py
index b372085..70bebb4 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hcat_client.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hcat_client.py
@@ -31,7 +31,7 @@ from resource_management.libraries.script.script import Script
class HCatClient(Script):
def install(self, env):
import params
- self.install_packages(env, exclude_packages=params.hive_exclude_packages)
+ self.install_packages(env)
self.configure(env)
def configure(self, env):
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_client.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_client.py
index 117b456..e4aace3 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_client.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_client.py
@@ -28,7 +28,7 @@ from ambari_commons import OSConst
class HiveClient(Script):
def install(self, env):
import params
- self.install_packages(env, exclude_packages=params.hive_exclude_packages)
+ self.install_packages(env)
self.configure(env)
def status(self, env):
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py
index 5866cd0..59ecbbb 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py
@@ -47,7 +47,7 @@ LEGACY_HIVE_SERVER_CONF = "/etc/hive/conf.server"
class HiveMetastore(Script):
def install(self, env):
import params
- self.install_packages(env, exclude_packages = params.hive_exclude_packages)
+ self.install_packages(env)
def start(self, env, upgrade_type=None):
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server.py
index 96c05ca..a81e4f6 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server.py
@@ -47,7 +47,7 @@ from hive_service import hive_service
class HiveServer(Script):
def install(self, env):
import params
- self.install_packages(env, exclude_packages=params.hive_exclude_packages)
+ self.install_packages(env)
def configure(self, env):
import params
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/mysql_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/mysql_server.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/mysql_server.py
index dcfb567..851dc02 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/mysql_server.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/mysql_server.py
@@ -30,7 +30,7 @@ from mysql_utils import mysql_configure
class MysqlServer(Script):
def install(self, env):
import params
- self.install_packages(env, exclude_packages=params.hive_exclude_packages)
+ self.install_packages(env)
self.configure(env)
def clean(self, env):
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
index a2131b0..cd3741d 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
@@ -384,19 +384,6 @@ hive_authorization_enabled = config['configurations']['hive-site']['hive.securit
mysql_jdbc_driver_jar = "/usr/share/java/mysql-connector-java.jar"
hive_use_existing_db = hive_database.startswith('Existing')
-hive_exclude_packages = []
-
-# There are other packages that contain /usr/share/java/mysql-connector-java.jar (like libmysql-java),
-# trying to install mysql-connector-java upon them can cause packages to conflict.
-if hive_use_existing_db:
- hive_exclude_packages = ['mysql-connector-java', 'mysql', 'mysql-server',
- 'mysql-community-release', 'mysql-community-server']
-else:
- if 'role' in config and config['role'] != "MYSQL_SERVER":
- hive_exclude_packages = ['mysql', 'mysql-server', 'mysql-community-release',
- 'mysql-community-server']
- if os.path.exists(mysql_jdbc_driver_jar):
- hive_exclude_packages.append('mysql-connector-java')
hive_site_config = dict(config['configurations']['hive-site'])
@@ -410,10 +397,7 @@ classpath_addition = ""
atlas_plugin_package = "atlas-metadata*-hive-plugin"
atlas_ubuntu_plugin_package = "atlas-metadata.*-hive-plugin"
-if not has_atlas:
- hive_exclude_packages.append(atlas_plugin_package)
- hive_exclude_packages.append(atlas_ubuntu_plugin_package)
-else:
+if has_atlas:
# client.properties
atlas_client_props = {}
auth_enabled = config['configurations']['application-properties'].get(
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_windows.py
index f2524b2..359604f 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_windows.py
@@ -61,8 +61,6 @@ hive_metastore_db_type = config['configurations']['hive-env']['hive_database_typ
hive_metastore_user_name = config['configurations']['hive-site']['javax.jdo.option.ConnectionUserName']
hive_metastore_user_passwd = config['configurations']['hive-site']['javax.jdo.option.ConnectionPassword']
-hive_exclude_packages = []
-
hive_execution_engine = config["configurations"]["hive-site"]["hive.execution.engine"]
######## Metastore Schema
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_server.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_server.py
index f0f31a8..c12b168 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_server.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_server.py
@@ -33,7 +33,7 @@ from ambari_commons.os_family_impl import OsFamilyImpl
class WebHCatServer(Script):
def install(self, env):
import params
- self.install_packages(env, exclude_packages=params.hive_exclude_packages)
+ self.install_packages(env)
def start(self, env, upgrade_type=None):
import params
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/metainfo.xml b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/metainfo.xml
index 72f159a..ec462a7 100644
--- a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/metainfo.xml
@@ -78,10 +78,12 @@
<package>
<name>krb5-server</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_kerberos_server</condition>
</package>
<package>
<name>krb5-libs</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_kerberos_server</condition>
</package>
<package>
<name>krb5-workstation</name>
@@ -96,10 +98,12 @@
<package>
<name>krb5-kdc</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_kerberos_server</condition>
</package>
<package>
<name>krb5-admin-server</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_kerberos_server</condition>
</package>
<package>
<name>krb5-user</name>
@@ -118,6 +122,7 @@
<package>
<name>krb5</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_kerberos_server</condition>
</package>
<package>
<name>krb5-client</name>
@@ -126,6 +131,7 @@
<package>
<name>krb5-server</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_kerberos_server</condition>
</package>
</packages>
</osSpecific>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_client.py b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_client.py
index 580545d..013aabc 100644
--- a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_client.py
+++ b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_client.py
@@ -24,7 +24,7 @@ class KerberosClient(KerberosScript):
def install(self, env):
install_packages = default('/configurations/kerberos-env/install_packages', "true")
if install_packages:
- self.install_packages(env, ['krb5-server', 'krb5-libs', 'krb5-auth-dialog', 'krb5', 'krb5-kdc', 'krb5-admin-server'])
+ self.install_packages(env)
else:
print "Kerberos client packages are not being installed, manual installation is required."
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/metainfo.xml b/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/metainfo.xml
index 0cf9c7d..b5db91b 100644
--- a/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/metainfo.xml
@@ -72,6 +72,7 @@
<package>
<name>mysql-connector-java</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysl_connector</condition>
</package>
</packages>
</osSpecific>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
index b28a5e0..bf80616 100644
--- a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
+++ b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
@@ -28,6 +28,7 @@ import os.path
import ambari_simplejson as json # simplejson is much faster comparing to Python 2.6 json module and has the same functions set.
from resource_management import *
+import resource_management
from resource_management.libraries.functions.list_ambari_managed_repos import list_ambari_managed_repos
from ambari_commons.os_check import OSCheck, OSConst
from resource_management.libraries.functions.packages_analyzer import allInstalledPackages
@@ -416,25 +417,15 @@ class InstallPackages(Script):
def filter_package_list(self, package_list):
"""
Note: that we have skipUpgrade option in metainfo.xml to filter packages,
+ as well as condition option to filter them conditionally,
so use this method only if, for some reason the metainfo option cannot be used.
-
- Here we filter packages that are managed with custom logic in package
- scripts. Usually this packages come from system repositories, and either
- are not available when we restrict repository list, or should not be
- installed on host at all.
+
:param package_list: original list
:return: filtered package_list
"""
filtered_package_list = []
for package in package_list:
- skip_package = False
-
- # skip upgrade for hadooplzo* versioned package, only if lzo is disabled
- io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None)
- if not io_compression_codecs or "com.hadoop.compression.lzo" not in io_compression_codecs:
- skip_package = package['name'].startswith('hadooplzo')
-
- if not skip_package:
+ if Script.check_package_condition(package):
filtered_package_list.append(package)
return filtered_package_list
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/metainfo.xml
index 5c9e8c2..279bcb7 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/metainfo.xml
@@ -58,6 +58,7 @@
<package>
<name>mysql-connector-java</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysl_connector</condition>
</package>
</packages>
</osSpecific>
@@ -76,10 +77,12 @@
<package>
<name>mysql-community-release</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
<package>
<name>mysql-community-server</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
</packages>
</osSpecific>
@@ -89,6 +92,7 @@
<package>
<name>mysql-server</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
</packages>
</osSpecific>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/stacks/HDP/2.2/services/HBASE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HBASE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HBASE/metainfo.xml
index d80b5d1..e88f073 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HBASE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HBASE/metainfo.xml
@@ -32,6 +32,7 @@
</package>
<package>
<name>phoenix_${stack_version}</name>
+ <condition>should_install_phoenix</condition>
</package>
</packages>
</osSpecific>
@@ -43,6 +44,7 @@
</package>
<package>
<name>phoenix-${stack_version}</name>
+ <condition>should_install_phoenix</condition>
</package>
</packages>
</osSpecific>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/stacks/HDP/2.2/services/HDFS/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HDFS/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HDFS/metainfo.xml
index ca4b5c5..0c98a72 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HDFS/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HDFS/metainfo.xml
@@ -39,9 +39,11 @@
<package>
<name>lzo</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_lzo</condition>
</package>
<package>
<name>hadooplzo_${stack_version}</name>
+ <condition>should_install_lzo</condition>
</package>
<package>
<name>hadoop_${stack_version}-libhdfs</name>
@@ -78,10 +80,12 @@
</package>
<package>
<name>hadooplzo-${stack_version}</name>
+ <condition>should_install_lzo</condition>
</package>
<package>
<name>liblzo2-2</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_lzo</condition>
</package>
<package>
<name>libhdfs0-${stack_version}</name>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/metainfo.xml
index ba87d8e..11921a6 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/metainfo.xml
@@ -63,6 +63,7 @@
<package>
<name>mysql-connector-java</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysl_connector</condition>
</package>
</packages>
</osSpecific>
@@ -95,10 +96,12 @@
<package>
<name>mysql-community-release</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
<package>
<name>mysql-community-server</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
</packages>
</osSpecific>
@@ -122,6 +125,7 @@
<package>
<name>mysql-server</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
</packages>
</osSpecific>
@@ -131,6 +135,7 @@
<package>
<name>mysql-client</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
</packages>
</osSpecific>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/stacks/HDP/2.2/services/OOZIE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/OOZIE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/OOZIE/metainfo.xml
index d5db93c..b5682e4 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/OOZIE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/OOZIE/metainfo.xml
@@ -67,6 +67,7 @@
<package>
<name>mysql-connector-java</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysl_connector</condition>
</package>
<package>
<name>extjs</name>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/stacks/HDP/2.2/services/SQOOP/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/SQOOP/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/SQOOP/metainfo.xml
index eaa4051..d408f38 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/SQOOP/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/SQOOP/metainfo.xml
@@ -28,6 +28,7 @@
<package>
<name>mysql-connector-java</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysl_connector</condition>
</package>
</packages>
</osSpecific>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/metainfo.xml
index cb0062f..ac6ddaf 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/metainfo.xml
@@ -70,9 +70,11 @@
<package>
<name>lzo</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_lzo</condition>
</package>
<package>
<name>hadooplzo_${stack_version}</name>
+ <condition>should_install_lzo</condition>
</package>
<package>
<name>hadoop_${stack_version}-libhdfs</name>
@@ -109,6 +111,7 @@
</package>
<package>
<name>hadooplzo-${stack_version}</name>
+ <condition>should_install_lzo</condition>
</package>
<package>
<name>libhdfs0-${stack_version}</name>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/stacks/HDP/2.3/services/HIVE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HIVE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HIVE/metainfo.xml
index f184741..fcbb02e 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HIVE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HIVE/metainfo.xml
@@ -29,6 +29,7 @@
<package>
<name>mysql-connector-java</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysl_connector</condition>
</package>
</packages>
</osSpecific>
@@ -46,6 +47,7 @@
</package>
<package>
<name>atlas-metadata_${stack_version}-hive-plugin</name>
+ <condition>should_install_hive_atlas</condition>
</package>
</packages>
</osSpecific>
@@ -55,6 +57,7 @@
<package>
<name>mysql</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
</packages>
</osSpecific>
@@ -64,10 +67,12 @@
<package>
<name>mysql-community-release</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
<package>
<name>mysql-community-server</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
</packages>
</osSpecific>
@@ -85,6 +90,7 @@
</package>
<package>
<name>atlas-metadata-${stack_version}-hive-plugin</name>
+ <condition>should_install_hive_atlas</condition>
</package>
</packages>
</osSpecific>
@@ -94,6 +100,7 @@
<package>
<name>mysql-server</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysql</condition>
</package>
</packages>
</osSpecific>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/main/resources/stacks/HDP/2.3/services/OOZIE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/OOZIE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/OOZIE/metainfo.xml
index 8d1dda1..9b324bb 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/OOZIE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/OOZIE/metainfo.xml
@@ -38,6 +38,7 @@
<package>
<name>mysql-connector-java</name>
<skipUpgrade>true</skipUpgrade>
+ <condition>should_install_mysl_connector</condition>
</package>
<package>
<name>extjs</name>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json b/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
index fcd7765..957a3d8 100644
--- a/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
+++ b/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
@@ -26,7 +26,7 @@
"stack_id": "HDP-2.2",
"repository_version": "2.2.0.1-885",
"base_urls": "[{\"name\":\"HDP-UTILS\",\"baseUrl\":\"http://repo1/HDP/centos5/2.x/updates/2.2.0.0\",\"repositoryId\":\"HDP-UTILS-1.1.0.20\"},{\"name\":\"HDP\",\"baseUrl\":\"http://repo1/HDP/centos5/2.x/updates/2.2.0.0\",\"repositoryId\":\"HDP-2.2\"}]",
- "package_list": "[{\"name\":\"hadoop_${stack_version}\"},{\"name\":\"snappy\"},{\"name\":\"snappy-devel\"},{\"name\":\"lzo\"},{\"name\":\"hadooplzo_${stack_version}\"},{\"name\":\"hadoop_${stack_version}-libhdfs\"},{\"name\":\"ambari-log4j\"}]"
+ "package_list": "[{\"name\":\"hadoop_${stack_version}\", \"condition\": \"\"},{\"name\":\"snappy\", \"condition\": \"\"},{\"name\":\"snappy-devel\", \"condition\": \"\"},{\"name\":\"lzo\", \"condition\": \"\"},{\"name\":\"hadooplzo_${stack_version}\", \"condition\": \"\"},{\"name\":\"hadoop_${stack_version}-libhdfs\", \"condition\": \"\"},{\"name\":\"ambari-log4j\", \"condition\": \"\"}]"
},
"serviceName": "null",
"role": "install_packages",
@@ -44,7 +44,7 @@
"script_type": "PYTHON",
"repository_version": "2.2.0.1-885",
"base_urls": "[{\"name\":\"HDP-UTILS\",\"baseUrl\":\"http://repo1/HDP/centos5/2.x/updates/2.2.0.0\",\"repositoryId\":\"HDP-UTILS-1.1.0.20\"},{\"name\":\"HDP\",\"baseUrl\":\"http://repo1/HDP/centos5/2.x/updates/2.2.0.0\",\"repositoryId\":\"HDP-2.2\"}]",
- "package_list": "[{\"name\":\"hadoop_${stack_version}\"},{\"name\":\"snappy\"},{\"name\":\"snappy-devel\"},{\"name\":\"lzo\"},{\"name\":\"hadooplzo_${stack_version}\"},{\"name\":\"hadoop_${stack_version}-libhdfs\"},{\"name\":\"ambari-log4j\"}]",
+ "package_list": "[{\"name\":\"hadoop_${stack_version}\", \"condition\": \"\"},{\"name\":\"snappy\", \"condition\": \"\"},{\"name\":\"snappy-devel\", \"condition\": \"\"},{\"name\":\"lzo\", \"condition\": \"\"},{\"name\":\"hadooplzo_${stack_version}\", \"condition\": \"\"},{\"name\":\"hadoop_${stack_version}-libhdfs\", \"condition\": \"\"},{\"name\":\"ambari-log4j\", \"condition\": \"\"}]",
"script": "install_packages.py"
},
"commandId": "14-1",
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_no_phx.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_no_phx.json b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_no_phx.json
index e2e9965..1c2f04d 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_no_phx.json
+++ b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_no_phx.json
@@ -16,7 +16,7 @@
"java_home": "/usr/jdk64/jdk1.7.0_45",
"java_version": "8",
"host_sys_prepped": "false",
- "package_list": "[{\"name\":\"hbase_2_3_*\",\"skipUpgrade\":false},{\"name\":\"phoenix_2_3_*\",\"skipUpgrade\":false}]",
+ "package_list": "[{\"name\":\"hbase_2_3_*\",\"condition\":\"\",\"skipUpgrade\":false},{\"name\":\"phoenix_*\",\"condition\":\"{{has_phoenix or phoenix_enabled}}\",\"skipUpgrade\":false}]",
"db_name": "ambari",
"group_list": "[\"hadoop\",\"nobody\",\"users\"]",
"user_list": "[\"hive\",\"oozie\",\"nobody\",\"ambari-qa\",\"flume\",\"hdfs\",\"storm\",\"mapred\",\"hbase\",\"tez\",\"zookeeper\",\"falcon\",\"sqoop\",\"yarn\",\"hcat\"]"
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
index 1a3b217..78131b1 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
+++ b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
@@ -16,7 +16,7 @@
"java_home": "/usr/jdk64/jdk1.7.0_45",
"java_version": "8",
"host_sys_prepped": "false",
- "package_list": "[{\"name\":\"hbase_2_3_*\",\"skipUpgrade\":false},{\"name\":\"phoenix_2_3_*\",\"skipUpgrade\":false}]",
+ "package_list": "[{\"name\":\"hbase_2_3_*\",\"condition\":\"\",\"skipUpgrade\":false},{\"name\":\"phoenix_2_3_*\",\"condition\":\"{{has_phoenix or phoenix_enabled}}\",\"skipUpgrade\":false}]",
"db_name": "ambari",
"group_list": "[\"hadoop\",\"nobody\",\"users\"]",
"user_list": "[\"hive\",\"oozie\",\"nobody\",\"ambari-qa\",\"flume\",\"hdfs\",\"storm\",\"mapred\",\"hbase\",\"tez\",\"zookeeper\",\"falcon\",\"sqoop\",\"yarn\",\"hcat\"]"
http://git-wip-us.apache.org/repos/asf/ambari/blob/9f76f601/ambari-server/src/test/python/stacks/2.3/configs/pxf_default.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.3/configs/pxf_default.json b/ambari-server/src/test/python/stacks/2.3/configs/pxf_default.json
index a042dfd..ba06162 100644
--- a/ambari-server/src/test/python/stacks/2.3/configs/pxf_default.json
+++ b/ambari-server/src/test/python/stacks/2.3/configs/pxf_default.json
@@ -14,7 +14,7 @@
"ambari_db_rca_username": "mapred",
"java_home": "/usr/jdk64/jdk1.7.0_45",
"db_name": "ambari",
- "package_list": "[{\"name\":\"pxf-service\",\"skipUpgrade\":false},{\"name\":\"apache-tomcat\",\"skipUpgrade\":false},{\"name\":\"pxf-hive\",\"skipUpgrade\":false},{\"name\":\"pxf-hdfs\",\"skipUpgrade\":false},{\"name\":\"pxf-hbase\",\"skipUpgrade\":false}]"
+ "package_list": "[{\"name\":\"pxf-service\",\"skipUpgrade\":false, \"condition\": \"\"},{\"name\":\"apache-tomcat\",\"skipUpgrade\":false, \"condition\": \"\"},{\"name\":\"pxf-hive\",\"skipUpgrade\":false, \"condition\": \"\"},{\"name\":\"pxf-hdfs\",\"skipUpgrade\":false, \"condition\": \"\"},{\"name\":\"pxf-hbase\",\"skipUpgrade\":false, \"condition\": \"\"}]"
},
"commandType": "EXECUTION_COMMAND",
"roleParams": {},
[13/22] ambari git commit: AMBARI-14740. Add params to alert
definitions during ambari upgrade.(vbrodetskyi)
Posted by nc...@apache.org.
AMBARI-14740. Add params to alert definitions during ambari upgrade.(vbrodetskyi)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a8887eb1
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a8887eb1
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a8887eb1
Branch: refs/heads/branch-dev-patch-upgrade
Commit: a8887eb175afdc0e9340647a83e0f02cddbfdb8b
Parents: 5380fef
Author: Vitaly Brodetskyi <vb...@hortonworks.com>
Authored: Thu Jan 21 09:32:58 2016 +0200
Committer: Vitaly Brodetskyi <vb...@hortonworks.com>
Committed: Thu Jan 21 09:32:58 2016 +0200
----------------------------------------------------------------------
.../server/upgrade/SchemaUpgradeHelper.java | 1 +
.../server/upgrade/UpgradeCatalog240.java | 298 +++++++++++++++++++
.../server/upgrade/UpgradeCatalog240Test.java | 130 ++++++++
3 files changed, 429 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/a8887eb1/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
index 82aa6ca..a07d42d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
@@ -183,6 +183,7 @@ public class SchemaUpgradeHelper {
catalogBinder.addBinding().to(UpgradeCatalog220.class);
catalogBinder.addBinding().to(UpgradeCatalog221.class);
catalogBinder.addBinding().to(UpgradeCatalog230.class);
+ catalogBinder.addBinding().to(UpgradeCatalog240.class);
catalogBinder.addBinding().to(FinalUpgradeCatalog.class);
EventBusSynchronizer.synchronizeAmbariEventPublisher(binder());
http://git-wip-us.apache.org/repos/asf/ambari/blob/a8887eb1/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java
new file mode 100644
index 0000000..1ccea5c
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java
@@ -0,0 +1,298 @@
+/*
+ * 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.
+ */
+
+package org.apache.ambari.server.upgrade;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.gson.JsonPrimitive;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.orm.dao.AlertDefinitionDAO;
+import org.apache.ambari.server.orm.dao.DaoUtils;
+import org.apache.ambari.server.orm.entities.AlertDefinitionEntity;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * Upgrade catalog for version 2.4.0.
+ */
+public class UpgradeCatalog240 extends AbstractUpgradeCatalog {
+
+ @Inject
+ DaoUtils daoUtils;
+
+ /**
+ * Logger.
+ */
+ private static final Logger LOG = LoggerFactory.getLogger(UpgradeCatalog240.class);
+
+
+
+
+ // ----- Constructors ------------------------------------------------------
+
+ /**
+ * Don't forget to register new UpgradeCatalogs in {@link org.apache.ambari.server.upgrade.SchemaUpgradeHelper.UpgradeHelperModule#configure()}
+ *
+ * @param injector Guice injector to track dependencies and uses bindings to inject them.
+ */
+ @Inject
+ public UpgradeCatalog240(Injector injector) {
+ super(injector);
+ this.injector = injector;
+ }
+
+ // ----- UpgradeCatalog ----------------------------------------------------
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getTargetVersion() {
+ return "2.4.0";
+ }
+
+ // ----- AbstractUpgradeCatalog --------------------------------------------
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getSourceVersion() {
+ return "2.3.0";
+ }
+
+
+ @Override
+ protected void executeDDLUpdates() throws AmbariException, SQLException {
+ //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ protected void executePreDMLUpdates() throws AmbariException, SQLException {
+ //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ protected void executeDMLUpdates() throws AmbariException, SQLException {
+ addNewConfigurationsFromXml();
+ updateAlerts();
+
+ }
+
+ protected void updateAlerts() {
+ LOG.info("Updating alert definitions.");
+ AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
+ AlertDefinitionDAO alertDefinitionDAO = injector.getInstance(AlertDefinitionDAO.class);
+ Clusters clusters = ambariManagementController.getClusters();
+
+ Map<String, Cluster> clusterMap = getCheckedClusterMap(clusters);
+ for (final Cluster cluster : clusterMap.values()) {
+ long clusterID = cluster.getClusterId();
+
+ final AlertDefinitionEntity namenodeLastCheckpointAlertDefinitionEntity = alertDefinitionDAO.findByName(
+ clusterID, "namenode_last_checkpoint");
+ final AlertDefinitionEntity namenodeHAHealthAlertDefinitionEntity = alertDefinitionDAO.findByName(
+ clusterID, "namenode_ha_health");
+ final AlertDefinitionEntity nodemanagerHealthAlertDefinitionEntity = alertDefinitionDAO.findByName(
+ clusterID, "yarn_nodemanager_health");
+ final AlertDefinitionEntity nodemanagerHealthSummaryAlertDefinitionEntity = alertDefinitionDAO.findByName(
+ clusterID, "nodemanager_health_summary");
+ final AlertDefinitionEntity hiveMetastoreProcessAlertDefinitionEntity = alertDefinitionDAO.findByName(
+ clusterID, "hive_metastore_process");
+ final AlertDefinitionEntity hiveServerProcessAlertDefinitionEntity = alertDefinitionDAO.findByName(
+ clusterID, "hive_server_process");
+ final AlertDefinitionEntity hiveWebhcatServerStatusAlertDefinitionEntity = alertDefinitionDAO.findByName(
+ clusterID, "hive_webhcat_server_status");
+ final AlertDefinitionEntity flumeAgentStatusAlertDefinitionEntity = alertDefinitionDAO.findByName(
+ clusterID, "flume_agent_status");
+
+ Map<AlertDefinitionEntity, List<String>> alertDefinitionParams = new HashMap<>();
+ alertDefinitionParams.put(namenodeLastCheckpointAlertDefinitionEntity,
+ new ArrayList<String>(Arrays.asList("connection.timeout", "checkpoint.time.warning.threshold", "checkpoint.time.critical.threshold")));
+ alertDefinitionParams.put(namenodeHAHealthAlertDefinitionEntity,
+ new ArrayList<String>(Arrays.asList("connection.timeout")));
+ alertDefinitionParams.put(nodemanagerHealthAlertDefinitionEntity,
+ new ArrayList<String>(Arrays.asList("connection.timeout")));
+ alertDefinitionParams.put(nodemanagerHealthSummaryAlertDefinitionEntity,
+ new ArrayList<String>(Arrays.asList("connection.timeout")));
+ alertDefinitionParams.put(hiveMetastoreProcessAlertDefinitionEntity,
+ new ArrayList<String>(Arrays.asList("default.smoke.user", "default.smoke.principal", "default.smoke.keytab")));
+ alertDefinitionParams.put(hiveServerProcessAlertDefinitionEntity,
+ new ArrayList<String>(Arrays.asList("default.smoke.user", "default.smoke.principal", "default.smoke.keytab")));
+ alertDefinitionParams.put(hiveWebhcatServerStatusAlertDefinitionEntity,
+ new ArrayList<String>(Arrays.asList("default.smoke.user", "connection.timeout")));
+ alertDefinitionParams.put(flumeAgentStatusAlertDefinitionEntity,
+ new ArrayList<String>(Arrays.asList("run.directory")));
+
+ for(Map.Entry<AlertDefinitionEntity, List<String>> entry : alertDefinitionParams.entrySet()){
+ AlertDefinitionEntity alertDefinition = entry.getKey();
+ String source = alertDefinition.getSource();
+
+ alertDefinition.setSource(addParam(source, entry.getValue()));
+ alertDefinition.setHash(UUID.randomUUID().toString());
+
+ alertDefinitionDAO.merge(alertDefinition);
+ }
+
+ }
+ }
+
+ protected String addParam(String source, List<String> params) {
+ JsonObject sourceJson = new JsonParser().parse(source).getAsJsonObject();
+ JsonArray parametersJson = sourceJson.getAsJsonArray("parameters");
+
+ boolean parameterExists = parametersJson != null && !parametersJson.isJsonNull();
+
+ if (parameterExists) {
+ Iterator<JsonElement> jsonElementIterator = parametersJson.iterator();
+ while(jsonElementIterator.hasNext()) {
+ JsonElement element = jsonElementIterator.next();
+ JsonElement name = element.getAsJsonObject().get("name");
+ if (name != null && !name.isJsonNull() && params.contains(name.getAsString())) {
+ params.remove(name.getAsString());
+ }
+ }
+ if (params.size() == 0) {
+ return sourceJson.toString();
+ }
+ }
+
+ List<JsonObject> paramsToAdd = new ArrayList<>();
+
+ if (params.contains("connection.timeout")) {
+ JsonObject param = new JsonObject();
+ param.add("name", new JsonPrimitive("connection.timeout"));
+ param.add("display_name", new JsonPrimitive("Connection Timeout"));
+ param.add("value", new JsonPrimitive(5.0));
+ param.add("type", new JsonPrimitive("NUMERIC"));
+ param.add("description", new JsonPrimitive("The maximum time before this alert is considered to be CRITICAL"));
+ param.add("units", new JsonPrimitive("seconds"));
+ param.add("threshold", new JsonPrimitive("CRITICAL"));
+
+ paramsToAdd.add(param);
+
+ }
+ if (params.contains("checkpoint.time.warning.threshold")) {
+ JsonObject param = new JsonObject();
+ param.add("name", new JsonPrimitive("checkpoint.time.warning.threshold"));
+ param.add("display_name", new JsonPrimitive("Checkpoint Warning"));
+ param.add("value", new JsonPrimitive(2.0));
+ param.add("type", new JsonPrimitive("PERCENT"));
+ param.add("description", new JsonPrimitive("The percentage of the last checkpoint time greater than the interval in order to trigger a warning alert."));
+ param.add("units", new JsonPrimitive("%"));
+ param.add("threshold", new JsonPrimitive("WARNING"));
+
+ paramsToAdd.add(param);
+
+ }
+ if (params.contains("checkpoint.time.critical.threshold")) {
+ JsonObject param = new JsonObject();
+ param.add("name", new JsonPrimitive("checkpoint.time.critical.threshold"));
+ param.add("display_name", new JsonPrimitive("Checkpoint Critical"));
+ param.add("value", new JsonPrimitive(2.0));
+ param.add("type", new JsonPrimitive("PERCENT"));
+ param.add("description", new JsonPrimitive("The percentage of the last checkpoint time greater than the interval in order to trigger a critical alert."));
+ param.add("units", new JsonPrimitive("%"));
+ param.add("threshold", new JsonPrimitive("CRITICAL"));
+
+ paramsToAdd.add(param);
+
+ }
+ if (params.contains("default.smoke.user")) {
+ JsonObject param = new JsonObject();
+ param.add("name", new JsonPrimitive("default.smoke.user"));
+ param.add("display_name", new JsonPrimitive("Default Smoke User"));
+ param.add("value", new JsonPrimitive("ambari-qa"));
+ param.add("type", new JsonPrimitive("STRING"));
+ param.add("description", new JsonPrimitive("The user that will run the Hive commands if not specified in cluster-env/smokeuser"));
+
+ paramsToAdd.add(param);
+
+ }
+ if (params.contains("default.smoke.principal")) {
+ JsonObject param = new JsonObject();
+ param.add("name", new JsonPrimitive("default.smoke.principal"));
+ param.add("display_name", new JsonPrimitive("Default Smoke Principal"));
+ param.add("value", new JsonPrimitive("ambari-qa@EXAMPLE.COM"));
+ param.add("type", new JsonPrimitive("STRING"));
+ param.add("description", new JsonPrimitive("The principal to use when retrieving the kerberos ticket if not specified in cluster-env/smokeuser_principal_name"));
+
+ paramsToAdd.add(param);
+
+ }
+ if (params.contains("default.smoke.keytab")) {
+ JsonObject param = new JsonObject();
+ param.add("name", new JsonPrimitive("default.smoke.keytab"));
+ param.add("display_name", new JsonPrimitive("Default Smoke Keytab"));
+ param.add("value", new JsonPrimitive("/etc/security/keytabs/smokeuser.headless.keytab"));
+ param.add("type", new JsonPrimitive("STRING"));
+ param.add("description", new JsonPrimitive("The keytab to use when retrieving the kerberos ticket if not specified in cluster-env/smokeuser_keytab"));
+
+ paramsToAdd.add(param);
+
+ }
+ if (params.contains("run.directory")) {
+ JsonObject param = new JsonObject();
+ param.add("name", new JsonPrimitive("run.directory"));
+ param.add("display_name", new JsonPrimitive("Run Directory"));
+ param.add("value", new JsonPrimitive("/var/run/flume"));
+ param.add("type", new JsonPrimitive("STRING"));
+ param.add("description", new JsonPrimitive("The directory where flume agent processes will place their PID files."));
+
+ paramsToAdd.add(param);
+
+ }
+
+
+ if (!parameterExists) {
+ parametersJson = new JsonArray();
+ for (JsonObject param : paramsToAdd) {
+ parametersJson.add(param);
+ }
+ sourceJson.add("parameters", parametersJson);
+ } else {
+ for (JsonObject param : paramsToAdd) {
+ parametersJson.add(param);
+ }
+ sourceJson.remove("parameters");
+ sourceJson.add("parameters", parametersJson);
+ }
+
+ return sourceJson.toString();
+ }
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a8887eb1/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
new file mode 100644
index 0000000..d1d68f2
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
@@ -0,0 +1,130 @@
+/*
+ * 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.
+ */
+
+package org.apache.ambari.server.upgrade;
+
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Provider;
+import com.google.inject.persist.PersistService;
+import junit.framework.Assert;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.entities.StackEntity;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.persistence.EntityManager;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.easymock.EasyMock.createMockBuilder;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.createStrictMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
+
+public class UpgradeCatalog240Test {
+ private Injector injector;
+ private Provider<EntityManager> entityManagerProvider = createStrictMock(Provider.class);
+ private EntityManager entityManager = createNiceMock(EntityManager.class);
+ private UpgradeCatalogHelper upgradeCatalogHelper;
+ private StackEntity desiredStackEntity;
+
+
+
+ @Before
+ public void init() {
+ reset(entityManagerProvider);
+ expect(entityManagerProvider.get()).andReturn(entityManager).anyTimes();
+ replay(entityManagerProvider);
+ injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.getInstance(GuiceJpaInitializer.class);
+
+ upgradeCatalogHelper = injector.getInstance(UpgradeCatalogHelper.class);
+ // inject AmbariMetaInfo to ensure that stacks get populated in the DB
+ injector.getInstance(AmbariMetaInfo.class);
+ // load the stack entity
+ StackDAO stackDAO = injector.getInstance(StackDAO.class);
+ desiredStackEntity = stackDAO.find("HDP", "2.2.0");
+ }
+
+ @After
+ public void tearDown() {
+ injector.getInstance(PersistService.class).stop();
+ }
+
+ @Test
+ public void testExecuteDMLUpdates() throws Exception {
+ Method addNewConfigurationsFromXml = AbstractUpgradeCatalog.class.getDeclaredMethod("addNewConfigurationsFromXml");
+ Method updateAlerts = UpgradeCatalog240.class.getDeclaredMethod("updateAlerts");
+
+
+
+ UpgradeCatalog240 upgradeCatalog240 = createMockBuilder(UpgradeCatalog240.class)
+ .addMockedMethod(addNewConfigurationsFromXml)
+ .addMockedMethod(updateAlerts)
+ .createMock();
+
+ upgradeCatalog240.addNewConfigurationsFromXml();
+ expectLastCall().once();
+ upgradeCatalog240.updateAlerts();
+ expectLastCall().once();
+
+
+ replay(upgradeCatalog240);
+
+ upgradeCatalog240.executeDMLUpdates();
+
+ verify(upgradeCatalog240);
+ }
+
+ @Test
+ public void test_addParam_ParamsNotAvailable() {
+
+ UpgradeCatalog240 upgradeCatalog240 = new UpgradeCatalog240(injector);
+ String inputSource = "{ \"path\" : \"test_path\", \"type\" : \"SCRIPT\"}";
+ List<String> params = Arrays.asList("connection.timeout", "checkpoint.time.warning.threshold", "checkpoint.time.critical.threshold");
+ String expectedSource = "{\"path\":\"test_path\",\"type\":\"SCRIPT\",\"parameters\":[{\"name\":\"connection.timeout\",\"display_name\":\"Connection Timeout\",\"value\":5.0,\"type\":\"NUMERIC\",\"description\":\"The maximum time before this alert is considered to be CRITICAL\",\"units\":\"seconds\",\"threshold\":\"CRITICAL\"},{\"name\":\"checkpoint.time.warning.threshold\",\"display_name\":\"Checkpoint Warning\",\"value\":2.0,\"type\":\"PERCENT\",\"description\":\"The percentage of the last checkpoint time greater than the interval in order to trigger a warning alert.\",\"units\":\"%\",\"threshold\":\"WARNING\"},{\"name\":\"checkpoint.time.critical.threshold\",\"display_name\":\"Checkpoint Critical\",\"value\":2.0,\"type\":\"PERCENT\",\"description\":\"The percentage of the last checkpoint time greater than the interval in order to trigger a critical alert.\",\"units\":\"%\",\"threshold\":\"CRITICAL\"}]}";
+
+ String result = upgradeCatalog240.addParam(inputSource, params);
+ Assert.assertEquals(result, expectedSource);
+ }
+
+ @Test
+ public void test_addParam_ParamsAvailableWithOneOFNeededItem() {
+
+ UpgradeCatalog240 upgradeCatalog240 = new UpgradeCatalog240(injector);
+ String inputSource = "{\"path\":\"test_path\",\"type\":\"SCRIPT\",\"parameters\":[{\"name\":\"connection.timeout\",\"display_name\":\"Connection Timeout\",\"value\":5.0,\"type\":\"NUMERIC\",\"description\":\"The maximum time before this alert is considered to be CRITICAL\",\"units\":\"seconds\",\"threshold\":\"CRITICAL\"}]}";
+ List<String> params = new ArrayList<String>(Arrays.asList("connection.timeout", "checkpoint.time.warning.threshold", "checkpoint.time.critical.threshold"));
+ String expectedSource = "{\"path\":\"test_path\",\"type\":\"SCRIPT\",\"parameters\":[{\"name\":\"connection.timeout\",\"display_name\":\"Connection Timeout\",\"value\":5.0,\"type\":\"NUMERIC\",\"description\":\"The maximum time before this alert is considered to be CRITICAL\",\"units\":\"seconds\",\"threshold\":\"CRITICAL\"},{\"name\":\"checkpoint.time.warning.threshold\",\"display_name\":\"Checkpoint Warning\",\"value\":2.0,\"type\":\"PERCENT\",\"description\":\"The percentage of the last checkpoint time greater than the interval in order to trigger a warning alert.\",\"units\":\"%\",\"threshold\":\"WARNING\"},{\"name\":\"checkpoint.time.critical.threshold\",\"display_name\":\"Checkpoint Critical\",\"value\":2.0,\"type\":\"PERCENT\",\"description\":\"The percentage of the last checkpoint time greater than the interval in order to trigger a critical alert.\",\"units\":\"%\",\"threshold\":\"CRITICAL\"}]}";
+
+ String result = upgradeCatalog240.addParam(inputSource, params);
+ Assert.assertEquals(result, expectedSource);
+ }
+
+}
[18/22] ambari git commit: AMBARI-14739. Capture package requirements
that are optional and config dependent (aonishuk)
Posted by nc...@apache.org.
AMBARI-14739. Capture package requirements that are optional and config dependent (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/59ed986c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/59ed986c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/59ed986c
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 59ed986cfdab8632e610a7eff9271009b011151d
Parents: 1217a56
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Thu Jan 21 19:39:06 2016 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Thu Jan 21 19:39:06 2016 +0200
----------------------------------------------------------------------
.../src/test/python/stacks/2.0.6/configs/hbase_no_phx.json | 2 +-
.../src/test/python/stacks/2.0.6/configs/hbase_with_phx.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/59ed986c/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_no_phx.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_no_phx.json b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_no_phx.json
index 1c2f04d..8d3b60b 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_no_phx.json
+++ b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_no_phx.json
@@ -16,7 +16,7 @@
"java_home": "/usr/jdk64/jdk1.7.0_45",
"java_version": "8",
"host_sys_prepped": "false",
- "package_list": "[{\"name\":\"hbase_2_3_*\",\"condition\":\"\",\"skipUpgrade\":false},{\"name\":\"phoenix_*\",\"condition\":\"{{has_phoenix or phoenix_enabled}}\",\"skipUpgrade\":false}]",
+ "package_list": "[{\"name\":\"hbase_2_3_*\",\"condition\":\"\",\"skipUpgrade\":false},{\"name\":\"phoenix_*\",\"condition\":\"should_install_phoenix\",\"skipUpgrade\":false}]",
"db_name": "ambari",
"group_list": "[\"hadoop\",\"nobody\",\"users\"]",
"user_list": "[\"hive\",\"oozie\",\"nobody\",\"ambari-qa\",\"flume\",\"hdfs\",\"storm\",\"mapred\",\"hbase\",\"tez\",\"zookeeper\",\"falcon\",\"sqoop\",\"yarn\",\"hcat\"]"
http://git-wip-us.apache.org/repos/asf/ambari/blob/59ed986c/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
index 78131b1..84db160 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
+++ b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
@@ -16,7 +16,7 @@
"java_home": "/usr/jdk64/jdk1.7.0_45",
"java_version": "8",
"host_sys_prepped": "false",
- "package_list": "[{\"name\":\"hbase_2_3_*\",\"condition\":\"\",\"skipUpgrade\":false},{\"name\":\"phoenix_2_3_*\",\"condition\":\"{{has_phoenix or phoenix_enabled}}\",\"skipUpgrade\":false}]",
+ "package_list": "[{\"name\":\"hbase_2_3_*\",\"condition\":\"\",\"skipUpgrade\":false},{\"name\":\"phoenix_2_3_*\",\"condition\":\"should_install_phoenix\",\"skipUpgrade\":false}]",
"db_name": "ambari",
"group_list": "[\"hadoop\",\"nobody\",\"users\"]",
"user_list": "[\"hive\",\"oozie\",\"nobody\",\"ambari-qa\",\"flume\",\"hdfs\",\"storm\",\"mapred\",\"hbase\",\"tez\",\"zookeeper\",\"falcon\",\"sqoop\",\"yarn\",\"hcat\"]"
[12/22] ambari git commit: AMBARI-14713: Service checks for PXF using
HDFS and HBase (nalex via jaoki)
Posted by nc...@apache.org.
AMBARI-14713: Service checks for PXF using HDFS and HBase (nalex via jaoki)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/5380fefd
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/5380fefd
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/5380fefd
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 5380fefdee8c73780d9a40e00e68e53f4d665c9c
Parents: 03a0f9f
Author: Jun Aoki <ja...@apache.org>
Authored: Wed Jan 20 16:01:14 2016 -0800
Committer: Jun Aoki <ja...@apache.org>
Committed: Wed Jan 20 16:01:14 2016 -0800
----------------------------------------------------------------------
.../common-services/PXF/3.0.0/metainfo.xml | 6 +
.../PXF/3.0.0/package/scripts/params.py | 31 ++-
.../PXF/3.0.0/package/scripts/pxf_constants.py | 26 ++
.../PXF/3.0.0/package/scripts/pxf_utils.py | 49 ++++
.../PXF/3.0.0/package/scripts/service_check.py | 266 +++++++++++++++++++
5 files changed, 377 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/5380fefd/ambari-server/src/main/resources/common-services/PXF/3.0.0/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/PXF/3.0.0/metainfo.xml b/ambari-server/src/main/resources/common-services/PXF/3.0.0/metainfo.xml
index cb2411c..1797b29 100644
--- a/ambari-server/src/main/resources/common-services/PXF/3.0.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/PXF/3.0.0/metainfo.xml
@@ -66,6 +66,12 @@
</osSpecific>
</osSpecifics>
+ <commandScript>
+ <script>scripts/service_check.py</script>
+ <scriptType>PYTHON</scriptType>
+ <timeout>300</timeout>
+ </commandScript>
+
<configuration-dependencies>
<config-type>pxf-profiles</config-type>
<config-type>pxf-public-classpath</config-type>
http://git-wip-us.apache.org/repos/asf/ambari/blob/5380fefd/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/params.py b/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/params.py
index 1d77787..36dc7c1 100644
--- a/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/params.py
@@ -16,17 +16,23 @@ See the License for the specific language governing permissions and
limitations under the License.
"""
+import os
+import functools
+
from resource_management import Script
+from resource_management.libraries.functions.default import default
+from resource_management.libraries.functions import get_kinit_path
+from resource_management.libraries.resources.hdfs_resource import HdfsResource
config = Script.get_config()
-
pxf_service_name = "pxf-service"
stack_name = str(config["hostLevelParams"]["stack_name"])
# Users and Groups
pxf_user = "pxf"
pxf_group = pxf_user
+hdfs_superuser = config['configurations']['hadoop-env']['hdfs_user']
hdfs_superuser_group = config["configurations"]["hdfs-site"]["dfs.permissions.superusergroup"]
user_group = config["configurations"]["cluster-env"]["user_group"]
tomcat_group = "tomcat"
@@ -44,3 +50,26 @@ default_exec_timeout = 600
# security related
security_enabled = config['configurations']['cluster-env']['security_enabled']
realm_name = config['configurations']['kerberos-env']['realm']
+
+#HBase
+is_hbase_installed = default("/clusterHostInfo/hbase_master_hosts", None) is not None
+
+# HDFS
+hdfs_site = config['configurations']['hdfs-site']
+default_fs = config['configurations']['core-site']['fs.defaultFS']
+
+security_enabled = config['configurations']['cluster-env']['security_enabled']
+hdfs_user_keytab = config['configurations']['hadoop-env']['hdfs_user_keytab']
+kinit_path_local = get_kinit_path(default('/configurations/kerberos-env/executable_search_paths', None))
+hdfs_principal_name = config['configurations']['hadoop-env']['hdfs_principal_name']
+
+# HDFSResource partial function
+HdfsResource = functools.partial(HdfsResource,
+ user=hdfs_superuser,
+ security_enabled=security_enabled,
+ keytab=hdfs_user_keytab,
+ kinit_path_local=kinit_path_local,
+ principal_name=hdfs_principal_name,
+ hdfs_site=hdfs_site,
+ default_fs=default_fs)
+
http://git-wip-us.apache.org/repos/asf/ambari/blob/5380fefd/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/pxf_constants.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/pxf_constants.py b/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/pxf_constants.py
new file mode 100644
index 0000000..3138379
--- /dev/null
+++ b/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/pxf_constants.py
@@ -0,0 +1,26 @@
+"""
+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.
+"""
+
+PXF_PORT = 51200
+
+# Service Check params
+service_check_hostname = "localhost"
+pxf_hdfs_test_dir = "/pxf_hdfs_smoke_test"
+pxf_hdfs_read_test_file = pxf_hdfs_test_dir + "/pxf_smoke_test_read_data"
+pxf_hdfs_write_test_file = pxf_hdfs_test_dir + "/pxf_smoke_test_write_data"
+pxf_hbase_test_table = "pxf_hbase_smoke_test_table"
http://git-wip-us.apache.org/repos/asf/ambari/blob/5380fefd/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/pxf_utils.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/pxf_utils.py b/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/pxf_utils.py
new file mode 100644
index 0000000..fe12d9a
--- /dev/null
+++ b/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/pxf_utils.py
@@ -0,0 +1,49 @@
+"""
+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.
+"""
+from resource_management.core.logger import Logger
+
+import socket
+import urllib2
+import urllib
+import subprocess
+
+def makeHTTPCall(url, header={}, body=None):
+ # timeout in seconds
+ timeout = 10
+ socket.setdefaulttimeout(timeout)
+
+ try:
+ data = None
+ if body:
+ data = urllib.urlencode(body)
+ req = urllib2.Request(url, data, header)
+
+ response = urllib2.urlopen(req)
+ responseContent = response.read()
+ return responseContent
+ except urllib2.URLError as e:
+ if hasattr(e, 'reason'):
+ Logger.error( 'Reason' + str(e.reason))
+ if hasattr(e, 'code'):
+ Logger.error('Error code: ' + str(e.code))
+ raise e
+
+
+def runLocalCmd(cmd):
+ return subprocess.call(cmd, shell=True)
+
http://git-wip-us.apache.org/repos/asf/ambari/blob/5380fefd/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/service_check.py b/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/service_check.py
new file mode 100644
index 0000000..72b59e4
--- /dev/null
+++ b/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/scripts/service_check.py
@@ -0,0 +1,266 @@
+"""
+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.
+"""
+from resource_management.libraries.script import Script
+from resource_management.core.exceptions import Fail
+from resource_management.core.logger import Logger
+from resource_management.core.system import System
+from resource_management.core.resources.system import Execute
+
+from pxf_utils import makeHTTPCall, runLocalCmd
+import pxf_constants
+
+import sys
+
+class PXFServiceCheck(Script):
+ """
+ Runs a set of simple PXF tests to verify if the service has been setup correctly
+ """
+ pxf_version = None
+ base_url = "http://" + pxf_constants.service_check_hostname + ":" + str(pxf_constants.PXF_PORT) + "/pxf/"
+ commonPXFHeaders = {
+ "X-GP-SEGMENT-COUNT": "1",
+ "X-GP-URL-PORT": pxf_constants.PXF_PORT,
+ "X-GP-SEGMENT-ID": "-1",
+ "X-GP-HAS-FILTER": "0",
+ "Accept": "application/json",
+ "X-GP-ALIGNMENT": "8",
+ "X-GP-ATTRS": "0",
+ "X-GP-FORMAT": "TEXT",
+ "X-GP-URL-HOST": pxf_constants.service_check_hostname
+ }
+
+
+ def service_check(self, env):
+ Logger.info("Starting PXF service checks..")
+
+ import params
+ self.pxf_version = self.__get_pxf_protocol_version()
+ try:
+ self.cleanup_test_data()
+ self.run_hdfs_tests()
+ if params.is_hbase_installed:
+ self.run_hbase_tests()
+ except:
+ msg = "PXF service check failed"
+ Logger.error(msg)
+ raise Fail(msg)
+ finally:
+ self.cleanup_test_data()
+
+ Logger.info("Service check completed successfully")
+
+
+ def cleanup_test_data(self):
+ """
+ Cleans up the temporary test data generated for service check
+ """
+ Logger.info("Cleaning up PXF smoke check temporary data")
+
+ import params
+ self.__cleanup_hdfs_data()
+ if params.is_hbase_installed:
+ self.__cleanup_hbase_data()
+
+
+ def __get_pxf_protocol_version(self):
+ """
+ Gets the pxf protocol version number
+ """
+ Logger.info("Fetching PXF protocol version")
+ url = self.base_url + "ProtocolVersion"
+ response = makeHTTPCall(url)
+ Logger.info(response)
+ # Sample response: 'PXF protocol version v14'
+ if response:
+ import re
+ # Extract the v14 from the output
+ match = re.search('.*(v\d*).*', response)
+ if match:
+ return match.group(1)
+
+ msg = "Unable to determine PXF version"
+ Logger.error(msg)
+ raise Fail(msg)
+
+
+ def run_hdfs_tests(self):
+ """
+ Runs a set of PXF HDFS checks
+ """
+ Logger.info("Running PXF HDFS checks")
+ self.__check_if_client_exists("HDFS")
+ self.__write_hdfs_data()
+ self.__check_pxf_hdfs_read()
+ self.__check_pxf_hdfs_write()
+
+
+ def __write_hdfs_data(self):
+ """
+ Writes some test HDFS data for the tests
+ """
+ Logger.info("Writing temporary HDFS test data")
+ import params
+ params.HdfsResource(pxf_constants.pxf_hdfs_test_dir,
+ type="directory",
+ action="create_on_execute",
+ mode=0777
+ )
+
+ params.HdfsResource(pxf_constants.pxf_hdfs_read_test_file,
+ type="file",
+ source="/etc/passwd",
+ action="create_on_execute"
+ )
+
+
+ def __check_pxf_read(self, headers):
+ """
+ Performs a generic PXF read
+ """
+ url = self.base_url + self.pxf_version + "/Fragmenter/getFragments?path="
+ try:
+ response = makeHTTPCall(url, headers)
+ if not "PXFFragments" in response:
+ Logger.error("Unable to find PXFFragments in the response")
+ raise
+ except:
+ msg = "PXF data read failed"
+ raise Fail(msg)
+
+
+ def __check_pxf_hdfs_read(self):
+ """
+ Reads the test HDFS data through PXF
+ """
+ Logger.info("Testing PXF HDFS read")
+ headers = {
+ "X-GP-DATA-DIR": pxf_constants.pxf_hdfs_test_dir,
+ "X-GP-profile": "HdfsTextSimple",
+ }
+ headers.update(self.commonPXFHeaders)
+ self.__check_pxf_read(headers)
+
+
+ def __check_pxf_hdfs_write(self):
+ """
+ Writes some test HDFS data through PXF
+ """
+ Logger.info("Testing PXF HDFS write")
+ headers = self.commonPXFHeaders.copy()
+ headers.update({
+ "X-GP-Profile" : "HdfsTextSimple",
+ "Content-Type":"application/octet-stream",
+ "Expect": "100-continue",
+ "X-GP-ALIGNMENT": "4",
+ "X-GP-SEGMENT-ID": "0",
+ "X-GP-SEGMENT-COUNT": "3",
+ "X-GP-URI": "pxf://" + pxf_constants.service_check_hostname + ":" + str(pxf_constants.PXF_PORT) + pxf_constants.pxf_hdfs_test_dir + "/?Profile=HdfsTextSimple",
+ "X-GP-DATA-DIR": pxf_constants.pxf_hdfs_test_dir + "/"
+ })
+
+ body = {"Sample" : " text"}
+ url = self.base_url + self.pxf_version + "/Writable/stream?path=" + pxf_constants.pxf_hdfs_write_test_file
+ try:
+ response = makeHTTPCall(url, headers, body)
+ if not "wrote" in response:
+ Logger.error("Unable to confirm write from the response")
+ raise
+ except:
+ msg = "PXF HDFS data write test failed"
+ raise Fail(msg)
+
+
+ def __cleanup_hdfs_data(self):
+ """
+ Cleans up the test HDFS data
+ """
+ Logger.info("Cleaning up temporary HDFS test data")
+ import params
+ params.HdfsResource(pxf_constants.pxf_hdfs_read_test_file,
+ type="file",
+ action="delete_on_execute"
+ )
+ params.HdfsResource(pxf_constants.pxf_hdfs_test_dir,
+ type="directory",
+ action="delete_on_execute"
+ )
+
+
+ def run_hbase_tests(self):
+ """
+ Runs a set of PXF HBase checks
+ """
+ Logger.info("Running PXF HBase checks")
+ self.__check_if_client_exists("HBase")
+ self.__write_hbase_data()
+ self.__check_pxf_hbase_read()
+
+
+ def __write_hbase_data(self):
+ """
+ Creates a temporary HBase table for the service checks
+ """
+ Logger.info("Creating temporary HBase test data")
+ Execute("echo \"create '" + pxf_constants.pxf_hbase_test_table + "', 'cf'\"|hbase shell", logoutput = True)
+ Execute("echo \"put '" + pxf_constants.pxf_hbase_test_table + "', 'row1', 'cf:a', 'value1'; put '" + pxf_constants.pxf_hbase_test_table + "', 'row1', 'cf:b', 'value2'\" | hbase shell", logoutput = True)
+
+
+ def __check_pxf_hbase_read(self):
+ """
+ Checks reading HBase data through PXF
+ """
+ Logger.info("Testing PXF HBase data read")
+ headers = {
+ "X-GP-DATA-DIR": pxf_constants.pxf_hbase_test_table,
+ "X-GP-profile": "HBase",
+ }
+ headers.update(self.commonPXFHeaders)
+
+ self.__check_pxf_read(headers)
+
+
+ def __cleanup_hbase_data(self):
+ """
+ Cleans up the test HBase data
+ """
+ Logger.info("Cleaning up HBase test data")
+ Execute("echo \"disable '" + pxf_constants.pxf_hbase_test_table + "'\"|hbase shell > /dev/null 2>&1", logoutput = True)
+ Execute("echo \"drop '" + pxf_constants.pxf_hbase_test_table + "'\"|hbase shell > /dev/null 2>&1", logoutput = True)
+
+
+ def __package_exists(self, pkg):
+ """
+ Low level function to check if a rpm is installed
+ """
+ if System.get_instance().os_family == "suse":
+ return not runLocalCmd("zypper search " + pkg)
+ else:
+ return not runLocalCmd("yum list installed | grep -i " + pkg)
+
+
+ def __check_if_client_exists(self, serviceName):
+ Logger.info("Checking if " + serviceName + " client libraries exist")
+ if not self.__package_exists(serviceName):
+ error_msg = serviceName + "client libraries do not exist on the PXF node"
+ Logger.error(msg)
+ raise Fail(msg)
+
+
+if __name__ == "__main__":
+ PXFServiceCheck().execute()
+
[06/22] ambari git commit: Revert "AMBARI-14718. on region server
restart ambari is setting /tmp to hbase:hadoop (aonishuk)"
Posted by nc...@apache.org.
Revert "AMBARI-14718. on region server restart ambari is setting /tmp to hbase:hadoop (aonishuk)"
This reverts commit 1c2c6a9f6678931936585761a242651b8a6871ce.
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/86233618
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/86233618
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/86233618
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 862336189317b6dab6e86377049532d5264f0636
Parents: ddf479e
Author: Mahadev Konar <ma...@apache.org>
Authored: Wed Jan 20 10:32:35 2016 -0800
Committer: Mahadev Konar <ma...@apache.org>
Committed: Wed Jan 20 10:32:35 2016 -0800
----------------------------------------------------------------------
.../HBASE/0.96.0.2.0/configuration/hbase-env.xml | 2 +-
.../HBASE/0.96.0.2.0/package/scripts/hbase.py | 5 +++--
.../HBASE/0.96.0.2.0/package/scripts/params_linux.py | 2 ++
.../src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py | 4 ++++
.../src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py | 6 ++++++
.../python/stacks/2.0.6/HBASE/test_hbase_regionserver.py | 8 ++++++++
.../python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py | 4 ++++
7 files changed, 28 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/86233618/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/configuration/hbase-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/configuration/hbase-env.xml b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/configuration/hbase-env.xml
index 62c7c93..cabd4fd 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/configuration/hbase-env.xml
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/configuration/hbase-env.xml
@@ -115,7 +115,7 @@ and the -Xmn ratio (hbase_regionserver_xmn_ratio) exceeds this value.
<property>
<name>hbase_java_io_tmpdir</name>
- <value>{{exec_tmp_dir}}/hbase_java_io_tmpdir</value>
+ <value>/tmp</value>
<description>Used in hbase-env.sh as HBASE_OPTS=-Djava.io.tmpdir=java_io_tmpdir</description>
<value-attributes>
<type>directory</type>
http://git-wip-us.apache.org/repos/asf/ambari/blob/86233618/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
index 71ce02b..c407a93 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
@@ -22,7 +22,6 @@ from resource_management import *
import sys
from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
from ambari_commons import OSConst
-from resource_management.core.source import InlineTemplate
@OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
@@ -57,7 +56,9 @@ def hbase(name=None):
create_parents = True
)
- Directory(InlineTemplate(params.java_io_tmpdir).get_content(),
+ Directory(params.java_io_tmpdir,
+ owner = params.hbase_user,
+ group = params.user_group,
create_parents = True,
mode=0777
)
http://git-wip-us.apache.org/repos/asf/ambari/blob/86233618/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
index 337f09d..f37844c 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py
@@ -36,6 +36,8 @@ from resource_management.libraries.functions import is_empty
from resource_management.libraries.functions import get_unique_id_and_date
from resource_management.libraries.script.script import Script
+from resource_management.libraries.functions.substitute_vars import substitute_vars
+
# server configurations
config = Script.get_config()
exec_tmp_dir = Script.get_tmp_dir()
http://git-wip-us.apache.org/repos/asf/ambari/blob/86233618/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py
index 6dc4b0b..9f3e19e 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py
@@ -47,6 +47,8 @@ class TestHBaseClient(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
+ owner = 'hbase',
+ group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -143,6 +145,8 @@ class TestHBaseClient(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
+ owner = 'hbase',
+ group = 'hadoop',
create_parents = True,
mode = 0777
)
http://git-wip-us.apache.org/repos/asf/ambari/blob/86233618/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
index 13b2e33..7c6d10e 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
@@ -243,6 +243,8 @@ class TestHBaseMaster(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
+ owner = 'hbase',
+ group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -378,6 +380,8 @@ class TestHBaseMaster(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
+ owner = 'hbase',
+ group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -522,6 +526,8 @@ class TestHBaseMaster(RMFTestCase):
group = 'hadoop',
create_parents = True)
self.assertResourceCalled('Directory', '/tmp',
+ owner = 'hbase',
+ group = 'hadoop',
create_parents = True,
mode = 0777
)
http://git-wip-us.apache.org/repos/asf/ambari/blob/86233618/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py
index 58ca7ef..c36bd89 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py
@@ -136,6 +136,8 @@ class TestHbaseRegionServer(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
+ owner = 'hbase',
+ group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -232,6 +234,8 @@ class TestHbaseRegionServer(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
+ owner = 'hbase',
+ group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -338,6 +342,8 @@ class TestHbaseRegionServer(RMFTestCase):
group = 'hadoop',
create_parents = True)
self.assertResourceCalled('Directory', '/tmp',
+ owner = 'hbase',
+ group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -452,6 +458,8 @@ class TestHbaseRegionServer(RMFTestCase):
group = 'hadoop',
create_parents = True)
self.assertResourceCalled('Directory', '/tmp',
+ owner = 'hbase',
+ group = 'hadoop',
create_parents = True,
mode = 0777
)
http://git-wip-us.apache.org/repos/asf/ambari/blob/86233618/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py
index 7722af0..6f3199e 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_phoenix_queryserver.py
@@ -238,6 +238,8 @@ class TestPhoenixQueryServer(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
+ owner = 'hbase',
+ group = 'hadoop',
create_parents = True,
mode = 0777
)
@@ -349,6 +351,8 @@ class TestPhoenixQueryServer(RMFTestCase):
create_parents = True,
)
self.assertResourceCalled('Directory', '/tmp',
+ owner = 'hbase',
+ group = 'hadoop',
create_parents = True,
mode = 0777
)
[19/22] ambari git commit: AMBARI-14747. When enable disable Kerberos
multiple times - Kerberos configs becomes empty. (mpapirkovskyy)
Posted by nc...@apache.org.
AMBARI-14747. When enable disable Kerberos multiple times - Kerberos configs becomes empty. (mpapirkovskyy)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a9c644f9
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a9c644f9
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a9c644f9
Branch: refs/heads/branch-dev-patch-upgrade
Commit: a9c644f94b9c03e47a7be518a5873428635a1fc4
Parents: 59ed986
Author: Myroslav Papirkovskyy <mp...@hortonworks.com>
Authored: Wed Jan 20 22:06:07 2016 +0200
Committer: Myroslav Papirkovskyy <mp...@hortonworks.com>
Committed: Thu Jan 21 20:20:36 2016 +0200
----------------------------------------------------------------------
.../AmbariManagementControllerImpl.java | 9 +++++++
.../ambari/server/orm/dao/ClusterDAO.java | 19 +++++++++++++
.../apache/ambari/server/state/ServiceImpl.java | 28 +++++++++++++++++---
.../AmbariManagementControllerImplTest.java | 5 ++++
.../server/state/cluster/ClusterTest.java | 19 +++++++++++--
5 files changed, 75 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/a9c644f9/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index 41126f8..5010311 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -1502,6 +1502,15 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
isConfigurationCreationNeeded = true;
break;
} else {
+ if (clusterConfig.getServiceConfigVersions().isEmpty()) {
+ //If there's no service config versions containing this config, recreate it even if exactly equal
+ LOG.warn("Existing desired config doesn't belong to any service config version, " +
+ "forcing config recreation, " +
+ "clusterName={}, type = {}, tag={}", cluster.getClusterName(), clusterConfig.getType(),
+ clusterConfig.getTag());
+ isConfigurationCreationNeeded = true;
+ break;
+ }
for (Entry<String, String> property : requestConfigProperties.entrySet()) {
if (!StringUtils.equals(property.getValue(), clusterConfigProperties.get(property.getKey()))) {
isConfigurationCreationNeeded = true;
http://git-wip-us.apache.org/repos/asf/ambari/blob/a9c644f9/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
index 1c0e38a..7f499f0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
@@ -241,6 +241,25 @@ public class ClusterDAO {
}
/**
+ * Gets selected mappings for provided config types
+ * @param clusterId cluster id
+ * @param types config types for mappings
+ * @return
+ */
+ @RequiresSession
+ public List<ClusterConfigMappingEntity> getSelectedConfigMappingByTypes(long clusterId, List<String> types) {
+ TypedQuery<ClusterConfigMappingEntity> query = entityManagerProvider.get().createQuery(
+ "SELECT mapping FROM ClusterConfigMappingEntity mapping " +
+ "WHERE mapping.clusterId = :clusterId AND mapping.typeName IN :type " +
+ "AND mapping.selectedInd > 0", ClusterConfigMappingEntity.class);
+
+ query.setParameter("clusterId", clusterId);
+ query.setParameter("type", types);
+
+ return daoUtils.selectList(query);
+ }
+
+ /**
* Create Cluster entity in Database
* @param clusterEntity entity to create
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/a9c644f9/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
index 0a998df..487489b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
@@ -39,6 +39,7 @@ import org.apache.ambari.server.orm.dao.ServiceConfigDAO;
import org.apache.ambari.server.orm.dao.ServiceDesiredStateDAO;
import org.apache.ambari.server.orm.dao.StackDAO;
import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
+import org.apache.ambari.server.orm.entities.ClusterConfigMappingEntity;
import org.apache.ambari.server.orm.entities.ClusterEntity;
import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
import org.apache.ambari.server.orm.entities.ClusterServiceEntityPK;
@@ -563,10 +564,31 @@ public class ServiceImpl implements Service {
@Transactional
void deleteAllServiceConfigs() throws AmbariException {
+ ArrayList<String> serviceConfigTypes = new ArrayList<>();
+ ServiceConfigEntity lastServiceConfigEntity = serviceConfigDAO.findMaxVersion(getClusterId(), getName());
+ //ensure service config version exist
+ if (lastServiceConfigEntity != null) {
+ for (ClusterConfigEntity configEntity : lastServiceConfigEntity.getClusterConfigEntities()) {
+ serviceConfigTypes.add(configEntity.getType());
+ }
+
+ LOG.info("Deselecting config mapping for cluster, clusterId={}, configTypes={} ",
+ getClusterId(), serviceConfigTypes);
+
+ List<ClusterConfigMappingEntity> configMappingEntities =
+ clusterDAO.getSelectedConfigMappingByTypes(getClusterId(), serviceConfigTypes);
+
+ for (ClusterConfigMappingEntity configMappingEntity : configMappingEntities) {
+ configMappingEntity.setSelected(0);
+ }
+
+ clusterDAO.mergeConfigMappings(configMappingEntities);
+ }
+
LOG.info("Deleting all serviceconfigs for service"
- + ", clusterName=" + cluster.getClusterName()
- + ", serviceName=" + getName());
-
+ + ", clusterName=" + cluster.getClusterName()
+ + ", serviceName=" + getName());
+
List<ServiceConfigEntity> serviceConfigEntities =
serviceConfigDAO.findByService(cluster.getClusterId(), getName());
http://git-wip-us.apache.org/repos/asf/ambari/blob/a9c644f9/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
index 33d1c29..42e3b10 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
@@ -70,6 +70,7 @@ import org.apache.ambari.server.state.State;
import org.easymock.Capture;
import org.junit.Before;
import org.junit.BeforeClass;
+import org.junit.Ignore;
import org.junit.Test;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -585,8 +586,12 @@ public class AmbariManagementControllerImplTest {
/**
* Ensure that processing update request does not fail on configuration
* properties with no value specified (no value = null reference value)
+ * TODO disabled for now as tests nothing, check what exactly should be tested here
+ * updateCluster request was noop due to equality on cluster and request configs (both contained null)
+ * mocks are too limited to pass further these base checks
*/
@Test
+ @Ignore
public void testUpdateClustersWithNullConfigPropertyValues() throws Exception {
// member state mocks
Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/a9c644f9/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
index 2c6b0c3..2ffcd5d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
@@ -103,6 +103,7 @@ import org.apache.ambari.server.state.configgroup.ConfigGroupFactory;
import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
import org.apache.ambari.server.state.host.HostHealthyHeartbeatEvent;
import org.apache.ambari.server.state.host.HostRegistrationRequestEvent;
+import org.apache.commons.lang.StringUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
@@ -1068,8 +1069,22 @@ public class ClusterTest {
Assert.assertEquals(2,
em.createQuery("SELECT config from ClusterConfigEntity config").getResultList().size());
// ClusterConfigMapping
- Assert.assertEquals(2,
- em.createQuery("SELECT configmapping from ClusterConfigMappingEntity configmapping").getResultList().size());
+ List<ClusterConfigMappingEntity> configMappingEntities =
+ em.createQuery("SELECT configmapping from ClusterConfigMappingEntity configmapping",
+ ClusterConfigMappingEntity.class).getResultList();
+
+ Assert.assertEquals(2, configMappingEntities.size());
+
+ for (ClusterConfigMappingEntity configMappingEntity : configMappingEntities) {
+ if (StringUtils.equals(configMappingEntity.getType(), "core-site")) {
+ assertEquals("core-site is not part of HDFS in test stack, should remain mapped to cluster",
+ 1, configMappingEntity.isSelected());
+ }
+ if (StringUtils.equals(configMappingEntity.getType(), "hdfs-site")) {
+ assertEquals("hdfs-site should be unmapped from cluster when HDFS service is removed",
+ 0, configMappingEntity.isSelected());
+ }
+ }
// ServiceConfigMapping
Assert.assertEquals(0,
[20/22] ambari git commit: Unit Test for AMBARI-14729 : API does not
return host component metrics. (avijayan)
Posted by nc...@apache.org.
Unit Test for AMBARI-14729 : API does not return host component metrics. (avijayan)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/780cb691
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/780cb691
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/780cb691
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 780cb6912306beee5fad9b93652045d98ccdc362
Parents: a9c644f
Author: Aravindan Vijayan <av...@hortonworks.com>
Authored: Thu Jan 21 10:19:08 2016 -0800
Committer: Aravindan Vijayan <av...@hortonworks.com>
Committed: Thu Jan 21 10:21:54 2016 -0800
----------------------------------------------------------------------
.../timeline/AMSPropertyProviderTest.java | 179 ++++++++++++++++++-
.../ams/single_host_component_metrics_h1.json | 21 +++
.../ams/single_host_component_metrics_h2.json | 22 +++
3 files changed, 214 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/780cb691/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java
index 70cd303..1394081 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java
@@ -82,6 +82,7 @@ public class AMSPropertyProviderTest {
private static final String PROPERTY_ID1 = PropertyHelper.getPropertyId("metrics/cpu", "cpu_user");
private static final String PROPERTY_ID2 = PropertyHelper.getPropertyId("metrics/memory", "mem_free");
private static final String PROPERTY_ID3 = PropertyHelper.getPropertyId("metrics/dfs/datanode", "blocks_replicated");
+ private static final String PROPERTY_ID4 = PropertyHelper.getPropertyId("metrics/dfs/datanode", "blocks_removed");
private static final String CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "cluster_name");
private static final String HOST_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "host_name");
private static final String COMPONENT_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "component_name");
@@ -122,6 +123,7 @@ public class AMSPropertyProviderTest {
testAggregateFunctionForComponentMetrics();
testFilterOutOfBandMetricData();
testPopulateResourcesForHostComponentHostMetrics();
+ testPopulateResourcesForHostComponentMetricsForMultipleHosts();
}
@Test
@@ -139,6 +141,7 @@ public class AMSPropertyProviderTest {
testAggregateFunctionForComponentMetrics();
testFilterOutOfBandMetricData();
testPopulateResourcesForHostComponentHostMetrics();
+ testPopulateResourcesForHostComponentMetricsForMultipleHosts();
}
@Test
@@ -156,6 +159,7 @@ public class AMSPropertyProviderTest {
testAggregateFunctionForComponentMetrics();
testFilterOutOfBandMetricData();
testPopulateResourcesForHostComponentHostMetrics();
+ testPopulateResourcesForHostComponentMetricsForMultipleHosts();
}
@Test(expected = AuthorizationException.class)
@@ -175,6 +179,7 @@ public class AMSPropertyProviderTest {
testAggregateFunctionForComponentMetrics();
testFilterOutOfBandMetricData();
testPopulateResourcesForHostComponentHostMetrics();
+ testPopulateResourcesForHostComponentMetricsForMultipleHosts();
}
public void testPopulateResourcesForSingleHostMetric() throws Exception {
@@ -789,8 +794,157 @@ public class AMSPropertyProviderTest {
Assert.assertEquals(8, val.length);
}
+ static class TestStreamProviderForHostComponentMultipleHostsMetricsTest extends TestStreamProvider {
+ String hostComponentMetricFilePath_h1 = FILE_PATH_PREFIX + "single_host_component_metrics_h1.json";
+ String hostComponentMetricFilePath_h2 = FILE_PATH_PREFIX + "single_host_component_metrics_h2.json";
+
+ public TestStreamProviderForHostComponentMultipleHostsMetricsTest(String fileName) {
+ super(fileName);
+ }
+
+ @Override
+ public InputStream readFrom(String spec) throws IOException {
+ if (spec.contains("h1")) {
+ this.fileName = hostComponentMetricFilePath_h1;
+ } else {
+ this.fileName = hostComponentMetricFilePath_h2;
+ }
+
+ specs.add(spec);
+
+ return super.readFrom(spec);
+ }
+ }
+
+ public void testPopulateResourcesForHostComponentMetricsForMultipleHosts() throws Exception {
+ setUpCommonMocks();
+ TestStreamProviderForHostComponentMultipleHostsMetricsTest streamProvider =
+ new TestStreamProviderForHostComponentMultipleHostsMetricsTest(null);
+ injectCacheEntryFactoryWithStreamProvider(streamProvider);
+ TestMetricHostProvider metricHostProvider = new TestMetricHostProvider("h1");
+ ComponentSSLConfiguration sslConfiguration = mock(ComponentSSLConfiguration.class);
+
+ TimelineMetricCacheProvider cacheProviderMock = EasyMock.createMock(TimelineMetricCacheProvider.class);
+ TimelineMetricCache cacheMock = EasyMock.createMock(TimelineMetricCache.class);
+ expect(cacheProviderMock.getTimelineMetricsCache()).andReturn(cacheMock).anyTimes();
+
+ Map<String, Map<String, PropertyInfo>> propertyIds = PropertyHelper.getMetricPropertyIds(Resource.Type.HostComponent);
+
+ Resource resource = new ResourceImpl(Resource.Type.Host);
+ resource.setProperty(CLUSTER_NAME_PROPERTY_ID, "c1");
+ resource.setProperty(HOST_NAME_PROPERTY_ID, "h1");
+ resource.setProperty(COMPONENT_NAME_PROPERTY_ID, "DATANODE");
+ Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>();
+
+ temporalInfoMap.put(PROPERTY_ID4, new TemporalInfoImpl(1416445244801L, 1416448936464L, 1L));
+ Request request = PropertyHelper.getReadRequest(
+ new HashSet<String>() {{
+ add(PROPERTY_ID4);
+ add("params/padding/NONE"); // Ignore padding to match result size
+ }},
+ temporalInfoMap);
+
+ AMSPropertyProvider propertyProvider = new AMSHostComponentPropertyProvider(
+ propertyIds,
+ streamProvider,
+ sslConfiguration,
+ cacheProviderMock,
+ metricHostProvider,
+ CLUSTER_NAME_PROPERTY_ID,
+ HOST_NAME_PROPERTY_ID,
+ COMPONENT_NAME_PROPERTY_ID
+ );
+
+ Set<Resource> resources1 =
+ propertyProvider.populateResources(Collections.singleton(resource), request, null);
+ Assert.assertEquals(1, resources1.size());
+ Resource res1 = resources1.iterator().next();
+ Map<String, Object> properties = PropertyHelper.getProperties(resources1.iterator().next());
+ Assert.assertNotNull(properties);
+
+ /////////////////////////////////////
+ metricHostProvider = new TestMetricHostProvider("h2");
+ cacheProviderMock = EasyMock.createMock(TimelineMetricCacheProvider.class);
+ cacheMock = EasyMock.createMock(TimelineMetricCache.class);
+ expect(cacheProviderMock.getTimelineMetricsCache()).andReturn(cacheMock).anyTimes();
+
+ resource = new ResourceImpl(Resource.Type.Host);
+ resource.setProperty(CLUSTER_NAME_PROPERTY_ID, "c1");
+ resource.setProperty(HOST_NAME_PROPERTY_ID, "h2");
+ resource.setProperty(COMPONENT_NAME_PROPERTY_ID, "DATANODE");
+ temporalInfoMap = new HashMap<String, TemporalInfo>();
+ temporalInfoMap.put(PROPERTY_ID4, new TemporalInfoImpl(1416445244801L, 1416448936464L, 1L));
+ request = PropertyHelper.getReadRequest(
+ new HashSet<String>() {{
+ add(PROPERTY_ID4);
+ add("params/padding/NONE"); // Ignore padding to match result size
+ }},
+ temporalInfoMap);
+
+ propertyProvider = new AMSHostComponentPropertyProvider(
+ propertyIds,
+ streamProvider,
+ sslConfiguration,
+ cacheProviderMock,
+ metricHostProvider,
+ CLUSTER_NAME_PROPERTY_ID,
+ HOST_NAME_PROPERTY_ID,
+ COMPONENT_NAME_PROPERTY_ID
+ );
+
+ resource.setProperty(HOST_NAME_PROPERTY_ID, "h2");
+
+ Set<Resource> resources2 =
+ propertyProvider.populateResources(Collections.singleton(resource), request, null);
+ Assert.assertEquals(1, resources2.size());
+ Resource res2 = resources2.iterator().next();
+ properties = PropertyHelper.getProperties(resources2.iterator().next());
+ Assert.assertNotNull(properties);
+
+ Set<String> specs = streamProvider.getAllSpecs();
+ Assert.assertEquals(2, specs.size());
+
+ URIBuilder uriBuilder1 = AMSPropertyProvider.getAMSUriBuilder("localhost", 8188);
+ Number[][] val;
+
+ for (String spec : specs) {
+ Assert.assertNotNull(spec);
+
+ if (spec.contains("h2")) {
+ uriBuilder1.setParameter("metricNames", "dfs.datanode.blocks_removed");
+ uriBuilder1.setParameter("hostname", "h2");
+ uriBuilder1.setParameter("appId", "DATANODE");
+ uriBuilder1.setParameter("startTime", "1416445244801");
+ uriBuilder1.setParameter("endTime", "1416448936464");
+ Assert.assertEquals(uriBuilder1.toString(), spec);
+ val = (Number[][]) res2.getPropertyValue(PROPERTY_ID4);
+ Assert.assertNotNull("No value for property " + PROPERTY_ID4, val);
+ Assert.assertEquals(9, val.length);
+ } else {
+ uriBuilder1.setParameter("metricNames", "dfs.datanode.blocks_removed");
+ uriBuilder1.setParameter("hostname", "h1");
+ uriBuilder1.setParameter("appId", "DATANODE");
+ uriBuilder1.setParameter("startTime", "1416445244801");
+ uriBuilder1.setParameter("endTime", "1416448936464");
+ Assert.assertEquals(uriBuilder1.toString(), spec);
+ val = (Number[][]) res1.getPropertyValue(PROPERTY_ID4);
+ Assert.assertNotNull("No value for property " + PROPERTY_ID4, val);
+ Assert.assertEquals(8, val.length);
+ }
+ }
+ }
+
public static class TestMetricHostProvider implements MetricHostProvider {
+ private String hostName;
+
+ public TestMetricHostProvider() {
+ }
+
+ public TestMetricHostProvider(String hostName) {
+ this.hostName = hostName;
+ }
+
@Override
public String getCollectorHostName(String clusterName, MetricsService service)
throws SystemException {
@@ -799,7 +953,7 @@ public class AMSPropertyProviderTest {
@Override
public String getHostName(String clusterName, String componentName) throws SystemException {
- return "h1";
+ return (hostName != null) ? hostName : "h1";
}
@Override
@@ -820,21 +974,30 @@ public class AMSPropertyProviderTest {
// Helper function to setup common Mocks.
private void setUpCommonMocks() throws AmbariException {
-
- AmbariManagementController amc = createNiceMock(AmbariManagementController.class);
+ AmbariManagementController ams = createNiceMock(AmbariManagementController.class);
PowerMock.mockStatic(AmbariServer.class);
- expect(AmbariServer.getController()).andReturn(amc).anyTimes();
+ expect(AmbariServer.getController()).andReturn(ams).anyTimes();
+ AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class);
Clusters clusters = createNiceMock(Clusters.class);
Cluster cluster = createNiceMock(Cluster.class);
- expect(amc.getClusters()).andReturn(clusters).anyTimes();
- expect(clusters.getCluster(CLUSTER_NAME_PROPERTY_ID)).andReturn(cluster).anyTimes();
- expect(cluster.getResourceId()).andReturn(2L).anyTimes();
+ ComponentInfo componentInfo = createNiceMock(ComponentInfo.class);
+ StackId stackId= new StackId("HDP","2.2");
+ expect(ams.getClusters()).andReturn(clusters).anyTimes();
try {
expect(clusters.getCluster(anyObject(String.class))).andReturn(cluster).anyTimes();
} catch (AmbariException e) {
e.printStackTrace();
}
- replay(amc, clusters, cluster);
+ expect(cluster.getCurrentStackVersion()).andReturn(stackId).anyTimes();
+ expect(ams.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+ expect(ambariMetaInfo.getComponentToService(anyObject(String.class),
+ anyObject(String.class), anyObject(String.class))).andReturn("HDFS").anyTimes();
+ expect(ambariMetaInfo.getComponent(anyObject(String.class),anyObject(String.class),
+ anyObject(String.class), anyObject(String.class)))
+ .andReturn(componentInfo).anyTimes();
+ expect(componentInfo.getTimelineAppid()).andReturn(null).anyTimes();
+
+ replay(ams, clusters, cluster, ambariMetaInfo, componentInfo);
PowerMock.replayAll();
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/780cb691/ambari-server/src/test/resources/ams/single_host_component_metrics_h1.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/ams/single_host_component_metrics_h1.json b/ambari-server/src/test/resources/ams/single_host_component_metrics_h1.json
new file mode 100644
index 0000000..988c249
--- /dev/null
+++ b/ambari-server/src/test/resources/ams/single_host_component_metrics_h1.json
@@ -0,0 +1,21 @@
+{
+ "metrics": [
+ {
+ "timestamp": 1416445244801,
+ "type": "Long",
+ "metricname": "dfs.datanode.blocks_removed",
+ "appid": "datanode",
+ "hostname": "h1",
+ "starttime": 1416445244801,
+ "metrics": {
+ "1416445244801": 0.0,
+ "1416445259801": 0.0,
+ "1416445274801": 0.0,
+ "1416445289801": 0.0,
+ "1416445304801": 0.0,
+ "1416445319801": 0.0,
+ "1416445364801": 0.0,
+ "1416445379801": 0.0
+ }
+ }
+ ]}
http://git-wip-us.apache.org/repos/asf/ambari/blob/780cb691/ambari-server/src/test/resources/ams/single_host_component_metrics_h2.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/ams/single_host_component_metrics_h2.json b/ambari-server/src/test/resources/ams/single_host_component_metrics_h2.json
new file mode 100644
index 0000000..450cec8
--- /dev/null
+++ b/ambari-server/src/test/resources/ams/single_host_component_metrics_h2.json
@@ -0,0 +1,22 @@
+{
+ "metrics": [
+ {
+ "timestamp": 1416445244801,
+ "type": "Long",
+ "metricname": "dfs.datanode.blocks_removed",
+ "appid": "datanode",
+ "hostname": "h2",
+ "starttime": 1416445244801,
+ "metrics": {
+ "1416445244801": 1.0,
+ "1416445259801": 1.0,
+ "1416445274801": 1.0,
+ "1416445289801": 1.0,
+ "1416445304801": 1.0,
+ "1416445319801": 1.0,
+ "1416445364801": 1.0,
+ "1416445379801": 1.0,
+ "1416445384801": 1.0
+ }
+ }
+ ]}
[16/22] ambari git commit: AMBARI-14757 host check doesn't show
warning about working firewall on the host (Suse only) (dsen)
Posted by nc...@apache.org.
AMBARI-14757 host check doesn't show warning about working firewall on the host (Suse only) (dsen)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/3c455299
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/3c455299
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/3c455299
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 3c455299d4a189ac27ea3c1473b6a38ff1192c39
Parents: b0aeefc
Author: Dmytro Sen <ds...@apache.org>
Authored: Thu Jan 21 15:59:56 2016 +0200
Committer: Dmytro Sen <ds...@apache.org>
Committed: Thu Jan 21 15:59:56 2016 +0200
----------------------------------------------------------------------
ambari-common/src/main/python/ambari_commons/firewall.py | 6 +++---
ambari-server/src/test/python/TestAmbariServer.py | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/3c455299/ambari-common/src/main/python/ambari_commons/firewall.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_commons/firewall.py b/ambari-common/src/main/python/ambari_commons/firewall.py
index e6a1ff9..64d396b 100644
--- a/ambari-common/src/main/python/ambari_commons/firewall.py
+++ b/ambari-common/src/main/python/ambari_commons/firewall.py
@@ -129,7 +129,7 @@ class Fedora18FirewallChecks(FirewallChecks):
class SuseFirewallChecks(FirewallChecks):
def __init__(self):
super(SuseFirewallChecks, self).__init__()
- self.FIREWALL_SERVICE_NAME = "SuSEfirewall2"
+ self.FIREWALL_SERVICE_NAME = "rcSuSEfirewall2"
def get_command(self):
return "%s %s" % (self.FIREWALL_SERVICE_NAME, self.SERVICE_SUBCMD)
@@ -137,9 +137,9 @@ class SuseFirewallChecks(FirewallChecks):
def check_result(self):
result = False
if self.returncode == 0:
- if "SuSEfirewall2 not active" in self.stdoutdata:
+ if "unused" in self.stdoutdata:
result = False
- elif "### iptables" in self.stdoutdata:
+ elif "running" in self.stdoutdata:
result = True
return result
http://git-wip-us.apache.org/repos/asf/ambari/blob/3c455299/ambari-server/src/test/python/TestAmbariServer.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestAmbariServer.py b/ambari-server/src/test/python/TestAmbariServer.py
index ad4505a..b0e7e9c 100644
--- a/ambari-server/src/test/python/TestAmbariServer.py
+++ b/ambari-server/src/test/python/TestAmbariServer.py
@@ -1880,11 +1880,11 @@ class TestAmbariServer(TestCase):
get_os_family_mock.return_value = OSConst.SUSE_FAMILY
firewall_obj = Firewall().getFirewallObject()
- p.communicate.return_value = ("### iptables", "err")
+ p.communicate.return_value = ("running", "err")
p.returncode = 0
self.assertEqual("SuseFirewallChecks", firewall_obj.__class__.__name__)
self.assertTrue(firewall_obj.check_firewall())
- p.communicate.return_value = ("SuSEfirewall2 not active", "err")
+ p.communicate.return_value = ("unused", "err")
p.returncode = 0
self.assertFalse(firewall_obj.check_firewall())
self.assertEqual("err", firewall_obj.stderrdata)
[07/22] ambari git commit: AMBARI-14723. NPE when provisioning
cluster with a Cluster template which doesn't contain all hostgroups defined
in Blueprint. (Sandor Magyari via rnettleton)
Posted by nc...@apache.org.
AMBARI-14723. NPE when provisioning cluster with a Cluster template which doesn't contain all hostgroups defined in Blueprint. (Sandor Magyari via rnettleton)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f8fe788a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f8fe788a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f8fe788a
Branch: refs/heads/branch-dev-patch-upgrade
Commit: f8fe788a2d208acff4a88fc5a1a17549cfe16100
Parents: 8623361
Author: Bob Nettleton <rn...@hortonworks.com>
Authored: Wed Jan 20 13:33:03 2016 -0500
Committer: Bob Nettleton <rn...@hortonworks.com>
Committed: Wed Jan 20 13:33:18 2016 -0500
----------------------------------------------------------------------
.../server/topology/ClusterTopologyImpl.java | 7 ++++-
.../topology/ClusterTopologyImplTest.java | 28 +++++++++++++++++++-
2 files changed, 33 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f8fe788a/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java
index 91965f1..05dc504 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java
@@ -173,7 +173,12 @@ public class ClusterTopologyImpl implements ClusterTopology {
Collection<String> hosts = new ArrayList<String>();
Collection<String> hostGroups = getHostGroupsForComponent(component);
for (String group : hostGroups) {
- hosts.addAll(getHostGroupInfo().get(group).getHostNames());
+ HostGroupInfo hostGroupInfo = getHostGroupInfo().get(group);
+ if (hostGroupInfo != null) {
+ hosts.addAll(hostGroupInfo.getHostNames());
+ } else {
+ LOG.warn("HostGroup {} not found, when checking for hosts for component {}", group, component);
+ }
}
return hosts;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f8fe788a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterTopologyImplTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterTopologyImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterTopologyImplTest.java
index 7c68482..95e58ae 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterTopologyImplTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterTopologyImplTest.java
@@ -24,6 +24,7 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -101,6 +102,11 @@ public class ClusterTopologyImplTest {
Set<Component> group1Components = new HashSet<Component>();
group1Components.add(new Component("component1"));
group1Components.add(new Component("component2"));
+
+ Set<String> group1ComponentNames = new HashSet<String>();
+ group1ComponentNames.add("component1");
+ group1ComponentNames.add("component2");
+
Set<Component> group2Components = new HashSet<Component>();
group2Components.add(new Component("component3"));
Set<Component> group3Components = new HashSet<Component>();
@@ -123,6 +129,11 @@ public class ClusterTopologyImplTest {
expect(group2.getComponents()).andReturn(group2Components).anyTimes();
expect(group3.getComponents()).andReturn(group3Components).anyTimes();
expect(group4.getComponents()).andReturn(group4Components).anyTimes();
+
+ expect(group1.getComponentNames()).andReturn(group1ComponentNames).anyTimes();
+ expect(group2.getComponentNames()).andReturn(Collections.singletonList("component3")).anyTimes();
+ expect(group3.getComponentNames()).andReturn(Collections.singletonList("component4")).anyTimes();
+ expect(group4.getComponentNames()).andReturn(Collections.singletonList("component5")).anyTimes();
}
@After
@@ -156,7 +167,7 @@ public class ClusterTopologyImplTest {
}
@Test
- public void testCreate_validatorSuccess() throws Exception {
+ public void testCreate_validatorSuccess() throws Exception {
TestTopologyRequest request = new TestTopologyRequest(TopologyRequest.Type.PROVISION);
TopologyValidator validator = createStrictMock(TopologyValidator.class);
@@ -182,6 +193,21 @@ public class ClusterTopologyImplTest {
new ClusterTopologyImpl(null, request);
}
+ @Test
+ public void test_GetHostAssigmentForComponents() throws Exception {
+ TestTopologyRequest request = new TestTopologyRequest(TopologyRequest.Type.PROVISION);
+
+ TopologyValidator validator = createStrictMock(TopologyValidator.class);
+ topologyValidators.add(validator);
+
+ validator.validate((ClusterTopology) notNull());
+
+ replayAll();
+ replay(validator);
+
+ new ClusterTopologyImpl(null, request).getHostAssignmentsForComponent("component1");
+ }
+
private class TestTopologyRequest implements TopologyRequest {
private Type type;