You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2017/11/29 11:54:34 UTC
ambari git commit: AMBARI-22528 Integrate stack upgrades with
websocket events. (atkach)
Repository: ambari
Updated Branches:
refs/heads/branch-3.0-perf 45d9ca671 -> eaf1fd5ce
AMBARI-22528 Integrate stack upgrades with websocket events. (atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/eaf1fd5c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/eaf1fd5c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/eaf1fd5c
Branch: refs/heads/branch-3.0-perf
Commit: eaf1fd5cee81bc8a021e2dd01ee4fc604c0ee3b0
Parents: 45d9ca6
Author: Andrii Tkach <at...@apache.org>
Authored: Wed Nov 29 13:45:32 2017 +0200
Committer: Andrii Tkach <at...@apache.org>
Committed: Wed Nov 29 13:45:32 2017 +0200
----------------------------------------------------------------------
ambari-web/app/assets/test/tests.js | 1 +
.../global/background_operations_controller.js | 10 +-
.../controllers/global/cluster_controller.js | 7 -
.../app/controllers/global/update_controller.js | 42 ++---
ambari-web/app/controllers/main.js | 2 +
.../main/admin/stack_and_upgrade_controller.js | 22 +--
ambari-web/app/mappers.js | 1 +
.../app/mappers/socket/upgrade_state_mapper.js | 42 +++++
.../global/background_operations_test.js | 15 +-
.../global/cluster_controller_test.js | 12 --
.../global/update_controller_test.js | 181 ++-----------------
.../admin/stack_and_upgrade_controller_test.js | 16 +-
ambari-web/test/controllers/main_test.js | 33 ++++
.../mappers/socket/upgrade_state_mapper_test.js | 80 ++++++++
14 files changed, 211 insertions(+), 253 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/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 23b985a..f4b319a 100644
--- a/ambari-web/app/assets/test/tests.js
+++ b/ambari-web/app/assets/test/tests.js
@@ -174,6 +174,7 @@ var files = [
'test/mappers/socket/host_state_mapper_test',
'test/mappers/socket/alert_definitions_mapper_adapter_test',
'test/mappers/socket/alert_groups_mapper_adapter_test',
+ 'test/mappers/socket/upgrade_state_mapper_test',
'test/mixins/common/configs/enhanced_configs_test',
'test/mixins/common/configs/config_recommendations_test',
'test/mixins/common/configs/config_recommendation_parser_test',
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/ambari-web/app/controllers/global/background_operations_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/background_operations_controller.js b/ambari-web/app/controllers/global/background_operations_controller.js
index f160883..caca04a 100644
--- a/ambari-web/app/controllers/global/background_operations_controller.js
+++ b/ambari-web/app/controllers/global/background_operations_controller.js
@@ -65,6 +65,9 @@ App.BackgroundOperationsController = Em.Controller.extend({
}.observes('isWorking'),
updateRequests: function(event) {
+ if (this.isUpgradeRequest({Requests: {request_context: event.requestContext}})) {
+ return;
+ }
const request = this.get('services').findProperty('id', event.requestId);
const context = this.parseRequestContext(event.requestContext);
const visibleOperationsCount = this.get('operationsCount');
@@ -308,13 +311,9 @@ App.BackgroundOperationsController = Em.Controller.extend({
var currentRequestIds = [];
var countIssued = this.get('operationsCount');
var countGot = data.itemTotal;
- var restoreUpgradeState = false;
data.items.forEach(function (request) {
if (this.isUpgradeRequest(request)) {
- if (!App.get('upgradeIsRunning')) {
- restoreUpgradeState = true;
- }
return;
}
var rq = this.get("services").findProperty('id', request.Requests.id);
@@ -349,9 +348,6 @@ App.BackgroundOperationsController = Em.Controller.extend({
this.set("services", this.get("services").sortProperty('id').reverse());
}
}, this);
- if (restoreUpgradeState) {
- App.router.get('clusterController').restoreUpgradeState();
- }
this.removeOldRequests(currentRequestIds);
this.set('isShowMoreAvailable', countGot >= countIssued);
this.set('serviceTimestamp', App.dateTimeWithTimeZone());
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/ambari-web/app/controllers/global/cluster_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index 32b5db5..bc3ce38 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -306,7 +306,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
* restore upgrade status from server
* and make call to get latest status from server
* Also loading all upgrades to App.StackUpgradeHistory model
- * TODO should be called even if recent background operations doesn't have Upgrade request
*/
restoreUpgradeState: function () {
var self = this;
@@ -314,7 +313,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
var upgradeController = App.router.get('mainAdminStackAndUpgradeController');
var allUpgrades = data.items.sortProperty('Upgrade.request_id');
var lastUpgradeData = allUpgrades.pop();
- var dbUpgradeState = App.db.get('MainAdminStackAndUpgrade', 'upgradeState');
if (lastUpgradeData){
var status = lastUpgradeData.Upgrade.request_status;
var lastUpgradeNotFinished = (self.isSuspendedState(status) || self.isRunningState(status));
@@ -347,11 +345,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
}
} else {
upgradeController.initDBProperties();
- upgradeController.loadUpgradeData(true);
- }
-
- if (!Em.isNone(dbUpgradeState)) {
- App.set('upgradeState', dbUpgradeState);
}
App.stackUpgradeHistoryMapper.map(data);
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/ambari-web/app/controllers/global/update_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/update_controller.js b/ambari-web/app/controllers/global/update_controller.js
index 56f9ab6..231b178 100644
--- a/ambari-web/app/controllers/global/update_controller.js
+++ b/ambari-web/app/controllers/global/update_controller.js
@@ -187,15 +187,6 @@ App.UpdateController = Em.Controller.extend({
*/
updateAll: function () {
if (this.get('isWorking') && !App.get('isOnlyViewUser')) {
- App.StompClient.subscribe('/events/hostcomponents', App.hostComponentStatusMapper.map.bind(App.hostComponentStatusMapper));
- App.StompClient.subscribe('/events/alerts', App.alertSummaryMapper.map.bind(App.alertSummaryMapper));
- App.StompClient.subscribe('/events/ui_topologies', App.topologyMapper.map.bind(App.topologyMapper));
- App.StompClient.subscribe('/events/configs', this.makeCallForClusterEnv.bind(this));
- App.StompClient.subscribe('/events/services', App.serviceStateMapper.map.bind(App.serviceStateMapper));
- App.StompClient.subscribe('/events/hosts', App.hostStateMapper.map.bind(App.hostStateMapper));
- App.StompClient.subscribe('/events/alert_definitions', App.alertDefinitionsMapperAdapter.map.bind(App.alertDefinitionsMapperAdapter));
- App.StompClient.subscribe('/events/alert_group', App.alertGroupsMapperAdapter.map.bind(App.alertGroupsMapperAdapter));
-
App.updater.run(this, 'updateHostsMetrics', 'isWorking', App.contentUpdateInterval, '\/main\/(hosts).*');
App.updater.run(this, 'updateServiceMetric', 'isWorking', App.componentsUpdateInterval, '\/main\/(dashboard|services).*');
App.updater.run(this, 'updateComponentsState', 'isWorking', App.componentsUpdateInterval, '\/main\/(dashboard|services|hosts).*');
@@ -204,20 +195,22 @@ App.UpdateController = Em.Controller.extend({
if (!App.get('router.mainAlertInstancesController.isUpdating')) {
App.updater.run(this, 'updateUnhealthyAlertInstances', 'updateAlertInstances', App.alertInstancesUpdateInterval, '\/main\/alerts.*');
}
- App.updater.run(this, 'updateUpgradeState', 'isWorking', App.bgOperationsUpdateInterval);
App.updater.run(this, 'updateWizardWatcher', 'isWorking', App.bgOperationsUpdateInterval);
- } else {
- App.StompClient.unsubscribe('/events/hostcomponents');
- App.StompClient.unsubscribe('/events/alerts');
- // "/events/ui_topologies" topic should listen to topology changes when wizard running
- App.StompClient.unsubscribe('/events/configs');
- App.StompClient.unsubscribe('/events/services');
- App.StompClient.unsubscribe('/events/hosts');
- App.StompClient.unsubscribe('/events/alert_definitions');
- App.StompClient.unsubscribe('/events/alert_group');
}
}.observes('isWorking', 'App.router.mainAlertInstancesController.isUpdating'),
+ startSubscriptions: function () {
+ App.StompClient.subscribe('/events/hostcomponents', App.hostComponentStatusMapper.map.bind(App.hostComponentStatusMapper));
+ App.StompClient.subscribe('/events/alerts', App.alertSummaryMapper.map.bind(App.alertSummaryMapper));
+ App.StompClient.subscribe('/events/ui_topologies', App.topologyMapper.map.bind(App.topologyMapper));
+ App.StompClient.subscribe('/events/configs', this.makeCallForClusterEnv.bind(this));
+ App.StompClient.subscribe('/events/services', App.serviceStateMapper.map.bind(App.serviceStateMapper));
+ App.StompClient.subscribe('/events/hosts', App.hostStateMapper.map.bind(App.hostStateMapper));
+ App.StompClient.subscribe('/events/alert_definitions', App.alertDefinitionsMapperAdapter.map.bind(App.alertDefinitionsMapperAdapter));
+ App.StompClient.subscribe('/events/alert_group', App.alertGroupsMapperAdapter.map.bind(App.alertGroupsMapperAdapter));
+ App.StompClient.subscribe('/events/upgrade', App.upgradeStateMapper.map.bind(App.upgradeStateMapper));
+ },
+
/**
*
* @param {Function} callback
@@ -622,17 +615,6 @@ App.UpdateController = Em.Controller.extend({
});
},
- updateUpgradeState: function (callback) {
- var currentStateName = App.get('router.currentState.name'),
- parentStateName = App.get('router.currentState.parentState.name'),
- mainAdminStackAndUpgradeController = App.get('router.mainAdminStackAndUpgradeController');
- if (!(currentStateName === 'versions' && parentStateName === 'stackAndUpgrade') && currentStateName !== 'stackUpgrade' && App.get('wizardIsNotFinished') && !mainAdminStackAndUpgradeController.get('isLoadUpgradeDataPending')) {
- mainAdminStackAndUpgradeController.loadUpgradeData(true).done(callback);
- } else {
- callback();
- }
- },
-
makeCallForClusterEnv: function(event) {
if (event.configs.someProperty('type', 'cluster-env')) {
this.updateClusterEnv();
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/ambari-web/app/controllers/main.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main.js b/ambari-web/app/controllers/main.js
index 18018d9..a34e199 100644
--- a/ambari-web/app/controllers/main.js
+++ b/ambari-web/app/controllers/main.js
@@ -101,9 +101,11 @@ App.MainController = Em.Controller.extend({
startPolling: function () {
if (App.router.get('applicationController.isExistingClusterDataLoaded')) {
App.router.get('updateController').set('isWorking', true);
+ App.router.get('updateController').startSubscriptions();
App.router.get('backgroundOperationsController').set('isWorking', true);
}
}.observes('App.router.applicationController.isExistingClusterDataLoaded'),
+
stopPolling: function(){
App.router.get('updateController').set('isWorking', false);
App.router.get('backgroundOperationsController').set('isWorking', false);
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
index 2f0cb68..20627ce 100644
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
@@ -421,13 +421,11 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
var dfd = $.Deferred();
var self = this;
- this.loadUpgradeData(true).done(function() {
- self.loadStackVersionsToModel(true).done(function () {
- self.loadRepoVersionsToModel().done(function() {
- self.loadCompatibleVersions().done(function() {
- self.updateCurrentStackVersion();
- dfd.resolve();
- });
+ this.loadStackVersionsToModel(true).done(function () {
+ self.loadRepoVersionsToModel().done(function() {
+ self.loadCompatibleVersions().done(function() {
+ self.updateCurrentStackVersion();
+ dfd.resolve();
});
});
});
@@ -2140,16 +2138,18 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
isWizardRestricted: upgradeType.get('isWizardRestricted'),
downgradeAllowed: lastUpgradeData.Upgrade.downgrade_allowed,
upgradeTypeDisplayName: upgradeType.get('displayName'),
- failuresTolerance: Em.Object.create({
+ isSuspended: lastUpgradeData.Upgrade.suspended,
+ failuresTolerance: {
skipComponentFailures: lastUpgradeData.Upgrade.skip_failures,
skipSCFailures: lastUpgradeData.Upgrade.skip_service_check_failures
- })
+ }
});
+ this.initDBProperties();
+ App.set('upgradeState', lastUpgradeData.Upgrade.request_status);
this.loadRepoVersionsToModel().done(function () {
var toVersion = App.RepositoryVersion.find().findProperty('repositoryVersion', lastUpgradeData.Upgrade.associated_version);
self.setDBProperty('upgradeVersion', toVersion && toVersion.get('displayName'));
- self.initDBProperties();
- self.loadUpgradeData(true);
+ self.set('upgradeVersion', toVersion && toVersion.get('displayName'));
});
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/ambari-web/app/mappers.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers.js b/ambari-web/app/mappers.js
index 93cd319..e6f1bb0 100644
--- a/ambari-web/app/mappers.js
+++ b/ambari-web/app/mappers.js
@@ -51,3 +51,4 @@ require('mappers/socket/alert_summary_mapper');
require('mappers/socket/host_state_mapper');
require('mappers/socket/alert_definitions_mapper_adapter');
require('mappers/socket/alert_groups_mapper_adapter');
+require('mappers/socket/upgrade_state_mapper');
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/ambari-web/app/mappers/socket/upgrade_state_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/socket/upgrade_state_mapper.js b/ambari-web/app/mappers/socket/upgrade_state_mapper.js
new file mode 100644
index 0000000..1670ed5
--- /dev/null
+++ b/ambari-web/app/mappers/socket/upgrade_state_mapper.js
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+var App = require('app');
+
+App.upgradeStateMapper = App.QuickDataMapper.create({
+
+ /**
+ * @param {object} event
+ */
+ map: function (event) {
+ var controller = App.router.get('mainAdminStackAndUpgradeController');
+ if (event.type === 'CREATE') {
+ controller.restoreLastUpgrade({Upgrade: event});
+ }
+ //TODO rename type to eventType
+ if (event.type === 'UPDATE' && controller.get('upgradeId') === event.request_id) {
+ if (!Em.isNone(event.request_status)) {
+ App.set('upgradeState', event.request_status);
+ controller.setDBProperty('upgradeState', event.request_status);
+ }
+ if (!Em.isNone(event.suspended)) {
+ controller.set('isSuspended', event.suspended);
+ controller.setDBProperty('isSuspended', event.suspended);
+ }
+ }
+ }
+});
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/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 43b2170..8612cd2 100644
--- a/ambari-web/test/controllers/global/background_operations_test.js
+++ b/ambari-web/test/controllers/global/background_operations_test.js
@@ -149,14 +149,6 @@ 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: []
@@ -783,6 +775,13 @@ describe('App.BackgroundOperationsController', function () {
controller.propertyDidChange.restore();
});
+ it('should exit when request is upgrade', function() {
+ controller.updateRequests({
+ requestContext: 'upgrading'
+ });
+ expect(controller.parseRequestContext.called).to.be.false;
+ });
+
it('should add request to list', function() {
controller.set('services', []);
controller.updateRequests({
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/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 988379d..fcbad62 100644
--- a/ambari-web/test/controllers/global/cluster_controller_test.js
+++ b/ambari-web/test/controllers/global/cluster_controller_test.js
@@ -501,10 +501,6 @@ describe('App.clusterController', function () {
expect(controller.getAllUpgrades.calledOnce).to.be.true;
});
- it('upgradeState is PENDING', function () {
- expect(App.get('upgradeState')).to.equal('PENDING');
- });
-
it('restoreLastUpgrade is called with valid arguments', function () {
expect(upgradeController.restoreLastUpgrade.calledWith(data.upgradeData.items[0])).to.be.true;
});
@@ -572,10 +568,6 @@ describe('App.clusterController', function () {
expect(controller.getAllUpgrades.calledOnce).to.be.true;
});
- it('upgradeState is PENDING', function () {
- expect(App.get('upgradeState')).to.equal('PENDING');
- });
-
it('restoreLastUpgrade is not called', function () {
expect(upgradeController.restoreLastUpgrade.called).to.be.false;
});
@@ -588,10 +580,6 @@ describe('App.clusterController', function () {
expect(upgradeController.initDBProperties.calledOnce).to.be.true;
});
- it('loadUpgradeData is called with valid arguments', function () {
- expect(upgradeController.loadUpgradeData.calledWith(true)).to.be.true;
- });
-
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/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 78a4064..a812353 100644
--- a/ambari-web/test/controllers/global/update_controller_test.js
+++ b/ambari-web/test/controllers/global/update_controller_test.js
@@ -56,31 +56,29 @@ describe('App.UpdateController', function () {
});
describe('#updateAll()', function () {
- beforeEach(function() {
- sinon.stub(App.StompClient, 'unsubscribe');
- sinon.stub(App.StompClient, 'subscribe');
- });
- afterEach(function() {
- App.StompClient.unsubscribe.restore();
- App.StompClient.subscribe.restore();
- });
it('isWorking = false', function () {
controller.set('isWorking', false);
controller.updateAll();
expect(App.updater.run.called).to.equal(false);
- expect(App.StompClient.unsubscribe.calledWith('/events/hostcomponents')).to.be.true;
- expect(App.StompClient.unsubscribe.calledWith('/events/alerts')).to.be.true;
- expect(App.StompClient.unsubscribe.calledWith('/events/configs')).to.be.true;
- expect(App.StompClient.unsubscribe.calledWith('/events/services')).to.be.true;
- expect(App.StompClient.unsubscribe.calledWith('/events/hosts')).to.be.true;
- expect(App.StompClient.unsubscribe.calledWith('/events/alert_definitions')).to.be.true;
- expect(App.StompClient.unsubscribe.calledWith('/events/alert_group')).to.be.true;
});
it('isWorking = true', function () {
controller.set('isWorking', true);
- expect(App.updater.run.callCount).to.equal(7);
+ expect(App.updater.run.callCount).to.equal(6);
+ });
+ });
+
+ describe('#startSubscriptions()', function () {
+ beforeEach(function() {
+ sinon.stub(App.StompClient, 'subscribe');
+ });
+ afterEach(function() {
+ App.StompClient.subscribe.restore();
+ });
+
+ it('should subscribe to all topics', function () {
+ controller.startSubscriptions();
expect(App.StompClient.subscribe.calledWith('/events/hostcomponents')).to.be.true;
expect(App.StompClient.subscribe.calledWith('/events/alerts')).to.be.true;
expect(App.StompClient.subscribe.calledWith('/events/ui_topologies')).to.be.true;
@@ -89,6 +87,7 @@ describe('App.UpdateController', function () {
expect(App.StompClient.subscribe.calledWith('/events/hosts')).to.be.true;
expect(App.StompClient.subscribe.calledWith('/events/alert_definitions')).to.be.true;
expect(App.StompClient.subscribe.calledWith('/events/alert_group')).to.be.true;
+ expect(App.StompClient.subscribe.calledWith('/events/upgrade')).to.be.true;
});
});
@@ -320,156 +319,6 @@ describe('App.UpdateController', function () {
});
});
- describe('#updateUpgradeState()', function () {
-
- var cases = [
- {
- currentStateName: 'versions',
- parentStateName: 'stackAndUpgrade',
- wizardIsNotFinished: true,
- isLoadUpgradeDataPending: true,
- loadUpgradeDataCallCount: 0,
- callbackCallCount: 1,
- title: 'stack versions page'
- },
- {
- currentStateName: 'stackUpgrade',
- parentStateName: 'admin',
- wizardIsNotFinished: true,
- isLoadUpgradeDataPending: true,
- loadUpgradeDataCallCount: 0,
- callbackCallCount: 1,
- title: 'upgrade popup open'
- },
- {
- currentStateName: 'versions',
- parentStateName: 'admin',
- wizardIsNotFinished: true,
- isLoadUpgradeDataPending: false,
- loadUpgradeDataCallCount: 1,
- callbackCallCount: 0,
- title: 'another page with \'versions\' name'
- },
- {
- currentStateName: 'versions',
- parentStateName: 'admin',
- wizardIsNotFinished: false,
- isLoadUpgradeDataPending: false,
- loadUpgradeDataCallCount: 0,
- callbackCallCount: 1,
- title: 'another page with \'versions\' name, upgrade finished'
- },
- {
- currentStateName: 'versions',
- parentStateName: 'admin',
- wizardIsNotFinished: true,
- isLoadUpgradeDataPending: true,
- loadUpgradeDataCallCount: 0,
- callbackCallCount: 1,
- title: 'another page with \'versions\' name, another update upgrade request not completed'
- },
- {
- currentStateName: 'services',
- parentStateName: 'stackAndUpgrade',
- wizardIsNotFinished: true,
- isLoadUpgradeDataPending: false,
- loadUpgradeDataCallCount: 1,
- callbackCallCount: 0,
- title: 'another page from \'Stack and Versions\' section'
- },
- {
- currentStateName: 'services',
- parentStateName: 'stackAndUpgrade',
- wizardIsNotFinished: false,
- isLoadUpgradeDataPending: false,
- loadUpgradeDataCallCount: 0,
- callbackCallCount: 1,
- title: 'another page from \'Stack and Versions\' section, upgrade finished'
- },
- {
- currentStateName: 'services',
- parentStateName: 'stackAndUpgrade',
- wizardIsNotFinished: true,
- isLoadUpgradeDataPending: true,
- loadUpgradeDataCallCount: 0,
- callbackCallCount: 1,
- title: 'another page from \'Stack and Versions\' section, another update upgrade request not completed'
- },
- {
- currentStateName: 'widgets',
- parentStateName: 'dashboard',
- wizardIsNotFinished: true,
- isLoadUpgradeDataPending: false,
- loadUpgradeDataCallCount: 1,
- callbackCallCount: 0,
- title: 'not \'Stack and Versions\' section'
- },
- {
- currentStateName: 'widgets',
- parentStateName: 'dashboard',
- wizardIsNotFinished: false,
- isLoadUpgradeDataPending: false,
- loadUpgradeDataCallCount: 0,
- callbackCallCount: 1,
- title: 'not \'Stack and Versions\' section, upgrade finished'
- },
- {
- currentStateName: 'widgets',
- parentStateName: 'dashboard',
- wizardIsNotFinished: true,
- isLoadUpgradeDataPending: true,
- loadUpgradeDataCallCount: 0,
- callbackCallCount: 1,
- title: 'not \'Stack and Versions\' section, another update upgrade request not completed'
- }
- ],
- mock = {
- callback: Em.K,
- loadUpgradeData: function () {
- return {
- done: Em.K
- };
- }
- },
- appGetMock;
-
- beforeEach(function () {
- sinon.spy(mock, 'callback');
- sinon.spy(mock, 'loadUpgradeData');
- appGetMock = sinon.stub(App, 'get');
- });
-
- afterEach(function () {
- mock.callback.restore();
- mock.loadUpgradeData.restore();
- App.get.restore();
- appGetMock.restore();
- });
-
- cases.forEach(function (item) {
- describe(item.title, function () {
-
- beforeEach(function () {
- appGetMock.withArgs('router.mainAdminStackAndUpgradeController').returns(Em.Object.create({
- loadUpgradeData: mock.loadUpgradeData,
- isLoadUpgradeDataPending: item.isLoadUpgradeDataPending
- })).withArgs('wizardIsNotFinished').returns(item.wizardIsNotFinished)
- .withArgs('router.currentState.name').returns(item.currentStateName)
- .withArgs('router.currentState.parentState.name').returns(item.parentStateName);
- controller.updateUpgradeState(mock.callback);
- });
- it('loadUpgradeData is called ' + item.loadUpgradeDataCallCount + ' times', function () {
- expect(mock.loadUpgradeData.callCount).to.equal(item.loadUpgradeDataCallCount);
- });
- it('callback is called ' + item.callbackCallCount + ' times', function () {
- expect(mock.callback.callCount).to.equal(item.callbackCallCount);
- });
-
- });
- });
-
- });
-
describe('#computeParameters', function () {
beforeEach(function() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/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 1b04b17..0ebaee8 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
@@ -113,9 +113,6 @@ describe('App.MainAdminStackAndUpgradeController', function() {
describe("#load()", function() {
beforeEach(function(){
- sinon.stub(controller, 'loadUpgradeData').returns({
- done: Em.clb
- });
sinon.stub(controller, 'loadStackVersionsToModel').returns({
done: Em.clb
});
@@ -137,15 +134,11 @@ describe('App.MainAdminStackAndUpgradeController', function() {
controller.load();
});
afterEach(function(){
- controller.loadUpgradeData.restore();
controller.loadStackVersionsToModel.restore();
controller.loadRepoVersionsToModel.restore();
controller.loadCompatibleVersions.restore();
App.StackVersion.find.restore();
});
- it("loadUpgradeData called with valid arguments", function() {
- expect(controller.loadUpgradeData.calledWith(true)).to.be.true;
- });
it('loadStackVersionsToModel called with valid arguments', function () {
expect(controller.loadStackVersionsToModel.calledWith(true)).to.be.true;
});
@@ -1771,6 +1764,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
upgrade_type: 'ROLLING',
downgrade_allowed: true,
skip_failures: true,
+ suspended: false,
skip_service_check_failures: true,
to_version: '1'
}
@@ -1811,11 +1805,12 @@ describe('App.MainAdminStackAndUpgradeController', function() {
upgradeType: "ROLLING",
isWizardRestricted: false,
downgradeAllowed: true,
+ isSuspended: false,
upgradeTypeDisplayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.title'),
- failuresTolerance: Em.Object.create({
+ failuresTolerance: {
skipComponentFailures: true,
skipSCFailures: true
- })
+ }
});
});
it('models are saved', function () {
@@ -1824,9 +1819,6 @@ describe('App.MainAdminStackAndUpgradeController', function() {
it('initDBProperties is called', function () {
expect(controller.initDBProperties.calledOnce).to.be.true;
});
- it('loadUpgradeData called with valid arguments', function () {
- expect(controller.loadUpgradeData.calledWith(true)).to.be.true;
- });
});
describe("#getServiceCheckItemSuccessCallback()", function() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/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 4ab423e..8adb1fd 100644
--- a/ambari-web/test/controllers/main_test.js
+++ b/ambari-web/test/controllers/main_test.js
@@ -102,4 +102,37 @@ describe('App.MainController', function () {
});
});
+ describe('#startPolling', function() {
+ var mock,
+ updateController = Em.Object.create({
+ startSubscriptions: sinon.spy(),
+ isWorking: false
+ }),
+ backgroundOperationsController = Em.Object.create({
+ isWorking: false
+ });
+ beforeEach(function() {
+ mock = sinon.stub(App.router, 'get');
+ mock.withArgs('applicationController.isExistingClusterDataLoaded').returns(true);
+ mock.withArgs('updateController').returns(updateController);
+ mock.withArgs('backgroundOperationsController').returns(backgroundOperationsController);
+ mainController.startPolling();
+ });
+ afterEach(function() {
+ App.router.get.restore();
+ });
+
+ it('updateController should be working', function() {
+ expect(updateController.get('isWorking')).to.be.true;
+ });
+
+ it('backgroundOperationsController should be working', function() {
+ expect(backgroundOperationsController.get('isWorking')).to.be.true;
+ });
+
+ it('startSubscriptions should be called', function() {
+ expect(updateController.startSubscriptions.called).to.be.true;
+ });
+ });
+
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/eaf1fd5c/ambari-web/test/mappers/socket/upgrade_state_mapper_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mappers/socket/upgrade_state_mapper_test.js b/ambari-web/test/mappers/socket/upgrade_state_mapper_test.js
new file mode 100644
index 0000000..322c04f
--- /dev/null
+++ b/ambari-web/test/mappers/socket/upgrade_state_mapper_test.js
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+
+require('mappers/socket/upgrade_state_mapper');
+
+describe('App.upgradeStateMapper', function () {
+
+ describe('#map', function() {
+ var mainAdminStackAndUpgradeController = Em.Object.create({
+ restoreLastUpgrade: sinon.spy(),
+ setDBProperty: sinon.spy(),
+ upgradeId: 1
+ });
+ beforeEach(function() {
+ sinon.stub(App.router, 'get').returns(mainAdminStackAndUpgradeController)
+ });
+ afterEach(function() {
+ App.router.get.restore();
+ });
+
+ it('should call restoreLastUpgrade on CREATE event', function() {
+ var event = {
+ type: 'CREATE',
+ associated_version: "2.5.4.0-121",
+ cluster_id: 2,
+ direction: "DOWNGRADE",
+ downgrade_allowed: false,
+ end_time: -1,
+ progress_percent: 0,
+ request_id: 26,
+ request_status: "PENDING",
+ revert_allowed: false,
+ skip_failures: false,
+ skip_service_check_failures: false,
+ start_time: -1,
+ suspended: false,
+ upgrade_id: 56,
+ upgrade_type: "NON_ROLLING"
+ };
+ App.upgradeStateMapper.map(event);
+ expect(mainAdminStackAndUpgradeController.restoreLastUpgrade.getCall(0).args[0]).to.be.eql({
+ Upgrade: event
+ });
+ });
+
+ it('should set upgrade state on UPDATE event', function() {
+ var event = {
+ end_time: -1,
+ progress_percent: 0,
+ request_id: 1,
+ request_status: "PENDING",
+ start_time: -1,
+ suspended: true,
+ type: "UPDATE"
+ };
+ App.upgradeStateMapper.map(event);
+ expect(App.get('upgradeState')).to.be.equal('PENDING');
+ expect(mainAdminStackAndUpgradeController.get('isSuspended')).to.be.true;
+ expect(mainAdminStackAndUpgradeController.setDBProperty.calledWith('upgradeState', 'PENDING')).to.be.true;
+ expect(mainAdminStackAndUpgradeController.setDBProperty.calledWith('isSuspended', true)).to.be.true;
+ });
+ });
+});