You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jg...@apache.org on 2018/05/14 17:53:07 UTC
[ambari] branch branch-feature-AMBARI-14714 updated: Removed unused
code and deprecated API calls.
This is an automated email from the ASF dual-hosted git repository.
jgolieb 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 12fb707 Removed unused code and deprecated API calls.
12fb707 is described below
commit 12fb7072106c6e3d9136179061ef28381f6707e6
Author: Jason Golieb <jg...@hortonworks.com>
AuthorDate: Wed May 9 16:57:11 2018 -0400
Removed unused code and deprecated API calls.
---
ambari-web/app/controllers.js | 2 -
.../app/controllers/global/cluster_controller.js | 37 -
ambari-web/app/controllers/installer.js | 195 +---
.../app/controllers/wizard/step1_controller.js | 474 ---------
.../app/controllers/wizard/step4_controller.js | 642 ------------
ambari-web/app/router.js | 8 +-
ambari-web/app/routes/add_service_routes.js | 4 +-
ambari-web/app/routes/installer.js | 50 -
ambari-web/app/routes/main.js | 4 +-
ambari-web/app/templates/wizard/step1.hbs | 292 ------
.../step1/public_option_disabled_window_body.hbs | 26 -
.../app/templates/wizard/step1/vdf_upload.hbs | 40 -
.../templates/wizard/step1_addLocalRepository.hbs | 55 -
ambari-web/app/utils/ajax/ajax.js | 40 -
ambari-web/app/views.js | 2 -
.../main/admin/stack_upgrade/services_view.js | 131 ---
ambari-web/app/views/wizard/step1_view.js | 290 ------
.../controllers/global/cluster_controller_test.js | 194 ----
ambari-web/test/controllers/installer_test.js | 221 +---
ambari-web/test/controllers/wizard/step1_test.js | 403 --------
ambari-web/test/controllers/wizard/step4_test.js | 1084 --------------------
ambari-web/test/views/wizard/step1_view_test.js | 230 -----
ambari-web/test/views/wizard/step4_view_test.js | 21 -
23 files changed, 10 insertions(+), 4435 deletions(-)
diff --git a/ambari-web/app/controllers.js b/ambari-web/app/controllers.js
index 46fe693..7f1b494 100644
--- a/ambari-web/app/controllers.js
+++ b/ambari-web/app/controllers.js
@@ -160,7 +160,6 @@ require('controllers/main/views_controller');
require('controllers/main/views/details_controller');
require('controllers/wizard/wizardStep_controller');
require('controllers/wizard/step0_controller');
-require('controllers/wizard/step1_controller');
require('controllers/wizard/step2_controller');
require('controllers/wizard/step3_controller');
require('controllers/wizard/configureDownload_controller');
@@ -169,7 +168,6 @@ require('controllers/wizard/customMpackRepos_controller');
require('controllers/wizard/downloadMpacks_controller');
require('controllers/wizard/customProductRepos_controller');
require('controllers/wizard/verifyProducts_controller');
-require('controllers/wizard/step4_controller');
require('controllers/wizard/step5_controller');
require('controllers/wizard/step6_controller');
require('controllers/wizard/step7_controller');
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index 349a73c..e0122f2 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -495,43 +495,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
});
},
- //TODO Replace this check with any other which is applicable to non-HDP stack
- /**
- * Check if HDP stack version is more or equal than 2.2.2 to determine if pluggable metrics for Storm are supported
- * @method checkDetailedRepoVersion
- * @returns {promise|*|promise|promise|HTMLElement|promise}
- */
- checkDetailedRepoVersion: function () {
- var dfd;
- var currentStackName = App.get('currentStackName');
- var currentStackVersionNumber = App.get('currentStackVersionNumber');
- if (currentStackName == 'HDP' && currentStackVersionNumber == '2.2') {
- dfd = App.ajax.send({
- name: 'cluster.load_detailed_repo_version',
- sender: this,
- success: 'checkDetailedRepoVersionSuccessCallback',
- error: 'checkDetailedRepoVersionErrorCallback'
- });
- } else {
- dfd = $.Deferred();
- App.set('isStormMetricsSupported', currentStackName != 'HDP' || stringUtils.compareVersions(currentStackVersionNumber, '2.2') == 1);
- dfd.resolve();
- }
- return dfd.promise();
- },
-
- checkDetailedRepoVersionSuccessCallback: function (data) {
- var rv = (Em.getWithDefault(data, 'items', []) || []).filter(function(i) {
- return Em.getWithDefault(i || {}, 'ClusterStackVersions.stack', null) === App.get('currentStackName') &&
- Em.getWithDefault(i || {}, 'ClusterStackVersions.version', null) === App.get('currentStackVersionNumber');
- })[0];
- var version = Em.getWithDefault(rv || {}, 'repository_versions.0.RepositoryVersions.repository_version', false);
- App.set('isStormMetricsSupported', stringUtils.compareVersions(version, '2.2.2') > -1 || !version);
- },
- checkDetailedRepoVersionErrorCallback: function () {
- App.set('isStormMetricsSupported', true);
- },
-
/**
* Load required data for all upgrades from API
* @returns {$.ajax}
diff --git a/ambari-web/app/controllers/installer.js b/ambari-web/app/controllers/installer.js
index c4bc072..06c41f0 100644
--- a/ambari-web/app/controllers/installer.js
+++ b/ambari-web/app/controllers/installer.js
@@ -47,8 +47,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
"downloadMpacks",
"customProductRepos",
"verifyProducts",
- //"step1",
- //"step4",
"step5",
"step6",
"step7",
@@ -182,11 +180,7 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
return jQuery.extend({}, this.get('clusterStatusTemplate'));
},
- getHosts: function () {
- return [];
- },
-
- /**
+ /**
* Remove host from model. Used at <code>Confirm hosts(step2)</code> step
* @param hosts Array of hosts, which we want to delete
*/
@@ -200,29 +194,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
},
/**
- * Load services data. Will be used at <code>Select services(step4)</code> step
- */
- loadServices: function () {
- var dfd = $.Deferred();
- var self = this;
- var stackServices = App.StackService.find().mapProperty('serviceName');
- if (!(stackServices.length && App.StackService.find().objectAt(0).get('stackVersion') === App.get('currentStackVersionNumber'))) {
- this.loadServiceComponents().complete(function () {
- self.set('content.services', App.StackService.find().forEach(function (item) {
- // user the service version from VersionDefinition
- var serviceInStack = App.Stack.find().findProperty('isSelected').get('stackServices').findProperty('name', item.get('serviceName'));
- var serviceVersionDisplay = serviceInStack ? serviceInStack.get('latestVersion') : item.get('serviceVersion');
- item.set('serviceVersionDisplay', serviceVersionDisplay);
- }));
- dfd.resolve();
- });
- } else {
- dfd.resolve();
- }
- return dfd.promise();
- },
-
- /**
* Load data for services selected from mpacks. Will be used at <code>Download Mpacks</code> step submit action.
*
* @param {string} stackName
@@ -250,11 +221,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
const message = Em.I18n.t('installer.error.mpackServiceInfo');
this.addError(message);
- // App.showAlertPopup(
- // Em.I18n.t('common.error'), //header
- // message //body
- // );
-
return message;
console.log(`${message} ${status} - ${error}`);
@@ -318,32 +284,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
stacks: [],
- mergeChanges: function (repos, oses, stacks) {
- var _repos = repos || [];
- var _oses = oses || [];
- var _stacks = stacks || [];
- _repos.forEach(function (repo) {
- App.Repository.find().findProperty('id', repo.id).set('baseUrl', repo.base_url);
- });
- _oses.forEach(function (os) {
- if (App.OperatingSystem.find().findProperty('id', os.id)) {
- App.OperatingSystem.find().findProperty('id', os.id).set('isSelected', os.is_selected);
- }
- });
- //should delete the record on going to step 2, on going back to step 1, still need the record
- if (App.router.get('currentState.name') != "step1") {
- App.OperatingSystem.find().filterProperty('isSelected', false).forEach(function (os) {
- App.stackMapper.deleteRecord(os);
- });
- }
- _stacks.forEach(function (_stack) {
- var stack = App.Stack.find().findProperty('id', _stack.id);
- if (stack) {
- stack.set('useRedhatSatellite', _stack.use_redhat_satellite);
- }
- });
- },
-
setSelected: function (isStacksExistInDb) {
if (!isStacksExistInDb) {
var stacks = App.Stack.find();
@@ -355,50 +295,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
},
/**
- * Get the the repo version (to install) info, this data will be POST
- * @method startDeploy
- */
- getSelectedRepoVersionData: function () {
- var vdfData = App.db.getLocalRepoVDFData();
- var selectedStack = App.Stack.find().findProperty('isSelected', true);
- var isXMLdata = false;
- var data = {};
- if (selectedStack && selectedStack.get('showAvailable')) {
- //meaning user selected a public repo
- data = {
- "VersionDefinition": {
- "available": selectedStack.get('id')
- }
- };
- isXMLdata = false;
- } else if (vdfData && validator.isValidURL(vdfData)) {
- // meaning user uploaded a VDF via entering URL
- data = {
- "VersionDefinition": {
- "version_url": vdfData
- }
- };
- isXMLdata = false;
- } else if (vdfData) {
- // meaning user uploaded a local VDF.xml file
- isXMLdata = true;
- data = vdfData;
- } else {
- return null;
- }
- return {
- isXMLdata: isXMLdata,
- data: data
- };
- },
-
- /**
- * onError callback for loading stacks data
- */
- loadStacksVersionsErrorCallback: function () {
- },
-
- /**
* check server version and web client version
*/
checkServerClientVersion: function () {
@@ -436,38 +332,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
},
/**
- * set stacks from server to content and local DB
- */
- setStacks: function () {
- App.db.setStacks(App.Stack.find().slice());
- this.set('content.stacks', App.Stack.find());
- App.db.setOses(App.OperatingSystem.find().slice());
- App.db.setRepos(App.Repository.find().slice());
- },
-
- /**
- * Save data to model
- * @param stepController App.WizardStep4Controller
- */
- saveServices: function (stepController) {
- var selectedServiceNames = [];
- var installedServiceNames = [];
- stepController.filterProperty('isSelected').forEach(function (item) {
- selectedServiceNames.push(item.get('serviceName'));
- });
- stepController.filterProperty('isInstalled').forEach(function (item) {
- installedServiceNames.push(item.get('serviceName'));
- });
- this.set('content.services', App.StackService.find());
- this.set('content.selectedServiceNames', selectedServiceNames);
- this.set('content.installedServiceNames', installedServiceNames);
- this.setDBProperties({
- selectedServiceNames: selectedServiceNames,
- installedServiceNames: installedServiceNames
- });
- },
-
- /**
* Save Master Component Hosts data to Main Controller
* @param stepController App.WizardStep5Controller
* @param skip {Boolean}
@@ -910,10 +774,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
this.gotoStep('step0');
},
- gotoStep1: function () {
- this.gotoStep('step1');
- },
-
gotoStep2: function () {
this.gotoStep('step2');
},
@@ -922,10 +782,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
this.gotoStep('step3');
},
- gotoStep4: function () {
- this.gotoStep('step4');
- },
-
gotoStep5: function () {
this.gotoStep('step5');
},
@@ -978,10 +834,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
return this.get('currentStep') == this.getStepIndex('step0');
}.property('currentStep'),
- isStep1: function () {
- return this.get('currentStep') == this.getStepIndex('step1');
- }.property('currentStep'),
-
isStep2: function () {
return this.get('currentStep') == this.getStepIndex('step2');
}.property('currentStep'),
@@ -990,10 +842,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
return this.get('currentStep') == this.getStepIndex('step3');
}.property('currentStep'),
- isStep4: function () {
- return this.get('currentStep') == this.getStepIndex('step4');
- }.property('currentStep'),
-
isStep5: function () {
return this.get('currentStep') == this.getStepIndex('step5');
}.property('currentStep'),
@@ -1096,47 +944,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
}
},
- /**
- * Compare jdk versions used for ambari and selected stack.
- * Validation check will fire only for non-custom jdk configuration.
- *
- * @param {Function} successCallback
- * @param {Function} failCallback
- */
- validateJDKVersion: function (successCallback, failCallback) {
- var selectedStack = App.Stack.find().findProperty('isSelected', true),
- currentJDKVersion = App.router.get('clusterController.ambariProperties')['java.version'],
- // use min as max, or max as min version, in case when some of them missed
- minJDKVersion = selectedStack.get('minJdkVersion') || selectedStack.get('maxJdkVersion'),
- maxJDKVersion = selectedStack.get('maxJdkVersion') || selectedStack.get('minJdkVersion'),
- t = Em.I18n.t,
- fCallback = failCallback || function() {},
- sCallback = successCallback || function() {};
-
- // Skip jdk check if min and max required version not set in stack definition.
- if (!minJDKVersion && !maxJDKVersion) {
- sCallback();
- return;
- }
-
- if (currentJDKVersion) {
- if (stringUtils.compareVersions(currentJDKVersion, minJDKVersion) < 0 ||
- stringUtils.compareVersions(maxJDKVersion, currentJDKVersion) < 0) {
- // checks and process only minor part for now
- var versionDistance = parseInt(maxJDKVersion.split('.')[1], 10) - parseInt(minJDKVersion.split('.')[1], 10);
- var versionsList = [minJDKVersion];
- for (var i = 1; i < versionDistance + 1; i++) {
- versionsList.push("" + minJDKVersion.split('.')[0] + '.' + (+minJDKVersion.split('.')[1] + i));
- }
- var versionsString = stringUtils.getFormattedStringFromArray(versionsList, t('or'));
- var popupBody = t('popup.jdkValidation.body').format(selectedStack.get('stackName') + ' ' + selectedStack.get('stackVersion'), versionsString, currentJDKVersion);
- App.showConfirmationPopup(sCallback, popupBody, fCallback, t('popup.jdkValidation.header'), t('common.proceedAnyway'), 'danger');
- return;
- }
- }
- sCallback();
- },
-
clearStackServices: function (deleteAll) {
var dfd = $.Deferred();
diff --git a/ambari-web/app/controllers/wizard/step1_controller.js b/ambari-web/app/controllers/wizard/step1_controller.js
deleted file mode 100644
index 7e01f3f..0000000
--- a/ambari-web/app/controllers/wizard/step1_controller.js
+++ /dev/null
@@ -1,474 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-var arrayUtils = require('utils/array_utils');
-require('./wizardStep_controller');
-
-/**
- * @typedef {Em.Object} StackType
- * @property {string} stackName
- * @property {App.Stack[]} stacks
- * @property {boolean} isSelected
- */
-
-/**
- * @type {Em.Object}
- */
-var StackType = Em.Object.extend({
- stackName: '',
- stacks: [],
- isSelected: Em.computed.someBy('stacks', 'isSelected', true)
-});
-
-App.WizardStep1Controller = App.WizardStepController.extend({
-
- name: 'wizardStep1Controller',
-
- stepName: 'step1',
-
- /**
- * Skip repo-validation
- *
- * @type {bool}
- */
- skipValidationChecked: false,
-
- /**
- * @type {App.Stack}
- */
- selectedStack: Em.computed.findBy('content.stacks', 'isSelected', true),
-
- /**
- * @type {App.ServiceSimple[]}
- */
- servicesForSelectedStack: Em.computed.filterBy('selectedStack.stackServices', 'isHidden', false),
-
- /**
- * Some network issues exist if there is no stack with <code>stackDefault</code> = false
- *
- * @type {boolean}
- */
- networkIssuesExist: Em.computed.everyBy('content.stacks', 'stackDefault', true),
-
- /**
- * No stacks have repo update URL section (aka "latest") defined in repoinfo.xml
- *
- * @type {boolean}
- */
- stackRepoUpdateLinkExists: Em.computed.someBy('content.stacks', 'stackRepoUpdateLinkExists', true),
-
- optionsToSelect: {
- 'usePublicRepo': {
- index: 0,
- isSelected: true
- },
- 'useLocalRepo': {
- index: 1,
- isSelected: false,
- 'uploadFile': {
- index: 0,
- name: 'uploadFile',
- file: '',
- hasError: false,
- isSelected: true
- },
- 'enterUrl': {
- index: 1,
- name: 'enterUrl',
- url: '',
- placeholder: Em.I18n.t('installer.step1.useLocalRepo.enterUrl.placeholder'),
- hasError: false,
- isSelected: false
- }
- }
- },
-
- /**
- * Checks if user selected to input url or upload file but didn't do it
- * true - url-radio is checked but url-field is empty
- * - file-radio is checked but file is not selected
- * false - otherwise
- *
- * @type {boolean}
- */
- readInfoIsNotProvided: function () {
- var useLocalRepo = this.get('optionsToSelect.useLocalRepo');
- if(Em.get(useLocalRepo, 'uploadFile.isSelected')) {
- return !Em.get(useLocalRepo, 'uploadFile.file');
- }
- if (Em.get(useLocalRepo, 'enterUrl.isSelected')) {
- return !Em.get(useLocalRepo, 'enterUrl.url');
- }
- return false;
- }.property('optionsToSelect.useLocalRepo.isSelected', 'optionsToSelect.useLocalRepo.uploadFile.isSelected',
- 'optionsToSelect.useLocalRepo.uploadFile.file', 'optionsToSelect.useLocalRepo.enterUrl.url'),
-
- /**
- * List of stacks grouped by <code>stackNameVersion</code>
- *
- * @type {StackType[]}
- */
- availableStackTypes: function () {
- var stacks = this.get('content.stacks');
- return stacks ? stacks.mapProperty('stackNameVersion').uniq().sort().reverse().map(function (stackName) {
- return StackType.create({
- stackName: stackName,
- stacks: stacks.filterProperty('stackNameVersion', stackName).sort(arrayUtils.sortByIdAsVersion).reverse()
- })
- }) : [];
- }.property('content.stacks.@each.stackNameVersion'),
-
- /**
- * @type {StackType}
- */
- selectedStackType: Em.computed.findBy('availableStackTypes', 'isSelected', true),
-
- isLoadingComplete: Em.computed.equal('wizardController.loadStacksRequestsCounter', 0),
-
- /**
- * Load selected file to current page content
- */
- readVersionInfo: function () {
- var data = {};
- var isXMLdata = false;
- if (this.get("optionsToSelect.useLocalRepo.enterUrl.isSelected")) {
- var url = this.get("optionsToSelect.useLocalRepo.enterUrl.url");
- data = {
- VersionDefinition: {
- version_url: url
- }
- };
- App.db.setLocalRepoVDFData(url);
- }
- else {
- if (this.get("optionsToSelect.useLocalRepo.uploadFile.isSelected")) {
- isXMLdata = true;
- // load from file browser
- data = this.get("optionsToSelect.useLocalRepo.uploadFile.file");
- App.db.setLocalRepoVDFData(data);
- }
- }
- return App.router.get('installerController').postVersionDefinitionFile(isXMLdata, data);
- },
-
- /**
- * On click handler for removing OS
- */
- removeOS: function (event) {
- if (this.get('selectedStack.useRedhatSatellite')) {
- return;
- }
- var osToRemove = event.context;
- Em.set(osToRemove, 'isSelected', false);
- },
-
- /**
- * On click handler for adding new OS
- */
- addOS: function (event) {
- var osToAdd = event.context;
- Em.set(osToAdd, 'isSelected', true);
- },
-
- /**
- * Use Local Repo if some network issues exist
- */
- onNetworkIssuesExist: function() {
- if (this.get('networkIssuesExist')) {
- this.get('content.stacks').forEach(function (stack) {
- stack.setProperties({
- usePublicRepo: false,
- useLocalRepo: true
- });
- stack.cleanReposBaseUrls();
- });
- }
- }.observes('networkIssuesExist'),
-
- /**
- * Select stack with field equal to the value
- * Example:
- * <pre>
- * selectStackBy('id', 'HDP-2.5-2.5.0.0'); // select stack with id = 'HDP-2.5-2.5.0.0'
- * selectStackBy('stackNameVersion', 'HDP-2.5'); // select first stack with stackNameVersion = 'HDP-2.5'
- * </pre>
- *
- * @param {string} field
- * @param {string} value
- */
- selectStackBy: function (field, value) {
- this.get('content.stacks').setEach('isSelected', false);
- this.get('content.stacks').findProperty(field, value).set('isSelected', true);
- },
-
- /**
- * Restore base urls for selected stack when user select to use public repository
- */
- usePublicRepo: function () {
- var selectedStack = this.get('selectedStack');
- if (selectedStack) {
- selectedStack.setProperties({
- useRedhatSatellite: false,
- usePublicRepo: true,
- useLocalRepo: false
- });
- selectedStack.restoreReposBaseUrls();
- }
- },
-
- /**
- * Clean base urls for selected stack when user select to use local repository
- */
- useLocalRepo: function () {
- var selectedStack = this.get('selectedStack');
- if (selectedStack) {
- selectedStack.setProperties({
- usePublicRepo: false,
- useLocalRepo: true
- });
- selectedStack.cleanReposBaseUrls();
- }
- },
-
- /**
- * Restores url value to be its default value.
- * @method doRestoreDefaultValue
- */
- doRestoreDefaultValue: function (event) {
- var repo = event.contexts[0];
- repo.set('baseUrl', repo.get('baseUrlInit'));
- },
-
- /**
- * Restores url value to empty string.
- * @method doRestoreToEmpty
- */
- doRestoreToEmpty: function (event) {
- var repo = event.contexts[0];
- repo.set('baseUrl', '');
- },
-
- /**
- * Click-handler for left-tabs with stack types
- * Select first available stack with stackName equal to chosen
- *
- * @param {{context: StackType}} event
- */
- selectRepoInList: function (event) {
- var id = this.get('availableStackTypes').findProperty('stackName', event.context.stackName).get('stacks.firstObject.id');
- this.selectStackBy('id', id);
- },
-
- /**
- * Click-handler for StackVersion-tabs
- *
- * @param {{context: App.Stack}} event
- */
- changeVersion: function (event) {
- this.selectStackBy('id', event.context.get('id'));
- },
-
- /**
- * Show popup with options to upload new version
- *
- * @returns {App.ModalPopup}
- */
- uploadVdf: function () {
- return App.ModalPopup.show({
-
- controller: this,
-
- header: Em.I18n.t('installer.step1.addVersion.title'),
-
- primary: Em.I18n.t('installer.step1.useLocalRepo.readButton'),
-
- disablePrimary: Em.computed.alias('controller.readInfoIsNotProvided'),
-
- 'data-qa': 'vdf-modal',
-
- /**
- * Try to read version info from the url or file (if provided)
- */
- onPrimary: function () {
- var controller = this.get('controller');
- controller.readVersionInfo().done(function (response) {
- // load successfully, so make this local stack repo as selectedStack
- var newStackId = response.stackNameVersion + '-' + response.actualVersion;
- var oldStackNameVersion = controller.get('selectedStack.stackNameVersion');
- controller.selectStackBy('id', newStackId);
- if (oldStackNameVersion && oldStackNameVersion !== response.stackNameVersion) {
- App.showAlertPopup(Em.I18n.t('common.warning'), Em.I18n.t('installer.step1.addVersion.stackChanged.popup.body').format(oldStackNameVersion, response.stackNameVersion));
- }
- Ember.run.next(function () {
- App.tooltip($("[rel=skip-validation-tooltip]"), {html: true, placement: 'left'});
- $("[rel=use-redhat-tooltip]").tooltip({placement: 'right'});
- });
- });
- this.restoreUploadOptions();
- this._super();
- },
-
- /**
- * Disable url/file fields on popup-close
- */
- onSecondary: function () {
- this.restoreUploadOptions();
- this._super();
- },
-
- /**
- * Disable url/file fields on popup-close
- */
- onClose: function () {
- this.restoreUploadOptions();
- this._super();
- },
-
- /**
- * Deselect file/url radio
- */
- restoreUploadOptions: function () {
- this.set('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected', false);
- this.set('controller.optionsToSelect.useLocalRepo.enterUrl.url', '');
- this.set('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected', true);
- this.set('controller.optionsToSelect.useLocalRepo.uploadFile.file', '');
- },
-
- bodyClass: Em.View.extend({
-
- controller: this,
-
- templateName: require('templates/wizard/step1/vdf_upload'),
-
- /**
- * Wrapper for 'upload-file' elements
- *
- * @type {Em.View}
- */
- uploadFileView: Em.View.extend({
-
- classNames: ['clearfix'],
-
- /**
- * Radio button for Use local Repo > Upload VDF file
- *
- * @type {App.RadioButtonView}
- */
- uploadFileRadioButton: App.RadioButtonView.extend({
- labelTranslate: 'installer.step1.useLocalRepo.uploadFile',
- checked: Em.computed.alias('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')
- }),
-
- /**
- * Is File API available
- *
- * @type {bool}
- */
- isFileApi: window.File && window.FileReader && window.FileList,
-
- /**
- * Upload file is disabled when some stack is selected or url-field is selected
- *
- * @type {boolean}
- */
- fileBrowserDisabled: Em.computed.alias('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected'),
-
- /**
- * Input to select vdf-file
- *
- * @type {Em.View}
- */
- fileInputView: Em.View.extend({
- template: Em.Handlebars.compile('<input type="file" {{bindAttr class="controller.optionsToSelect.useLocalRepo.enterUrl.isSelected:disabled"}} {{QAAttr "vdf-input"}}/>'),
-
- change: function (e) {
- var self = this;
- if (e.target.files && e.target.files.length === 1) {
- var file = e.target.files[0];
- var reader = new FileReader();
-
- reader.onload = (function () {
- return function (event) {
- self.set('controller.optionsToSelect.useLocalRepo.uploadFile.file', event.target.result);
- };
- })(file);
- reader.readAsText(file);
- }
- }
-
- }),
-
- click: function () {
- if (!this.set('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')) {
- this.set('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected', false);
- this.set('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected', true);
- this.set('controller.optionsToSelect.useLocalRepo.enterUrl.hasError', false);
- this.set('controller.optionsToSelect.useLocalRepo.uploadFile.hasError', false);
- }
- }
- }),
-
- /**
- * Wrapper for 'enter-url' elements
- *
- * @type {Em.View}
- */
- enterUrlView: Em.View.extend({
-
- /**
- * Url-field is disable when some stack is selected or upload file is selected
- *
- * @type {boolean}
- */
- enterUrlFieldDisabled: Em.computed.alias('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected'),
-
- /**
- * Input for file upload
- *
- * @type {Em.TextField}
- */
- enterUrlField: Em.TextField.extend({
- classNameBindings: [':input-block-level', 'controller.optionsToSelect.useLocalRepo.uploadFile.isSelected:disabled']
- }),
-
- /**
- * Radio button for Use local Repo > Enter Url of VDF file
- *
- * @type {App.RadioButtonView}
- */
- enterUrlRadioButton: App.RadioButtonView.extend({
- labelTranslate: 'installer.step1.useLocalRepo.enterUrl',
- checked: Em.computed.alias('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')
- }),
-
- click: function () {
- if (!this.set('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')) {
- this.set('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected', true);
- this.set('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected', false);
- this.set('controller.optionsToSelect.useLocalRepo.enterUrl.hasError', false);
- this.set('controller.optionsToSelect.useLocalRepo.uploadFile.hasError', false);
- }
- }
- })
-
- })
- });
- }
-
-});
diff --git a/ambari-web/app/controllers/wizard/step4_controller.js b/ambari-web/app/controllers/wizard/step4_controller.js
deleted file mode 100644
index 1ab9ef8..0000000
--- a/ambari-web/app/controllers/wizard/step4_controller.js
+++ /dev/null
@@ -1,642 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-require('./wizardStep_controller');
-
-App.WizardStep4Controller = Em.ArrayController.extend({
-
- name: 'wizardStep4Controller',
-
- stepName: 'step4',
-
- /**
- * List of Services
- * @type {Object[]}
- */
- content: [],
-
- /**
- * Check / Uncheck 'Select All' checkbox with one argument; Check / Uncheck all other checkboxes with more arguments
- * @type {bool}
- */
- isAllChecked: function(key, value) {
- if (arguments.length > 1) {
- this.filterProperty('isDisabled', false).filterProperty('isDFS', false).setEach('isSelected', value);
- return value;
- }
- return this.filterProperty('isInstalled', false).
- filterProperty('isHiddenOnSelectServicePage', false).
- filterProperty('isDFS', false).
- everyProperty('isSelected', true);
- }.property('@each.isSelected'),
-
- /**
- * Is Submit button disabled
- * @type {bool}
- */
- isSubmitDisabled: function () {
- return App.get('router.btnClickInProgress')
- || (this.get('wizardController.errors') && this.get('wizardController.errors').length > 0)
- || this.filterProperty('isSelected', true).filterProperty('isInstalled', false).length === 0;
- }.property('@each.isSelected', 'App.router.btnClickInProgress', 'wizardController.errors'),
-
- /**
- * List of validation errors. Look to #createError method for information
- * regarding object structure.
- *
- * @type {Object[]}
- */
- errorStack: [],
-
- /**
- * Services which are HDFS compatible
- */
- fileSystems: function() {
- var fileSystems = this.filterProperty('isDFS', true);;
- return fileSystems.map(function(fs) {
- return App.FileSystem.create({content: fs, services: fileSystems});
- });
- }.property('@each.isDFS'),
-
- /**
- * Drop errorStack content on selected state changes.
- */
- clearErrors: function() {
- if (!this.get('errorStack').someProperty('isAccepted', false)) {
- this.set('errorStack', []);
- }
- }.observes('@each.isSelected'),
-
- /**
- * Check if multiple distributed file systems were selected
- * @return {bool}
- * @method multipleDFSs
- */
- multipleDFSs: function () {
- return this.filterProperty('isDFS',true).filterProperty('isSelected',true).length > 1;
- },
-
- /**
- * Check whether Ranger is selected and show installation requirements if yes
- * @param {function} callback
- * @method rangerValidation
- */
- rangerValidation: function (callback) {
- var rangerService = this.findProperty('serviceName', 'RANGER');
- if (rangerService && !rangerService.get('isInstalled')) {
- if(rangerService.get('isSelected')) {
- this.addValidationError({
- id: 'rangerRequirements',
- type: 'WARNING',
- callback: this.rangerRequirementsPopup,
- callbackParams: [callback]
- });
- }
- else {
- //Ranger is selected, remove the Ranger error from errorObject array
- var rangerError = this.get('errorStack').filterProperty('id',"rangerRequirements");
- if(rangerError)
- {
- this.get('errorStack').removeObject(rangerError[0]);
- }
- }
- }
- },
-
- /**
- * Warn user if he tries to install Spark with HDP 2.2
- * @param {function} callback
- * @method sparkValidation
- */
- sparkValidation: function (callback) {
- var sparkService = this.findProperty('serviceName', 'SPARK');
- if (sparkService && !sparkService.get('isInstalled') &&
- App.get('currentStackName') === 'HDP' && App.get('currentStackVersionNumber') === '2.2') {
- if(sparkService.get('isSelected')) {
- this.addValidationError({
- id: 'sparkWarning',
- type: 'WARNING',
- callback: this.sparkWarningPopup,
- callbackParams: [callback]
- });
- }
- else {
- //Spark is selected, remove the Spark error from errorObject array
- var sparkError = this.get('errorStack').filterProperty('id',"sparkWarning");
- if(sparkError) {
- this.get('errorStack').removeObject(sparkError[0]);
- }
- }
- }
- },
-
- /**
- * Onclick handler for <code>Next</code> button.
- * Disable 'Next' button while it is already under process. (using Router's property 'nextBtnClickInProgress')
- * @method submit
- */
- submit: function () {
- if(App.get('router.nextBtnClickInProgress')) {
- return;
- }
- if (!this.get('isSubmitDisabled')) {
- this.unSelectServices();
- this.setGroupedServices();
- if (this.validate()) {
- this.set('errorStack', []);
- App.router.send('next');
- }
- }
- },
-
- /**
- * Set isSelected based on property doNotShowAndInstall
- */
- unSelectServices: function () {
- this.filterProperty('isSelected',true).filterProperty('doNotShowAndInstall', true).setEach('isSelected', false);
- },
-
- /**
- * Check if validation passed:
- * - required file system services selected
- * - dependencies between services
- * - monitoring services selected (not required)
- *
- * @return {Boolean}
- * @method validate
- */
- validate: function () {
- var result;
- var self = this;
-
- // callback function to reset `isAccepted` needs to be called everytime when a popup from errorStack is dismissed/proceed by user action
- var callback = function (id) {
- var check = self.get('errorStack').findProperty('id', id);
- if (check) {
- check.isAccepted = true;
- }
- };
- this.serviceDependencyValidation(callback);
- this.fileSystemServiceValidation(callback);
- if (this.get('wizardController.name') === 'installerController') {
- this.serviceValidation(callback, 'AMBARI_METRICS', 'ambariMetricsCheck');
- this.serviceValidation(callback, 'SMARTSENSE', 'smartSenseCheck');
- }
- this.dependentServiceValidation('ATLAS', 'AMBARI_INFRA_SOLR', 'ambariInfraCheck', callback);
- this.dependentServiceValidation('LOGSEARCH', 'AMBARI_INFRA_SOLR', 'ambariLogsearchCheck', callback);
- this.rangerValidation(callback);
- this.sparkValidation(callback);
- if (!!this.get('errorStack').filterProperty('isShown', false).length) {
- var firstError = this.get('errorStack').findProperty('isShown', false);
- this.showError(firstError);
- result = false;
- } else {
- result = true;
- }
- return result;
- },
-
- /**
- * display validation warning if dependent service not selected
- * @param {string} selectedService
- * @param {string} dependentService
- * @param {string} checkId
- * @param {Function} callback
- */
- dependentServiceValidation: function(selectedService, dependentService, checkId, callback) {
- var selected = this.findProperty('serviceName', selectedService);
- var dependent = this.findProperty('serviceName', dependentService);
- if (selected && selected.get('isSelected') && dependent && !dependent.get('isSelected')) {
- this.serviceValidation(callback, dependentService, checkId);
- } else {
- var unNeededError = this.get('errorStack').filterProperty('id', checkId);
- if (unNeededError) {
- this.get('errorStack').removeObject(unNeededError[0]);
- }
- }
- },
-
- /**
- * Check whether user selected service to install and go to next step
- * @param callback {Function}
- * @param serviceName {string}
- * @param id {string}
- * @method serviceValidation
- */
- serviceValidation: function(callback, serviceName, id) {
- var service = this.findProperty('serviceName', serviceName);
- if (service) {
- if (!service.get('isSelected')) {
- this.addValidationError({
- id: id,
- type: 'WARNING',
- callback: this.serviceCheckPopup,
- callbackParams: [callback]
- });
- }
- else {
- //metrics is selected, remove the metrics error from errorObject array
- var metricsError = this.get('errorStack').filterProperty('id', id);
- if (metricsError) {
- this.get('errorStack').removeObject(metricsError[0]);
- }
- }
- }
- },
-
- /**
- * Create error and push it to stack.
- *
- * @param {Object} errorObject - look to #createError
- * @return {Boolean}
- * @method addValidationError
- */
- addValidationError: function (errorObject) {
- if (!this.get('errorStack').someProperty('id', errorObject.id)) {
- this.get('errorStack').push(this.createError(errorObject));
- return true;
- }
- return false;
- },
-
- /**
- * Show current error by passed error object.
- *
- * @param {Object} errorObject
- * @method showError
- */
- showError: function (errorObject) {
- return errorObject.callback.apply(errorObject.callbackContext, errorObject.callbackParams.concat(errorObject.id));
- },
-
- /**
- * Default primary button("Ok") callback for warning popups.
- * Change isShown state for last shown error.
- * Call #submit() method.
- *
- * @param {function} callback
- * @param {string} id
- * @method onPrimaryPopupCallback
- */
- onPrimaryPopupCallback: function(callback, id) {
- var firstError = this.get('errorStack').findProperty('isShown', false);
- if (firstError) {
- firstError.isShown = true;
- }
- if (callback) {
- callback(id);
- }
- this.submit();
- },
-
- /**
- * Create error object with passed options.
- * Available options:
- * id - {String}
- * type - {String}
- * isShowed - {Boolean}
- * callback - {Function}
- * callbackContext
- * callbackParams - {Array}
- *
- * @param {Object} opt
- * @return {Object}
- * @method createError
- */
- createError: function(opt) {
- var options = {
- // {String} error identifier
- id: '',
- // {String} type of error CRITICAL|WARNING
- type: 'CRITICAL',
- // {Boolean} error was shown
- isShown: false,
- // {Boolean} error was accepted by user
- isAccepted: false,
- // {Function} callback to execute
- callback: null,
- // context which execute from
- callbackContext: this,
- // {Array} params applied to callback
- callbackParams: []
- };
- $.extend(options, opt);
- return options;
- },
-
- /**
- * Checks if a filesystem is present in the Stack
- *
- * @method isDFSStack
- */
- isDFSStack: function () {
- var bDFSStack = false;
- var dfsServices = ['HDFS', 'GLUSTERFS'];
- var availableServices = this.filterProperty('isInstalled',false);
- availableServices.forEach(function(service){
- if (dfsServices.contains(service.get('serviceName')) || service.get('serviceType') == 'HCFS' ) {
- bDFSStack=true;
- }
- },this);
- return bDFSStack;
- },
-
- /**
- * Checks if a filesystem is selected and only one filesystem is selected
- * @param {function} callback
- * @method isFileSystemCheckFailed
- */
- fileSystemServiceValidation: function(callback) {
- if(this.isDFSStack()){
- var primaryDFS = this.findProperty('isPrimaryDFS',true);
- if (primaryDFS) {
- var primaryDfsDisplayName = primaryDFS.get('displayNameOnSelectServicePage');
- var primaryDfsServiceName = primaryDFS.get('serviceName');
- if (this.multipleDFSs()) {
- var dfsServices = this.filterProperty('isDFS',true).filterProperty('isSelected',true).mapProperty('serviceName');
- var services = dfsServices.map(function (item){
- return {
- serviceName: item,
- selected: item === primaryDfsServiceName
- };
- });
- this.addValidationError({
- id: 'multipleDFS',
- callback: this.needToAddServicePopup,
- callbackParams: [services, 'multipleDFS', primaryDfsDisplayName, callback]
- });
- }
- else
- {
- //if multiple DFS are not selected, remove the related error from the error array
- var fsError = this.get('errorStack').filterProperty('id',"multipleDFS");
- if(fsError)
- {
- this.get('errorStack').removeObject(fsError[0]);
- }
- }
- }
- }
- },
-
- /**
- * Checks if a dependent service is selected without selecting the main service.
- * @param {function} callback
- * @method serviceDependencyValidation
- */
- serviceDependencyValidation: function(callback) {
- var selectedServices = this.filterProperty('isSelected', true);
- var availableServices = this.get('content');
- var missingDependencies = [];
- selectedServices.forEach(function(service) {
- service.collectMissingDependencies(selectedServices, availableServices, missingDependencies);
- });
- this.cleanExistingServiceCheckErrors();
- this.addServiceCheckErrors(missingDependencies, callback);
- },
-
- cleanExistingServiceCheckErrors() {
- var existingServiceCheckErrors = this.get('errorStack').filter(function (error) {
- return error.id.startsWith('serviceCheck_');
- });
- this.get('errorStack').removeObjects(existingServiceCheckErrors);
- },
-
- addServiceCheckErrors(missingDependencies, callback) {
- for(var i = 0; i < missingDependencies.length; i++) {
- this.addValidationError({
- id: 'serviceCheck_' + missingDependencies[i].get('serviceName'),
- callback: this.needToAddMissingDependency,
- callbackParams: [missingDependencies[i], 'serviceCheck', callback]
- });
- }
- },
-
- /**
- * Select co hosted services which not showed on UI.
- *
- * @method setGroupedServices
- */
- setGroupedServices: function() {
- this.forEach(function(service){
- var coSelectedServices = service.get('coSelectedServices');
- coSelectedServices.forEach(function(groupedServiceName) {
- var groupedService = this.findProperty('serviceName', groupedServiceName);
- if (groupedService.get('isSelected') !== service.get('isSelected')) {
- groupedService.set('isSelected',service.get('isSelected'));
- }
- },this);
- },this);
- },
-
- /**
- * Select/deselect services
- * @param {object[]|object} services array of objects
- * <code>
- * [
- * {
- * service: 'HDFS',
- * selected: true
- * },
- * ....
- * ]
- * </code>
- * @param {string} i18nSuffix
- * @param {string} serviceName
- * @param {function} callback
- * @param {string} id
- * @return {App.ModalPopup}
- * @method needToAddServicePopup
- */
-
- needToAddServicePopup: function (services, i18nSuffix, serviceName, callback, id) {
- var self = this;
- return App.ModalPopup.show({
- 'data-qa': 'need-add-service-confirmation-modal',
- header: Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.header').format(serviceName),
- body: Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.body').format(serviceName, serviceName),
- onPrimary: function () {
- Em.makeArray(services).forEach(function (service) {
- self.findProperty('serviceName', service.serviceName).set('isSelected', service.selected);
- });
- self.onPrimaryPopupCallback(callback, id);
- this.hide();
- },
- onSecondary: function () {
- if (callback) {
- callback(id);
- }
- this._super();
- },
- onClose: function () {
- if (callback) {
- callback(id);
- }
- this._super();
- }
- });
- },
-
- needToAddMissingDependency: function (missingDependency, i18nSuffix, callback, id) {
- var self = this;
- var displayName = missingDependency.get('displayName');
- if (missingDependency.get('hasMultipleOptions')) {
- return this.showDependencyPopup(
- id,
- Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.header').format(displayName),
- Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.body.multiOptions').format(displayName, missingDependency.get('displayOptions')),
- callback
- );
- } else {
- return this.showDependencyPopup(
- id,
- Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.header').format(displayName),
- Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.body').format(displayName, missingDependency.get('serviceName')),
- callback,
- function () {
- missingDependency.selectFirstCompatible();
- self.onPrimaryPopupCallback(callback, id);
- this.hide();
- }
- );
- }
- },
-
- showDependencyPopup: function(id, header, body, callback, primaryAction) {
- return App.ModalPopup.show({
- 'data-qa': 'need-add-service-confirmation-modal',
- header: header,
- body: body,
- onPrimary: primaryAction || function() { this.onClose(); },
- onSecondary: function() {
- this.onClose();
- },
- onClose: function() {
- if (callback) {
- callback(id);
- }
- this._super();
- }
- });
- },
-
- /**
- * Show popup with info about not selected service
- * @param {function} callback
- * @param {string} id
- * @return {App.ModalPopup}
- * @method serviceCheckPopup
- */
- serviceCheckPopup: function (callback, id) {
- var self = this;
- return App.ModalPopup.show({
- header: Em.I18n.t('installer.step4.limitedFunctionality.popup.header'),
- body: Em.I18n.t('installer.step4.' + id + '.popup.body'),
- primary: Em.I18n.t('common.proceedAnyway'),
- primaryClass: 'btn-warning',
- onPrimary: function () {
- self.onPrimaryPopupCallback(callback);
- this.hide();
- },
- onSecondary: function () {
- if (callback) {
- callback(id);
- }
- this._super();
- },
- onClose: function () {
- if (callback) {
- callback(id);
- }
- this._super();
- }
- });
- },
-
- /**
- * Show popup with installation requirements for Ranger service
- * @param {function} callback
- * @param {string} id
- * @return {App.ModalPopup}
- * @method rangerRequirementsPopup
- */
- rangerRequirementsPopup: function (callback, id) {
- var self = this;
- return App.ModalPopup.show({
- 'data-qa': 'ranger-requirements-modal',
- header: Em.I18n.t('installer.step4.rangerRequirements.popup.header'),
- bodyClass: Em.View.extend({
- templateName: require('templates/wizard/step4/step4_ranger_requirements_popup')
- }),
- primary: Em.I18n.t('common.proceed'),
- isChecked: false,
- disablePrimary: function () {
- return !this.get('isChecked');
- }.property('isChecked'),
- onPrimary: function () {
- self.onPrimaryPopupCallback(callback);
- this.hide();
- },
- onSecondary: function () {
- if (callback) {
- callback(id);
- }
- this._super();
- },
- onClose: function () {
- if (callback) {
- callback(id);
- }
- this._super();
- }
- });
- },
-
- /**
- * Show popup with Spark installation warning
- * @param {function} callback
- * @param {string} id
- * @return {App.ModalPopup}
- * @method sparkWarningPopup
- */
- sparkWarningPopup: function (callback, id) {
- var self = this;
- return App.ModalPopup.show({
- header: Em.I18n.t('common.warning'),
- body: Em.I18n.t('installer.step4.sparkWarning.popup.body'),
- primary: Em.I18n.t('common.proceed'),
- onPrimary: function () {
- self.onPrimaryPopupCallback(callback);
- this.hide();
- },
- onSecondary: function () {
- if (callback) {
- callback(id);
- }
- this._super();
- },
- onClose: function () {
- if (callback) {
- callback(id);
- }
- this._super();
- }
- });
- }
-});
diff --git a/ambari-web/app/router.js b/ambari-web/app/router.js
index fc754b7..c1e060f 100644
--- a/ambari-web/app/router.js
+++ b/ambari-web/app/router.js
@@ -238,10 +238,10 @@ App.Router = Em.Router.extend({
this.get('addHostController').clear();
this.get('addServiceController').clear();
this.get('backgroundOperationsController').clear();
- for (var i = 1; i < 11; i++) {
- this.set('wizardStep' + i + 'Controller.hasSubmitted', false);
- this.set('wizardStep' + i + 'Controller.isDisabled', true);
- }
+ // for (var i = 1; i < 11; i++) {
+ // this.set('wizardStep' + i + 'Controller.hasSubmitted', false);
+ // this.set('wizardStep' + i + 'Controller.isDisabled', true);
+ // }
},
/**
diff --git a/ambari-web/app/routes/add_service_routes.js b/ambari-web/app/routes/add_service_routes.js
index 7f6a05f..4ec0070 100644
--- a/ambari-web/app/routes/add_service_routes.js
+++ b/ambari-web/app/routes/add_service_routes.js
@@ -126,7 +126,7 @@ module.exports = App.WizardRoute.extend({
controller.set('hideBackButton', true);
controller.dataLoading().done(function () {
controller.loadAllPriorSteps().done(function () {
- var wizardStep4Controller = router.get('wizardStep4Controller');
+ //var wizardStep4Controller = router.get('wizardStep4Controller');
wizardStep4Controller.set('wizardController', controller);
controller.loadServiceVersionFromVersionDefinitions().complete(function () {
controller.set('content.services', App.StackService.find().forEach(function (item) {
@@ -142,7 +142,7 @@ module.exports = App.WizardRoute.extend({
},
nextTransition: function (router) {
var addServiceController = router.get('addServiceController');
- var wizardStep4Controller = router.get('wizardStep4Controller');
+ //var wizardStep4Controller = router.get('wizardStep4Controller');
addServiceController.saveServices(wizardStep4Controller);
addServiceController.saveClients(wizardStep4Controller);
addServiceController.setDBProperty('masterComponentHosts', undefined);
diff --git a/ambari-web/app/routes/installer.js b/ambari-web/app/routes/installer.js
index e692873..ff9de393 100644
--- a/ambari-web/app/routes/installer.js
+++ b/ambari-web/app/routes/installer.js
@@ -519,52 +519,6 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
}
}),
- step4: App.StepRoute.extend({
- route: '/step4',
- breadcrumbs: { label: Em.I18n.translations['installer.step4.header'] },
- connectOutlets: function (router, context) {
- console.time('step4 connectOutlets');
- var self = this;
- var controller = router.get('installerController');
- var wizardStep4Controller = router.get('wizardStep4Controller');
- wizardStep4Controller.set('wizardController', controller);
- var newStepIndex = controller.getStepIndex('step4');
- router.setNavigationFlow(newStepIndex);
- controller.setCurrentStep('step4');
- controller.loadAllPriorSteps().done(function () {
- controller.setStepsEnable();
- controller.connectOutlet('wizardStep4', App.StackService.find().filterProperty('isInstallable', true));
- self.scrollTop();
- console.timeEnd('step4 connectOutlets');
- });
- },
-
- backTransition: function(router) {
- var controller = router.get('installerController');
- controller.clearErrors();
- router.transitionTo('step1');
- },
-
- next: function (router) {
- console.time('step4 next');
- if (!router.get('btnClickInProgress')) {
- App.set('router.nextBtnClickInProgress', true);
- var controller = router.get('installerController');
- var wizardStep4Controller = router.get('wizardStep4Controller');
- controller.saveServices(wizardStep4Controller);
- controller.saveClients(wizardStep4Controller);
- router.get('wizardStep5Controller').clearRecommendations(); // Force reload recommendation between steps 4 and 5
- controller.setDBProperties({
- recommendations: undefined,
- masterComponentHosts: undefined
- });
- controller.clearEnhancedConfigs();
- router.transitionTo('step5');
- }
- console.timeEnd('step4 next');
- }
- }),
-
step5: App.StepRoute.extend({
route: '/step5',
breadcrumbs: { label: Em.I18n.translations['installer.step5.header'] },
@@ -904,14 +858,10 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
gotoStep0: Em.Router.transitionTo('step0'),
- gotoStep1: Em.Router.transitionTo('step1'),
-
gotoStep2: Em.Router.transitionTo('step2'),
gotoStep3: Em.Router.transitionTo('step3'),
- gotoStep4: Em.Router.transitionTo('step4'),
-
gotoStep5: Em.Router.transitionTo('step5'),
gotoStep6: Em.Router.transitionTo('step6'),
diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js
index e20bd9d..8589b32 100644
--- a/ambari-web/app/routes/main.js
+++ b/ambari-web/app/routes/main.js
@@ -46,9 +46,7 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
} else {
if (router.get('clusterInstallCompleted')) {
if (!App.get('isOnlyViewUser')) {
- clusterController.checkDetailedRepoVersion().done(function () {
- router.get('mainController').initialize();
- });
+ router.get('mainController').initialize();
} else {
// Don't transit to Views when user already on View page
if (App.router.currentState.name !== 'viewDetails') {
diff --git a/ambari-web/app/templates/wizard/step1.hbs b/ambari-web/app/templates/wizard/step1.hbs
deleted file mode 100644
index c07586d..0000000
--- a/ambari-web/app/templates/wizard/step1.hbs
+++ /dev/null
@@ -1,292 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-<div id="select-stack" class="wizard-content col-md-9" {{QAAttr "select-stack-page"}}>
- <h4 class="step-title">{{t installer.step1.header}}</h4>
-
- <div class="panel panel-default">
- <div class="panel-body">
- <p class="step-description">{{t installer.step1.body}}</p>
- {{#if isLoadingComplete}}
- {{! left tabs }}
- <div class="tabs-menu">
- <ul class="nav nav-tabs" {{QAAttr "stack-tabs"}}>
- {{#each stack in availableStackTypes}}
- <li {{bindAttr class="stack.isSelected:active"}} {{QAAttr "stack-tab"}}>
- <a {{QAAttr "stack-link-{stack.stackName}"}} {{action "selectRepoInList" stack target="controller"}}
- href="#">{{stack.stackName}}</a></li>
- {{/each}}
- </ul>
- </div>
- <div class="stacks-options">
- <div class="details-panel">
- <div class="btn-group" {{QAAttr "select-version"}}>
- <button type="button" data-toggle="dropdown"
- class="btn dropdown-toggle btn-default" {{QAAttr "select-version-button"}}>{{controller.selectedStack.displayName}}
- <span class="caret"></span></button>
- <ul class="dropdown-menu">
- {{#each stack in selectedStackType.stacks}}
- <li>
- {{!view view.stackRadioButton stackBinding="stack"}}
- <a
- href="#" {{action "changeVersion" stack target="controller"}} {{QAAttr "{stack.displayName}"}}>{{stack.displayName}}
- {{#if stack.stackDefault}}
- ({{t installer.step1.changeVersion.defaultVersion}})
- {{/if}}
- </a>
- </li>
- {{/each}}
- <li><a
- href="#" {{action "uploadVdf" target="controller"}} {{QAAttr "add-new-version"}}>{{t installer.step1.addVersion}}
- ...</a></li>
- </ul>
- </div>
- <div class="version-contents-section">
- {{#unless servicesForSelectedStack}}
- <div class="alert alert-info"
- role="alert">{{t installer.step1.useLocalRepo.infoForm.content.empty}}</div>
- {{/unless}}
- <table class="table table-hover">
- <tbody>
- {{#each service in servicesForSelectedStack}}
- <tr>
- <td class="col-md-4">{{service.displayName}}</td>
- <td class="col-md-8">{{service.latestVersion}}</td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- </div>
- </div>
- </div>
- {{! left tabs end }}
-
- {{#if App.router.nextBtnClickInProgress}}
- {{view App.SpinnerView}}
- {{else}}
- <form id="repoVersionInfoForm" class="form-horizontal" role="form" name="localVersionInfoForm" novalidate>
-
- <div class="panel panel-default repos-panel">
- <div class="step-title">
- <p>{{t common.repositories}}</p>
- </div>
- <p class="step-description">{{t installer.step1.repo.body}}</p>
- <div class="panel-body version-contents-body">
- <div class="row radio-group">
- {{! Public Repository radio }}
- <div {{bindAttr class=":col-sm-4 :radio :big-radio :public-radio :wizard-plain-text"}}>
- {{view view.usePublicRepoRadioButton classNames="display-inline-block" labelIdentifier="use-public-repo"}}
- {{#if stackRepoUpdateLinkExists}}
- {{#if networkIssuesExist}}
- <a id="public-disabled-link"
- class="display-inline-block" {{action "openPublicOptionDisabledWindow" target="view"}}>{{t installer.step1.selectUseRepoOptions.public.networkLost}}</a>
- {{/if}}
- {{/if}}
- </div>
- {{!--Local repo radio--}}
- {{view view.useLocalRepoRadioButton classNames="radio big-radio col-sm-4" labelIdentifier="use-local-repo"}}
- </div>
- <div class="alert alert-info"
- role="alert">{{t installer.step1.useLocalRepo.infoForm.alert.baseUrl}}</div>
- {{#if view.showWarning}}
- <div
- class="alert alert-warning" {{QAAttr "step1-warning"}}>{{t installer.step1.attentionNeeded}}</div>
- {{/if}}
-
- {{! OSes and Repositories }}
- <div class="row">
- <div class="table-controls row col-sm-12 pull-right">
- <div class="col-sm-12">
- {{! Add OS }}
- <div class="btn-group pull-right">
- <button
- type="button" {{bindAttr data-original-title="view.addOsButtonTooltip" class=":btn :btn-default :dropdown-toggle :add-os-button view.isAddOsButtonDisabled:disabled"}}
- {{QAAttr "add-os-button"}}
- data-toggle="dropdown">
- <i class="glyphicon glyphicon-plus"></i> {{t common.add}} <span class="caret"></span>
- </button>
- <ul class="dropdown-menu">
- {{#each operatingSystem in selectedStack.operatingSystems}}
- {{#unless operatingSystem.isSelected}}
- <li>
- <a {{action "addOS" operatingSystem target="controller"}} {{QAAttr "add-os-{operatingSystem.osType}"}}>{{operatingSystem.osType}}</a>
- </li>
- {{/unless}}
- {{/each}}
- </ul>
- </div>
- {{! Add OS END}}
- </div>
- <div class="span9 repo-name-url">
- {{#each repository in operatingSystem.repositories}}
- {{#if repository.showRepo}}
- <div {{bindAttr class=":clearfix :repo-name-url-inner repository.repoName"}}>
- <div class="span3">
- <label class="repo-name-label control-label">{{repository.repoId}}</label>
- </div>
- <div class="validation-td span1">
- {{#if repository.validation}}
- {{view view.popoverView repositoryBinding="repository"}}
- {{/if}}
- </div>
- <div {{bindAttr class=":span8 :repo-url repository.invalidFormatError:textfield-error repository.invalidError:textfield-error"}}>
- {{view view.repositoryTextField repositoryBinding="repository"}}
- {{#if controller.selectedStack.usePublicRepo}}
- {{#if repository.undo}}
- <i class="icon-undo" data-toggle="tooltip"
- {{action "doRestoreDefaultValue" repository target="controller"}}
- {{translateAttr title="common.undo"}}>
- </i>
- {{/if}}
- {{else}}
- {{#if repository.notEmpty}}
- <i class="icon-undo" data-toggle="tooltip"
- {{action "doRestoreToEmpty" repository target="controller"}}
- {{translateAttr title="common.undo"}}>
- </i>
- {{/if}}
- {{/if}}
- </div>
- </div>
- {{/if}}
- {{/each}}
- </div>
- </div>
- </div>
- <table class="table table-hover">
- <thead>
- <tr>
- <th class="col-sm-2">{{t common.os}}</th>
- <th class="col-sm-3">{{t common.name}}</th>
- <th class="col-sm-6">{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</th>
- <th class="col-sm-1"></th>
- </tr>
- </thead>
- <tbody>
- {{#each operatingSystem in selectedStack.operatingSystems}}
- {{#if operatingSystem.isSelected}}
- <tr {{QAAttr "os-wrapper"}}>
- <td class="col-sm-2" {{QAAttr "os-type-label"}}>{{operatingSystem.osType}}</td>
- <td class="col-sm-9" colspan="2">
- <table
- class="table table-condensed no-borders inner-table" {{QAAttr "{operatingSystem.osType}"}}>
- <tbody>
- {{#each repository in operatingSystem.repositories}}
- <tr {{QAAttr "{repository.repoName}"}}>
- <td class="col-sm-3">{{repository.repoId}}</td>
- <td class="col-sm-1">
- {{view view.popoverView repositoryBinding="repository" data-qaBinding="repository.validation"}}
- </td>
- <td class="col-sm-8">
- <div {{bindAttr class=":repo-url repository.invalidFormatError:has-error repository.invalidError:has-error"}}>
- {{view Ember.TextField placeholderBinding="repository.placeholder" valueBinding="repository.baseUrl" disabledBinding="controller.selectedStack.useRedhatSatellite" classNames="form-control" data-qa="repo-url-input"}}
- {{#if controller.selectedStack.usePublicRepo}}
- <i {{bindAttr class="repository.undo::invisible :icon-undo"}}
- {{action "doRestoreDefaultValue" repository target="controller"}}
- {{translateAttr title="common.undo"}}
- {{QAAttr "undo-icon"}}>
- </i>
- {{else}}
- <i {{bindAttr class="repository.notEmpty::invisible :icon-undo"}}
- {{action "doRestoreToEmpty" repository target="controller"}}
- {{translateAttr title="common.undo"}}
- {{QAAttr "undo-icon"}}>
- </i>
- {{/if}}
- </div>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- </td>
- <td class="col-sm-1">
- <a class="action remove-icon"
- href="#" {{action "removeOS" operatingSystem target="view"}} {{QAAttr "remove-icon"}}>
- <span class="icon icon-minus"></span>
- {{t common.remove}}
- </a>
- </td>
- </tr>
- {{/if}}
- {{/each}}
- </tbody>
- </table>
- {{! OSes and Repositories END }}
-
- {{! Skip Repository Base URL validation }}
- <div id="skip-validation" {{bindAttr class="controller.selectedStack.useRedhatSatellite:disabled"}}>
- {{#view App.CheckboxView
- labelTranslate="installer.step1.advancedRepo.skipValidation.message"
- labelClassNamesBinding="controller.selectedStack.useRedhatSatellite:disabled"
- checkedBinding="skipValidationChecked"
- disabledBinding="controller.selectedStack.useRedhatSatellite"
- labelIdentifier="skip-validation"
- }}
- <i class="glyphicon glyphicon-question-sign" rel="skip-validation-tooltip"
- data-toggle="tooltip" {{translateAttr data-original-title="installer.step1.advancedRepo.skipValidation.tooltip"}}>
- </i>
- {{/view}}
- <div class="clearfix"></div>
- </div>
- {{! Skip Repository Base URL validation END }}
-
- {{! Use RedHat Satellite/Spacewalk }}
- <div id="use-redhat" class="checkbox">
- {{#view view.redhatCheckBoxView
- classNames="use-redhat-checkbox"
- }}
- <label {{bindAttr for="view.checkboxId" class=":redhat-label :display-inline-block controller.selectedStack.usePublicRepo:disabled" data-original-title="view.redhatDisabledTooltip"}}>
- {{t installer.step1.advancedRepo.useRedhatSatellite.message}}
- </label>
- <i class="glyphicon glyphicon-question-sign" rel="use-redhat-tooltip"
- data-toggle="tooltip" {{translateAttr data-original-title="installer.step1.advancedRepo.useRedhatSatellite.tooltip"}}>
- </i>
- {{/view}}
- </div>
- {{! Use RedHat Satellite/Spacewalk END }}
- </div>
- </div>
- </form>
- {{/if}}
- {{#if view.invalidUrlExist}}
- <div class="alert alert-warning">
- {{t installer.step1.invalidURLAttention}}
- <a
- href="javascript:void(null)" {{action "retryRepoUrls" target="view"}}>{{t installer.step1.retryRepoUrls}}</a>
- </div>
- {{/if}}
- {{else}}
- {{view App.SpinnerView}}
- {{/if}}
- </div>
- </div>
-</div>
-<div class="wizard-footer col-md-12">
- <button type="button" class="btn btn-default pull-left installer-back-btn" {{bindAttr disabled="App.router.btnClickInProgress"}} {{action back}} {{QAAttr "wizard-back"}}>
- ← {{t common.back}}
- {{#if App.router.backBtnClickInProgress}}
- {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
- {{/if}}
- </button>
- <button type="button" class="btn btn-success pull-right" {{bindAttr disabled="view.isSubmitDisabled"}} {{action next}} {{QAAttr "wizard-next"}}>
- {{#if App.router.nextBtnClickInProgress}}
- {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
- {{/if}}
- {{t common.next}} →
- </button>
-</div>
diff --git a/ambari-web/app/templates/wizard/step1/public_option_disabled_window_body.hbs b/ambari-web/app/templates/wizard/step1/public_option_disabled_window_body.hbs
deleted file mode 100644
index 77e4bd2..0000000
--- a/ambari-web/app/templates/wizard/step1/public_option_disabled_window_body.hbs
+++ /dev/null
@@ -1,26 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-
-<p class="public-disabled-message">{{t installer.step1.selectUseRepoOptions.public.networkLost.popup.msg}}</p>
-<ul>
- <li class="public-disabled-option">{{t installer.step1.selectUseRepoOptions.public.networkLost.popup.msg1}}</li>
- <li class="public-disabled-option">{{t installer.step1.selectUseRepoOptions.public.networkLost.popup.msg2}}</li>
- <li class="public-disabled-option">{{t installer.step1.selectUseRepoOptions.public.networkLost.popup.msg3}}</li>
-</ul>
-<p class="public-disabled-message">{{t installer.step1.selectUseRepoOptions.public.networkLost.popup.msg4}}</p>
\ No newline at end of file
diff --git a/ambari-web/app/templates/wizard/step1/vdf_upload.hbs b/ambari-web/app/templates/wizard/step1/vdf_upload.hbs
deleted file mode 100644
index 66a3b70..0000000
--- a/ambari-web/app/templates/wizard/step1/vdf_upload.hbs
+++ /dev/null
@@ -1,40 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div class="clearfix register-version-options row">
- {{#view "view.uploadFileView" class="col-md-12"}}
- <div class="col-md-5 option-radio-button">
- {{view view.uploadFileRadioButton classNames="radio" labelClassNames="local-option-label"}}
- </div>
- <div class="col-md-12">
- {{#if view.isFileApi}}
- {{view view.fileInputView}}
- {{/if}}
- </div>
- {{/view}}
- {{#view "view.enterUrlView" class="col-md-12"}}
- <div class="option-radio-button col-md-12">
- {{view view.enterUrlRadioButton classNames="radio" labelClassNames="local-option-label"}}
- </div>
- <div class="col-md-12 vdf-url">
- <div {{bindAttr class="optionsToSelect.useLocalRepo.enterUrl.name optionsToSelect.useLocalRepo.enterUrl.url.hasError:has-error"}}>
- {{view view.enterUrlField class="input-block-level" valueBinding="optionsToSelect.useLocalRepo.enterUrl.url" placeholderBinding="optionsToSelect.useLocalRepo.enterUrl.placeholder"}}
- </div>
- </div>
- {{/view}}
-</div>
diff --git a/ambari-web/app/templates/wizard/step1_addLocalRepository.hbs b/ambari-web/app/templates/wizard/step1_addLocalRepository.hbs
deleted file mode 100644
index c8f1913..0000000
--- a/ambari-web/app/templates/wizard/step1_addLocalRepository.hbs
+++ /dev/null
@@ -1,55 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
- <form class="form-horizontal" id="addLocalRepositoryPopup" autocomplete="off">
- <div class="each-row">
- <label class="control-label">{{t installer.step1.advancedRepo.localRepo.label.os}}</label>
- <div class="btn-group">
- <a class="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#">
- {{view.selectedOS.osType}}
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu">
- {{#each os in view.oses}}
- <li>
- <a href="#" {{action selectOS os target="view"}}>
- {{os.osType}}
- </a>
- </li>
- {{/each}}
- </ul>
- </div>
- </div>
- <div class="each-row">
- <label class="control-label">{{t installer.step1.advancedRepo.localRepo.label.baseUrl}}</label>
- {{view Em.TextField valueBinding="view.enteredUrl" classNames="col-md-6 form-control"}}
- </div>
- <div class="each-row">
- <label class="control-label">{{t installer.step1.advancedRepo.localRepo.label.stack}}</label>
- {{view.stackName}}
- </div>
-
- {{#if view.errorMessage}}
- <div class="alert alert-warning">
- <strong>{{t common.warning}}</strong> {{view.errorMessage}}
- </div>
- {{else}}
- <div class="alert alert-info">
- Provide location of the local repository for the selected OS
- </div>
- {{/if}}
- </form>
\ No newline at end of file
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 78105ec..fbc26ae 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1431,10 +1431,6 @@ var urls = {
'real': '/stacks/{stackName}/versions?fields=repository_versions/operating_systems/repositories/*,repository_versions/operating_systems/OperatingSystems/*,repository_versions/RepositoryVersions/display_name&repository_versions/RepositoryVersions/repository_version={repositoryVersion}',
'mock': ''
},
- 'cluster.load_detailed_repo_version': {
- 'real': '/clusters/{clusterName}/stack_versions?fields=repository_versions/RepositoryVersions/repository_version,ClusterStackVersions/stack,ClusterStackVersions/version&minimal_response=true',
- 'mock': '/data/stack_versions/stack_version_all.json'
- },
'cluster.load_current_repo_stack_services': {
'real': '/clusters/{clusterName}/stack_versions?fields=repository_versions/RepositoryVersions/stack_services,ClusterStackVersions/stack,ClusterStackVersions/version',
'mock': '/data/stack_versions/stack_version_all.json'
@@ -1858,10 +1854,6 @@ var urls = {
};
}
},
- 'admin.stack_versions.all': {
- 'real': '/clusters/{clusterName}/stack_versions?fields=ClusterStackVersions/*,repository_versions/RepositoryVersions/*&minimal_response=true',
- 'mock': '/data/stack_versions/stack_version_all.json'
- },
'admin.stack_version.install.repo_version': {
'real': '/clusters/{clusterName}/stack_versions',
'format': function (data) {
@@ -2040,28 +2032,7 @@ var urls = {
}
}
},
- 'wizard.step1.get_repo_version_by_id': {
- 'real': '/stacks/{stackName}/versions?fields=repository_versions/operating_systems/repositories/*' +
- ',repository_versions/RepositoryVersions/*' +
- '&repository_versions/RepositoryVersions/id={repoId}&Versions/stack_version={stackVersion}',
- 'mock': ''
- },
- 'wizard.step1.get_supported_os_types': {
- 'real': '/stacks/{stackName}/versions/{stackVersion}?fields=operating_systems/repositories/Repositories',
- 'mock': ''
- },
-
- 'wizard.advanced_repositories.valid_url': {
- 'real': '/stacks/{stackName}/versions/{stackVersion}/operating_systems/{osType}/repositories/{repoId}',
- 'mock': '',
- 'type': 'PUT',
- 'format': function (data) {
- return {
- data: JSON.stringify(data.data)
- }
- }
- },
'wizard.get_version_definitions': {
'real': '/version_definitions'
},
@@ -2179,17 +2150,6 @@ var urls = {
}
},
- 'wizard.step8.set_local_repos': {
- 'real': '{stackVersionURL}/operating_systems/{osType}/repositories/{repoId}',
- 'mock': '',
- 'format': function (data) {
- return {
- type: 'PUT',
- dataType: 'text',
- data: data.data
- }
- }
- },
'wizard.step3.jdk_check': {
'real': '/requests',
'mock': '',
diff --git a/ambari-web/app/views.js b/ambari-web/app/views.js
index 521327a..163484e 100644
--- a/ambari-web/app/views.js
+++ b/ambari-web/app/views.js
@@ -383,7 +383,6 @@ require('views/main/views_view');
require('views/installer');
require('views/wizard/step0_view');
-require('views/wizard/step1_view');
require('views/wizard/step2_view');
require('views/wizard/step3_view');
require('views/wizard/step3/hostLogPopupBody_view');
@@ -395,7 +394,6 @@ require('views/wizard/customMpackRepos_view');
require('views/wizard/downloadMpacks_view');
require('views/wizard/customProductRepos_view');
require('views/wizard/verifyProducts_view');
-require('views/wizard/step4_view');
require('views/wizard/step5_view');
require('views/wizard/step6_view');
require('views/wizard/step7_view');
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/services_view.js b/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
index 25efffe..257087d 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
@@ -123,15 +123,6 @@ App.MainAdminStackServicesView = Em.View.extend({
},
/**
- * Onclick handler for undo action of each repo group
- * @method undoGroupLocalRepository
- * @param {object} event
- */
- undoGroupLocalRepository: function (event) {
- this.doActionForGroupLocalRepository(event, 'originalBaseUrl');
- },
-
- /**
* Handler for clear icon click
* @method clearGroupLocalRepository
* @param {object} event
@@ -152,126 +143,4 @@ App.MainAdminStackServicesView = Em.View.extend({
targetRepo.set('baseUrl', Em.isEmpty(newBaseUrlField) ? '' : Em.get(targetRepo, newBaseUrlField));
}
},
-
- /**
- * Handler when editing any repo group BaseUrl
- * @method editGroupLocalRepository
- */
- editGroupLocalRepository: function () {
- var repos = this.get('allRepos');
- repos.forEach(function (targetRepo) {
- targetRepo.set('undo', targetRepo.get('baseUrl') != targetRepo.get('originalBaseUrl'));
- targetRepo.set('clearAll', targetRepo.get('baseUrl'));
- targetRepo.set('empty-error', !targetRepo.get('baseUrl'));
-
- });
- }.observes('allRepos.@each.baseUrl'),
-
- /**
- * onSuccess callback for save Repo URL.
- */
- doSaveRepoUrlsSuccessCallback: function (response, request, data) {
- var id = data.repoId + '-' + data.osType;
- var targetRepo = this.get('allRepos').findProperty('id', id);
- if (!targetRepo) {
- return;
- } else {
-
- var modalCloseHandler = function() {
- this.hide();
- targetRepo.set('baseUrl', data.data.Repositories.base_url);
- targetRepo.set('originalBaseUrl', data.data.Repositories.base_url);
- targetRepo.set('onEdit', false);
- };
-
- App.ModalPopup.show({
- header: Em.I18n.t('admin.cluster.repositories.popup.header.success'),
- secondary: null,
- onPrimary: modalCloseHandler,
- onClose: modalCloseHandler,
- message: Em.I18n.t('admin.cluster.repositories.popup.body.success'),
- bodyClass: Em.View.extend({
- template: Em.Handlebars.compile('<div class="alert alert-success">{{{message}}}</div>')
- })
- })
- }
- },
-
- /**
- * onError callback for save Repo URL.
- */
- doSaveRepoUrlsErrorCallback: function (request, ajaxOptions, error, data) {
- var self = this;
- var id = data.url.split('/')[10] + '-' + data.url.split('/')[8];
- var targetRepo = this.get('allRepos').findProperty('id', id);
- if (targetRepo) {
- App.ModalPopup.show({
- header: Em.I18n.t('admin.cluster.repositories.popup.header.fail'),
- primary: Em.I18n.t('common.saveAnyway'),
- secondary: Em.I18n.t('common.revert'),
- third: Em.I18n.t('common.cancel'),
- onPrimary: function () {
- // save anyway: Go ahead and save with Repo URL validation turned off and close Dialog when done.
- this.hide();
- self.doSaveRepoUrls(id, false);
- },
- onSecondary: function () {
- // Revert: Close dialog, revert URL value, go back to non-Edit mode
- this.hide();
- targetRepo.set('baseUrl', targetRepo.get('originalBaseUrl'));
- targetRepo.set('onEdit', false);
- },
- onThird: function () {
- // cancel: Close dialog but stay in Edit mode
- this.hide();
- },
- message: Em.I18n.t('admin.cluster.repositories.popup.body.fail'),
- bodyClass: Em.View.extend({
- template: Em.Handlebars.compile('<div class="alert alert-warning">{{{message}}}</div>')
- })
- })
- }
- },
-
- /**
- * Check validation and Save the customized local urls
- */
- doSaveRepoUrls: function (id, verifyBaseUrl) {
- var targetRepo = this.get('allRepos').findProperty('id', id);
- App.ajax.send({
- name: 'wizard.advanced_repositories.valid_url',
- sender: this,
- data: {
- stackName: targetRepo.stackName,
- stackVersion: targetRepo.stackVersion,
- repoId: targetRepo.repoId,
- osType: targetRepo.osType,
- data: {
- 'Repositories': {
- 'base_url': targetRepo.baseUrl,
- "verify_base_url": verifyBaseUrl
- }
- }
- },
- success: 'doSaveRepoUrlsSuccessCallback',
- error: 'doSaveRepoUrlsErrorCallback'
- });
- },
- /**
- * Check validation and Save the customized local urls
- */
- saveRepoUrls: function (event) {
- this.doSaveRepoUrls(event.context.get('id'), true);
- },
-
- /**
- * on click handler 'Cancel' for current repo in edit mode
- */
- doCancel: function (event) {
- var targetRepo = this.get('allRepos').findProperty('id', event.context.get('id'));
- if (targetRepo) {
- targetRepo.set('baseUrl', targetRepo.get('originalBaseUrl'));
- targetRepo.set('onEdit', false);
- }
- }
});
diff --git a/ambari-web/app/views/wizard/step1_view.js b/ambari-web/app/views/wizard/step1_view.js
deleted file mode 100644
index 9870079..0000000
--- a/ambari-web/app/views/wizard/step1_view.js
+++ /dev/null
@@ -1,290 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-var App = require('app');
-
-require('models/repository');
-
-App.WizardStep1View = Em.View.extend({
-
- templateName: require('templates/wizard/step1'),
-
- didInsertElement: function () {
- $("[rel=skip-validation-tooltip]").tooltip({ placement: 'right'});
- $("[rel=use-redhat-tooltip]").tooltip({ placement: 'right'});
- $('.add-os-button,.redhat-label').tooltip();
- this.$().on('mouseover', '.version-contents-body .table-hover > tbody > tr', function () {
- App.tooltip($(this).find('.action .icon'), {placement: 'bottom'});
- App.tooltip($(this).find('.icon-undo'), {placement: 'bottom'});
- });
- if (this.get('controller.selectedStack.showAvailable')) {
- // first time load
- if (this.get('controller.selectedStack.useRedhatSatellite')) {
- // restore `use local repo` on page refresh
- this.get('controller').useLocalRepo();
- }
- } else {
- var selected = this.get('controller.content.stacks') && this.get('controller.content.stacks').findProperty('showAvailable');
- if (!selected) {
- // network disconnection
- Em.trySet(this, 'controller.selectedStack.useLocalRepo', true);
- Em.trySet(this, 'controller.selectedStack.usePublicRepo', false);
- }
- }
- },
-
- willDestroyElement: function () {
- $("[rel=skip-validation-tooltip]").tooltip('destroy');
- $("[rel=use-redhat-tooltip]").tooltip('destroy');
- $('.add-os-button,.redhat-label').tooltip('destroy');
- $('.icon-undo').tooltip('destroy');
- $('.action .icon').tooltip('destroy');
- },
-
- /**
- * Show possible reasons why Public Repo is disabled
- *
- * @returns {App.ModalPopup}
- */
- openPublicOptionDisabledWindow: function () {
- return App.ModalPopup.show({
- header: Em.I18n.t('installer.step1.selectUseRepoOptions.public.networkLost.popup.title'),
- bodyClass: Ember.View.extend({
- templateName: require('templates/wizard/step1/public_option_disabled_window_body')
- }),
- secondary: false
- });
- },
-
- removeOS() {
- $('.action .icon').tooltip('destroy');
- return this.get('controller').removeOS(...arguments);
- },
-
- /**
- * Disable submit button flag
- *
- * @type {bool}
- */
- isSubmitDisabled: Em.computed.or('invalidFormatUrlExist', 'isNoOsChecked', 'isAnyOsEmpty', 'controller.content.isCheckInProgress', 'App.router.btnClickInProgress', '!controller.isLoadingComplete'),
-
- /**
- * Show warning message flag
- *
- * @type {bool}
- */
- warningExist: Em.computed.or('invalidFormatUrlExist', 'isNoOsChecked', 'isAnyOsEmpty'),
-
- skipVerifyBaseUrl: Em.computed.or('controller.selectedStack.skipValidationChecked', 'controller.selectedStack.useRedhatSatellite'),
-
- verifyBaseUrl: Em.computed.not('skipVerifyBaseUrl'),
-
- showWarning: Em.computed.and('warningExist', 'verifyBaseUrl'),
-
- /**
- * Onclick handler for recheck repos urls. Used in Advanced Repository Options.
- */
- retryRepoUrls: function () {
- App.router.get('installerController').checkRepoURL(this.get('controller'));
- },
-
- /**
- * Radio button for use Public repo
- *
- * @type {App.RadioButtonView}
- */
- usePublicRepoRadioButton: App.RadioButtonView.extend({
- labelTranslate: 'installer.step1.selectUseRepoOptions.public',
- checked: Em.computed.alias('controller.selectedStack.usePublicRepo'),
-
- change: function () {
- this.get('controller').usePublicRepo();
- }
- }),
-
- /**
- * Checkbox for use Public repo
- *
- * @type {App.RadioButtonView}
- */
- useLocalRepoRadioButton: App.RadioButtonView.extend({
- labelTranslate: 'installer.step1.selectUseRepoOptions.local',
- checked: Em.computed.alias('controller.selectedStack.useLocalRepo'),
-
- change: function () {
- this.get('controller').useLocalRepo();
- }
- }),
-
- /**
- * User already selected all OSes
- *
- * @type {boolean}
- */
- allOsesSelected: Em.computed.everyBy('controller.selectedStack.operatingSystems', 'isSelected', true),
-
- /**
- * Disallow adding OS if all OSes are already added or user select <code>useRedhatSatellite</code>
- *
- * @type {boolean}
- */
- isAddOsButtonDisabled: Em.computed.or('allOsesSelected', 'controller.selectedStack.useRedhatSatellite'),
-
- /**
- * Tooltip for Add OS Button
- * Empty if this button is enabled
- *
- * @type {string}
- */
- addOsButtonTooltip: Em.computed.ifThenElse('allOsesSelected', Em.I18n.t('installer.step1.addOs.disabled.tooltip'), ''),
-
- /**
- * Tooltip for useRedhatSatellite block
- * Empty if usage Redhat is enabled
- *
- * @type {string}
- */
- redhatDisabledTooltip: Em.computed.ifThenElse('controller.selectedStack.usePublicRepo', Em.I18n.t('installer.step1.advancedRepo.useRedhatSatellite.disabled.tooltip'), ''),
- /**
- * List of all repositories under selected stack operatingSystems
- *
- * @type {App.Repository[]}
- */
- allRepositories: function () {
- return this.getWithDefault('controller.selectedStack.repositories', []);
- }.property('controller.selectedStack.repositories.[]'),
-
- /**
- * Verify if some repo has invalid base-url
- * Ignore if <code>useRedhatSatellite</code> is true for selected stack
- *
- * @type {bool}
- */
- invalidFormatUrlExist: function () {
- var allRepositories = this.get('allRepositories');
- if (!allRepositories) {
- return false;
- }
- if (this.get('controller.selectedStack.useRedhatSatellite')) {
- allRepositories = allRepositories.filter(this.isRedhat);
- }
- return allRepositories.someProperty('invalidFormatError', true);
- }.property('controller.selectedStack.useRedhatSatellite', 'allRepositories.@each.invalidFormatError'),
-
- /**
- * Verify if some invalid repo-urls exist
- * @type {bool}
- */
- invalidUrlExist: Em.computed.someBy('allRepositories', 'validation', 'INVALID'),
-
- /**
- * If all repo links are unchecked
- * @type {bool}
- */
- isNoOsChecked: Em.computed.everyBy('controller.selectedStack.operatingSystems', 'isSelected', false),
-
- /**
- *
- * @param {App.Repository} item
- * @returns {boolean}
- */
- isRedhat: function(item) {
- return Boolean(item.get('osType') && item.get('osType').contains('redhat'));
- },
-
- /**
- * If any OS is empty
- * @type {bool}
- */
- isAnyOsEmpty: function () {
- var operatingSystems = this.get('controller.selectedStack.operatingSystems');
- if (Em.isNone(operatingSystems)) {
- return false;
- }
- var selectedOS = operatingSystems.filterProperty('isSelected', true);
- if (this.get('controller.selectedStack.useRedhatSatellite')) {
- selectedOS = selectedOS.filter(this.isRedhat);
- }
- return selectedOS.someProperty('isNotFilled', true);
- }.property('controller.selectedStack.operatingSystems.@each.isSelected', 'controller.selectedStack.operatingSystems.@each.isNotFilled', 'controller.selectedStack.useRedhatSatellite'),
-
- popoverView: Em.View.extend({
- tagName: 'i',
- classNameBindings: ['repository.validationClassName'],
- attributeBindings: ['repository.errorTitle:data-original-title', 'repository.errorContent:data-content'],
- didInsertElement: function () {
- App.popover($(this.get('element')), {
- template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"></div></div></div>',
- trigger: 'hover'
- });
- }
- }),
-
- /**
- * @type {App.CheckboxView}
- */
- redhatCheckBoxView: App.CheckboxView.extend({
- checkedBinding: 'controller.selectedStack.useRedhatSatellite',
- disabledBinding: 'controller.selectedStack.usePublicRepo',
- click: function () {
- if (!this.get('disabled')) {
- this.toggleProperty('controller.selectedStack.useRedhatSatellite');
- if (this.get('controller.selectedStack.useRedhatSatellite')) {
- App.ModalPopup.show({
- header: Em.I18n.t('common.important'),
- encodeBody: false,
- secondary: false,
- body: Em.I18n.t('installer.step1.advancedRepo.useRedhatSatellite.warning')
- });
- }
- }
- return false;
- }
- }),
-
- repositoryTextField: Ember.TextField.extend({
- repository: null,
- placeholderBinding: "repository.placeholder",
- valueBinding: "repository.baseUrl",
- disabled: function() {
- var isRedhat = this.get('parentView').isRedhat(this.get('repository'));
- return this.get('controller.selectedStack.useRedhatSatellite') && !isRedhat;
- }.property('controller.selectedStack.useRedhatSatellite')
- }),
-
- /**
- * Handler when editing any repo BaseUrl
- *
- * @method editLocalRepository
- */
- editLocalRepository: function () {
- //upload to content
- var repositories = this.get('allRepositories');
- if (!repositories) {
- return;
- }
- repositories.forEach(function (repository) {
- if (repository.get('lastBaseUrl') !== repository.get('baseUrl')) {
- repository.setProperties({
- lastBaseUrl: repository.get('baseUrl'),
- validation: 'PENDING'
- });
- }
- }, this);
- }.observes('allRepositories.@each.baseUrl')
-
-});
diff --git a/ambari-web/test/controllers/global/cluster_controller_test.js b/ambari-web/test/controllers/global/cluster_controller_test.js
index fcbad62..1b05fd2 100644
--- a/ambari-web/test/controllers/global/cluster_controller_test.js
+++ b/ambari-web/test/controllers/global/cluster_controller_test.js
@@ -234,200 +234,6 @@ describe('App.clusterController', function () {
});
});
- describe('#checkDetailedRepoVersion()', function () {
-
- var cases = [
- {
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.1',
- isStormMetricsSupported: false,
- title: 'HDP < 2.2'
- },
- {
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.3',
- isStormMetricsSupported: true,
- title: 'HDP > 2.2'
- },
- {
- currentStackName: 'BIGTOP',
- currentStackVersionNumber: '0.8',
- isStormMetricsSupported: true,
- title: 'not HDP'
- }
- ];
-
- afterEach(function () {
- App.get.restore();
- });
-
- describe('should check detailed repo version for HDP 2.2', function () {
-
- beforeEach(function () {
- sinon.stub(App, 'get').withArgs('currentStackName').returns('HDP').withArgs('currentStackVersionNumber').returns('2.2');
- });
-
- it('request is sent', function () {
- controller.checkDetailedRepoVersion();
- var args = testHelpers.findAjaxRequest('name', 'cluster.load_detailed_repo_version');
- expect(args).to.exists;
- });
- });
-
- cases.forEach(function (item) {
- describe(item.title, function () {
-
- beforeEach(function () {
- sinon.stub(App, 'get', function (key) {
- return item[key] || Em.get(App, key);
- });
- controller.checkDetailedRepoVersion();
- });
-
- it('request is not sent', function () {
- var args = testHelpers.findAjaxRequest('name', 'cluster.load_detailed_repo_version');
- expect(args).to.not.exists;
- });
-
- it('App.isStormMetricsSupported is ' + item.isStormMetricsSupported, function () {
- expect(App.get('isStormMetricsSupported')).to.equal(item.isStormMetricsSupported);
- });
-
- });
- });
-
- });
-
- describe('#checkDetailedRepoVersionSuccessCallback()', function () {
- beforeEach(function () {
- sinon.stub(App, 'get', function(key) {
- if (key === 'currentStackName') {
- return 'HDP';
- }
- if (key === 'currentStackVersionNumber') {
- return '2.2';
- }
- return Em.get(App, key);
- });
- });
- afterEach(function() {
- App.get.restore();
- });
-
- var cases = [
- {
- items: [
- {
- ClusterStackVersions: {
- stack: 'HDP',
- version: '2.2'
- },
- repository_versions: [
- {
- RepositoryVersions: {
- repository_version: '2.1'
- }
- }
- ]
- }
- ],
- isStormMetricsSupported: false,
- title: 'HDP < 2.2.2'
- },
- {
- items: [
- {
- ClusterStackVersions: {
- stack: 'HDP',
- version: '2.2'
- },
- repository_versions: [
- {
- RepositoryVersions: {
- repository_version: '2.2.2'
- }
- }
- ]
- }
- ],
- isStormMetricsSupported: true,
- title: 'HDP 2.2.2'
- },
- {
- items: [
- {
- repository_versions: [
- {
- RepositoryVersions: {
- repository_version: '2.2.3'
- }
- }
- ]
- }
- ],
- isStormMetricsSupported: true,
- title: 'HDP > 2.2.2'
- },
- {
- items: null,
- isStormMetricsSupported: true,
- title: 'empty response'
- },
- {
- items: [],
- isStormMetricsSupported: true,
- title: 'no items'
- },
- {
- items: [{}],
- isStormMetricsSupported: true,
- title: 'empty item'
- },
- {
- items: [{
- repository_versions: []
- }],
- isStormMetricsSupported: true,
- title: 'no versions'
- },
- {
- items: [{
- repository_versions: [{}]
- }],
- isStormMetricsSupported: true,
- title: 'no version info'
- },
- {
- items: [{
- repository_versions: [
- {
- RepositoryVersions: {}
- }
- ]
- }],
- isStormMetricsSupported: true,
- title: 'empty version info'
- }
- ];
-
- cases.forEach(function (item) {
- it(item.title, function () {
- controller.checkDetailedRepoVersionSuccessCallback({
- items: item.items
- });
- expect(App.get('isStormMetricsSupported')).to.equal(item.isStormMetricsSupported);
- });
- });
-
- });
-
- describe('#checkDetailedRepoVersionErrorCallback()', function () {
- it('should set isStormMetricsSupported to default value', function () {
- controller.checkDetailedRepoVersionErrorCallback();
- expect(App.get('isStormMetricsSupported')).to.be.true;
- });
- });
-
describe('#getAllUpgrades()', function () {
it('should send request to get upgrades data', function () {
diff --git a/ambari-web/test/controllers/installer_test.js b/ambari-web/test/controllers/installer_test.js
index 9e65b76..42fc5d2 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('#checkRepoURL', function() {
var stacks = Em.A([
Em.Object.create({
@@ -791,31 +776,6 @@ describe('App.InstallerController', function () {
});
});
- describe('#saveServices', function() {
- it ('Should return correct names', function() {
- var stepController = Em.A([
- Em.Object.create({
- isInstalled: true,
- isSelected: true,
- serviceName: 'i1'
- }),
- Em.Object.create({
- isInstalled: false,
- isSelected: true,
- serviceName: 'i2'
- }),
- Em.Object.create({
- isInstalled: true,
- isSelected: false,
- serviceName: 'i3'
- })
- ]);
- installerController.saveServices(stepController);
- expect(installerController.get('content.selectedServiceNames')).to.eql(['i1','i2']);
- expect(installerController.get('content.installedServiceNames')).to.eql(['i1','i3']);
- });
- });
-
describe('#saveClients', function() {
var stepController;
@@ -1063,181 +1023,6 @@ describe('App.InstallerController', function () {
});
- describe('#validateJDKVersion', function() {
- var tests = [
- {
- isCustomJDK: false,
- ambariProperties: {
- 'java.version': '1.8'
- },
- successCallbackCalled: false,
- popupCalled: true,
- stacks: [Em.Object.create({
- minJdkVersion: '1.6',
- maxJdkVersion: '1.7',
- isSelected: true
- })],
- m: 'JDK 1.8, stack supports 1.6-1.7 popup should be displayed'
- },
- {
- isCustomJDK: false,
- ambariProperties: {
- 'java.version': '1.8'
- },
- successCallbackCalled: true,
- popupCalled: false,
- stacks: [Em.Object.create({
- minJdkVersion: '1.6',
- maxJdkVersion: '1.8',
- isSelected: true
- })],
- m: 'JDK 1.8, stack supports 1.7-1.8 procceed installation without warning'
- },
- {
- isCustomJDK: false,
- ambariProperties: {
- 'java.version': '1.5'
- },
- successCallbackCalled: false,
- popupCalled: true,
- stacks: [Em.Object.create({
- minJdkVersion: '1.6',
- maxJdkVersion: '1.8',
- isSelected: true
- })],
- m: 'JDK 1.5, stack supports 1.6-1.8, popup should be displayed'
- },
- {
- isCustomJDK: false,
- ambariProperties: {
- 'java.version': '1.5'
- },
- successCallbackCalled: true,
- popupCalled: false,
- stacks: [Em.Object.create({
- minJdkVersion: null,
- maxJdkVersion: null,
- isSelected: true
- })],
- m: 'JDK 1.5, stack supports max and min are null, procceed installation without warning'
- },
- {
- isCustomJDK: false,
- ambariProperties: {
- 'java.version': '1.5'
- },
- successCallbackCalled: true,
- popupCalled: false,
- stacks: [Em.Object.create({
- minJdkVersion: '1.5',
- maxJdkVersion: null,
- isSelected: true
- })],
- m: 'JDK 1.5, stack supports max is missed and min is 1.5, procceed installation without warning'
- },
- {
- isCustomJDK: false,
- ambariProperties: {
- 'java.version': '1.6'
- },
- successCallbackCalled: false,
- popupCalled: true,
- stacks: [Em.Object.create({
- minJdkVersion: '1.5',
- maxJdkVersion: null,
- isSelected: true
- })],
- m: 'JDK 1.6, stack supports max is missed and min is 1.5, popup should be displayed'
- },
- {
- isCustomJDK: false,
- ambariProperties: {
- 'java.version': '1.5'
- },
- successCallbackCalled: true,
- popupCalled: false,
- stacks: [Em.Object.create({
- minJdkVersion: null,
- maxJdkVersion: '1.5',
- isSelected: true
- })],
- m: 'JDK 1.5, stack supports max 1.5 and min is missed, procceed installation without warning'
- },
- {
- isCustomJDK: false,
- ambariProperties: {
- 'java.version': '1.5'
- },
- successCallbackCalled: false,
- popupCalled: true,
- stacks: [Em.Object.create({
- minJdkVersion: null,
- maxJdkVersion: '1.8',
- isSelected: true
- })],
- m: 'JDK 1.5, stack supports max 1.8 and min is missed, popup should be displayed'
- },
- {
- isCustomJDK: false,
- ambariProperties: {
- 'java.version': '1.8'
- },
- successCallbackCalled: true,
- popupCalled: false,
- stacks: [Em.Object.create({
- isSelected: true
- })],
- m: 'JDK 1.8, min, max jdk missed in stack definition, procceed installation without warning'
- },
- {
- isCustomJDK: true,
- ambariProperties: {
- 'java.version': '1.8'
- },
- successCallbackCalled: true,
- popupCalled: false,
- stacks: [Em.Object.create({
- minJdkVersion: '1.6',
- maxJdkVersion: '1.8',
- isSelected: true
- })],
- m: 'JDK 1.8, custom jdk location used, procceed installation without warning'
- }
- ];
-
- tests.forEach(function(test) {
-
- describe(test.m, function() {
-
- var successCallback;
-
- beforeEach(function () {
- sinon.stub(App.Stack, 'find').returns(test.stacks);
- sinon.stub(App.router, 'get').withArgs('clusterController.isCustomJDK').returns(test.isCustomJDK)
- .withArgs('clusterController.ambariProperties').returns(test.ambariProperties);
- sinon.stub(App, 'showConfirmationPopup', Em.K);
- successCallback = sinon.spy();
- installerController.validateJDKVersion(successCallback);
- });
-
- afterEach(function () {
- App.router.get.restore();
- App.Stack.find.restore();
- App.showConfirmationPopup.restore();
- });
-
- it('successCallback is ' + (test.successCallbackCalled ? '' : 'not') + ' called', function () {
- expect(successCallback.called).to.be.equal(test.successCallbackCalled);
- });
-
- it('App.showConfirmationPopup. is ' + (test.popupCalled ? '' : 'not') + ' called', function () {
- expect(App.showConfirmationPopup.called).to.be.equal(test.popupCalled);
- });
-
- });
- });
- });
-
describe('#postVersionDefinitionFileErrorCallback', function () {
beforeEach(function () {
@@ -1381,7 +1166,6 @@ describe('App.InstallerController', function () {
describe('#getStepController', function () {
var wizardStep0Controller = {};
- var wizardStep1Controller = {};
var wizardStep2Controller = {};
before(function () {
@@ -1392,7 +1176,6 @@ describe('App.InstallerController', function () {
]);
App.router.set('wizardStep0Controller', wizardStep0Controller);
- App.router.set('wizardStep1Controller', wizardStep1Controller);
App.router.set('wizardStep2Controller', wizardStep2Controller);
});
@@ -1402,8 +1185,8 @@ describe('App.InstallerController', function () {
});
it('Should return controller for the step name provided.', function () {
- var stepController = installerController.getStepController("step1");
- expect(stepController).to.equal(wizardStep1Controller);
+ var stepController = installerController.getStepController("step0");
+ expect(stepController).to.equal(wizardStep0Controller);
});
});
});
diff --git a/ambari-web/test/controllers/wizard/step1_test.js b/ambari-web/test/controllers/wizard/step1_test.js
deleted file mode 100644
index 88cb231..0000000
--- a/ambari-web/test/controllers/wizard/step1_test.js
+++ /dev/null
@@ -1,403 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-var wizardStep1Controller;
-
-var stacks = [
- App.Stack.createRecord({
- "id": "HDP-2.4",
- "stackName": "HDP",
- "stackVersion": "2.4"
- }),
- App.Stack.createRecord({
- "id": "HDP-2.5-2.5.0.0",
- "stackName": "HDP",
- "stackVersion": "2.5"
- }),
- App.Stack.createRecord({
- "id": "HDP-2.5",
- "stackName": "HDP",
- "stackVersion": "2.5"
- }),
- App.Stack.createRecord({
- "id": "HDP-2.3.ECS",
- "stackName": "HDP",
- "stackVersion": "2.3.ECS"
- }),
- App.Stack.createRecord({
- "id": "HDP-2.3",
- "stackName": "HDP",
- "stackVersion": "2.3"
- }),
- App.Stack.createRecord({
- "id": "HDP-2.2",
- "stackName": "HDP",
- "stackVersion": "2.2"
- }),
- App.Stack.createRecord({
- "id": "HDP-2.4-2.4.1.1-12345",
- "stackName": "HDP",
- "stackVersion": "2.4"
- })
-];
-
-function getController() {
- return App.WizardStep1Controller.create({content: Em.Object.create({stacks: stacks}), onNetworkIssuesExist: Em.K});
-}
-
-describe('App.WizardStep1Controller', function () {
-
- beforeEach(function() {
- wizardStep1Controller = getController();
- });
-
- App.TestAliases.testAsComputedFindBy(getController(), 'selectedStack', 'content.stacks', 'isSelected', true);
-
- App.TestAliases.testAsComputedFindBy(getController(), 'selectedStackType', 'availableStackTypes', 'isSelected', true);
-
- App.TestAliases.testAsComputedFilterBy(getController(), 'servicesForSelectedStack', 'selectedStack.stackServices', 'isHidden', false);
-
- App.TestAliases.testAsComputedEveryBy(getController(), 'networkIssuesExist', 'content.stacks', 'stackDefault', true);
-
- App.TestAliases.testAsComputedEqual(getController(), 'isLoadingComplete', 'wizardController.loadStacksRequestsCounter', 0);
-
- describe('#usePublicRepo', function () {
-
- beforeEach(function () {
- wizardStep1Controller.get('content.stacks').findProperty('id', 'HDP-2.5-2.5.0.0').setProperties({
- isSelected: true,
- useRedhatSatellite: true,
- usePublicRepo: false,
- useLocalRepo: true,
- });
- wizardStep1Controller.usePublicRepo();
- });
-
- it('correct stack is selected', function () {
- expect(wizardStep1Controller.get('selectedStack.id')).to.be.equal('HDP-2.5-2.5.0.0');
- });
-
- it('`useRedhatSatellite` is set `false`', function () {
- expect(wizardStep1Controller.get('selectedStack.useRedhatSatellite')).to.be.false;
- });
-
- it('`usePublicRepo` is set `true`', function () {
- expect(wizardStep1Controller.get('selectedStack.usePublicRepo')).to.be.true;
- });
-
- it('`useLocalRepo` is set `false`', function () {
- expect(wizardStep1Controller.get('selectedStack.useLocalRepo')).to.be.false;
- });
-
- });
-
- describe('#useLocalRepo', function () {
-
- beforeEach(function () {
- wizardStep1Controller.get('content.stacks').findProperty('id', 'HDP-2.5-2.5.0.0').setProperties({
- isSelected: true,
- usePublicRepo: true,
- useLocalRepo: false,
- });
- wizardStep1Controller.useLocalRepo();
- });
-
- it('correct stack is selected', function () {
- expect(wizardStep1Controller.get('selectedStack.id')).to.be.equal('HDP-2.5-2.5.0.0');
- });
-
- it('`usePublicRepo` is set `false`', function () {
- expect(wizardStep1Controller.get('selectedStack.usePublicRepo')).to.be.false;
- });
-
- it('`useLocalRepo` is set `true`', function () {
- expect(wizardStep1Controller.get('selectedStack.useLocalRepo')).to.be.true;
- });
-
- });
-
- describe('#selectStackBy', function () {
-
- it('select by `id`', function () {
- wizardStep1Controller.selectStackBy('id', 'HDP-2.5-2.5.0.0');
- expect(wizardStep1Controller.get('selectedStack.id')).to.be.equal('HDP-2.5-2.5.0.0');
- expect(wizardStep1Controller.get('content.stacks').filterProperty('isSelected')).to.have.property('length').equal(1);
- });
-
- it('select by `stackNameVersion`', function () {
- wizardStep1Controller.selectStackBy('stackNameVersion', 'HDP-2.5');
- expect(wizardStep1Controller.get('selectedStack.id')).to.be.equal('HDP-2.5-2.5.0.0'); // `HDP-2.5-2.5.0.0`-id is before `HDP-2.5`-id
- expect(wizardStep1Controller.get('content.stacks').filterProperty('isSelected')).to.have.property('length').equal(1);
- });
-
- });
-
- describe('#availableStackTypes', function () {
-
- it('stack types are sorted desc', function () {
- expect(wizardStep1Controller.get('availableStackTypes').mapProperty('stackName')).to.be.eql(['HDP-2.5', 'HDP-2.4', 'HDP-2.3.ECS', 'HDP-2.3', 'HDP-2.2']);
- });
-
- });
-
- describe('#readInfoIsNotProvided', function () {
-
- Em.A([
- {
- options: {
- uploadFile: {isSelected: false},
- enterUrl: {isSelected: false}
- },
- m: 'url and file are not selected',
- e: false
- },
- {
- options: {
- uploadFile: {isSelected: false},
- enterUrl: {isSelected: true, url: ''}
- },
- m: 'url is selected but not provided',
- e: true
- },
- {
- options: {
- uploadFile: {isSelected: false},
- enterUrl: {isSelected: true, url: ' url'}
- },
- m: 'url is selected and provided',
- e: false
- },
- {
- options: {
- uploadFile: {isSelected: true, file: ''},
- enterUrl: {isSelected: false}
- },
- m: 'file is selected but not provided',
- e: true
- },
- {
- options: {
- uploadFile: {isSelected: true, file: 'path'},
- enterUrl: {isSelected: false}
- },
- m: 'file is selected and provided',
- e: false
- }
- ]).forEach(function (test) {
-
- it(test.m, function () {
- wizardStep1Controller.set('optionsToSelect.useLocalRepo', test.options);
- expect(wizardStep1Controller.get('readInfoIsNotProvided')).to.be.equal(test.e);
- });
-
- });
-
- });
-
- describe('#uploadVdf', function () {
-
- function getModal() {
- var controller = getController();
- controller.set('optionsToSelect', Em.Object.create({
- useLocalRepo: {
- enterUrl: {isSelected: true, url: 'apache.org'},
- uploadFile: {isSelected: false, file: 'some_file'}
- }
- }));
- return controller.uploadVdf();
- }
-
- beforeEach(function () {
- this.modal = getModal();
- });
-
- describe('#restoreUploadOptions', function () {
-
- beforeEach(function () {
- wizardStep1Controller.set('optionsToSelect.useLocalRepo', {
- enterUrl: {isSelected: true, url: 'apache.org'},
- uploadFile: {isSelected: false, file: 'some_file'}
- });
- this.modal.restoreUploadOptions();
- });
-
- it('`enterUrl.isSelected`', function () {
- expect(this.modal.get('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')).to.be.false;
- });
-
- it('`enterUrl.url`', function () {
- expect(this.modal.get('controller.optionsToSelect.useLocalRepo.enterUrl.url')).to.be.equal('');
- });
-
- it('`uploadFile.isSelected`', function () {
- expect(this.modal.get('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')).to.be.true;
- });
-
- it('`uploadFile.file`', function () {
- expect(this.modal.get('controller.optionsToSelect.useLocalRepo.uploadFile.file')).to.be.equal('');
- });
-
- });
-
- describe('#bodyClass', function () {
-
- beforeEach(function () {
- this.body = this.modal.get('bodyClass').create();
- });
-
- describe('#uploadFileView', function () {
-
- beforeEach(function() {
- this.fileView = this.body.get('uploadFileView').create();
- });
-
- describe('#click', function () {
-
- beforeEach(function () {
- this.fileView.set('controller', getController());
- this.fileView.set('controller.optionsToSelect', {
- useLocalRepo: {
- enterUrl: {isSelected: true, hasError: true},
- uploadFile: {isSelected: false, hasError: true}
- }
- });
- this.fileView.click();
- });
-
- it('`enterUrl.isSelected`', function () {
- expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')).to.be.false;
- });
-
- it('`enterUrl.hasError`', function () {
- expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.enterUrl.hasError')).to.be.false;
- });
-
- it('`uploadFile.isSelected`', function () {
- expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')).to.be.true;
- });
-
- it('`uploadFile.hasError`', function () {
- expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.uploadFile.hasError')).to.be.false;
- });
-
- });
-
- });
-
- describe('#enterUrlView', function () {
-
- beforeEach(function() {
- this.fileView = this.body.get('enterUrlView').create();
- });
-
- describe('#click', function () {
-
- beforeEach(function () {
- this.fileView.set('controller', getController());
- this.fileView.set('controller.optionsToSelect', {
- useLocalRepo: {
- enterUrl: {isSelected: false, hasError: true},
- uploadFile: {isSelected: false, hasError: true}
- }
- });
- this.fileView.click();
- });
-
- it('`enterUrl.isSelected`', function () {
- expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')).to.be.true;
- });
-
- it('`enterUrl.hasError`', function () {
- expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.enterUrl.hasError')).to.be.false;
- });
-
- it('`uploadFile.isSelected`', function () {
- expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')).to.be.false;
- });
-
- it('`uploadFile.hasError`', function () {
- expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.uploadFile.hasError')).to.be.false;
- });
-
- });
-
- });
-
- });
-
- })
-
- describe('#removeOS', function() {
-
- beforeEach(function () {
- wizardStep1Controller.set('selectedStack', {useRedhatSatellite: null});
- });
-
- [
- {
- useRedhatSatellite: false,
- e: false,
- },
- {
- useRedhatSatellite: true,
- e: true
- }
- ].forEach(function (test) {
- it('useRedhatSatellite is ' + JSON.stringify(test.useRedhatSatellite), function () {
- wizardStep1Controller.set('selectedStack.useRedhatSatellite', test.useRedhatSatellite);
- var os = {isSelected: true};
- wizardStep1Controller.removeOS({context: os})
- expect(Ember.get(os, 'isSelected')).to.be.equal(test.e);
- });
- });
-
- });
-
- describe('#addOS', function() {
-
- it('should set `isSelected` to true', function () {
- var os = {isSelected: false};
- wizardStep1Controller.addOS({context: os})
- expect(Ember.get(os, 'isSelected')).to.be.true;
- });
-
- });
-
- describe('#onNetworkIssuesExist', function () {
-
- beforeEach(function () {
- this.controller = App.WizardStep1Controller.create({content: Em.Object.create({stacks: stacks})});
- this.controller.get('content.stacks').setEach('usePublicRepo', true);
- this.controller.get('content.stacks').setEach('useLocalRepo', false);
- this.controller.reopen({networkIssuesExist: true});
- this.controller.onNetworkIssuesExist();
- });
-
- it('each stack has `usePublicRepo` false', function() {
- expect(this.controller.get('content.stacks').everyProperty('usePublicRepo', false)).to.be.true;
- });
-
- it('each stack has `useLocalRepo` true', function() {
- expect(this.controller.get('content.stacks').everyProperty('useLocalRepo', true)).to.be.true;
- });
-
- });
-
-});
diff --git a/ambari-web/test/controllers/wizard/step4_test.js b/ambari-web/test/controllers/wizard/step4_test.js
deleted file mode 100644
index 1aafb9f..0000000
--- a/ambari-web/test/controllers/wizard/step4_test.js
+++ /dev/null
@@ -1,1084 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var Ember = require('ember');
-var App = require('app');
-var modelSetup = require('test/init_model_test');
-
-require('controllers/wizard/step4_controller');
-describe('App.WizardStep4Controller', function () {
-
- var services = [
- 'HDFS', 'GANGLIA', 'OOZIE', 'HIVE', 'HBASE', 'PIG', 'SCOOP', 'ZOOKEEPER', 'SMARTSENSE', 'LOGSEARCH',
- 'YARN', 'MAPREDUCE2', 'FALCON', 'TEZ', 'STORM', 'AMBARI_METRICS', 'RANGER', 'SPARK', 'SLIDER', 'ATLAS', 'AMBARI_INFRA_SOLR'
- ];
- var controller;
-
- beforeEach(function() {
- controller = App.WizardStep4Controller.create();
- services.forEach(function(serviceName) {
- controller.pushObject(App.StackService.createRecord({
- 'serviceName':serviceName, 'isSelected': true, 'isHiddenOnSelectServicePage': false, 'isInstalled': false, 'isDisabled': 'HDFS' === serviceName, isDFS: 'HDFS' === serviceName
- }));
- });
- });
-
- var generateSelectedServicesContent = function(selectedServiceNames) {
- var allServices = services.slice(0);
- modelSetup.setupStackServiceComponent();
- if (selectedServiceNames.contains('GLUSTERFS')) allServices.push('GLUSTERFS');
- allServices = allServices.map(function(serviceName) {
- return [App.StackService.createRecord({
- 'serviceName': serviceName,
- 'isSelected': false,
- 'canBeSelected': true,
- 'isInstalled': false,
- isPrimaryDFS: serviceName === 'HDFS',
- isDFS: ['HDFS','GLUSTERFS'].contains(serviceName),
- isMonitoringService: ['GANGLIA'].contains(serviceName),
- requiredServices: App.StackService.find(serviceName).get('requiredServices') || [],
- displayNameOnSelectServicePage: App.format.role(serviceName, true),
- coSelectedServices: function() {
- return App.StackService.coSelected[this.get('serviceName')] || [];
- }.property('serviceName')
- })];
- }).reduce(function(current, prev) { return current.concat(prev); });
-
- selectedServiceNames.forEach(function(serviceName) {
- allServices.findProperty('serviceName', serviceName).set('isSelected', true);
- });
-
- return allServices;
- };
-
- describe('#isSubmitDisabled', function () {
- it('should return false if at least one selected service is not installed', function () {
- expect(controller.get('isSubmitDisabled')).to.equal(false);
- });
- it('should return true if all selected services are already installed', function () {
- controller.setEach('isInstalled', true);
- controller.findProperty('serviceName', 'HDFS').set('isSelected', false);
- expect(controller.get('isSubmitDisabled')).to.equal(true);
- });
- });
-
- describe('#isAllChecked', function () {
- it('should return true if all non DFS services are selected', function () {
- controller.setEach('isInstalled', false);
- controller.findProperty('serviceName', 'YARN').set('isSelected', true);
- controller.findProperty('serviceName', 'HDFS').set('isSelected', false);
- expect(controller.get('isAllChecked')).to.equal(true);
- });
-
- it('should return false if at least one service is not selected', function () {
- controller.findProperty('serviceName', 'YARN').set('isSelected', false);
- expect(controller.get('isAllChecked')).to.equal(false);
- });
- });
-
- describe('#fileSystems', function () {
- beforeEach(function () {
- controller.clear();
- controller.set('content', generateSelectedServicesContent(['HDFS', 'GLUSTERFS', 'YARN']));
- });
-
- it('returns only DFS services', function () {
- expect(controller.get('fileSystems')).to.have.length(2);
- expect(controller.get('fileSystems').mapProperty('serviceName')).to.contain('GLUSTERFS');
- expect(controller.get('fileSystems').mapProperty('serviceName')).to.contain('HDFS');
- });
-
- it('allows selecting only one DFS at a time', function () {
- var fileSystems = controller.get('fileSystems');
- fileSystems[0].set('isSelected', true);
- expect(fileSystems[0].get('isSelected')).to.equal(true);
- expect(fileSystems[1].get('isSelected')).to.equal(false);
- fileSystems[1].set('isSelected', true);
- expect(fileSystems[0].get('isSelected')).to.equal(false);
- expect(fileSystems[1].get('isSelected')).to.equal(true);
- });
- });
- describe('#multipleDFSs()', function () {
- it('should return true if HDFS is selected and GLUSTERFS is selected', function () {
- controller.set('content', generateSelectedServicesContent(['HDFS', 'GLUSTERFS']));
- expect(controller.multipleDFSs()).to.equal(true);
- });
- it('should return false if HDFS is not selected and GLUSTERFS is selected', function () {
- controller.set('content', generateSelectedServicesContent(['GLUSTERFS']));
- expect(controller.multipleDFSs()).to.equal(false);
- });
- it('should return false if HDFS is selected and GLUSTERFS is not selected', function () {
- controller.set('content', generateSelectedServicesContent(['HDFS']));
- expect(controller.multipleDFSs()).to.equal(false);
- });
- });
-
-/* disabling these test while waiting for a decision on coselected services
- describe('#setGroupedServices()', function () {
- var testCases = [
- {
- title: 'should set MapReduce2 isSelected to true when YARN is selected',
- condition: {
- 'YARN': true,
- 'HBASE': true,
- 'ZOOKEEPER': true,
- 'HIVE': true,
- 'MAPREDUCE2': true
- },
- result: {
- 'MAPREDUCE2': true
- }
- },
- {
- title: 'should set MapReduce2 isSelected to false when YARN is not selected',
- condition: {
- 'YARN': false,
- 'HBASE': true,
- 'ZOOKEEPER': true,
- 'HIVE': false,
- 'MAPREDUCE2': true
- },
- result: {
- 'MAPREDUCE2': false
- }
- },
- {
- title: 'should set MAPREDUCE2 isSelected to true when YARN is selected',
- condition: {
- 'HBASE': true,
- 'ZOOKEEPER': true,
- 'HIVE': false,
- 'YARN': true,
- 'MAPREDUCE2': true
- },
- result: {
- 'MAPREDUCE2': true
- }
- },
- {
- title: 'should set MAPREDUCE2 isSelected to false when YARN is not selected',
- condition: {
- 'HBASE': true,
- 'ZOOKEEPER': true,
- 'HIVE': true,
- 'YARN': false,
- 'MAPREDUCE2': true
- },
- result: {
- 'MAPREDUCE2': false
- }
- }
- ];
-
- testCases.forEach(function(testCase){
- describe(testCase.title, function () {
-
- beforeEach(function () {
- controller.clear();
- Object.keys(testCase.condition).forEach(function (id) {
- controller.pushObject(App.StackService.createRecord({
- serviceName: id,
- isSelected: testCase.condition[id],
- canBeSelected: true,
- isInstalled: false,
- coSelectedServices: function() {
- return App.StackService.coSelected[this.get('serviceName')] || [];
- }.property('serviceName')
- }));
- });
- controller.setGroupedServices();
- });
-
- Object.keys(testCase.result).forEach(function (service) {
- it(service, function () {
- expect(controller.findProperty('serviceName', service).get('isSelected')).to.equal(testCase.result[service]);
- });
- });
- });
- }, this);
- });
- */
-
- describe('#addValidationError()', function() {
- var tests = [
- {
- errorObjects: [
- {
- id: 'serviceCheck_ZOOKEEPER',
- shouldBeAdded: true
- },
- {
- id: 'serviceCheck_YARN',
- shouldBeAdded: true
- }
- ],
- expectedIds: ['serviceCheck_ZOOKEEPER', 'serviceCheck_YARN']
- },
- {
- errorObjects: [
- {
- id: 'fsCheck',
- shouldBeAdded: true
- },
- {
- id: 'fsCheck',
- shouldBeAdded: false
- }
- ],
- expectedIds: ['fsCheck']
- }
- ];
-
- beforeEach(function() {
- controller.clear();
- controller.set('errorStack', []);
- });
-
- tests.forEach(function(test) {
- var message = 'Erorrs {0} thrown. errorStack property should contains ids: {1}'
- .format(test.errorObjects.mapProperty('id').join(', '), test.expectedIds.join(', '));
- describe(message, function() {
-
- beforeEach(function () {
- this.added = [];
- test.errorObjects.forEach(function(errorObject) {
- this.added.push(controller.addValidationError(errorObject));
- }, this);
- });
-
- it('shouldBeAdded', function() {
- expect(this.added).to.be.eql(test.errorObjects.mapProperty('shouldBeAdded'));
- });
-
- it('expectedIds', function() {
- expect(controller.get('errorStack').mapProperty('id')).to.eql(test.expectedIds);
- });
- });
- })
- });
-
- describe('#validate()', function() {
- var tests = [
- {
- services: ['HDFS', 'ZOOKEEPER'],
- errorsExpected: ['ambariMetricsCheck', 'smartSenseCheck']
- },
- {
- services: ['ZOOKEEPER'],
- errorsExpected: ['ambariMetricsCheck', 'smartSenseCheck']
- },
- {
- services: ['HDFS'],
- errorsExpected: ['serviceCheck_ZOOKEEPER', 'ambariMetricsCheck', 'smartSenseCheck']
- },
- {
- services: ['HDFS', 'TEZ', 'ZOOKEEPER'],
- errorsExpected: ['serviceCheck_YARN', 'ambariMetricsCheck' , 'smartSenseCheck']
- },
- {
- services: ['HDFS', 'ZOOKEEPER', 'FALCON'],
- errorsExpected: ['serviceCheck_OOZIE', 'ambariMetricsCheck' , 'smartSenseCheck']
- },
- {
- services: ['HDFS', 'ZOOKEEPER', 'GANGLIA', 'HIVE'],
- errorsExpected: ['serviceCheck_YARN', 'ambariMetricsCheck' , 'smartSenseCheck']
- },
- {
- services: ['HDFS', 'GLUSTERFS', 'ZOOKEEPER', 'HIVE'],
- errorsExpected: ['serviceCheck_YARN', 'multipleDFS', 'ambariMetricsCheck', 'smartSenseCheck']
- },
- {
- services: ['HDFS','ZOOKEEPER', 'GANGLIA'],
- errorsExpected: ['ambariMetricsCheck', 'smartSenseCheck']
- },
- {
- services: ['HDFS','ZOOKEEPER', 'AMBARI_METRICS'],
- errorsExpected: ['smartSenseCheck']
- },
- {
- services: ['ZOOKEEPER', 'AMBARI_METRICS'],
- errorsExpected: ['smartSenseCheck']
- },
- {
- services: ['HDFS', 'AMBARI_METRICS'],
- errorsExpected: ['serviceCheck_ZOOKEEPER', 'smartSenseCheck']
- },
- {
- services: ['HDFS', 'TEZ', 'ZOOKEEPER', 'AMBARI_METRICS'],
- errorsExpected: ['serviceCheck_YARN', 'smartSenseCheck']
- },
- {
- services: ['HDFS', 'ZOOKEEPER', 'FALCON', 'AMBARI_METRICS'],
- errorsExpected: ['serviceCheck_OOZIE', 'smartSenseCheck']
- },
- {
- services: ['HDFS', 'ZOOKEEPER', 'GANGLIA', 'HIVE', 'AMBARI_METRICS'],
- errorsExpected: ['serviceCheck_YARN', 'smartSenseCheck']
- },
- {
- services: ['HDFS', 'GLUSTERFS', 'ZOOKEEPER', 'HIVE', 'AMBARI_METRICS'],
- errorsExpected: ['serviceCheck_YARN', 'multipleDFS', 'smartSenseCheck']
- },
- {
- services: ['HDFS','ZOOKEEPER', 'GANGLIA', 'AMBARI_METRICS'],
- errorsExpected: ['smartSenseCheck']
- },
- {
- services: ['RANGER'],
- errorsExpected: ['ambariMetricsCheck', 'smartSenseCheck', 'rangerRequirements']
- },
- {
- services: ['SMARTSENSE'],
- errorsExpected: ['ambariMetricsCheck']
- },
- {
- services: ['ATLAS', 'AMBARI_METRICS', 'SMARTSENSE'],
- errorsExpected: ['ambariInfraCheck']
- },
- {
- services: ['LOGSEARCH', 'AMBARI_METRICS', 'SMARTSENSE'],
- errorsExpected: ['ambariLogsearchCheck']
- }
- ],
- controllerNames = ['installerController', 'addServiceController'],
- wizardNames = {
- installerController: 'Install Wizard',
- addServiceController: 'Add Service Wizard'
- },
- sparkCases = [
- {
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.2',
- sparkWarningExpected: true,
- title: 'HDP 2.2'
- },
- {
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.3',
- sparkWarningExpected: false,
- title: 'HDP 2.3'
- },
- {
- currentStackName: 'BIGTOP',
- currentStackVersionNumber: '0.8',
- sparkWarningExpected: false,
- title: 'Non-HDP stack'
- }
- ];
-
- beforeEach(function () {
- controller.clear();
- });
-
- controllerNames.forEach(function (name) {
- tests.forEach(function(test) {
- var errorsExpected = test.errorsExpected;
- if (name !== 'installerController') {
- errorsExpected = test.errorsExpected.without('ambariMetricsCheck').without('smartSenseCheck');
- }
- var message = '{0}, {1} selected validation should be {2}, errors: {3}'
- .format(wizardNames[name], test.services.join(','), errorsExpected.length ? 'passed' : 'failed',
- errorsExpected.length ? errorsExpected.join(',') : 'absent');
- it(message, function() {
- controller.setProperties({
- content: generateSelectedServicesContent(test.services),
- errorStack: [],
- wizardController: Em.Object.create({
- name: name
- })
- });
- controller.validate();
- expect(controller.get('errorStack').mapProperty('id')).to.eql(errorsExpected.toArray());
- });
- })
- });
-
- sparkCases.forEach(function (item) {
- describe(item.title, function () {
-
- beforeEach(function () {
- sinon.stub(App, 'get').withArgs('currentStackName').returns(item.currentStackName).
- withArgs('currentStackVersionNumber').returns(item.currentStackVersionNumber);
- controller.set('errorStack', []);
- controller.set('content', generateSelectedServicesContent(['SPARK']));
- controller.validate();
- });
-
- afterEach(function () {
- App.get.restore();
- });
-
- it('sparkWarning ' + (item.sparkWarningExpected ? 'exists' : 'not exists'), function () {
- expect(controller.get('errorStack').someProperty('id', 'sparkWarning')).to.equal(item.sparkWarningExpected);
- });
- });
- });
-
- });
-
- describe('#onPrimaryPopupCallback()', function() {
- var c;
- var tests = [
- {
- services: ['HDFS','ZOOKEEPER'],
- confirmPopupCount: 0,
- errorsExpected: []
- },
- {
- services: ['ZOOKEEPER'],
- confirmPopupCount: 0,
- errorsExpected: []
- },
- {
- services: ['HDFS', 'GLUSTERFS', 'ZOOKEEPER', 'HIVE'],
- confirmPopupCount: 2,
- errorsExpected: ['serviceCheck_YARN', 'serviceCheck_TEZ', 'multipleDFS']
- },
- {
- services: ['HDFS','ZOOKEEPER', 'GANGLIA'],
- confirmPopupCount: 0,
- errorsExpected: []
- }
- ];
-
- beforeEach(function() {
- c = App.WizardStep4Controller.create({});
- sinon.stub(App.router, 'send', Em.K);
- sinon.stub(c, 'submit', Em.K);
- sinon.spy(c, 'onPrimaryPopupCallback');
- });
-
- afterEach(function() {
- App.router.send.restore();
- c.submit.restore();
- c.onPrimaryPopupCallback.restore();
- });
-
-
- tests.forEach(function(test) {
- var message = 'Selected services: {0}. {1} errors should be confirmed'
- .format(test.services.join(', '), test.confirmPopupCount);
-
- describe(message, function() {
- var runValidations = function() {
- c.serviceDependencyValidation();
- c.fileSystemServiceValidation();
- };
-
- beforeEach(function () {
- c.set('content', generateSelectedServicesContent(test.services));
- runValidations();
- });
-
- it('errors count validation', function () {
- expect(c.get('errorStack.length')).to.equal(test.confirmPopupCount);
- });
-
- if (test.errorsExpected) {
- describe('if errors detected than it should be shown', function () {
- var currentErrorObject;
- beforeEach(function () {
- currentErrorObject = c.get('errorStack').findProperty('isShown', false);
- });
- test.errorsExpected.forEach(function(error) {
- it(error, function () {
- // validate current error
- if (currentErrorObject) {
- expect(test.errorsExpected).to.contain(currentErrorObject.id);
- // show current error
- var popup = c.showError(currentErrorObject);
- // submit popup
- popup.onPrimary();
- // onPrimaryPopupCallback should be called
- expect(c.onPrimaryPopupCallback.called).to.equal(true);
- // submit called
- expect(c.submit.called).to.equal(true);
- if (c.get('errorStack').length) {
- // current error isShown flag changed to true
- expect(currentErrorObject.isShown).to.equal(true);
- }
- runValidations();
- }
- });
- });
- });
- }
- });
- });
-
- });
-
- describe('#needToAddServicePopup', function() {
-
- beforeEach(function () {
- sinon.stub(controller, 'submit', Em.K);
- });
-
- afterEach(function () {
- controller.submit.restore();
- });
-
- Em.A([
- {
- m: 'one service',
- services: {selected: true, serviceName: 's1'},
- content: [Em.Object.create({serviceName: 's1', isSelected: false})],
- e: [true]
- },
- {
- m: 'many services',
- services: [{selected: true, serviceName: 's1'}, {selected: false, serviceName: 's2'}],
- content: [Em.Object.create({serviceName: 's1', isSelected: false}),
- Em.Object.create({serviceName: 's2', isSelected: true})],
- e: [true, false]
- }
- ]).forEach(function (test) {
- it(test.m, function () {
- controller.set('content', test.content);
- controller.needToAddServicePopup(test.services, '').onPrimary();
- expect(controller.submit.calledOnce).to.equal(true);
- expect(controller.mapProperty('isSelected')).to.eql(test.e);
- });
- });
- });
-
- describe('#submit', function() {
- var c;
- var tests = [
- {
- isSubmitDisabled: true,
- validate: false,
- userCanProceed: false
- },
- {
- isSubmitDisabled: false,
- validate: false,
- userCanProceed: false
- },
- {
- isSubmitDisabled: false,
- validate: true,
- userCanProceed: true
- }
- ];
-
- beforeEach(function() {
- c = App.WizardStep4Controller.create();
- sinon.stub(App.router, 'send', Em.K);
- });
-
- afterEach(function() {
- App.router.send.restore();
- });
-
- tests.forEach(function(test) {
- var messageFormat = [
- test.isSubmitDisabled ? 'disabled' : 'enabled',
- test.validate ? 'success' : 'failed',
- test.userCanProceed ? '' : 'not'
- ];
- var message = String.prototype.format.apply('Submit btn: {0}. Validation: {1}. Can{2} move to the next step.', messageFormat);
-
- it(message, function() {
- c.reopen({
- isSubmitDisabled: test.isSubmitDisabled,
- validate: function() { return test.validate; }
- });
- c.clear();
- c.submit();
-
- expect(App.router.send.calledOnce).to.equal(test.userCanProceed);
- });
-
- })
- });
-
- describe('#dependencies', function() {
- var tests = [
- {
- services: ['HDFS'],
- dependencies: ['ZOOKEEPER']
- },
- {
- services: ['STORM'],
- dependencies: ['ZOOKEEPER']
- }
- ];
- tests.forEach(function(test) {
- var message = '{0} dependency should be {1}'.format(test.services.join(','), test.dependencies.join(','));
- it(message, function() {
-
- controller.clear();
- controller.set('content', generateSelectedServicesContent(test.services));
-
- var dependentServicesTest = [];
-
- test.services.forEach(function(serviceName) {
- var service = controller.filterProperty('serviceName', serviceName);
- service.forEach(function(item) {
- var dependencies = item.get('requiredServices');
- if(!!dependencies) {
- dependentServicesTest = dependentServicesTest.concat(dependencies);
- }
- });
- });
-
- expect(dependentServicesTest).to.be.eql(test.dependencies);
- });
- })
- });
-
- describe('#serviceDependencyValidation', function () {
-
- var cases = [
- {
- services: ['HBASE'],
- dependentServices: ['HDFS', 'ZOOKEEPER'],
- title: 'HBASE selected and HDFS not selected initially'
- },
- {
- services: ['TEZ', 'HDFS'],
- dependentServices: ['ZOOKEEPER', 'YARN'],
- title: 'TEZ selected and ZOOKEEPER not selected initially'
- }
- ];
-
- beforeEach(function() {
- controller.clear();
- controller.set('errorStack', []);
- });
-
- cases.forEach(function (item) {
- describe(item.title, function () {
-
- beforeEach(function () {
- controller.set('content', generateSelectedServicesContent(item.services));
- controller.serviceDependencyValidation();
- });
-
- it('check errors in the stack', function () {
- var ids = controller.get('errorStack').mapProperty('id');
- expect(ids.contains("serviceCheck_" + item.dependentServices[0])).to.be.true;
- expect(ids.contains("serviceCheck_" + item.dependentServices[1])).to.be.true;
- });
-
- it('simulate situation where user clicks cancel on error for first dependent service and then selects it in which case', function () {
- controller.findProperty('serviceName', item.dependentServices[0]).set('isSelected', true);
- //serviceDependencyValidation() will be called again
- controller.serviceDependencyValidation();
- //error for first dependent service must be removed from errorStack array
- var ids = controller.get('errorStack').mapProperty('id');
- expect(ids.contains("serviceCheck_" + item.dependentServices[0])).to.be.false;
- expect(ids.contains("serviceCheck_" + item.dependentServices[1])).to.be.true;
- });
-
- });
- });
- });
-
- describe('#serviceValidation', function () {
-
- var cases = [
- {
- services: ['HDFS'],
- isAmbariMetricsWarning: false,
- title: 'Ambari Metrics not available'
- },
- {
- services: ['AMBARI_METRICS'],
- isAmbariMetricsSelected: false,
- isAmbariMetricsWarning: true,
- title: 'Ambari Metrics not selected'
- },
- {
- services: ['AMBARI_METRICS'],
- isAmbariMetricsSelected: true,
- isAmbariMetricsWarning: false,
- title: 'Ambari Metrics selected'
- }
- ];
-
- beforeEach(function() {
- controller.clear();
- controller.set('errorStack', []);
- });
-
- cases.forEach(function (item) {
- it(item.title, function () {
- controller.set('content', generateSelectedServicesContent(item.services));
- var ams = controller.findProperty('serviceName', 'AMBARI_METRICS');
- if (item.services.contains('AMBARI_METRICS')) {
- ams.set('isSelected', item.isAmbariMetricsSelected);
- } else {
- controller.removeObject(ams);
- }
- controller.serviceValidation(Em.K, 'AMBARI_METRICS', 'ambariMetricsCheck');
- expect(controller.get('errorStack').mapProperty('id').contains('ambariMetricsCheck')).to.equal(item.isAmbariMetricsWarning);
- });
- });
-
- });
-
- describe('#rangerValidation', function () {
-
- var cases = [
- {
- services: ['HDFS'],
- isRangerWarning: false,
- title: 'Ranger not available'
- },
- {
- services: ['RANGER'],
- isRangerSelected: false,
- isRangerInstalled: false,
- isRangerWarning: false,
- title: 'Ranger not selected'
- },
- {
- services: ['RANGER'],
- isRangerSelected: true,
- isRangerInstalled: false,
- isRangerWarning: true,
- title: 'Ranger selected'
- },
- {
- services: ['RANGER'],
- isRangerSelected: true,
- isRangerInstalled: true,
- isRangerWarning: false,
- title: 'Ranger installed'
- }
- ];
-
- beforeEach(function() {
- controller.clear();
- controller.set('errorStack', []);
- });
-
- cases.forEach(function (item) {
- it(item.title, function () {
- controller.set('content', generateSelectedServicesContent(item.services));
- var ranger = controller.findProperty('serviceName', 'RANGER');
- if (item.services.contains('RANGER')) {
- ranger.setProperties({
- isSelected: item.isRangerSelected,
- isInstalled: item.isRangerInstalled
- });
- } else {
- controller.removeObject(ranger);
- }
- controller.rangerValidation();
- expect(controller.get('errorStack').mapProperty('id').contains('rangerRequirements')).to.equal(item.isRangerWarning);
- });
- });
-
- });
-
- describe('#sparkValidation', function () {
-
- var cases = [
- {
- services: ['HDFS'],
- isSparkWarning: false,
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.2',
- title: 'HDP 2.2, Spark not available'
- },
- {
- services: ['HDFS'],
- isSparkWarning: false,
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.3',
- title: 'HDP 2.3, Spark not available'
- },
- {
- services: ['HDFS'],
- isSparkWarning: false,
- currentStackName: 'BIGTOP',
- currentStackVersionNumber: '0.8',
- title: 'Non-HDP stack, Spark not available'
- },
- {
- services: ['SPARK'],
- isSparkSelected: false,
- isSparkInstalled: false,
- isSparkWarning: false,
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.2',
- title: 'HDP 2.2, Spark not selected'
- },
- {
- services: ['SPARK'],
- isSparkSelected: true,
- isSparkInstalled: false,
- isSparkWarning: true,
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.2',
- title: 'HDP 2.2, Spark selected'
- },
- {
- services: ['SPARK'],
- isSparkSelected: true,
- isSparkInstalled: true,
- isSparkWarning: false,
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.2',
- title: 'HDP 2.2, Spark installed'
- },
- {
- services: ['SPARK'],
- isSparkSelected: false,
- isSparkInstalled: false,
- isSparkWarning: false,
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.3',
- title: 'HDP 2.3, Spark not selected'
- },
- {
- services: ['SPARK'],
- isSparkSelected: true,
- isSparkInstalled: false,
- isSparkWarning: false,
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.3',
- title: 'HDP 2.3, Spark selected'
- },
- {
- services: ['SPARK'],
- isSparkSelected: true,
- isSparkInstalled: true,
- isSparkWarning: false,
- currentStackName: 'HDP',
- currentStackVersionNumber: '2.3',
- title: 'HDP 2.3, Spark installed'
- },
- {
- services: ['SPARK'],
- isSparkSelected: false,
- isSparkInstalled: false,
- isSparkWarning: false,
- currentStackName: 'BIGTOP',
- currentStackVersionNumber: '0.8',
- title: 'Non-HDP stack, Spark not selected'
- },
- {
- services: ['SPARK'],
- isSparkSelected: true,
- isSparkInstalled: false,
- isSparkWarning: false,
- currentStackName: 'BIGTOP',
- currentStackVersionNumber: '0.8',
- title: 'Non-HDP stack, Spark selected'
- },
- {
- services: ['SPARK'],
- isSparkSelected: true,
- isSparkInstalled: true,
- isSparkWarning: false,
- currentStackName: 'BIGTOP',
- currentStackVersionNumber: '0.8',
- title: 'Non-HDP stack, Spark installed'
- }
- ];
-
- beforeEach(function() {
- controller.clear();
- controller.set('errorStack', []);
- this.stub = sinon.stub(App, 'get');
- });
-
- afterEach(function () {
- App.get.restore();
- });
-
- cases.forEach(function (item) {
- describe(item.title, function () {
- beforeEach(function () {
- this.stub.withArgs('currentStackName').returns(item.currentStackName).
- withArgs('currentStackVersionNumber').returns(item.currentStackVersionNumber);
- controller.set('content', generateSelectedServicesContent(item.services));
- var spark = controller.findProperty('serviceName', 'SPARK');
- if (item.services.contains('SPARK')) {
- spark.setProperties({
- isSelected: item.isSparkSelected,
- isInstalled: item.isSparkInstalled
- });
- } else {
- controller.removeObject(spark);
- }
- controller.sparkValidation();
- });
-
- it('sparkWarning is ' + item.sparkWarning, function () {
- expect(controller.get('errorStack').mapProperty('id').contains('sparkWarning')).to.equal(item.isSparkWarning);
- });
- });
- });
-
- });
-
- describe('#clearErrors', function () {
-
- var cases = [
- {
- errorStack: [{
- isAccepted: false
- }],
- resultingErrorStack: [{
- isAccepted: false
- }],
- title: 'error stack shouldn\'t be cleared during validation'
- },
- {
- errorStack: [{
- isAccepted: true
- }],
- resultingErrorStack: [],
- title: 'error stack should be cleared'
- }
- ];
-
- beforeEach(function () {
- controller.set('errorStack', [{}]);
- });
-
- cases.forEach(function (item) {
- it(item.title, function () {
- controller.set('errorStack', item.errorStack);
- controller.propertyDidChange('@each.isSelected');
- expect(controller.get('errorStack')).to.eql(item.resultingErrorStack);
- });
- });
-
- });
-
- describe('Service warnings popup', function () {
-
- var target = {
- clb: Em.K
- };
- var id = 1;
-
- beforeEach(function () {
- sinon.spy(target, 'clb');
- sinon.stub(controller, 'onPrimaryPopupCallback', Em.K);
- });
-
- afterEach(function () {
- target.clb.restore();
- controller.onPrimaryPopupCallback.restore();
- });
-
- Em.A([
- 'serviceCheckPopup',
- 'rangerRequirementsPopup',
- 'sparkWarningPopup'
- ]).forEach(function (methodName) {
-
- describe('#' + methodName, function () {
-
- beforeEach(function () {
- this.popup = controller[methodName](target.clb, id);
- });
-
- it('#onPrimary', function () {
- this.popup.onPrimary();
- expect(controller.onPrimaryPopupCallback.calledWith(target.clb)).to.be.true;
- });
-
- it('#onSecondary', function () {
- this.popup.onSecondary();
- expect(target.clb.calledWith(id)).to.be.true;
- });
-
- it('#onClose', function () {
- this.popup.onClose();
- expect(target.clb.calledWith(id)).to.be.true;
- });
- });
- });
- });
-
- describe('#dependentServiceValidation', function() {
-
- beforeEach(function() {
- sinon.stub(controller, 'serviceValidation');
- });
-
- afterEach(function() {
- controller.serviceValidation.restore();
- controller.clear();
- });
-
- it('serviceValidation should not be called when selected service does not exist', function() {
- controller.dependentServiceValidation('S1', 'S2', 'check', Em.K);
- expect(controller.serviceValidation.called).to.be.false;
- });
-
- it('serviceValidation should not be called when service not selected', function() {
- controller.pushObject(App.StackService.createRecord({
- serviceName: 'S1',
- isSelected: false
- }));
- controller.dependentServiceValidation('S1', 'S2', 'check', Em.K);
- expect(controller.serviceValidation.called).to.be.false;
- });
-
- it('serviceValidation should not be called when dependent service does not exist', function() {
- controller.pushObjects([
- App.StackService.createRecord({
- serviceName: 'S1',
- isSelected: true
- })
- ]);
- controller.dependentServiceValidation('S1', 'S2', 'check', Em.K);
- expect(controller.serviceValidation.called).to.be.false;
- });
-
- it('serviceValidation should not be called when dependent service is selected', function() {
- controller.pushObjects([
- App.StackService.createRecord({
- serviceName: 'S1',
- isSelected: true
- }),
- Em.Object.create({
- serviceName: 'S2',
- isSelected: true
- })
- ]);
- controller.dependentServiceValidation('S1', 'S2', 'check', Em.K);
- expect(controller.serviceValidation.called).to.be.false;
- });
-
- it('serviceValidation should be called when dependent service is not selected', function() {
- controller.pushObjects([
- App.StackService.createRecord({
- serviceName: 'S1',
- isSelected: true
- }),
- Em.Object.create({
- serviceName: 'S2',
- isSelected: false
- })
- ]);
- controller.dependentServiceValidation('S1', 'S2', 'check', Em.K);
- expect(controller.serviceValidation.calledOnce).to.be.true;
- });
- });
-
-});
diff --git a/ambari-web/test/views/wizard/step1_view_test.js b/ambari-web/test/views/wizard/step1_view_test.js
deleted file mode 100644
index 1f48a3f..0000000
--- a/ambari-web/test/views/wizard/step1_view_test.js
+++ /dev/null
@@ -1,230 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-require('views/wizard/step1_view');
-
-var view;
-
-function getView() {
- return App.WizardStep1View.create({
- controller: Em.Object.create()
- });
-}
-
-describe('App.WizardStep1View', function () {
-
- beforeEach(function () {
- view = getView();
- });
-
- App.TestAliases.testAsComputedEveryBy(getView(), 'isNoOsChecked', 'controller.selectedStack.operatingSystems', 'isSelected', false);
-
- App.TestAliases.testAsComputedOr(getView(), 'isSubmitDisabled', ['invalidFormatUrlExist', 'isNoOsChecked', 'isAnyOsEmpty', 'controller.content.isCheckInProgress', 'App.router.btnClickInProgress', '!controller.isLoadingComplete']);
-
- App.TestAliases.testAsComputedSomeBy(getView(), 'invalidUrlExist', 'allRepositories', 'validation', 'INVALID');
-
- describe('#editLocalRepository', function () {
-
- var repository;
-
- beforeEach(function () {
- view.reopen({
- allRepositories: [
- Em.Object.create({
- isSelected: true,
- baseUrl: 'b1',
- validation: 'icon-exclamation-sign'
- })
- ]
- });
- view.editLocalRepository();
- repository = view.get('allRepositories.firstObject');
- });
-
- it('should update repository base URL', function () {
- expect(repository.get('lastBaseUrl')).to.equal(repository.get('baseUrl'));
- });
-
- it('should update repository validation status', function () {
- expect(repository.get('validation')).to.equal('PENDING');
- });
- });
-
- describe('#isAnyOsEmpty', function() {
-
- it('should be true when useRedhatSatellite is true and redhat os is empty', function() {
- view.set('controller.selectedStack', Em.Object.create({
- useRedhatSatellite: true,
- operatingSystems: [
- Em.Object.create({
- isSelected: true,
- isNotFilled: true,
- osType: 'redhat'
- })
- ]
- }));
- expect(view.get('isAnyOsEmpty')).to.be.true;
- });
-
- it('should be false when operatingSystems is null', function() {
- view.set('controller.selectedStack', Em.Object.create({
- operatingSystems: null
- }));
- expect(view.get('isAnyOsEmpty')).to.be.false;
- });
-
- it('should be false when operatingSystem is filled', function() {
- view.set('controller.selectedStack', Em.Object.create({
- useRedhatSatellite: false,
- operatingSystems: [
- Em.Object.create({
- isSelected: true,
- isNotFilled: false
- })
- ]
- }));
- expect(view.get('isAnyOsEmpty')).to.be.false;
- });
-
- it('should be true when operatingSystem is not filled', function() {
- view.set('controller.selectedStack', Em.Object.create({
- useRedhatSatellite: false,
- operatingSystems: [
- Em.Object.create({
- isSelected: true,
- isNotFilled: true
- }),
- Em.Object.create({
- isSelected: true,
- isNotFilled: false
- })
- ]
- }));
- expect(view.get('isAnyOsEmpty')).to.be.true;
- });
- });
-
- describe('#isRedhat', function() {
-
- it('should be false when osType not specified', function() {
- expect(view.isRedhat(Em.Object.create())).to.be.false;
- });
-
- it('should be false when osType not redhat', function() {
- expect(view.isRedhat(Em.Object.create({osType: 'debian7'}))).to.be.false;
- });
-
- it('should be true when osType is redhat7', function() {
- expect(view.isRedhat(Em.Object.create({osType: 'redhat7'}))).to.be.true;
- });
-
- it('should be true when osType is redhat-ppc7', function() {
- expect(view.isRedhat(Em.Object.create({osType: 'redhat-ppc7'}))).to.be.true;
- });
- });
-
- describe('#invalidFormatUrlExist', function () {
-
- var testCases = [
- {
- title: 'no repositories',
- allRepositories: undefined,
- useRedhatSatellite: false,
- result: false
- },
- {
- title: 'use redhat, invalid format',
- allRepositories: [
- Em.Object.create({
- osType: '',
- invalidFormatError: false
- }),
- Em.Object.create({
- osType: 'redhat',
- invalidFormatError: true
- })
- ],
- useRedhatSatellite: true,
- result: true
- },
- {
- title: 'use redhat, no invalid format',
- allRepositories: [
- Em.Object.create({
- osType: '',
- invalidFormatError: true
- }),
- Em.Object.create({
- osType: 'redhat',
- invalidFormatError: false
- })
- ],
- useRedhatSatellite: true,
- result: false
- },
- {
- title: 'no use redhat, invalid format',
- allRepositories: [
- Em.Object.create({
- osType: '',
- invalidFormatError: true
- }),
- Em.Object.create({
- osType: 'redhat',
- invalidFormatError: false
- })
- ],
- useRedhatSatellite: false,
- result: true
- },
- {
- title: 'no use redhat, invalid format',
- allRepositories: [
- Em.Object.create({
- osType: '',
- invalidFormatError: false
- }),
- Em.Object.create({
- osType: 'redhat',
- invalidFormatError: true
- })
- ],
- useRedhatSatellite: false,
- result: true
- }
- ];
-
- testCases.forEach(function (testCase) {
- describe(testCase.title, function () {
- beforeEach(function () {
- view.reopen({
- allRepositories: testCase.allRepositories
- });
- view.set('controller.selectedStack', Em.Object.create({
- useRedhatSatellite: testCase.useRedhatSatellite
- }));
- });
- it('', function () {
- expect(view.get('invalidFormatUrlExist')).to.equal(testCase.result);
- });
- });
- });
- });
-
-});
\ No newline at end of file
diff --git a/ambari-web/test/views/wizard/step4_view_test.js b/ambari-web/test/views/wizard/step4_view_test.js
deleted file mode 100644
index 971e33b..0000000
--- a/ambari-web/test/views/wizard/step4_view_test.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-describe('App.WizardStep4View', function () {
-
-});
--
To stop receiving notification emails like this one, please contact
jgolieb@apache.org.