You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by is...@apache.org on 2018/07/19 18:22:54 UTC
[ambari] branch branch-feature-AMBARI-14714 updated: Fixing broken
UI tests.
This is an automated email from the ASF dual-hosted git repository.
ishanbha pushed a commit to branch branch-feature-AMBARI-14714
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/branch-feature-AMBARI-14714 by this push:
new fee4341 Fixing broken UI tests.
fee4341 is described below
commit fee4341bf5e8187631c0dbbfcb4c5dce664086f9
Author: Ishan Bhatt <is...@gmail.com>
AuthorDate: Thu Jul 12 16:41:40 2018 -0700
Fixing broken UI tests.
---
ambari-web/app/app.js | 688 +++++++++++----------
.../app/controllers/wizard/step8_controller.js | 3 -
ambari-web/app/mappers.js | 3 +-
.../app/mappers/socket/upgrade_state_mapper.js | 42 ++
ambari-web/test/controllers/installer_test.js | 74 +--
.../main/admin/service_auto_start_test.js | 1 -
.../mixins/common/configs/enhanced_configs_test.js | 1 -
7 files changed, 424 insertions(+), 388 deletions(-)
diff --git a/ambari-web/app/app.js b/ambari-web/app/app.js
index 760a16e..a9d28a7 100644
--- a/ambari-web/app/app.js
+++ b/ambari-web/app/app.js
@@ -17,7 +17,7 @@
*/
if (Ember.$.uuid === undefined) {
- Ember.$.uuid = 0;
+ Ember.$.uuid = 0;
}
// Application bootstrapper
@@ -28,314 +28,380 @@ var stringUtils = require('utils/string_utils');
var stompClientClass = require('utils/stomp_client');
module.exports = Em.Application.create({
- name: 'Ambari Web',
- rootElement: '#wrapper',
-
- store: DS.Store.create({
- revision: 4,
- adapter: DS.FixtureAdapter.create({
- simulateRemoteResponse: false
+ name: 'Ambari Web',
+ rootElement: '#wrapper',
+
+ store: DS.Store.create({
+ revision: 4,
+ adapter: DS.FixtureAdapter.create({
+ simulateRemoteResponse: false
+ }),
+ typeMaps: {},
+ recordCache: []
+ }),
+ StompClient: stompClientClass.create(),
+ isAdmin: false,
+ isOperator: false,
+ isClusterUser: false,
+ isPermissionDataLoaded: false,
+ auth: undefined,
+ isOnlyViewUser: function() {
+ return App.auth && (App.auth.length == 0 || (App.isAuthorized('VIEW.USE') && App.auth.length == 1));
+ }.property('auth'),
+
+ /**
+ * @type {boolean}
+ * @default false
+ */
+ isKerberosEnabled: false,
+
+ /**
+ * state of stack upgrade process
+ * states:
+ * - NOT_REQUIRED
+ * - PENDING
+ * - IN_PROGRESS
+ * - HOLDING
+ * - COMPLETED
+ * - ABORTED
+ * - HOLDING_FAILED
+ * - HOLDING_TIMEDOUT
+ * @type {String}
+ */
+ upgradeState: 'NOT_REQUIRED',
+
+ /**
+ * Check if upgrade is in INIT state
+ * 'INIT' is set on upgrade start and when it's finished
+ * @type {boolean}
+ */
+ upgradeInit: Em.computed.equal('upgradeState', 'NOT_REQUIRED'),
+
+ /**
+ * flag is true when upgrade process is running
+ * @returns {boolean}
+ */
+ upgradeInProgress: Em.computed.equal('upgradeState', 'IN_PROGRESS'),
+
+ /**
+ * Checks if update process is completed
+ * @type {boolean}
+ */
+ upgradeCompleted: Em.computed.equal('upgradeState', 'COMPLETED'),
+
+ /**
+ * flag is true when upgrade process is waiting for user action
+ * to proceed, retry, perform manual steps etc.
+ * @returns {boolean}
+ */
+ upgradeHolding: function() {
+ return this.get('upgradeState').contains("HOLDING") || this.get('upgradeAborted');
+ }.property('upgradeState', 'upgradeAborted'),
+
+ /**
+ * flag is true when upgrade process is aborted
+ * SHOULD behave similar to HOLDING_FAILED state
+ * @returns {boolean}
+ */
+ upgradeAborted: function () {
+ return this.get('upgradeState') === "ABORTED" && !App.router.get('mainAdminStackAndUpgradeController.isSuspended');
+ }.property('upgradeState', 'router.mainAdminStackAndUpgradeController.isSuspended'),
+
+ /**
+ * flag is true when upgrade process is suspended
+ * @returns {boolean}
+ */
+ upgradeSuspended: function () {
+ return this.get('upgradeState') === "ABORTED" && App.router.get('mainAdminStackAndUpgradeController.isSuspended');
+ }.property('upgradeState', 'router.mainAdminStackAndUpgradeController.isSuspended'),
+
+ /**
+ * RU is running
+ * @type {boolean}
+ */
+ upgradeIsRunning: Em.computed.or('upgradeInProgress', 'upgradeHolding'),
+
+ /**
+ * flag is true when upgrade process is running or suspended
+ * or wizard used by another user
+ * @returns {boolean}
+ */
+ wizardIsNotFinished: function () {
+ return this.get('upgradeIsRunning') ||
+ this.get('upgradeSuspended') ||
+ App.router.get('wizardWatcherController.isNonWizardUser');
+ }.property('upgradeIsRunning', 'upgradeAborted', 'router.wizardWatcherController.isNonWizardUser', 'upgradeSuspended'),
+
+ /**
+ * @param {string} authRoles
+ * @returns {boolean}
+ */
+ havePermissions: function (authRoles) {
+ var result = false;
+ authRoles = $.map(authRoles.split(","), $.trim);
+
+ // When Upgrade running(not suspended) only operations related to upgrade should be allowed
+ if ((!this.get('upgradeSuspended') &&
+ !authRoles.contains('CLUSTER.UPGRADE_DOWNGRADE_STACK') &&
+ !authRoles.contains('CLUSTER.MANAGE_USER_PERSISTED_DATA')) &&
+ !App.get('supports.opsDuringRollingUpgrade') &&
+ !['NOT_REQUIRED', 'COMPLETED'].contains(this.get('upgradeState')) ||
+ !App.auth){
+ return false;
+ }
+
+ authRoles.forEach(function (auth) {
+ result = result || App.auth.contains(auth);
+ });
+
+ return result;
+ },
+ /**
+ * @param {string} authRoles
+ * @returns {boolean}
+ */
+ isAuthorized: function (authRoles) {
+ return this.havePermissions(authRoles) && !App.router.get('wizardWatcherController.isNonWizardUser');
+ },
+
+ isStackServicesLoaded: false,
+ /**
+ * return url prefix with number value of version of HDP stack
+ */
+ stackVersionURL: function () {
+ return '/stacks/{0}/versions/{1}'.format(this.get('currentStackName') || 'HDP', this.get('currentStackVersionNumber'));
+ }.property('currentStackName','currentStackVersionNumber'),
+
+ getStackVersionUrl: function (stackName, stackVersion) {
+ if (stackName && stackVersion) {
+ return `/stacks/${stackName}/versions/${stackVersion}`;
+ }
+
+ return null;
+ },
+
+ falconServerURL: function () {
+ var falconService = this.Service.find().findProperty('serviceName', 'FALCON');
+ if (falconService) {
+ return falconService.get('hostComponents').findProperty('componentName', 'FALCON_SERVER').get('hostName');
+ }
+ return '';
+ }.property().volatile(),
+
+ /* Determine if Application Timeline Service supports Kerberization.
+ * Because this value is retrieved from the cardinality of the component, it is safe to keep in app.js
+ * since its value will not change during the lifetime of the application.
+ */
+ doesATSSupportKerberos: function() {
+ var YARNService = App.StackServiceComponent.find().filterProperty('serviceName', 'YARN');
+ if (YARNService.length) {
+ var ATS = App.StackServiceComponent.find().findProperty('componentName', 'APP_TIMELINE_SERVER');
+ return (!!ATS && !!ATS.get('minToInstall'));
+ }
+ return false;
+ }.property('router.clusterController.isLoaded'),
+
+ clusterId: null,
+ clusterName: null,
+ clockDistance: null, // server clock - client clock
+ currentStackVersion: '',
+ currentStackName: function() {
+ return Em.get((this.get('currentStackVersion') || this.get('defaultStackVersion')).match(/(.+)-\d.+/), '1');
+ }.property('currentStackVersion', 'defaultStackVersion'),
+
+ /**
+ * true if cluster has only 1 host
+ * for now is used to disable move/HA actions
+ * @type {boolean}
+ */
+ isSingleNode: Em.computed.equal('allHostNames.length', 1),
+
+ allHostNames: [],
+
+ /**
+ * This object is populated to keep track of uninstalled components to be included in the layout for recommendation/validation call
+ * @type {object}
+ * keys = componentName, hostName
+ */
+ componentToBeAdded: {},
+
+
+ /**
+ * This object is populated to keep track of installed components to be excluded in the layout for recommendation/validation call
+ * @type {object}
+ * keys = componentName, hostName
+ */
+ componentToBeDeleted: {},
+
+ uiOnlyConfigDerivedFromTheme: [],
+
+ currentStackVersionNumber: function () {
+ var regExp = new RegExp(this.get('currentStackName') + '-');
+ return (this.get('currentStackVersion') || this.get('defaultStackVersion')).replace(regExp, '');
+ }.property('currentStackVersion', 'defaultStackVersion', 'currentStackName'),
+
+ isHadoopWindowsStack: Em.computed.equal('currentStackName', 'HDPWIN'),
+
+ /**
+ * If NameNode High Availability is enabled
+ * Based on <code>clusterStatus.isInstalled</code>, stack version, <code>SNameNode</code> availability
+ *
+ * @type {bool}
+ */
+ isHaEnabled: function () {
+ return App.Service.find('HDFS').get('isLoaded') && !App.HostComponent.find().someProperty('componentName', 'SECONDARY_NAMENODE');
+ }.property('router.clusterController.dataLoadList.services', 'router.clusterController.isServiceContentFullyLoaded'),
+
+ hasNameNodeFederation: function () {
+ return App.HDFSService.find('HDFS').get('masterComponentGroups.length') > 1;
+ }.property('router.clusterController.isHostComponentMetricsLoaded', 'router.clusterController.isHDFSNameSpacesLoaded'),
+
+ /**
+ * If ResourceManager High Availability is enabled
+ * Based on number of ResourceManager host components installed
+ *
+ * @type {bool}
+ */
+ isRMHaEnabled: function () {
+ var result = false;
+ var rmStackComponent = App.StackServiceComponent.find().findProperty('componentName','RESOURCEMANAGER');
+ if (rmStackComponent && rmStackComponent.get('isMultipleAllowed')) {
+ result = this.HostComponent.find().filterProperty('componentName', 'RESOURCEMANAGER').length > 1;
+ }
+ return result;
+ }.property('router.clusterController.isLoaded', 'isStackServicesLoaded'),
+
+ /**
+ * If Ranger Admin High Availability is enabled
+ * Based on number of Ranger Admin host components installed
+ *
+ * @type {bool}
+ */
+ isRAHaEnabled: function () {
+ var result = false;
+ var raStackComponent = App.StackServiceComponent.find().findProperty('componentName','RANGER_ADMIN');
+ if (raStackComponent && raStackComponent.get('isMultipleAllowed')) {
+ result = App.HostComponent.find().filterProperty('componentName', 'RANGER_ADMIN').length > 1;
+ }
+ return result;
+ }.property('router.clusterController.isLoaded', 'isStackServicesLoaded'),
+
+ /**
+ * Object with utility functions for list of service names with similar behavior
+ */
+ services: Em.Object.create({
+ all: function () {
+ return App.StackService.find().mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ clientOnly: function () {
+ return App.StackService.find().filterProperty('isClientOnlyService').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ hasClient: function () {
+ return App.StackService.find().filterProperty('hasClient').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ hasMaster: function () {
+ return App.StackService.find().filterProperty('hasMaster').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ hasSlave: function () {
+ return App.StackService.find().filterProperty('hasSlave').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ noConfigTypes: function () {
+ return App.StackService.find().filterProperty('isNoConfigTypes').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ servicesWithHeatmapTab: function () {
+ return App.StackService.find().filterProperty('hasHeatmapSection').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ monitoring: function () {
+ return App.StackService.find().filterProperty('isMonitoringService').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ hostMetrics: function () {
+ return App.StackService.find().filterProperty('isHostMetricsService').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ serviceMetrics: function () {
+ return App.StackService.find().filterProperty('isServiceMetricsService').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ supportsServiceCheck: function() {
+ return App.StackService.find().filterProperty('serviceCheckSupported').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ supportsDeleteViaUI: function() {
+ return App.StackService.find().filterProperty('supportDeleteViaUi').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded')
}),
- typeMaps: {},
- recordCache: []
- }),
- StompClient: stompClientClass.create(),
- isAdmin: false,
- isOperator: false,
- isClusterUser: false,
- isPermissionDataLoaded: false,
- auth: undefined,
- isOnlyViewUser: function () {
- return App.auth && (App.auth.length == 0 || (App.isAuthorized('VIEW.USE') && App.auth.length == 1));
- }.property('auth'),
-
- /**
- * default/base service group name ('core')
- * @type {String}
- */
- defaultServiceGroupName: 'core',
-
- /**
- * @type {boolean}
- * @default false
- */
- isKerberosEnabled: false,
-
- /**
- * @param {string} authRoles
- * @returns {boolean}
- */
- havePermissions: function (authRoles) {
- var result = false;
-
- authRoles = $.map(authRoles.split(","), $.trim);
-
- // When Upgrade running(not suspended) only operations related to upgrade should be allowed
- if ((!this.get('upgradeSuspended') &&
- !authRoles.contains('CLUSTER.UPGRADE_DOWNGRADE_STACK') &&
- !authRoles.contains('CLUSTER.MANAGE_USER_PERSISTED_DATA')) &&
- !App.get('supports.opsDuringRollingUpgrade') &&
- !['NOT_REQUIRED', 'COMPLETED'].contains(this.get('upgradeState')) ||
- !App.auth){
- return false;
- }
- if (App.auth) {
- authRoles = $.map(authRoles.split(","), $.trim);
-
- authRoles.forEach(function (auth) {
- result = result || App.auth.contains(auth);
- });
- }
-
- return result;
- },
- /**
- * @param {string} authRoles
- * @returns {boolean}
- */
- isAuthorized: function (authRoles) {
- return this.havePermissions(authRoles) && !App.router.get('wizardWatcherController.isNonWizardUser');
- },
-
- isStackServicesLoaded: false,
- /**
- * return url prefix with number value of version of HDP stack
- */
- stackVersionURL: function () {
- return '/stacks/{0}/versions/{1}'.format(this.get('currentStackName') || 'HDP', this.get('currentStackVersionNumber'));
- }.property('currentStackName', 'currentStackVersionNumber'),
-
- getStackVersionUrl: function (stackName, stackVersion) {
- if (stackName && stackVersion) {
- return `/stacks/${stackName}/versions/${stackVersion}`;
- }
-
- return null;
- },
-
- falconServerURL: function () {
- var falconService = this.Service.find().findProperty('serviceName', 'FALCON');
- if (falconService) {
- return falconService.get('hostComponents').findProperty('componentName', 'FALCON_SERVER').get('hostName');
- }
- return '';
- }.property().volatile(),
-
- /* Determine if Application Timeline Service supports Kerberization.
- * Because this value is retrieved from the cardinality of the component, it is safe to keep in app.js
- * since its value will not change during the lifetime of the application.
- */
- doesATSSupportKerberos: function () {
- var YARNService = App.StackServiceComponent.find().filterProperty('serviceName', 'YARN');
- if (YARNService.length) {
- var ATS = App.StackServiceComponent.find().findProperty('componentName', 'APP_TIMELINE_SERVER');
- return (!!ATS && !!ATS.get('minToInstall'));
- }
- return false;
- }.property('router.clusterController.isLoaded'),
-
- clusterId: null,
- clusterName: null,
- clockDistance: null, // server clock - client clock
- currentStackVersion: '',
- currentStackName: function () {
- return Em.get((this.get('currentStackVersion') || this.get('defaultStackVersion')).match(/(.+)-\d.+/), '1');
- }.property('currentStackVersion', 'defaultStackVersion'),
-
- /**
- * true if cluster has only 1 host
- * for now is used to disable move/HA actions
- * @type {boolean}
- */
- isSingleNode: Em.computed.equal('allHostNames.length', 1),
-
- allHostNames: [],
-
- /**
- * This object is populated to keep track of uninstalled components to be included in the layout for recommendation/validation call
- * @type {object}
- * keys = componentName, hostName
- */
- componentToBeAdded: {},
-
-
- /**
- * This object is populated to keep track of installed components to be excluded in the layout for recommendation/validation call
- * @type {object}
- * keys = componentName, hostName
- */
- componentToBeDeleted: {},
-
- uiOnlyConfigDerivedFromTheme: [],
-
- currentStackVersionNumber: function () {
- var regExp = new RegExp(this.get('currentStackName') + '-');
- return (this.get('currentStackVersion') || this.get('defaultStackVersion')).replace(regExp, '');
- }.property('currentStackVersion', 'defaultStackVersion', 'currentStackName'),
-
- isHadoopWindowsStack: Em.computed.equal('currentStackName', 'HDPWIN'),
-
- /**
- * If NameNode High Availability is enabled
- * Based on <code>clusterStatus.isInstalled</code>, stack version, <code>SNameNode</code> availability
- *
- * @type {bool}
- */
- isHaEnabled: function () {
- return App.Service.find('HDFS').get('isLoaded') && !App.HostComponent.find().someProperty('componentName', 'SECONDARY_NAMENODE');
- }.property('router.clusterController.dataLoadList.services', 'router.clusterController.isServiceContentFullyLoaded'),
-
- hasNameNodeFederation: function () {
- return App.HDFSService.find('HDFS').get('masterComponentGroups.length') > 1;
- }.property('router.clusterController.isHostComponentMetricsLoaded', 'router.clusterController.isHDFSNameSpacesLoaded'),
-
- /**
- * If ResourceManager High Availability is enabled
- * Based on number of ResourceManager host components installed
- *
- * @type {bool}
- */
- isRMHaEnabled: function () {
- var result = false;
- var rmStackComponent = App.StackServiceComponent.find().findProperty('componentName', 'RESOURCEMANAGER');
- if (rmStackComponent && rmStackComponent.get('isMultipleAllowed')) {
- result = this.HostComponent.find().filterProperty('componentName', 'RESOURCEMANAGER').length > 1;
- }
- return result;
- }.property('router.clusterController.isLoaded', 'isStackServicesLoaded'),
-
- /**
- * If Ranger Admin High Availability is enabled
- * Based on number of Ranger Admin host components installed
- *
- * @type {bool}
- */
- isRAHaEnabled: function () {
- var result = false;
- var raStackComponent = App.StackServiceComponent.find().findProperty('componentName', 'RANGER_ADMIN');
- if (raStackComponent && raStackComponent.get('isMultipleAllowed')) {
- result = App.HostComponent.find().filterProperty('componentName', 'RANGER_ADMIN').length > 1;
- }
- return result;
- }.property('router.clusterController.isLoaded', 'isStackServicesLoaded'),
-
- /**
- * Object with utility functions for list of service names with similar behavior
- */
- services: Em.Object.create({
- all: function () {
- return App.StackService.find().mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded'),
-
- clientOnly: function () {
- return App.StackService.find().filterProperty('isClientOnlyService').mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded'),
-
- hasClient: function () {
- return App.StackService.find().filterProperty('hasClient').mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded'),
-
- hasMaster: function () {
- return App.StackService.find().filterProperty('hasMaster').mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded'),
-
- hasSlave: function () {
- return App.StackService.find().filterProperty('hasSlave').mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded'),
-
- noConfigTypes: function () {
- return App.StackService.find().filterProperty('isNoConfigTypes').mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded'),
-
- servicesWithHeatmapTab: function () {
- return App.StackService.find().filterProperty('hasHeatmapSection').mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded'),
-
- monitoring: function () {
- return App.StackService.find().filterProperty('isMonitoringService').mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded'),
-
- hostMetrics: function () {
- return App.StackService.find().filterProperty('isHostMetricsService').mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded'),
-
- serviceMetrics: function () {
- return App.StackService.find().filterProperty('isServiceMetricsService').mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded'),
-
- supportsServiceCheck: function () {
- return App.StackService.find().filterProperty('serviceCheckSupported').mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded'),
-
- supportsDeleteViaUI: function () {
- return App.StackService.find().filterProperty('supportDeleteViaUi').mapProperty('serviceName');
- }.property('App.router.clusterController.isLoaded')
- }),
-
- /**
- * List of components with allowed action for them
- * @type {Em.Object}
- */
- components: Em.Object.create({
- isMasterAddableOnlyOnHA: function () {
- return App.StackServiceComponent.find().filterProperty('isMasterAddableOnlyOnHA').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- allComponents: function () {
- return App.StackServiceComponent.find().mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- reassignable: function () {
- return App.StackServiceComponent.find().filterProperty('isReassignable').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- restartable: function () {
- return App.StackServiceComponent.find().filterProperty('isRestartable').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- deletable: function () {
- return App.StackServiceComponent.find().filterProperty('isDeletable').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- rollinRestartAllowed: function () {
- return App.StackServiceComponent.find().filterProperty('isRollinRestartAllowed').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- decommissionAllowed: function () {
- return App.StackServiceComponent.find().filterProperty('isDecommissionAllowed').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- refreshConfigsAllowed: function () {
- return App.StackServiceComponent.find().filterProperty('isRefreshConfigsAllowed').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- addableToHost: function () {
- return App.StackServiceComponent.find().filterProperty('isAddableToHost').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- addableMasterInstallerWizard: function () {
- return App.StackServiceComponent.find().filterProperty('isMasterAddableInstallerWizard').mapProperty('componentName')
- }.property(),
- //.property('App.router.clusterController.isLoaded'),
-
- multipleMasters: function () {
- return App.StackServiceComponent.find().filterProperty('isMasterWithMultipleInstances').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- slaves: function () {
- return App.StackServiceComponent.find().filterProperty('isSlave').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- masters: function () {
- return App.StackServiceComponent.find().filterProperty('isMaster').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- clients: function () {
- return App.StackServiceComponent.find().filterProperty('isClient').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded'),
-
- nonHDP: function () {
- return App.StackServiceComponent.find().filterProperty('isNonHDPComponent').mapProperty('componentName')
- }.property('App.router.clusterController.isLoaded')
- })
-});
+
+ /**
+ * List of components with allowed action for them
+ * @type {Em.Object}
+ */
+ components: Em.Object.create({
+ isMasterAddableOnlyOnHA: function () {
+ return App.StackServiceComponent.find().filterProperty('isMasterAddableOnlyOnHA').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ allComponents: function () {
+ return App.StackServiceComponent.find().mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ reassignable: function () {
+ return App.StackServiceComponent.find().filterProperty('isReassignable').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ restartable: function () {
+ return App.StackServiceComponent.find().filterProperty('isRestartable').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ deletable: function () {
+ return App.StackServiceComponent.find().filterProperty('isDeletable').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ rollinRestartAllowed: function () {
+ return App.StackServiceComponent.find().filterProperty('isRollinRestartAllowed').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ decommissionAllowed: function () {
+ return App.StackServiceComponent.find().filterProperty('isDecommissionAllowed').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ refreshConfigsAllowed: function () {
+ return App.StackServiceComponent.find().filterProperty('isRefreshConfigsAllowed').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ addableToHost: function () {
+ return App.StackServiceComponent.find().filterProperty('isAddableToHost').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ addableMasterInstallerWizard: function () {
+ return App.StackServiceComponent.find().filterProperty('isMasterAddableInstallerWizard').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ multipleMasters: function () {
+ return App.StackServiceComponent.find().filterProperty('isMasterWithMultipleInstances').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ slaves: function () {
+ return App.StackServiceComponent.find().filterProperty('isSlave').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ masters: function () {
+ return App.StackServiceComponent.find().filterProperty('isMaster').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ clients: function () {
+ return App.StackServiceComponent.find().filterProperty('isClient').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded'),
+
+ nonHDP: function () {
+ return App.StackServiceComponent.find().filterProperty('isNonHDPComponent').mapProperty('componentName')
+ }.property('App.router.clusterController.isLoaded')
+ })
+});
\ No newline at end of file
diff --git a/ambari-web/app/controllers/wizard/step8_controller.js b/ambari-web/app/controllers/wizard/step8_controller.js
index e14271a..8c43a59 100644
--- a/ambari-web/app/controllers/wizard/step8_controller.js
+++ b/ambari-web/app/controllers/wizard/step8_controller.js
@@ -360,9 +360,6 @@ App.WizardStep8Controller = App.WizardStepController.extend(App.AddSecurityConfi
this.get('clusterInfo').set('useRedhatSatellite', downloadConfig.useRedhatSatellite);
this.get('clusterInfo').set('repoInfo', allRepos);
}
- allRepos.set('display_name', Em.I18n.t("installer.step8.repoInfo.displayName"));
- this.get('clusterInfo').set('useRedhatSatellite', selectedStack.get('useRedhatSatellite'));
- this.get('clusterInfo').set('repoInfo', allRepos);
}
},
diff --git a/ambari-web/app/mappers.js b/ambari-web/app/mappers.js
index 49bd42e..ba9317a 100644
--- a/ambari-web/app/mappers.js
+++ b/ambari-web/app/mappers.js
@@ -51,4 +51,5 @@ require('mappers/socket/host_component_status_mapper');
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');
\ No newline at end of file
+require('mappers/socket/alert_groups_mapper_adapter');
+require('mappers/socket/upgrade_state_mapper');
\ No newline at end of file
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);
+ }
+ }
+ }
+});
diff --git a/ambari-web/test/controllers/installer_test.js b/ambari-web/test/controllers/installer_test.js
index 20294df..a9586b8 100644
--- a/ambari-web/test/controllers/installer_test.js
+++ b/ambari-web/test/controllers/installer_test.js
@@ -54,21 +54,6 @@ describe('App.InstallerController', function () {
});
});
- describe('#getHosts', function() {
- it ('Should return empty array', function() {
- expect(installerController.getHosts()).to.eql([]);
- });
- });
-
- describe('#loadServices', function() {
- it ('Should resolve nothing', function() {
- var res = installerController.loadServices();
- res.then(function(data){
- expect(data).to.be.undefined;
- });
- });
- });
-
describe('#cancelInstall', function() {
var mock = {
goToAdminView: sinon.spy()
@@ -517,62 +502,7 @@ describe('App.InstallerController', function () {
});
});
- describe('Should load stacks', function() {
- var loadStacks = false;
- var checker = {
- loadStacks: function() {
- return {
- done: function(callback) {
- callback(true);
- }
- };
- }
- };
-
- beforeEach(function () {
- sinon.spy(checker, 'loadStacks');
- installerController.loadMap['1'][0].callback.call(checker);
- });
-
- afterEach(function() {
- checker.loadStacks.restore();
- });
-
- it('should call loadStacks, stack info not loaded', function () {
- expect(checker.loadStacks.calledOnce).to.be.true;
- });
- });
-
- describe('Should load stacks async', function() {
- var checker = {
- loadStacksVersions: Em.K
- };
-
- beforeEach(function () {
- sinon.stub(checker, 'loadStacksVersions').returns({
- done: Em.clb
- });
- });
-
- afterEach(function() {
- checker.loadStacksVersions.restore();
- });
-
- it('stack versions are loaded', function () {
- installerController.loadMap['1'][1].callback.call(checker, true).then(function(data){
- expect(data).to.be.true;
- });
- expect(checker.loadStacksVersions.called).to.be.false;
- });
-
- it('should call loadStacksVersions, stack versions not loaded', function () {
- installerController.loadMap['1'][1].callback.call(checker, false).then(function(data){
- expect(data).to.be.true;
- });
- expect(checker.loadStacksVersions.calledOnce).to.be.true;
- });
- });
-
+ /* Disabling this one for now since not sure if this is a relevant test
describe('Should load installOptions', function() {
var installOptions = false;
var checker = {
@@ -590,6 +520,8 @@ describe('App.InstallerController', function () {
});
});
+ */
+
describe('Should load loadConfirmedHosts', function() {
var loadConfirmedHosts = false;
var checker = {
diff --git a/ambari-web/test/controllers/main/admin/service_auto_start_test.js b/ambari-web/test/controllers/main/admin/service_auto_start_test.js
index 2b30562..9e24004 100644
--- a/ambari-web/test/controllers/main/admin/service_auto_start_test.js
+++ b/ambari-web/test/controllers/main/admin/service_auto_start_test.js
@@ -95,7 +95,6 @@ describe('App.MainAdminServiceAutoStartController', function() {
});
afterEach(function() {
controller.loadClusterSettings.restore();
- App.router.get.restore();
controller.loadComponentsConfigs.restore();
});
diff --git a/ambari-web/test/mixins/common/configs/enhanced_configs_test.js b/ambari-web/test/mixins/common/configs/enhanced_configs_test.js
index e60e82a..908c0ec 100644
--- a/ambari-web/test/mixins/common/configs/enhanced_configs_test.js
+++ b/ambari-web/test/mixins/common/configs/enhanced_configs_test.js
@@ -581,7 +581,6 @@ describe('App.EnhancedConfigsMixin', function () {
afterEach(function() {
App.router.get('configurationController').getCurrentConfigsBySites.restore();
- mixin.addRecommendationRequestParams.restore();
mixin.getRecommendationsRequest.restore();
mixin.addRequestedConfigs.restore();
});