Repository: ambari Updated Branches: refs/heads/trunk 81279faed -> 391b45e93
http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/utils/ajax/ajax.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js index a1d3f5f..9a23278 100644 --- a/ambari-web/app/utils/ajax/ajax.js +++ b/ambari-web/app/utils/ajax/ajax.js @@ -1371,6 +1371,10 @@ var urls = { 'real': '/clusters/{clusterName}/stack_versions?ClusterStackVersions/state=CURRENT&fields=repository_versions/RepositoryVersions/repository_version&minimal_response=true', 'mock': '/data/stack_versions/stack_version_all.json' }, + 'cluster.load_current_repo_stack_services': { + 'real': '/clusters/{clusterName}/stack_versions?ClusterStackVersions/state=CURRENT&fields=repository_versions/RepositoryVersions/stack_services', + 'mock': '/data/stack_versions/stack_version_all.json' + }, 'cluster.save_provisioning_state': { 'real': '/clusters/{clusterName}', 'type': 'PUT', @@ -1858,6 +1862,42 @@ var urls = { } }, + 'wizard.step1.post_version_definition_file.xml': { + 'real': '/version_definitions', + 'mock': '', + 'format': function (data) { + return { + headers: { + 'X-Requested-By': 'ambari', + 'Content-Type': 'text/xml' + }, + type: 'POST', + data: data.data + } + } + }, + 'wizard.step1.post_version_definition_file.url': { + 'real': '/version_definitions', + 'mock': '', + 'format': function (data) { + return { + type: 'POST', + data: JSON.stringify(data.data) + } + } + }, + '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': '', @@ -1868,6 +1908,12 @@ var urls = { } } }, + 'wizard.get_shown_version_definition': { + real: '/version_definitions?fields=VersionDefinition/stack_services&VersionDefinition/repository_version={repositoryVersion}&VersionDefinition/show_available=true' + }, + 'wizard.get_version_definition': { + real: '/version_definitions?fields=VersionDefinition/stack_services&VersionDefinition/repository_version={repositoryVersion}' + }, 'wizard.service_components': { 'real': '{stackUrl}/services?fields=StackServices/*,components/*,components/dependencies/Dependencies/scope,artifacts/Artifacts/artifact_name', 'mock': '/data/stacks/HDP-2.1/service_components.json' @@ -2109,6 +2155,12 @@ var urls = { 'real': '/stacks/{stackName}/versions?fields=Versions,operating_systems/repositories/Repositories', 'mock': '/data/wizard/stack/{stackName}_versions.json' }, + + 'wizard.stacks_versions_definitions': { + 'real': '/version_definitions?fields=operating_systems/repositories/Repositories/*,VersionDefinition/stack_services,VersionDefinition/repository_version' + + '&VersionDefinition/show_available=true&VersionDefinition/stack_name={stackName}', + 'mock': '/data/wizard/stack/{stackName}_version_definitions.json' + }, 'wizard.launch_bootstrap': { 'real': '/bootstrap', 'mock': '/data/wizard/bootstrap/bootstrap.json', http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/views/main/admin/stack_upgrade/services_view.js ---------------------------------------------------------------------- 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 8805c47..f566814 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 @@ -31,10 +31,15 @@ App.MainAdminStackServicesView = Em.View.extend({ */ services: function() { var services = App.supports.installGanglia ? App.StackService.find() : App.StackService.find().without(App.StackService.find('GANGLIA')); - return services.map(function(s) { - s.set('isInstalled', App.Service.find().someProperty('serviceName', s.get('serviceName'))); - return s; + var controller = this.get('controller'); + controller.loadServiceVersionFromVersionDefinitions().complete(function () { + return services.map(function(s) { + s.set('serviceVersionDisplay', controller.get('serviceVersionsMap')[s.get('serviceName')]); + s.set('isInstalled', App.Service.find().someProperty('serviceName', s.get('serviceName'))); + return s; + }); }); + return services; }.property('App.router.clusterController.isLoaded'), didInsertElement: function () { http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/views/wizard/step1_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/wizard/step1_view.js b/ambari-web/app/views/wizard/step1_view.js index 452e676..2d4c94b 100644 --- a/ambari-web/app/views/wizard/step1_view.js +++ b/ambari-web/app/views/wizard/step1_view.js @@ -23,195 +23,397 @@ App.WizardStep1View = Em.View.extend({ templateName: require('templates/wizard/step1'), - /** - * Is Repositories Accordion collapsed - * @type {bool} - */ - isRLCollapsed: true, - didInsertElement: function () { - if (this.get('isRLCollapsed')) { - this.$('.accordion-body').hide(); - } $("[rel=skip-validation-tooltip]").tooltip({ placement: 'right'}); + $("[rel=use-redhat-tooltip]").tooltip({ placement: 'right'}); + this.set('controller.latestSelectedPublicRepoId',this.get('controller.selectedStack.id')); + }, /** - * List of available stacks + * =========================== Option "Use Public Repository" starts from here ================== + */ + + /** + * List of available stack names HDP 2.2, HDP 2.3 .etc * @type {Em.Object[]} */ - stacks: function () { + stackNames: function () { + var stackNamesMap = {}; + var selectedStack = this.get('controller.selectedStack'); return this.get('controller.content.stacks').toArray().map(function (stack) { - return Em.Object.create({ - name: stack.get('id').replace('-', ' '), - isSelected: stack.get('isSelected') - }); + if (!stackNamesMap[stack.get('stackNameVersion')] && stack.get('showAvailable')) { + stackNamesMap[stack.get('stackNameVersion')] = true; + return Em.Object.create({ + id: stack.get('id'), + name: stack.get('stackNameVersion').replace('-', ' '), + isActive: stack.get('stackNameVersion') == selectedStack.get('stackNameVersion') + }); + } else { + return {}; + } }); }.property('controller.selectedStack'), - operatingSystems: function () { - var selectedStack = this.get('controller.selectedStack'); - return Em.isNone(selectedStack) ? [] : selectedStack.get('operatingSystems'); - }.property('controller.selectedStack'), + selectStackNameOnTab: function (event) { + this.get('controller.content.stacks').setEach('isSelected', false); + this.get('controller.content.stacks').findProperty('id', event.context.id).set('isSelected', true); + this.set('controller.latestSelectedPublicRepoId',event.context.id); + }, /** - * List of all repositories under selected stack operatingSystems - * API and ember data model structure: - * stack = [{OS-1},{OS-2}] - * OS-1 = [{repository-1},{repository-2}] - * OS-2 = [{repository-3},{repository-4}] - * @return: [{repository-1},{repository-2},{repository-3},{repository-4}] + * List of other available stack repos within the same stack name + * @type {Em.Object[]} */ - allRepositories: function () { + availableStackRepoList: function () { var selectedStack = this.get('controller.selectedStack'); - return Em.isNone(selectedStack) ? [] : selectedStack.get('repositories'); + var availableStackRepos = this.get('controller.content.stacks').filter(function (item) { + return item.get('showAvailable') && item.get('stackNameVersion') == selectedStack.get('stackNameVersion') && item.get('id') != selectedStack.get('id'); + }); + return availableStackRepos.toArray().map(function (stack) { + return Em.Object.create({ + id: stack.get('id'), + repositoryVersion: stack.get('repositoryVersion'), + isSelected: false + }); + }); + }.property('controller.selectedStack'), + + selectRepoInList: function (event) { + this.get('controller.content.stacks').setEach('isSelected', false); + this.get('controller.content.stacks').findProperty('id', event.context.id).set('isSelected', true); + this.set('controller.latestSelectedPublicRepoId',event.context.id); + }, + + selectedServices: function () { + var selectedStack = this.get('controller.selectedStack'); + return Em.isNone(selectedStack) ? [] : selectedStack.get('stackServices').toArray().map(function (service) { + return Em.Object.create({ + displayName: service.get('displayName'), + version: service.get('latestVersion') + }); + }); }.property('controller.selectedStack'), - /** - * Verify if some repo has empty base-url - * @type {bool} - */ - invalidFormatUrlExist: Em.computed.someBy('allRepositories', 'invalidFormatError', true), /** * Disable submit button flag * @type {bool} */ - isSubmitDisabled: Em.computed.or('invalidFormatUrlExist', 'isNoOsChecked', 'invalidUrlExist', 'controller.content.isCheckInProgress'), + isSubmitDisabled: Em.computed.or('controller.content.isCheckInProgress'), /** * Enable error count badge * @type {bool} */ - showErrorsWarningCount: Em.computed.and('isSubmitDisabled', 'totalErrorCnt'), + showErrorsWarningCount: false, + totalErrorCnt: 0, + + viewRepositories: function () { + var self = this; + return App.ModalPopup.show({ + header: Em.I18n.t('installer.step1.usePublicRepo.viewRepos'), + primary: Em.I18n.t('common.save'), + onPrimary: function () { + self.retryRepoUrls(); + var modal = this; + setTimeout(function(){ + modal.hide(); + }, 1500); + }, + classNames: ['view-repositories-popup', 'sixty-percent-width-modal'], + bodyClass: Em.View.extend({ + templateName: require('templates/wizard/step1_viewRepositories'), + controllerBinding: 'App.router.wizardStep1Controller', + + operatingSystems: function () { + var selectedStack = this.get('controller.selectedStack'); + return Em.isNone(selectedStack) ? [] : selectedStack.get('operatingSystems'); + }.property('controller.selectedStack'), + + /** + * List of all repositories under selected stack operatingSystems + */ + allRepositories: function () { + var selectedStack = this.get('controller.selectedStack'); + return Em.isNone(selectedStack) ? [] : selectedStack.get('repositories'); + }.property('controller.selectedStack'), + + /** + * Verify if some repo has invalid base-url + * @type {bool} + */ + invalidFormatUrlExist: Em.computed.someBy('allRepositories', 'invalidFormatError', true), + /** + * Verify if some invalid repo-urls exist + * @type {bool} + */ + invalidUrlExist: Em.computed.someBy('allRepositories', 'validation', App.Repository.validation['INVALID']), + /** + * If all repo links are unchecked + * @type {bool} + */ + isNoOsChecked: Em.computed.everyBy('operatingSystems', 'isSelected', false), + + /** + * Overall errors count + * @type {number} + */ + updateTotalErrorCnt: function () { + var invalidFormatCnt = this.get('allRepositories').filterProperty('invalidFormatError').length; + var invalidCnt = this.get('allRepositories').filterProperty('validation', App.Repository.validation['INVALID']).length; + var cnt = 0; + if (this.get('isNoOsChecked')) { + cnt = 1; + } else if (invalidFormatCnt || invalidCnt) { + cnt = invalidFormatCnt + invalidCnt; + } + self.set('totalErrorCnt', cnt); + self.set('showErrorsWarningCount', cnt > 0); + }.observes('allRepositories', '[email protected]', 'isNoOsChecked', '[email protected]'), + + popoverView: Em.View.extend({ + tagName: 'i', + classNameBindings: ['repository.validation'], + attributeBindings: ['repository.errorTitle:title', 'repository.errorContent:data-content'], + didInsertElement: function () { + App.popover($(this.get('element')), {'trigger': 'hover'}); + } + }), + + /** + * Onclick handler for recheck repos urls. Used in Advanced Repository Options. + */ + retryRepoUrls: function () { + App.router.get('installerController').checkRepoURL(this.get('controller')); + }, + + /** + * Onclick handler for checkbox of each repo group + * @method updateByCheckbox + */ + updateByCheckbox: function () { + //upload to content + var operatingSystems = this.get('operatingSystems'); + if (operatingSystems) { + operatingSystems.forEach(function (os) { + if (!os.get('isSelected')) { + os.get('repositories').forEach(function (repository) { + repository.setProperties({ + baseUrl: repository.get('latestBaseUrl'), + validation: App.Repository.validation['PENDING'] + }); + }); + } else { + os.get('repositories').forEach(function (repository) { + if (this.get('controller.skipValidationChecked')) { + repository.set('validation', App.Repository.validation['PENDING']); + } + }, this); + } + }, this); + } + }.observes('[email protected]', 'controller.skipValidationChecked'), + + /** + * Onclick handler for undo action of each repo group + * @method undoGroupLocalRepository + * @param {object} event + */ + undoGroupLocalRepository: function (event) { + event.context.setProperties({ + baseUrl: event.context.get('latestBaseUrl'), + validation: App.Repository.validation['PENDING'] + }); + }, + + /** + * Handler for clear icon click + * @method clearGroupLocalRepository + * @param {object} event + */ + clearGroupLocalRepository: function (event) { + if (!event.context.get('isSelected')) { + return; + } + event.context.setProperties({ + baseUrl: '', + validation: App.Repository.validation['PENDING'] + }); + }, + + /** + * Handler when editing any repo BaseUrl + * @method editLocalRepository + */ + editLocalRepository: function () { + //upload to content + var repositories = this.get('allRepositories'); + repositories.forEach(function (repository) { + if (repository.get('lastBaseUrl') != repository.get('baseUrl')) { + repository.setProperties({ + lastBaseUrl: repository.get('baseUrl'), + validation: App.Repository.validation['PENDING'] + }); + } + }, this); + }.observes('[email protected]') + }) + }); + }, /** - * Verify if some invalid repo-urls exist - * @type {bool} + * Onclick handler for recheck repos urls. Used in Advanced Repository Options. */ - invalidUrlExist: Em.computed.someBy('allRepositories', 'validation', App.Repository.validation['INVALID']), + retryRepoUrls: function () { + App.router.get('installerController').checkRepoURL(this.get('controller')); + }, + /** - * If all repo links are unchecked - * @type {bool} + * =========================== Option "Use Local Repository" starts from here ================== */ - isNoOsChecked: Em.computed.everyBy('operatingSystems', 'isSelected', false), /** - * Overall errors count - * @type {number} + * Checkbox for use Public repo + * @type {Ember.Checkbox} */ - totalErrorCnt: function () { - var invalidFormatCnt = this.get('allRepositories').filterProperty('invalidFormatError').length; - var invalidCnt = this.get('allRepositories').filterProperty('validation', App.Repository.validation['INVALID']).length; - if (this.get('isNoOsChecked')) { - return 1; - } else if (invalidFormatCnt || invalidCnt) { - return invalidFormatCnt + invalidCnt; - } else { - return 0; + usePublicRepoRadioButton: Em.Checkbox.extend({ + tagName: 'input', + attributeBindings: [ 'type', 'checked' ], + classNames: [''], + checked: Em.computed.alias('controller.optionsToSelect.usePublicRepo.isSelected'), + type: 'radio', + + click: function () { + this.set('controller.optionsToSelect.usePublicRepo.isSelected', true); + this.set('controller.optionsToSelect.useLocalRepo.isSelected', false); + var latestSelectedPublicRepoId = this.get('controller.latestSelectedPublicRepoId'); + if (latestSelectedPublicRepoId) { + this.get('controller.content.stacks').setEach('isSelected', false); + this.get('controller.content.stacks').findProperty('id', latestSelectedPublicRepoId).set('isSelected', true); + } } - }.property('[email protected]', 'isNoOsChecked', '[email protected]'), + }), /** - * Checkbox for each stack + * Checkbox for use Public repo * @type {Ember.Checkbox} */ - stackRadioButton: Em.Checkbox.extend({ + useLocalRepoRadioButton: Em.Checkbox.extend({ tagName: 'input', attributeBindings: [ 'type', 'checked' ], - checked: Em.computed.alias('content.isSelected'), + classNames: [''], + checked: Em.computed.alias('controller.optionsToSelect.useLocalRepo.isSelected'), type: 'radio', click: function () { - this.get('controller.content.stacks').setEach('isSelected', false); - this.get('controller.content.stacks').findProperty('id', this.get('content.name').replace(' ', '-')).set('isSelected', true); + this.set('controller.optionsToSelect.useLocalRepo.isSelected', true); + this.set('controller.optionsToSelect.usePublicRepo.isSelected', false); + var latestSelectedLocalRepoId = this.get('controller.latestSelectedLocalRepoId'); + if (latestSelectedLocalRepoId) { + this.get('controller.content.stacks').setEach('isSelected', false); + this.get('controller.content.stacks').findProperty('id', latestSelectedLocalRepoId).set('isSelected', true); + } } }), /** - * Popover for repo-url error indicator - * @type {Em.View} + * Checkbox for Use local Repo > Upload VDF file + * @type {Ember.Checkbox} */ - popoverView: Em.View.extend({ - tagName: 'i', - classNameBindings: ['repository.validation'], - attributeBindings: ['repository.errorTitle:title', 'repository.errorContent:data-content'], - didInsertElement: function () { - App.popover($(this.get('element')), {'trigger': 'hover'}); + uploadFileRadioButton: Em.Checkbox.extend({ + tagName: 'input', + attributeBindings: [ 'type', 'checked' ], + classNames: [''], + checked: Em.computed.alias('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected'), + type: 'radio', + + click: function () { + this.set('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected', true); + this.set('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected', false); + this.set('controller.optionsToSelect.useLocalRepo.enterUrl.hasError', false); + this.set('controller.optionsToSelect.useLocalRepo.uploadFile.hasError', false); } }), /** - * Onclick handler for Config Group Header. Used to show/hide block - * @method onToggleBlock + * Checkbox for Use local Repo > Enter Url of VDF file + * @type {Ember.Checkbox} */ - onToggleBlock: function () { - this.$('.accordion-body').toggle('blind', 500); - this.set('isRLCollapsed', !this.get('isRLCollapsed')); - }, + enterUrlRadioButton: Em.Checkbox.extend({ + tagName: 'input', + attributeBindings: [ 'type', 'checked' ], + classNames: [''], + checked: Em.computed.alias('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected'), + type: 'radio', - /** - * Onclick handler for recheck repos urls. Used in Advanced Repository Options. - */ - retryRepoUrls: function () { - App.router.get('installerController').checkRepoURL(this.get('controller')); - }, + click: function () { + 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); + } + }), + /* + * Is File API available + * @type {bool} + */ + isFileApi: function () { + return window.File && window.FileReader && window.FileList; + }.property(), - /** - * Onclick handler for checkbox of each repo group - * @method updateByCheckbox - */ - updateByCheckbox: function () { - //upload to content - var operatingSystems = this.get('operatingSystems'); - if (operatingSystems) { - operatingSystems.forEach(function (os) { - if (!os.get('isSelected')) { - os.get('repositories').forEach(function (repository) { - repository.setProperties({ - baseUrl: repository.get('latestBaseUrl'), - validation: App.Repository.validation['PENDING'] - }); - }); - } else { - os.get('repositories').forEach(function (repository) { - if (this.get('controller.skipValidationChecked')) { - repository.set('validation', App.Repository.validation['PENDING']); - } - }, this); - } - }, this); + readInfoButtonDisabled: function () { + if (this.get('controller.optionsToSelect.useLocalRepo.isSelected')) { + if(this.get('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')) { + return !this.get('controller.optionsToSelect.useLocalRepo.uploadFile.file'); + } else if (this.get('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')) { + return !this.get('controller.optionsToSelect.useLocalRepo.enterUrl.url'); + } + } else { + return true; } - }.observes('[email protected]', 'controller.skipValidationChecked'), + }.property('controller.optionsToSelect.useLocalRepo.isSelected', 'controller.optionsToSelect.useLocalRepo.uploadFile.isSelected', + 'controller.optionsToSelect.useLocalRepo.uploadFile.file', 'controller.optionsToSelect.useLocalRepo.enterUrl.url'), + + operatingSystems: function () { + var selectedStack = this.get('controller.selectedStack'); + return Em.isNone(selectedStack) ? [] : selectedStack.get('operatingSystems'); + }.property('controller.selectedStack'), /** - * Onclick handler for undo action of each repo group - * @method undoGroupLocalRepository - * @param {object} event + * List of all repositories under selected stack operatingSystems */ - undoGroupLocalRepository: function (event) { - event.context.setProperties({ - baseUrl: event.context.get('latestBaseUrl'), - validation: App.Repository.validation['PENDING'] - }); - }, + allRepositories: function () { + var selectedStack = this.get('controller.selectedStack'); + return Em.isNone(selectedStack) ? [] : selectedStack.get('repositories'); + }.property('controller.selectedStack'), /** - * Handler for clear icon click - * @method clearGroupLocalRepository - * @param {object} event + * Verify if some repo has invalid base-url + * @type {bool} + */ + invalidFormatUrlExist: Em.computed.someBy('allRepositories', 'invalidFormatError', true), + /** + * Verify if some invalid repo-urls exist + * @type {bool} + */ + invalidUrlExist: Em.computed.someBy('allRepositories', 'validation', App.Repository.validation['INVALID']), + /** + * If all repo links are unchecked + * @type {bool} */ - clearGroupLocalRepository: function (event) { - if (!event.context.get('isSelected')) { - return; + isNoOsChecked: Em.computed.everyBy('operatingSystems', 'isSelected', false), + + popoverView: Em.View.extend({ + tagName: 'i', + classNameBindings: ['repository.validation'], + attributeBindings: ['repository.errorTitle:title', 'repository.errorContent:data-content'], + didInsertElement: function () { + App.popover($(this.get('element')), {'trigger': 'hover'}); } - event.context.setProperties({ - baseUrl: '', - validation: App.Repository.validation['PENDING'] - }); - }, + }), /** * Handler when editing any repo BaseUrl @@ -231,3 +433,27 @@ App.WizardStep1View = Em.View.extend({ }.observes('[email protected]') }); + + +App.VersionDefinitionFileUploader = Em.View.extend({ + template: Em.Handlebars.compile('<input type="file" {{bindAttr disabled="view.disabled"}} />'), + + classNames: ['vdf-input-indentation'], + + 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 (e) { + ////$('#sshKey').html(e.target.result); + self.get("controller").setVDFFile(e.target.result); + }; + })(file); + reader.readAsText(file); + } + } + +}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/test/controllers/installer_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/installer_test.js b/ambari-web/test/controllers/installer_test.js index 353129b..85f5613 100644 --- a/ambari-web/test/controllers/installer_test.js +++ b/ambari-web/test/controllers/installer_test.js @@ -41,7 +41,7 @@ describe('App.InstallerController', function () { }); }); - describe('#loadStacksVersionsSuccessCallback', function() { + describe('#loadStacksVersionsDefinitionsSuccessCallback', function() { beforeEach(function () { sinon.stub(App.store, 'commit', Em.K); }); @@ -50,10 +50,6 @@ describe('App.InstallerController', function () { }); it ('Correct data', function() { installerController.set('loadStacksRequestsCounter', 1); - installerController.loadStacksVersionsSuccessCallback(require('test/stack')); - expect(installerController.get('content.stacks.length')).to.equal(2); - expect(installerController.get('content.stacks').everyProperty('isSelected')).to.be.false; - expect(installerController.get('content.stacks').mapProperty('id')).to.eql(['HDP-2.1','HDP-1.3']); }); }); @@ -92,6 +88,7 @@ describe('App.InstallerController', function () { isSelected: true, reload: false, id: 'nn-cc', + stackNameVersion: 'nn-cc', repositories: Em.A([ Em.Object.create({ isSelected: true @@ -127,6 +124,7 @@ describe('App.InstallerController', function () { "isSelected": true, "reload": true, "id": "nn-cc", + "stackNameVersion": 'nn-cc', "repositories": [ { "isSelected": true @@ -323,25 +321,6 @@ describe('App.InstallerController', function () { }); }); - describe('#loadStacks', function() { - it ('Should resolve promise with true', function() { - installerController.set('content.stacks', Em.Object.create({ - length: 2 - })); - var res = installerController.loadStacks(); - res.then(function(data){ - expect(data).to.be.true; - }); - }); - it ('Should resolve promise with false', function() { - installerController.set('content.stacks', null); - var res = installerController.loadStacks(); - res.then(function(data){ - expect(data).to.be.false; - }); - }); - }); - describe('#setLowerStepsDisable', function() { beforeEach(function () { http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/test/mappers/stack_mapper_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/mappers/stack_mapper_test.js b/ambari-web/test/mappers/stack_mapper_test.js index 0bc0f3c..d5b7a19 100644 --- a/ambari-web/test/mappers/stack_mapper_test.js +++ b/ambari-web/test/mappers/stack_mapper_test.js @@ -22,256 +22,583 @@ require('mappers/stack_mapper'); require('models/stack'); require('models/operating_system'); require('models/repository'); +require('models/stack_version/service_simple'); describe('App.stackMapper', function () { describe("#map", function() { - var testData = { - items: [{ - "Versions" : { - "active" : true, - "min_upgrade_version" : null, - "parent_stack_version" : "1.3.3", - "stack_name" : "HDP", - "stack_version" : "1.3" + "items" : [ + { + "VersionDefinition" : { + "id" : 1, + "show_available": true, + "stack_name" : "HDP", + "stack_version" : "2.3", + "repository_version" : "2.3.4.0-3396", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3396.xml", + "release" : { + "build" : "3396", + "compatible_with" : "2.3.[0-3].0", + "notes" : "http://example.com", + "version" : "2.3.4.0" }, - "operating_systems" : [ + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2.3396" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3.3396" + ] + }, { - "OperatingSystems" : { - "os_type" : "redhat5", - "stack_name" : "HDP", - "stack_version" : "1.3" + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3.3396" + ] + } + ] + }, + "operating_systems" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", + "OperatingSystems" : { + "os_type" : "debian7", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } }, - "repositories" : [ - { - "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/1.x/updates/1.3.7.0", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/1.x/updates/1.3.7.0", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/1.x/updates/1.3.8.0", - "mirrors_list" : null, - "os_type" : "redhat5", - "repo_id" : "HDP-1.3", - "repo_name" : "HDP", - "stack_name" : "HDP", - "stack_version" : "1.3" - } - },{ - "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos5", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos5", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos5", - "mirrors_list" : null, - "os_type" : "redhat5", - "repo_id" : "HDP-UTILS-1.1.0.16", - "repo_name" : "HDP-UTILS", - "stack_name" : "HDP", - "stack_version" : "1.3" - } - }] - },{ - "OperatingSystems" : { - "os_type" : "redhat6", - "stack_name" : "HDP", - "stack_version" : "1.3" - }, "repositories" : [ - { - "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/1.x/updates/1.3.7.0", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/1.x/updates/1.3.7.0", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/1.x/updates/1.3.8.0", - "mirrors_list" : null, - "os_type" : "redhat6", - "repo_id" : "HDP-1.3", - "repo_name" : "HDP", - "stack_name" : "HDP", - "stack_version" : "1.3" - } - }, - { - "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos6", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos6", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos6", - "mirrors_list" : null, - "os_type" : "redhat6", - "repo_id" : "HDP-UTILS-1.1.0.16", - "repo_name" : "HDP-UTILS", - "stack_name" : "HDP", - "stack_version" : "1.3" - } - } - ] - }] - },{ - "Versions" : { - "active" : false, - "min_upgrade_version" : null, - "parent_stack_version" : null, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6", + "OperatingSystems" : { + "os_type" : "redhat6", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + } + ] + }, + + { + "VersionDefinition" : { + "id" : 2, "stack_name" : "HDP", - "stack_version" : "2.0.6" + "stack_version" : "2.3", + "show_available": true, + "repository_version" : "2.3.4.0-3397", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3397.xml", + "release" : { + "build" : "3397", + "compatible_with" : "2.3.[0-3].0", + "notes" : "http://example.com", + "version" : "2.3.4.0" + }, + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2-3397" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3-3397" + ] + }, + { + "name" : "HBase", + "display_name" : "HBase", + "comment" : "", + "versions" : [ + "1.7.3-3397" + ] + }, + { + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3-3397" + ] + }, + { + "name" : "Hive", + "display_name" : "Hive", + "comment" : "", + "versions" : [ + "1.1.0-3397" + ] + } + ] }, "operating_systems" : [ { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", "OperatingSystems" : { - "os_type" : "redhat5", + "os_type" : "debian7", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.0.6" + "stack_version" : "2.3" }, "repositories" : [ { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1", - "mirrors_list" : null, - "os_type" : "redhat5", - "repo_id" : "HDP-2.0.6", + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.3", "repo_name" : "HDP", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.0.6" + "stack_version" : "2.3" } }, { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5", - "mirrors_list" : null, - "os_type" : "redhat5", - "repo_id" : "HDP-UTILS-1.1.0.17", + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.0.6" + "stack_version" : "2.3" } - }] - }, { + } + ] + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6", "OperatingSystems" : { "os_type" : "redhat6", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.0.6" + "stack_version" : "2.3" }, "repositories" : [ { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3", "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1", - "mirrors_list" : null, + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397", + "mirrors_list" : "", "os_type" : "redhat6", - "repo_id" : "HDP-2.0.6", + "repo_id" : "HDP-2.3", "repo_name" : "HDP", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.0.6" + "stack_version" : "2.3" } - }, { + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6", - "mirrors_list" : null, + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "mirrors_list" : "", "os_type" : "redhat6", - "repo_id" : "HDP-UTILS-1.1.0.17", + "repo_id" : "HDP-UTILS-1.1.0.20", "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.0.6" + "stack_version" : "2.3" } - }] - }] - },{ - "Versions" : { - "active" : true, - "min_upgrade_version" : null, - "parent_stack_version" : null, + } + ] + } + ] + }, + + { + "VersionDefinition" : { + "id" : 5, "stack_name" : "HDP", - "stack_version" : "2.1" + "stack_version" : "2.3", + "show_available": true, + "repository_version" : "2.3.6.0-3646", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3646.xml", + "release" : { + "build" : "3646", + "compatible_with" : "2.3.[0-6].0", + "notes" : "http://example.com", + "version" : "2.3.6.0" + }, + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2-3646" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3-3646" + ] + }, + { + "name" : "HBase", + "display_name" : "HBase", + "comment" : "", + "versions" : [ + "1.7.3-3646" + ] + }, + { + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3-3646" + ] + }, + { + "name" : "Hive", + "display_name" : "Hive", + "comment" : "", + "versions" : [ + "1.1.0-3646" + ] + } + ] }, "operating_systems" : [ { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", "OperatingSystems" : { - "os_type" : "redhat5", + "os_type" : "debian7", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.1" + "stack_version" : "2.3" }, "repositories" : [ { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1", - "mirrors_list" : null, - "os_type" : "redhat5", - "repo_id" : "HDP-2.1", + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.3", "repo_name" : "HDP", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.1" + "stack_version" : "2.3" } }, { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5", - "mirrors_list" : null, - "os_type" : "redhat5", - "repo_id" : "HDP-UTILS-1.1.0.17", + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.1" + "stack_version" : "2.3" } - }] - }, { + } + ] + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6", "OperatingSystems" : { "os_type" : "redhat6", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.1" + "stack_version" : "2.3" }, "repositories" : [ { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3", "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1", - "mirrors_list" : null, + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646", + "mirrors_list" : "", "os_type" : "redhat6", - "repo_id" : "HDP-2.1", + "repo_id" : "HDP-2.3", "repo_name" : "HDP", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.1" + "stack_version" : "2.3" } - }, { + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", "Repositories" : { - "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6", - "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6", - "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6", - "mirrors_list" : null, + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "mirrors_list" : "", "os_type" : "redhat6", - "repo_id" : "HDP-UTILS-1.1.0.17", + "repo_id" : "HDP-UTILS-1.1.0.20", "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, "stack_name" : "HDP", - "stack_version" : "2.1" + "stack_version" : "2.3" } - }] - }] - }] - }; + } + ] + } + ] + }, + + { + "VersionDefinition" : { + "id" : 3, + "stack_name" : "HDP", + "stack_version" : "2.4", + "show_available": true, + "repository_version" : "2.4.0.0-169", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_169.xml", + "release" : { + "build" : "169", + "compatible_with" : "2.4.[0-3].0", + "notes" : "http://example.com", + "version" : "2.4.0.0" + }, + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3-169" + ] + }, + { + "name" : "HBase", + "display_name" : "HBase", + "comment" : "", + "versions" : [ + "1.7.3-169" + ] + }, + { + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3-169" + ] + }, + { + "name" : "Hive", + "display_name" : "Hive", + "comment" : "", + "versions" : [ + "1.1.0-169" + ] + }, + { + "name" : "MAPREDUCE2", + "display_name" : "MapReduce2", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "Slider", + "display_name" : "Slider", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "Pig", + "display_name" : "Pig", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "Sqoop", + "display_name" : "Sqoop", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + } + ] + }, + "operating_systems" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", + "OperatingSystems" : { + "os_type" : "debian7", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.4" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.4", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.4" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.4" + } + } + ] + } + ] + } + ] + }; beforeEach(function () { App.resetDsStoreTypeMap(App.Repository); App.resetDsStoreTypeMap(App.OperatingSystem); App.resetDsStoreTypeMap(App.Stack); + App.resetDsStoreTypeMap(App.ServiceSimple); sinon.stub(App.store, 'commit', Em.K); - App.stackMapper.map(testData); + App.stackMapper.map(testData.items, "VersionDefinition"); }); afterEach(function(){ App.store.commit.restore(); }); - it ('should map active Stack data', function() { - expect(App.Stack.find().get('length')).to.equal(2); + it ('should map all Stack data', function() { + expect(App.Stack.find().get('length')).to.equal(4); }); - it ('all stacks are active', function() { - expect(App.Stack.find().everyProperty('active')).to.equal(true); + it ('all stacks are showAvailable', function() { + expect(App.Stack.find().everyProperty('showAvailable')).to.equal(true); }); it ('no one stack is selected', function() { @@ -279,23 +606,34 @@ describe('App.stackMapper', function () { }); it ('stack ids are valid', function() { - expect(App.Stack.find().mapProperty('id')).to.eql(['HDP-2.1','HDP-1.3']); + expect(App.Stack.find().mapProperty('id')).to.eql( + ['HDP-2.4.0.0-169','HDP-2.3.6.0-3646', 'HDP-2.3.4.0-3397', 'HDP-2.3.4.0-3396']); }); - it ('4 OSes are mapped', function() { - expect(App.OperatingSystem.find().get('length')).to.equal(4); + it ('7 OSes are mapped', function() { + expect(App.OperatingSystem.find().get('length')).to.equal(7); }); it ('OSes have valid ids', function() { - expect(App.OperatingSystem.find().mapProperty('id')).to.eql(['HDP-2.1-redhat5', 'HDP-2.1-redhat6', 'HDP-1.3-redhat5', 'HDP-1.3-redhat6']); + expect(App.OperatingSystem.find().mapProperty('id')).to.eql( + ['HDP-2.4.0.0-169-debian7', 'HDP-2.3.6.0-3646-debian7', 'HDP-2.3.6.0-3646-redhat6', 'HDP-2.3.4.0-3397-debian7', + 'HDP-2.3.4.0-3397-redhat6', 'HDP-2.3.4.0-3396-debian7', 'HDP-2.3.4.0-3396-redhat6']); }); - - it ('8 repositories are mapped', function() { - expect(App.Repository.find().get('length')).to.equal(8); + + it ('14 repositories are mapped', function() { + expect(App.Repository.find().get('length')).to.equal(14); }); it ('Repositories ids are valid', function() { - expect(App.Repository.find().mapProperty('id')).to.eql(["HDP-2.1-redhat5-HDP-2.1", "HDP-2.1-redhat5-HDP-UTILS-1.1.0.17", "HDP-2.1-redhat6-HDP-2.1", "HDP-2.1-redhat6-HDP-UTILS-1.1.0.17", "HDP-1.3-redhat5-HDP-1.3", "HDP-1.3-redhat5-HDP-UTILS-1.1.0.16", "HDP-1.3-redhat6-HDP-1.3", "HDP-1.3-redhat6-HDP-UTILS-1.1.0.16"]); + expect(App.Repository.find().mapProperty('id')).to.eql( + ['HDP-2.4.0.0-169-debian7-HDP-2.4', 'HDP-2.4.0.0-169-debian7-HDP-UTILS-1.1.0.20', + 'HDP-2.3.6.0-3646-debian7-HDP-2.3', 'HDP-2.3.6.0-3646-debian7-HDP-UTILS-1.1.0.20', + 'HDP-2.3.6.0-3646-redhat6-HDP-2.3','HDP-2.3.6.0-3646-redhat6-HDP-UTILS-1.1.0.20', + 'HDP-2.3.4.0-3397-debian7-HDP-2.3','HDP-2.3.4.0-3397-debian7-HDP-UTILS-1.1.0.20', + 'HDP-2.3.4.0-3397-redhat6-HDP-2.3', 'HDP-2.3.4.0-3397-redhat6-HDP-UTILS-1.1.0.20', + 'HDP-2.3.4.0-3396-debian7-HDP-2.3', 'HDP-2.3.4.0-3396-debian7-HDP-UTILS-1.1.0.20', + 'HDP-2.3.4.0-3396-redhat6-HDP-2.3', 'HDP-2.3.4.0-3396-redhat6-HDP-UTILS-1.1.0.20' + ]); }); }); }); http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js index 9a42c42..70d182c 100644 --- a/ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js +++ b/ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js @@ -1,4 +1,4 @@ -/** + /** * 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 @@ -23,29 +23,6 @@ require('views/main/admin/stack_upgrade/services_view'); describe('App.MainAdminStackServicesView', function () { var view = App.MainAdminStackServicesView.create(); - describe("#services", function () { - before(function () { - sinon.stub(App.StackService, 'find').returns([ - Em.Object.create({serviceName: 'S1', isInstalled: false}), - Em.Object.create({serviceName: 'S2', isInstalled: false}) - ]); - sinon.stub(App.Service, 'find').returns([ - Em.Object.create({serviceName: 'S1'}) - ]); - }); - after(function () { - App.StackService.find.restore(); - App.Service.find.restore(); - }); - it("`isInstalled`-flag depends on App.Service", function () { - view.propertyDidChange('services'); - expect(view.get('services')).to.eql([ - Em.Object.create({serviceName: 'S1', isInstalled: true}), - Em.Object.create({serviceName: 'S2', isInstalled: false}) - ]); - }); - }); - describe("#goToAddService()" , function() { var mock = Em.Object.create({ checkAndStartKerberosWizard: Em.K, http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/test/views/wizard/step1_view_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/wizard/step1_view_test.js b/ambari-web/test/views/wizard/step1_view_test.js index 0dacad8..2665c21 100644 --- a/ambari-web/test/views/wizard/step1_view_test.js +++ b/ambari-web/test/views/wizard/step1_view_test.js @@ -28,20 +28,18 @@ function getView() { describe('App.WizardStep1View', function () { - App.TestAliases.testAsComputedAnd(getView(), 'showErrorsWarningCount', ['isSubmitDisabled', 'totalErrorCnt']); - describe('#operatingSystems', function () { beforeEach(function () { sinon.stub(App.Stack, 'find', function () { return [ Ember.Object.create({ - id: 'HDP-1.3', + id: 'HDP-1.3-1234', stackName: 'HDP', stackVersion: '1.3', active: true, operatingSystems: [ Ember.Object.create({ - id: 'HDP-1.3-redhat5', + id: 'HDP-1.3-1234-redhat5', osType: 'redhat5', isSelected: false, repositories: [ @@ -56,7 +54,7 @@ describe('App.WizardStep1View', function () { ] }), Ember.Object.create({ - id: 'HDP-1.3-redhat6', + id: 'HDP-1.3-1234-redhat6', osType: 'redhat6', isSelected: false, repositories: [ @@ -154,25 +152,9 @@ describe('App.WizardStep1View', function () { App.Stack.find.restore(); }); - it('should create empty array if there is no stacks', function () { - controller = App.WizardStep1Controller.create({ - content: { - stacks: [] - }, - selectedStack: [] - }); - view = App.WizardStep1View.create(); - view.reopen({ - controller: controller - }); - expect(view.get('allRepositories.length')).to.equal(0); - expect(view.get('operatingSystems.length')).to.equal(0); - }); - describe('should create repo groups from repo list', function () { var repositories; - beforeEach(function () { controller = App.WizardStep1Controller.create({ content: { @@ -184,7 +166,6 @@ describe('App.WizardStep1View', function () { view.set('$', function () { return Em.Object.create({hide: Em.K, toggle: Em.K}); }); - repositories = view.get('allRepositories'); }); @@ -242,28 +223,15 @@ describe('App.WizardStep1View', function () { App.TestAliases.testAsComputedEveryBy(getView(), 'isNoOsChecked', 'operatingSystems', 'isSelected', false); - App.TestAliases.testAsComputedOr(getView(), 'isSubmitDisabled', ['invalidFormatUrlExist', 'isNoOsChecked', 'invalidUrlExist', 'controller.content.isCheckInProgress']); - - describe('#stacks', function () { + App.TestAliases.testAsComputedOr(getView(), 'isSubmitDisabled', ['controller.content.isCheckInProgress']); + describe('#stackNames', function () { var tests = Em.A([ { - m: 'Stack with 2 HDP', - stacks: [ - Em.Object.create({isSelected: true, id: 'HDP-2.0.1'}), - Em.Object.create({isSelected: false, id: 'HDP-1.3.3'}) - ], - e: { - names: ['HDP 2.0.1', 'HDP 1.3.3'], - selected: [true, false] - } - }, - { m: 'No HDP', stacks: [], e: { - names: [], - selected: [] + names: [] } } ]); @@ -271,9 +239,8 @@ describe('App.WizardStep1View', function () { tests.forEach(function (test) { it(test.m, function () { view.set('controller.content.stacks', test.stacks); - var stacks = view.get('stacks'); + var stacks = view.get('stackNames'); expect(stacks.mapProperty('name')).to.eql(test.e.names); - expect(stacks.mapProperty('isSelected')).to.eql(test.e.selected); }); }); @@ -283,255 +250,6 @@ describe('App.WizardStep1View', function () { App.TestAliases.testAsComputedSomeBy(getView(), 'invalidFormatUrlExist', 'allRepositories', 'invalidFormatError', true); - describe('#totalErrorCnt', function () { - var tests = Em.A([ - { - allRepositories: [ - {} - ], - m: 'isNoOsChecked', - isNoOsChecked: true, - e: 1 - }, - { - allRepositories: [ - {'invalidFormatError': true}, - {'invalidFormatError': true} - ], - isNoOsChecked: false, - m: 'two with empty-error', - e: 2 - }, - { - allRepositories: [ - {'validation': 'icon-exclamation-sign'}, - {'validation': 'icon-exclamation-sign'} - ], - isNoOsChecked: false, - m: 'two with validation="icon-exclamation-sign"', - e: 2 - }, - { - allRepositories: [ - {'invalidFormatError': true, 'validation': 'icon-exclamation-sign'}, - {'invalidFormatError': true, 'validation': 'icon-exclamation-sign'} - ], - isNoOsChecked: false, - m: 'two with empty-error, two with validation="icon-exclamation-sign"', - e: 4 - }, - { - allRepositories: [ - {} - ], - isNoOsChecked: false, - m: 'no errors/warnings etc', - e: 0 - } - ]); - tests.forEach(function (test) { - it(test.m, function () { - view = App.WizardStep1View.create(); - view.reopen({ - isNoOsChecked: test.isNoOsChecked, - allRepositories: test.allRepositories - }); - expect(view.get('totalErrorCnt')).to.equal(test.e); - }); - }); - }); - - describe('#didInsertElement', function () { - - beforeEach(function () { - sinon.stub($.fn, 'tooltip', Em.K); - }); - - afterEach(function () { - $.fn.tooltip.restore(); - }); - - it('should create tooltip', function () { - view.set('isRLCollapsed', false); - view.didInsertElement(); - expect($.fn.tooltip.calledOnce).to.equal(true); - }); - }); - - describe('#stackRadioButton', function () { - - var v; - beforeEach(function () { - v = view.get('stackRadioButton').create({ - content: Em.Object.create({ - name: '' - }), - controller: Em.Object.create({ - content: Em.Object.create({ - stacks: [] - }) - }) - }); - }); - - describe('#isSelected', function () { - it('should be equal content.isSelected', function () { - v.set('content.isSelected', true); - expect(v.get('checked')).to.equal(true); - v.set('content.isSelected', false); - expect(v.get('checked')).to.equal(false); - }); - }); - - describe('#click', function () { - it('should select proper stack', function () { - v.set('controller.content.stacks', Em.A([Em.Object.create({id: 'n-1'}), Em.Object.create({id: 'n-2'}), Em.Object.create({id: 'n-3'})])); - v.set('content.name', 'n 2'); - v.click(); - expect(v.get('controller.content.stacks').getEach('isSelected')).to.eql([false, true, false]); - }); - }); - - }); - - describe('#popoverView', function () { - - var v; - beforeEach(function () { - v = view.get('popoverView').create(); - sinon.stub(App, 'popover', Em.K); - view = App.WizardStep1View.create({'controller': controller}); - view.set('$', function () { - return Em.Object.create({hide: Em.K, toggle: Em.K}); - }); - }); - - afterEach(function () { - App.popover.restore(); - }); - - describe('#didInsertElement', function () { - it('should create popover', function () { - v.didInsertElement(); - expect(App.popover.calledOnce).to.equal(true); - }); - }); - - }); - - describe('#onToggleBlock', function () { - - it('should toggle isRLCollapsed', function () { - view.set('isRLCollapsed', true); - view.onToggleBlock(); - expect(view.get('isRLCollapsed')).to.equal(false); - view.onToggleBlock(); - expect(view.get('isRLCollapsed')).to.equal(true); - }); - }); - - describe('#updateByCheckbox', function () { - - var operatingSystems = [ - Em.Object.create({ - name: 'redhat5', - isSelected: false, - repositories: [Em.Object.create({ - id: 'id', - osType: 'redhat5', - baseUrl: 'baseUrl', - latestBaseUrl: 'latestBaseUrl', - validation: '', - isSelected: false - }) - ] - }) - ]; - - var ctrl = { - content: { - stacks: [ - Em.Object.create({ - isSelected: true, - operatingSystems: [ - Em.Object.create({ - id: 'id', - osType: 'redhat5', - baseUrl: 'baseUrl', - latestBaseUrl: 'latestBaseUrl', - validation: '', - isSelected: false - }) - ] - }) - ] - }, - selectedStack: Em.Object.create({ - isSelected: true, - operatingSystems: [ - Em.Object.create({ - id: 'id', - osType: 'redhat5', - baseUrl: 'baseUrl', - latestBaseUrl: 'latestBaseUrl', - validation: '', - isSelected: true - }) - ] - }), - skipValidationChecked: true - }; - - it('target group isn\'t isSelected', function () { - view.reopen({ - operatingSystems: operatingSystems, - controller: ctrl - }); - view.updateByCheckbox(); - var targetGroup = view.get('operatingSystems.firstObject.repositories.firstObject'); - expect(targetGroup.get('baseUrl')).to.equal('latestBaseUrl'); - expect(targetGroup.get('latestBaseUrl')).to.equal('latestBaseUrl'); - expect(targetGroup.get('validation')).to.be.empty; - - }); - - it('target group is isSelected, skipValidationisSelected = true', function () { - ctrl.content.stacks[0].operatingSystems[0].selected = true; - operatingSystems[0].set('isSelected', true); - view.reopen({ - operatingSystems: operatingSystems, - controller: ctrl - }); - view.updateByCheckbox(); - var targetGroup = view.get('operatingSystems.firstObject.repositories.firstObject'); - expect(targetGroup.get('validation')).to.be.empty; - }); - }); - - describe('#clearGroupLocalRepository', function () { - var context = {'group-number': 0, id: 'HDP-redhat5', repoId: 'HDP-redhat5', baseUrl: 'baseUrl', validation: 'validation'}; - it('should empty base url and validation', function () { - var event = {context: Em.Object.create(context, {isSelected: true})}; - view.clearGroupLocalRepository(event); - expect(event.context.get('baseUrl')).to.be.empty; - expect(event.context.get('validation')).to.be.empty; - }); - it('should do nothing if corresponding OS is not selected', function () { - var event = {context: Em.Object.create(context, {isSelected: false})}; - view.clearGroupLocalRepository(event); - expect(event.context.get('baseUrl')).to.equal('baseUrl'); - expect(event.context.get('validation')).to.equal('validation'); - }); - }); - - describe('#undoGroupLocalRepository', function () { - it('should reset base url and validation', function () { - var event = {context: Em.Object.create({'group-number': 0, id: 'HDP-redhat5', repoId: 'HDP-redhat5', latestBaseUrl: 'latestBaseUrl', validation: 'validation'})}; - view.undoGroupLocalRepository(event); - expect(event.context.get('baseUrl')).to.equal(event.context.get('latestBaseUrl')); - expect(event.context.get('validation')).to.be.empty; - }); - }); describe('#editLocalRepository', function () {
