Return-Path: X-Original-To: apmail-ambari-commits-archive@www.apache.org Delivered-To: apmail-ambari-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 63F9011ECE for ; Wed, 9 Jul 2014 04:29:45 +0000 (UTC) Received: (qmail 18178 invoked by uid 500); 9 Jul 2014 04:29:45 -0000 Delivered-To: apmail-ambari-commits-archive@ambari.apache.org Received: (qmail 18069 invoked by uid 500); 9 Jul 2014 04:29:45 -0000 Mailing-List: contact commits-help@ambari.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: ambari-dev@ambari.apache.org Delivered-To: mailing list commits@ambari.apache.org Received: (qmail 18044 invoked by uid 99); 9 Jul 2014 04:29:45 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 09 Jul 2014 04:29:45 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id D2E2B9A8D09; Wed, 9 Jul 2014 04:29:44 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: yusaku@apache.org To: commits@ambari.apache.org Date: Wed, 09 Jul 2014 04:29:45 -0000 Message-Id: <4d5e06c6f06247db90b0cf5e3f36afcd@git.apache.org> In-Reply-To: <8a97aef08eed45c890d2466c4868f65e@git.apache.org> References: <8a97aef08eed45c890d2466c4868f65e@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [2/6] AMBARI-6430. Make new services pluggable to the wizard. (jaimin via yusaku) http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/app/views/main/service/item.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/service/item.js b/ambari-web/app/views/main/service/item.js index 4ee6a64..15d9835 100644 --- a/ambari-web/app/views/main/service/item.js +++ b/ambari-web/app/views/main/service/item.js @@ -30,7 +30,7 @@ App.MainServiceItemView = Em.View.extend({ var serviceName = service.get('serviceName'); var disableRefreshConfgis = !service.get('isRestartRequired'); - if (service.get('isClientsOnly')) { + if (this.get('controller.isClientsOnlyService')) { if (serviceName != 'TEZ') { options.push({action: 'runSmokeTest', cssClass: 'icon-thumbs-up-alt', 'label': Em.I18n.t('services.service.actions.run.smoke')}); } @@ -84,13 +84,13 @@ App.MainServiceItemView = Em.View.extend({ options.push({action:'turnOnOffPassive', cssClass: 'icon-medkit', context:requestLabel, 'label':passiveLabel , disabled: false}); } return options; - }.property('controller.content', 'controller.isStopDisabled'), + }.property('controller.content', 'controller.isStopDisabled','controller.isClientsOnlyService'), isMaintenanceActive: function() { return this.get('maintenance').length !== 0; }.property('maintenance'), - hasConfigTab: function(){ - return this.get("controller.content.isConfigurable"); - }.property('controller.content.isConfigurable'), + hasConfigTab: function() { + return !App.get('services.noConfigTypes').concat('HCATALOG').contains('controller.content.serviceName'); + }.property('controller.content.serviceName','App.services.noConfigTypes'), didInsertElement: function () { this.get('controller').setStartStopState(); http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/app/views/main/service/menu.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/service/menu.js b/ambari-web/app/views/main/service/menu.js index de81134..562ddf0 100644 --- a/ambari-web/app/views/main/service/menu.js +++ b/ambari-web/app/views/main/service/menu.js @@ -26,7 +26,8 @@ App.MainServiceMenuView = Em.CollectionView.extend({ var items = App.router.get('mainServiceController.content').filter(function(item){ return !this.get('disabledServices').contains(item.get('id')); }, this); - return misc.sortByOrder(App.Service.servicesSortOrder, items); + var stackServices = App.StackService.find().mapProperty('serviceName'); + return misc.sortByOrder(stackServices, items); }.property('App.router.mainServiceController.content', 'App.router.mainServiceController.content.length'), didInsertElement:function () { @@ -73,12 +74,16 @@ App.MainServiceMenuView = Em.CollectionView.extend({ return this.get('content.criticalAlertsCount'); }.property('content.criticalAlertsCount'), + isConfigurable: function () { + return !App.get('services.noConfigTypes').concat('HCATALOG').contains('content.serviceName'); + }.property('App.services.noConfigTypes','content.serviceName'), + link: function() { var stateName = (['summary','configs'].contains(App.router.get('currentState.name'))) - ? this.get('content.isConfigurable') ? App.router.get('currentState.name') : 'summary' + ? this.get('isConfigurable') ? App.router.get('currentState.name') : 'summary' : 'summary'; return "#/main/services/" + this.get('content.id') + "/" + stateName; - }.property('App.router.currentState.name', 'parentView.activeServiceId'), + }.property('App.router.currentState.name', 'parentView.activeServiceId', 'isConfigurable'), refreshRestartRequiredMessage: function() { var restarted, componentsCount, hostsCount, message, tHosts, tComponents; @@ -115,7 +120,8 @@ App.TopNavServiceMenuView = Em.CollectionView.extend({ var items = App.router.get('mainServiceController.content').filter(function(item){ return !this.get('disabledServices').contains(item.get('id')); }, this); - return misc.sortByOrder(App.Service.servicesSortOrder, items); + var stackServices = App.StackService.find().mapProperty('serviceName'); + return misc.sortByOrder(stackServices, items); }.property('App.router.mainServiceController.content', 'App.router.mainServiceController.content.length'), didInsertElement:function () { @@ -160,12 +166,16 @@ App.TopNavServiceMenuView = Em.CollectionView.extend({ return this.get('content.criticalAlertsCount'); }.property('content.criticalAlertsCount'), + isConfigurable: function () { + return !App.get('services.noConfigTypes').concat('HCATALOG').contains('content.serviceName'); + }.property('App.services.noConfigTypes','content.serviceName'), + link: function() { var stateName = (['summary','configs'].contains(App.router.get('currentState.name'))) - ? this.get('content.isConfigurable') ? App.router.get('currentState.name') : 'summary' + ? this.get('isConfigurable') ? App.router.get('currentState.name') : 'summary' : 'summary'; return "#/main/services/" + this.get('content.id') + "/" + stateName; - }.property('App.router.currentState.name', 'parentView.activeServiceId'), + }.property('App.router.currentState.name', 'parentView.activeServiceId','isConfigurable'), refreshRestartRequiredMessage: function() { var restarted, componentsCount, hostsCount, message, tHosts, tComponents; http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/app/views/main/service/service.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/service/service.js b/ambari-web/app/views/main/service/service.js index b8b6c42..7f48ac9 100644 --- a/ambari-web/app/views/main/service/service.js +++ b/ambari-web/app/views/main/service/service.js @@ -52,7 +52,8 @@ App.MainDashboardServiceHealthView = Em.View.extend({ }, healthStatus: function () { - if (this.get('service.isClientsOnly')) { + var isClientOnlyService = App.get('services.clientOnly').contains(this.get('service.serviceName')); + if (isClientOnlyService) { return 'icon-laptop'; } if (this.get('service.passiveState') != 'OFF') { @@ -82,7 +83,7 @@ App.MainDashboardServiceHealthView = Em.View.extend({ } return 'health-status-' + status; - }.property('service.healthStatus','service.passiveState','service.isClientsOnly'), + }.property('service.healthStatus','service.passiveState','service.serviceName'), healthStatusClass: function () { switch (this.get('healthStatus')) { http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/app/views/wizard/step5_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/wizard/step5_view.js b/ambari-web/app/views/wizard/step5_view.js index 2a5fb34..c78cb4c 100644 --- a/ambari-web/app/views/wizard/step5_view.js +++ b/ambari-web/app/views/wizard/step5_view.js @@ -17,6 +17,7 @@ */ var App = require('app'); +var stringUtils = require('utils/string_utils'); App.WizardStep5View = Em.View.extend({ @@ -33,14 +34,30 @@ App.WizardStep5View = Em.View.extend({ didInsertElement: function () { this.get('controller').loadStep(); - } + this.setCoHostedComponentText(); + }, + + coHostedComponentText: '', + + setCoHostedComponentText: function () { + var coHostedComponents = App.StackServiceComponent.find().filterProperty('isOtherComponentCoHosted').filterProperty('stackService.isSelected'); + var coHostedComponentsText = ''; + coHostedComponents.forEach(function (serviceComponent, index) { + var coHostedComponentsDisplayNames = serviceComponent.get('coHostedComponents').map(function (item) { + return App.StackServiceComponent.find().findProperty('componentName', item).get('displayName'); + }); + var componentTextArr = [serviceComponent.get('displayName')].concat(coHostedComponentsDisplayNames); + coHostedComponents[index] = stringUtils.getFormattedStringFromArray(componentTextArr); + coHostedComponentsText += '
' + Em.I18n.t('installer.step5.body.coHostedComponents').format(coHostedComponents[index]); + }, this); + this.set('coHostedComponentText', coHostedComponentsText); + } }); App.InputHostView = Em.TextField.extend(App.SelectHost, { attributeBindings: ['disabled'], - /** * Saved typeahead component * @type {$} @@ -162,7 +179,7 @@ App.RemoveControlView = Em.View.extend({ * Index for multiple component * @type {number} */ - zId: null, + serviceComponentId: null, /** * Current component name @@ -182,6 +199,6 @@ App.RemoveControlView = Em.View.extend({ * @method click */ click: function () { - this.get('controller').removeComponent(this.get('componentName'), this.get("zId")); + this.get('controller').removeComponent(this.get('componentName'), this.get("serviceComponentId")); } -}); \ No newline at end of file +}); http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/app/views/wizard/step6_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/wizard/step6_view.js b/ambari-web/app/views/wizard/step6_view.js index 39c37aa..c700565 100644 --- a/ambari-web/app/views/wizard/step6_view.js +++ b/ambari-web/app/views/wizard/step6_view.js @@ -53,14 +53,9 @@ App.WizardStep6View = App.TableView.extend({ */ didInsertElement: function () { var controller = this.get('controller'); - if (controller.get('isMasters')) { - this.set('label', Em.I18n.t('installer.step6.addHostWizard.body')); - this.set('title', Em.I18n.t('installer.step5.header')); - } - else { - this.set('title', Em.I18n.t('installer.step6.header')); - this.setLabel(); - } + this.set('title', Em.I18n.t('installer.step6.header')); + this.setLabel(); + App.tooltip($('body'), {selector: '[rel=tooltip]'}); controller.loadStep(); }, @@ -113,8 +108,6 @@ App.WizardStep6HostView = Em.View.extend({ * @method didInsertElement */ didInsertElement: function () { - if(this.get('controller.isMasters')) return; - var components = this.get('controller').getMasterComponentsForHost(this.get('host.hostName')); if (components && components.length > 0) { components = components.map(function (_component) { http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/test/app_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/app_test.js b/ambari-web/test/app_test.js index 3b0565b..a5b4d76 100644 --- a/ambari-web/test/app_test.js +++ b/ambari-web/test/app_test.js @@ -92,14 +92,15 @@ describe('#App', function() { var globalProperties = require('data/HDP2/global_properties'); var siteProperties = require('data/HDP2/site_properties'); + var reviewConfigs = require('data/review_configs'); var disableResult = App.disableComponent(testableComponent); + describe('#disableComponent()', function() { // copy var _globalProperties = $.extend({}, globalProperties); var _siteProperties = $.extend({}, siteProperties); - var _reviewConfigs = JSON.parse(JSON.stringify(reviewConfigs)); describe('result validation', function() { @@ -139,12 +140,6 @@ describe('#App', function() { expect(_siteProperties.configProperties.mapProperty('name')).to.not.include.members(expectedInfo.properties.site_properties); }); - it('should remove review config for component', function() { - var reviewConfig = _reviewConfigs.findProperty('config_name', 'services') - .config_value.findProperty('service_name', testableComponent.get('serviceName')) - .service_components.mapProperty('component_name'); - expect(reviewConfig).to.not.include(expectedInfo.reviewConfigs.component_name); - }); }); }); @@ -158,13 +153,6 @@ describe('#App', function() { it('should add site properties of component', function() { expect(siteProperties.configProperties.mapProperty('name')).to.include.members(expectedInfo.properties.site_properties); }); - - it('should add review config for component', function() { - var reviewConfig = reviewConfigs.findProperty('config_name', 'services') - .config_value.findProperty('service_name', testableComponent.get('serviceName')) - .get('service_components').mapProperty('component_name'); - expect(reviewConfig).to.include(expectedInfo.reviewConfigs.component_name); - }); }); modelSetup.restoreStackVersion(this); http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/test/controllers/main/host/add_controller_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/host/add_controller_test.js b/ambari-web/test/controllers/main/host/add_controller_test.js index 6ca3f0d..4bdeae3 100644 --- a/ambari-web/test/controllers/main/host/add_controller_test.js +++ b/ambari-web/test/controllers/main/host/add_controller_test.js @@ -119,30 +119,30 @@ describe('App.AddHostController', function () { { title: 'Service is not in stack', services: [ - { + Em.Object.create({ serviceName: 'TEST', isSelected: true - } + }) ], result: [] }, { title: 'Service does not have any clients', services: [ - { + Em.Object.create({ serviceName: 'GANGLIA', isSelected: true - } + }) ], result: [] }, { title: 'StackServiceComponent is empty', services: [ - { + Em.Object.create({ serviceName: 'HDFS', isSelected: true - } + }) ], result: [] } @@ -160,10 +160,10 @@ describe('App.AddHostController', function () { it('HDFS has uninstalled client', function () { modelSetup.setupStackServiceComponent(); var services = [ - { + Em.Object.create({ serviceName: 'HDFS', isSelected: true - } + }) ]; controller.set('content.services', services); controller.saveClients(); @@ -186,10 +186,10 @@ describe('App.AddHostController', function () { it('HDFS has installed client', function () { modelSetup.setupStackServiceComponent(); var services = [ - { + Em.Object.create({ serviceName: 'HDFS', isSelected: true - } + }) ]; App.store.load(App.HostComponent, { id: 'HDFS_CLIENT_host1', http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/test/controllers/main/host/details_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/host/details_test.js b/ambari-web/test/controllers/main/host/details_test.js index 624af19..058ac57 100644 --- a/ambari-web/test/controllers/main/host/details_test.js +++ b/ambari-web/test/controllers/main/host/details_test.js @@ -913,6 +913,7 @@ describe('App.MainHostDetailsController', function () { controller.doDecommissionRegionServer.restore(); controller.doDecommission.restore(); controller.showBackgroundOperationsPopup.restore(); + controller.doDecommissionRegionServer.restore(); }); it('HDFS service', function () { http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/test/controllers/wizard/step4_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/wizard/step4_test.js b/ambari-web/test/controllers/wizard/step4_test.js index a1d9ed5..71c417b 100644 --- a/ambari-web/test/controllers/wizard/step4_test.js +++ b/ambari-web/test/controllers/wizard/step4_test.js @@ -30,7 +30,7 @@ describe('App.WizardStep4Controller', function () { var controller = App.WizardStep4Controller.create(); services.forEach(function(serviceName, index){ controller.pushObject(Ember.Object.create({ - 'serviceName':serviceName, 'isSelected': true, 'canBeSelected': true, 'isInstalled': false, 'isDisabled': 'HDFS' === serviceName + 'serviceName':serviceName, 'isSelected': true, 'canBeSelected': true, 'isInstalled': false, 'isDisabled': 'HDFS' === serviceName, isDFS: 'HDFS' === serviceName })); }); @@ -78,145 +78,14 @@ describe('App.WizardStep4Controller', function () { }); describe('#selectMinimum()', function () { - it('should set isSelected false for all not disabled services', function () { + it('should set isSelected false for all services', function () { controller.setEach('isSelected', true); controller.selectMinimum(); - expect(controller.findProperty('serviceName', 'HDFS').get('isSelected')).to.equal(true); + expect(controller.findProperty('serviceName', 'HDFS').get('isSelected')).to.equal(false); expect(controller.filterProperty('isDisabled', false).everyProperty('isSelected', false)).to.equal(true); }); }); - describe('#needToAddMapReduce()', function () { - it('should return true if Pig is selected and MapReduce is not selected', function () { - controller.setEach('isSelected', false); - controller.findProperty('serviceName', 'PIG').set('isSelected', true); - expect(controller.needToAddMapReduce()).to.equal(true); - }); - - it('should return true if Oozie is selected and MapReduce is not selected', function () { - controller.setEach('isSelected', false); - controller.findProperty('serviceName', 'OOZIE').set('isSelected', true); - expect(controller.needToAddMapReduce()).to.equal(true); - }); - - it('should return true if Hive is selected and MapReduce is not selected', function () { - controller.setEach('isSelected', false); - controller.findProperty('serviceName', 'HIVE').set('isSelected', true); - expect(controller.needToAddMapReduce()).to.equal(true); - }); - - it('should return false if MapReduce is selected or Pig, Oozie and Hive are not selected', function () { - controller.findProperty('serviceName', 'MAPREDUCE').set('isSelected', true); - expect(controller.needToAddMapReduce()).to.equal(false); - controller.setEach('isSelected', false); - expect(controller.needToAddMapReduce()).to.equal(false); - }); - }); - - describe('#needToAddYarnMapReduce2()', function () { - it('should return true if Pig is selected and YARN+MapReduce2 is not selected', function () { - controller.setEach('isSelected', false); - controller.findProperty('serviceName', 'PIG').set('isSelected', true); - expect(controller.needToAddYarnMapReduce2()).to.equal(true); - }); - - it('should return true if Oozie is selected and YARN+MapReduce2 is not selected', function () { - controller.setEach('isSelected', false); - controller.findProperty('serviceName', 'OOZIE').set('isSelected', true); - expect(controller.needToAddYarnMapReduce2()).to.equal(true); - }); - - it('should return true if Hive is selected and YARN+MapReduce2 is not selected', function () { - controller.setEach('isSelected', false); - controller.findProperty('serviceName', 'HIVE').set('isSelected', true); - expect(controller.needToAddYarnMapReduce2()).to.equal(true); - }); - - it('should return false if YARN+MapReduce2 is selected or Pig, Oozie and Hive are not selected', function () { - controller.findProperty('serviceName', 'YARN').set('isSelected', true); - expect(controller.needToAddYarnMapReduce2()).to.equal(false); - controller.setEach('isSelected', false); - expect(controller.needToAddYarnMapReduce2()).to.equal(false); - }); - }); - - describe('#needToAddZooKeeper()', function () { - beforeEach(function() { - ajax_send = App.ajax.send; - App.ajax.send = function() {}; - }); - - afterEach(function() { - App.ajax.send = ajax_send; - }); - var originalStackVersion = App.get('currentStackVersion'); - - it('should return false if ZOOKEEPER is selected and Hadoop version above 2', function () { - App.set('currentStackVersion', 'HDP-2.1.1'); - controller.findProperty('serviceName', 'ZOOKEEPER').set('isSelected', true); - expect(controller.needToAddZooKeeper()).to.equal(false); - }); - it('should return true if ZOOKEEPER is not selected and Hadoop version above 2', function () { - controller.findProperty('serviceName', 'ZOOKEEPER').set('isSelected', false); - expect(controller.needToAddZooKeeper()).to.equal(true); - }); - it('should return false if none of the HBASE, HIVE, WEBHCAT, STORM is selected and Hadoop version below 2', function () { - App.set('currentStackVersion', 'HDP-1.3.0'); - expect(controller.needToAddZooKeeper()).to.equal(false); - }); - it('should return true if HBASE is not selected and Hadoop version below 2', function () { - controller.findProperty('serviceName', 'HBASE').set('isSelected', true); - expect(controller.needToAddZooKeeper()).to.equal(true); - }); - it('should return true if HBASE, HIVE, WEBHCAT, STORM are selected and Hadoop version below 2', function () { - controller.findProperty('serviceName', 'HIVE').set('isSelected', true); - controller.findProperty('serviceName', 'WEBHCAT').set('isSelected', true); - controller.findProperty('serviceName', 'STORM').set('isSelected', true); - expect(controller.needToAddZooKeeper()).to.equal(true); - App.set('currentStackVersion', originalStackVersion); - }); - }); - - describe('#gangliaOrNagiosNotSelected()', function () { - it('should return true if Nagios or Ganglia is not selected', function () { - controller.setEach('isSelected', true); - controller.findProperty('serviceName', 'NAGIOS').set('isSelected', false); - expect(controller.gangliaOrNagiosNotSelected()).to.equal(true); - controller.setEach('isSelected', true); - controller.findProperty('serviceName', 'GANGLIA').set('isSelected', false); - expect(controller.gangliaOrNagiosNotSelected()).to.equal(true); - }); - - it('should return false if Nagios and Ganglia is selected', function () { - controller.setEach('isSelected', false); - controller.findProperty('serviceName', 'GANGLIA').set('isSelected', true); - controller.findProperty('serviceName', 'NAGIOS').set('isSelected', true); - expect(controller.gangliaOrNagiosNotSelected()).to.equal(false); - }); - }); - - describe('#needToAddTez()', function () { - it('should return false if YARN is present, but not selected', function () { - controller.findProperty('serviceName', 'YARN').set('isSelected', false); - expect(controller.needToAddTez()).to.equal(false); - }); - it('should return true if YARN is selected', function () { - controller.findProperty('serviceName', 'YARN').set('isSelected', true); - expect(controller.needToAddTez()).to.equal(true); - }); - }); - - describe('#needToAddOozie()', function () { - it('should return false if FALCON is present, but not selected', function () { - controller.findProperty('serviceName', 'FALCON').set('isSelected', false); - expect(controller.needToAddOozie()).to.equal(false); - }); - it('should return true if FALCON is selected', function () { - controller.findProperty('serviceName', 'FALCON').set('isSelected', true); - expect(controller.needToAddOozie()).to.equal(true); - }); - }); - describe('#noDFSs()', function () { it('should return true if HDFS is not selected and GLUSTERFS is absent', function () { controller.findProperty('serviceName', 'HDFS').set('isSelected', false); @@ -228,7 +97,7 @@ describe('App.WizardStep4Controller', function () { }); it('should return true if HDFS is not selected and GLUSTERFS is not selected, but present', function () { controller.pushObject(Ember.Object.create({ - 'serviceName':'GLUSTERFS', 'isSelected': false, 'canBeSelected': true, 'isInstalled': false, 'isDisabled': false + 'serviceName':'GLUSTERFS', 'isSelected': false, 'canBeSelected': true, 'isInstalled': false, 'isDisabled': false, 'isDFS': true })); controller.findProperty('serviceName', 'HDFS').set('isSelected', false); expect(controller.noDFSs()).to.equal(true); @@ -256,7 +125,7 @@ describe('App.WizardStep4Controller', function () { }); }); - describe('#checkDependencies()', function () { + describe('#setGroupedServices()', function () { var testCases = [ { title: 'should set HCATALOG and WEBHCAT isSelected to true when HIVE is selected', @@ -327,10 +196,13 @@ describe('App.WizardStep4Controller', function () { controller.clear(); for(var id in testCase.condition) { controller.pushObject(Ember.Object.create({ - 'serviceName':id, 'isSelected': testCase.condition[id], 'canBeSelected': true, 'isInstalled': false + 'serviceName':id, 'isSelected': testCase.condition[id], 'canBeSelected': true, 'isInstalled': false, + coSelectedServices: function() { + return App.StackService.coSelected[this.get('serviceName')] || []; + }.property('serviceName') })); } - controller.checkDependencies(); + controller.setGroupedServices(); for(var service in testCase.result) { expect(controller.findProperty('serviceName', service).get('isSelected')).to.equal(testCase.result[service]); } @@ -381,6 +253,14 @@ describe('App.WizardStep4Controller', function () { }); describe('#validateMonitoring', function() { + beforeEach(function() { + sinon.stub(controller, 'monitoringCheckPopup', Em.K); + sinon.stub(App.router, 'send', Em.K); + }); + afterEach(function() { + controller.monitoringCheckPopup.restore(); + App.router.send.restore(); + }); Em.A([ { gangliaOrNagiosNotSelected: true, @@ -398,12 +278,11 @@ describe('App.WizardStep4Controller', function () { } ]).forEach(function (test) { it(test.m, function () { - sinon.stub(controller, 'monitoringCheckPopup', Em.K); - sinon.stub(App.router, 'send', Em.K); sinon.stub(controller, 'gangliaOrNagiosNotSelected', function() { return test.gangliaOrNagiosNotSelected; }); controller.validateMonitoring(); + controller.gangliaOrNagiosNotSelected.restore(); if (test.e.monitoringCheckPopup) { expect(controller.monitoringCheckPopup.calledOnce).to.equal(true); } @@ -416,9 +295,6 @@ describe('App.WizardStep4Controller', function () { else { expect(App.router.send.called).to.equal(false); } - controller.gangliaOrNagiosNotSelected.restore(); - controller.monitoringCheckPopup.restore(); - App.router.send.restore(); }); }); }); @@ -426,9 +302,11 @@ describe('App.WizardStep4Controller', function () { describe('#submit', function() { beforeEach(function() { sinon.stub(controller, 'validateMonitoring', Em.K); + sinon.stub(controller, 'setGroupedServices', Em.K); }); afterEach(function() { controller.validateMonitoring.restore(); + controller.setGroupedServices.restore(); }); it('if not isSubmitDisabled shound\'t do nothing', function() { controller.reopen({isSubmitDisabled: true}); @@ -436,19 +314,20 @@ describe('App.WizardStep4Controller', function () { expect(controller.validateMonitoring.called).to.equal(false); }); it('if isSubmitDisabled and not submitChecks should call validateMonitoring', function() { + sinon.stub(controller, 'isSubmitChecksFailed', function() { return false; }); controller.reopen({ isSubmitDisabled: false, submitChecks: [] }); controller.submit(); expect(controller.validateMonitoring.calledOnce).to.equal(true); + controller.isSubmitChecksFailed.restore(); }); it('if isSubmitDisabled and some submitChecks true shouldn\'t call validateMonitoring', function() { controller.reopen({ isSubmitDisabled: false, submitChecks: [ { - checkCallback: 'needToAddMapReduce', popupParams: [ {serviceName: 'MAPREDUCE', selected: true}, 'mapreduceCheck' @@ -456,10 +335,10 @@ describe('App.WizardStep4Controller', function () { } ] }); - sinon.stub(controller, 'needToAddMapReduce', function() {return true;}); + sinon.stub(controller, 'isSubmitChecksFailed', function() { return true; }); controller.submit(); + controller.isSubmitChecksFailed.restore(); expect(controller.validateMonitoring.called).to.equal(false); - controller.needToAddMapReduce.restore(); }); it('if isSubmitDisabled and some submitChecks false should call validateMonitoring', function() { controller.reopen({ @@ -474,10 +353,10 @@ describe('App.WizardStep4Controller', function () { } ] }); - sinon.stub(controller, 'needToAddMapReduce', function() {return false;}); + sinon.stub(controller, 'isSubmitChecksFailed', function() { return false; }); controller.submit(); + controller.isSubmitChecksFailed.restore(); expect(controller.validateMonitoring.calledOnce).to.equal(true); - controller.needToAddMapReduce.restore(); }); }); http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/test/controllers/wizard/step5_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/wizard/step5_test.js b/ambari-web/test/controllers/wizard/step5_test.js index d3f5a91..3eb18cb 100644 --- a/ambari-web/test/controllers/wizard/step5_test.js +++ b/ambari-web/test/controllers/wizard/step5_test.js @@ -19,212 +19,85 @@ var Ember = require('ember'); var App = require('app'); require('controllers/wizard/step5_controller'); +var modelSetup = require('test/init_model_test'); +require('utils/ajax/ajax'); var c; describe('App.WizardStep5Controller', function () { - beforeEach(function() { + beforeEach(function () { c = App.WizardStep5Controller.create(); }); var controller = App.WizardStep5Controller.create(); controller.set('content', {}); var cpu = 2, memory = 4; - var schemes = Em.A([ - {'description': 'empty condition'}, - { - 'description': 'second host if amount more than 1', - "else": 1 - }, - { - 'description': 'first host if amount less than 3, third host if amount less than 6, fourth host if amount more than 5', - "3": 0, - "6": 2, - "else": 3 - }, - { - 'description': 'second host if amount less than 3, second host if amount less than 6, third host if amount less than 31, sixth host if amount more than 30', - "3": 1, - "6": 1, - "31": 2, - "else": 5 - } - ]); - - var test_config = [ - { - title: '1 host', - hosts: ['host0'], - equals: [0, 0, 0, 0] - }, - { - title: '2 hosts', - hosts: ['host0', 'host1'], - equals: [0, 1, 0, 1] - }, - { - title: '3 hosts', - hosts: ['host0', 'host1', 'host2'], - equals: [0, 1, 2, 1] - }, - { - title: '5 hosts', - hosts: ['host0', 'host1', 'host2', 'host3', 'host4'], - equals: [0, 1, 2, 1] - }, - { - title: '6 hosts', - hosts: ['host0', 'host1', 'host2', 'host3', 'host4', 'host6'], - equals: [0, 1, 3, 2] - }, - { - title: '10 hosts', - hosts: ['host0', 'host1', 'host2', 'host3', 'host4', 'host5', 'host6', 'host7', 'host8', 'host9'], - equals: [0, 1, 3, 2] - }, - { - title: '31 hosts', - hosts: ['host0', 'host1', 'host2', 'host3', 'host4', 'host5', 'host6', 'host7', 'host8', 'host9', 'host10', 'host11', 'host12', 'host13', 'host14', 'host15', 'host16', 'host17', 'host18', 'host19', 'host20', 'host21', 'host22', 'host23', 'host24', 'host25', 'host26', 'host27', 'host28', 'host29', 'host30'], - equals: [0, 1, 3, 5] - } - ]; - - schemes.forEach(function(scheme, index) { - describe('#getHostForComponent() condition: ' + scheme.description, function() { - - delete scheme['description']; + describe('#getHostForComponent()', function () { + before(function () { + modelSetup.setupStackServiceComponent(); + }); - test_config.forEach(function(test) { - it(test.title, function () { - controller.get('hosts').clear(); - test.hosts.forEach(function(_host) { - controller.get('hosts').pushObject(Em.Object.create({ - host_name: _host, - cpu: cpu, - memory: memory - })); - }); - expect(controller.getHostForComponent(test.hosts.length, scheme).host_name).to.equal(test.hosts[test.equals[index]]); + var componentHostsGenerator = function (componentName, hosts) { + it('test hosts input valid', function () { + expect(hosts.length).to.eql(5); }); + return { + componentName: componentName, + expectedLocation: hosts + }; + }, + hostsCount = [1, 3, 6, 10, 31], + tests = [ + componentHostsGenerator('NAMENODE', ['host0', 'host0', 'host0', 'host0', 'host0']), + componentHostsGenerator('SECONDARY_NAMENODE', ['host0', 'host1', 'host1', 'host1', 'host1']), + componentHostsGenerator('HBASE_MASTER', ['host0', 'host0', 'host2', 'host2', 'host3']), + componentHostsGenerator('JOBTRACKER', ['host0', 'host1', 'host1', 'host1', 'host2']), + componentHostsGenerator('OOZIE_SERVER', ['host0', 'host1', 'host2', 'host2', 'host3']), + componentHostsGenerator('HIVE_SERVER', ['host0', 'host1', 'host2', 'host2', 'host4']), + componentHostsGenerator('STORM_UI_SERVER', ['host0', 'host0', 'host0', 'host0', 'host0']) + ], + testMessage = 'should locate `{0}` to `{1}` with {2} node cluster'; + + tests.forEach(function (test) { + var componentName = test.componentName; + hostsCount.forEach(function (count, index) { + it(testMessage.format(componentName, test.expectedLocation[index], count), function () { + var hosts = Array.apply(null, Array(count)).map(function (_, i) { + return 'host' + i; + }); + expect(controller.getHostForComponent(test.componentName, hosts)).to.eql(test.expectedLocation[index]); + }) }); }); - }); - - describe('#getZooKeeperServer', function() { - it('should be array with three host names if hosts number more than three', function() { - var hosts = [ - {host_name: 'host1'}, - {host_name: 'host2'}, - {host_name: 'host3'} - ]; - - controller.set('hosts', hosts); - expect(controller.getZooKeeperServer(hosts.length)).to.eql(['host1', 'host2', 'host3']); - }); - - it('should be array with one host names if hosts number less than three', function() { - var hosts = [ - {host_name: 'host1'}, - {host_name: 'host2'} - ]; - controller.set('hosts', hosts); - expect(controller.getZooKeeperServer(hosts.length)).to.eql(['host1']); + after(function () { + modelSetup.cleanStackServiceComponent(); }); }); - describe('#getServerHost', function() { - it('should be host name if one host ', function() { - var hosts = [ - {host_name: 'host1'} - ]; - - controller.set('hosts', hosts); - expect(controller.getServerHost(hosts.length)).to.eql('host1'); - }); - - it('should be host name if hosts number more than one', function() { - var hosts = [ - {host_name: 'host1'}, - {host_name: 'host2'} - ]; - - controller.set('hosts', hosts); - expect(controller.getServerHost(hosts.length)).to.eql('host1'); - }); - - it('should be host name different from localhost if hosts number more than one', function() { - var hosts = [ - {host_name: location.hostname}, - {host_name: 'host2'} - ]; - //first host_name is empty string, because of location.hostname = "" in console, - //to implement current test case - - controller.set('hosts', hosts); - expect(controller.getServerHost(hosts.length)).to.eql('host2'); - }); - }); - - controller.set('content', {}); - describe('#isReassignWizard', function() { - it('true if content.controllerName is reassignMasterController', function() { + describe('#isReassignWizard', function () { + it('true if content.controllerName is reassignMasterController', function () { controller.set('content.controllerName', 'reassignMasterController'); expect(controller.get('isReassignWizard')).to.equal(true); }); - it('false if content.controllerName is not reassignMasterController', function() { + it('false if content.controllerName is not reassignMasterController', function () { controller.set('content.controllerName', 'mainController'); expect(controller.get('isReassignWizard')).to.equal(false); }); }); - describe('#isAddServiceWizard', function() { - it('true if content.controllerName is addServiceController', function() { + describe('#isAddServiceWizard', function () { + it('true if content.controllerName is addServiceController', function () { controller.set('content.controllerName', 'addServiceController'); expect(controller.get('isAddServiceWizard')).to.equal(true); }); - it('false if content.controllerName is not addServiceController', function() { + it('false if content.controllerName is not addServiceController', function () { controller.set('content.controllerName', 'mainController'); expect(controller.get('isAddServiceWizard')).to.equal(false); }); }); - describe('#isReassignHive', function() { - - var tests = Em.A([ - { - servicesMasters: Em.A([{component_name: 'HIVE_SERVER'}]), - controllerName: 'reassignMasterController', - e: true - }, - { - servicesMasters: Em.A([{component_name: 'HIVE_SERVER'}]), - controllerName: 'addServiceController', - e: false - }, - { - servicesMasters: Em.A([{component_name: 'ZOOKEEPER_SERVER'}]), - controllerName: 'reassignMasterController', - e: false - }, - { - servicesMasters: Em.A([{component_name: 'ZOOKEEPER_SERVER'}]), - controllerName: 'addServiceController', - e: false - } - ]); - - tests.forEach(function(test) { - it(test.controllerName + ' ' + test.servicesMasters.mapProperty('component_name').join(','), function() { - controller.set('content.controllerName', test.controllerName); - controller.set('servicesMasters', test.servicesMasters); - expect(controller.get('isReassignHive')).to.equal(test.e); - }); - }); - - }); - - describe('#sortHosts', function() { + describe('#sortHosts', function () { var tests = Em.A([ { @@ -235,7 +108,7 @@ describe('App.WizardStep5Controller', function () { Em.Object.create({memory: 1, cpu: 1, host_name: 'host4', id: 4}) ], m: 'memory', - e: [1,2,3,4] + e: [1, 2, 3, 4] }, { hosts: [ @@ -245,7 +118,7 @@ describe('App.WizardStep5Controller', function () { Em.Object.create({memory: 1, cpu: 1, host_name: 'host4', id: 4}) ], m: 'cpu', - e: [1,2,3,4] + e: [1, 2, 3, 4] }, { hosts: [ @@ -255,7 +128,7 @@ describe('App.WizardStep5Controller', function () { Em.Object.create({memory: 1, cpu: 1, host_name: 'host1', id: 4}) ], m: 'host_name', - e: [4,2,3,1] + e: [4, 2, 3, 1] }, { hosts: [ @@ -265,12 +138,12 @@ describe('App.WizardStep5Controller', function () { Em.Object.create({memory: 1, cpu: 1, host_name: 'host2', id: 4}) ], m: 'mix', - e: [1,2,4,3] + e: [1, 2, 4, 3] } ]); - tests.forEach(function(test) { - it(test.m, function() { + tests.forEach(function (test) { + it(test.m, function () { var hosts = Em.copy(test.hosts); controller.sortHosts(hosts); expect(Em.A(hosts).mapProperty('id')).to.eql(test.e); @@ -279,7 +152,7 @@ describe('App.WizardStep5Controller', function () { }); - describe('#renderHostInfo', function() { + describe('#renderHostInfo', function () { var tests = Em.A([ { @@ -334,8 +207,8 @@ describe('App.WizardStep5Controller', function () { } ]); - tests.forEach(function(test) { - it(test.m, function() { + tests.forEach(function (test) { + it(test.m, function () { controller.set('content', {hosts: test.hosts}); controller.renderHostInfo(); var r = controller.get('hosts'); @@ -345,49 +218,16 @@ describe('App.WizardStep5Controller', function () { }); - describe('#hasHiveServer', function() { - - var tests = Em.A([ - { - selectedServicesMasters: Em.A([{component_name: 'HIVE_SERVER'}]), - controllerName: 'reassignMasterController', - e: false - }, - { - selectedServicesMasters: Em.A([{component_name: 'HIVE_SERVER'}]), - controllerName: 'addServiceController', - e: true - }, - { - selectedServicesMasters: Em.A([{component_name: 'ANOTHER'}]), - controllerName: 'addServiceController', - e: false - }, - { - selectedServicesMasters: Em.A([{component_name: 'ANOTHER'}]), - controllerName: 'reassignMasterController', - e: false - } - ]); - - tests.forEach(function(test) { - it(test.controllerName + ' ' + test.selectedServicesMasters.mapProperty('component_name').join(','), function() { - controller.set('content.controllerName', test.controllerName); - controller.set('selectedServicesMasters', test.selectedServicesMasters); - expect(controller.get('hasHiveServer')).to.equal(test.e); + describe('#selectHost', function () { + before(function () { + modelSetup.setupStackServiceComponent(); + App.store.load(App.StackServiceComponent, { + id: 'KERBEROS_SERVER', + component_name: 'KERBEROS_SERVER' }); }); - }); - - describe('#selectHost', function() { - var tests = Em.A([ - {componentName: 'KERBEROS_SERVER', hostsCount: 1, e: 'host1'}, - {componentName: 'KERBEROS_SERVER', hostsCount: 3, e: 'host2'}, - {componentName: 'KERBEROS_SERVER', hostsCount: 6, e: 'host4'}, - {componentName: 'KERBEROS_SERVER', hostsCount: 31, e: 'host6'}, - {componentName: 'KERBEROS_SERVER', hostsCount: 32, e: 'host6'}, {componentName: 'NAMENODE', hostsCount: 1, e: 'host1'}, {componentName: 'NAMENODE', hostsCount: 2, e: 'host1'}, {componentName: 'SECONDARY_NAMENODE', hostsCount: 1, e: 'host1'}, @@ -444,27 +284,22 @@ describe('App.WizardStep5Controller', function () { {componentName: 'FALCON_SERVER', hostsCount: 32, e: 'host4'} ]); - tests.forEach(function(test) { - it(test.componentName + ' ' + test.hostsCount, function() { - controller.set('hosts', d3.range(1, test.hostsCount + 1).map(function(i) { return {host_name: 'host' + i.toString()};})); + tests.forEach(function (test) { + it(test.componentName + ' ' + test.hostsCount, function () { + controller.set('hosts', d3.range(1, test.hostsCount + 1).map(function (i) { + return {host_name: 'host' + i.toString()}; + })); expect(controller.selectHost(test.componentName)).to.eql(test.e); }); }); - describe('getServerHost should be called for', function() { - Em.A(['STORM_UI_SERVER','DRPC_SERVER','STORM_REST_API','NIMBUS','GANGLIA_SERVER','NAGIOS_SERVER','HUE_SERVER']).forEach(function(componentName) { - it(componentName, function() { - sinon.spy(controller, 'getServerHost'); - controller.selectHost(componentName); - expect(controller.getServerHost.calledOnce).to.equal(true); - controller.getServerHost.restore(); - }); - }); + after(function () { + modelSetup.cleanStackServiceComponent(); }); }); - describe('#last', function() { + describe('#last', function () { var tests = Em.A([ { @@ -489,8 +324,8 @@ describe('App.WizardStep5Controller', function () { } ]); - tests.forEach(function(test) { - it(test.m, function() { + tests.forEach(function (test) { + it(test.m, function () { controller.set('selectedServicesMasters', test.selectedServicesMasters); if (!Em.isNone(test.e)) { expect(controller.last(test.c).indx).to.equal(test.e); @@ -503,37 +338,43 @@ describe('App.WizardStep5Controller', function () { }); - describe('#isSubmitDisabled', function() { - it('should be false if it\'s not a isReassignWizard', function() { + describe('#isSubmitDisabled', function () { + it('should be false if it\'s not a isReassignWizard', function () { c.set('controllerName', 'addServiceController'); expect(c.get('isSubmitDisabled')).to.equal(false); }); }); - describe('#remainingHosts', function() { - it('should show count of hosts without masters', function() { - c.reopen({masterHostMapping: [{}]}); - c.set('hosts', [{},{},{}]); + describe('#remainingHosts', function () { + it('should show count of hosts without masters', function () { + c.reopen({masterHostMapping: [ + {} + ]}); + c.set('hosts', [ + {}, + {}, + {} + ]); expect(c.get('remainingHosts')).to.equal(2); }); }); - describe('#clearStep', function() { + describe('#clearStep', function () { var tests = Em.A([ {p: 'hosts'}, {p: 'selectedServicesMasters'}, {p: 'servicesMasters'} ]); - tests.forEach(function(test) { - it('should cleanup ' + test.p, function() { - c.set(test.p, [Em.Object.create({}),Em.Object.create({})]); + tests.forEach(function (test) { + it('should cleanup ' + test.p, function () { + c.set(test.p, [Em.Object.create({}), Em.Object.create({})]); c.clearStep(); expect(c.get(test.p).length).to.equal(0); }); }); }); - describe('#updateComponent', function() { + describe('#updateComponent', function () { var tests = Em.A([ { componentName: 'HBASE_SERVER', @@ -612,30 +453,37 @@ describe('App.WizardStep5Controller', function () { } ]); - tests.forEach(function(test) { - it(test.m, function() { + tests.forEach(function (test) { + it(test.m, function () { + sinon.stub(App.StackService, 'find', function () { + return test.services; + }); c.reopen({ content: Em.Object.create({ - services: test.services, controllerName: test.controllerName }), - selectedServicesMasters: test.selectedServicesMasters + selectedServicesMasters: test.selectedServicesMasters, + hosts: test.hosts }); c.updateComponent(test.componentName); - Em.keys(test.e).forEach(function(k) { + App.StackService.find.restore(); + Em.keys(test.e).forEach(function (k) { expect(c.last(test.componentName).get(k)).to.equal(test.e[k]); }); + }); }); }); - describe('#renderComponents', function() { + describe('#renderComponents', function () { var tests = Em.A([ { masterComponents: Em.A([ {component_name: 'ZOOKEEPER_SERVER'} ]), - services: Em.A([]), + services: Em.A([ + Em.Object.create({serviceName: 'ZOOKEEPER', isInstalled: false, isSelected: true}) + ]), controllerName: 'reassignMasterController', m: 'One component', isHaEnabled: false, @@ -645,24 +493,24 @@ describe('App.WizardStep5Controller', function () { servicesMasters: ['ZOOKEEPER_SERVER'], showRemoveControl: [false], isInstalled: [false], - zId: [1] + serviceComponentId: [1] } }, { masterComponents: Em.A([ - {component_name: 'ZOOKEEPER_SERVER'}, - {component_name: 'SECONDARY_NAMENODE'} + {component_name: 'ZOOKEEPER_SERVER'} + ]), + services: Em.A([ + Em.Object.create({serviceName: 'ZOOKEEPER', isInstalled: false, isSelected: true}) ]), - services: Em.A([]), controllerName: 'addServiceController', - m: 'One component', - isHaEnabled: true, + m: 'One component, service is not installed', component_name: 'ZOOKEEPER_SERVER', e: { selectedServicesMasters: ['ZOOKEEPER_SERVER'], servicesMasters: ['ZOOKEEPER_SERVER'], showRemoveControl: [false], - zId: [1] + serviceComponentId: [1] } }, { @@ -671,17 +519,16 @@ describe('App.WizardStep5Controller', function () { {component_name: 'ZOOKEEPER_SERVER'} ]), services: Em.A([ - Em.Object.create({serviceName:'ZOOKEEPER', isInstalled: true}) + Em.Object.create({serviceName: 'ZOOKEEPER', isInstalled: true}) ]), controllerName: 'addServiceController', m: 'Two components, but service is installed', - isHaEnabled: false, component_name: 'ZOOKEEPER_SERVER', e: { selectedServicesMasters: ['ZOOKEEPER_SERVER', 'ZOOKEEPER_SERVER'], servicesMasters: ['ZOOKEEPER_SERVER', 'ZOOKEEPER_SERVER'], showRemoveControl: [false, false], - zId: [1, 2] + serviceComponentId: [1, 2] } }, { @@ -691,24 +538,28 @@ describe('App.WizardStep5Controller', function () { {component_name: 'NAMENODE'} ]), services: Em.A([ + Em.Object.create({serviceName: 'ZOOKEEPER', isInstalled: false, isSelected: true}) ]), controllerName: 'addServiceController', - m: 'Two components, but service is installed', - isHaEnabled: false, + m: 'Two components, but service is not installed', component_name: 'ZOOKEEPER_SERVER', e: { selectedServicesMasters: ['ZOOKEEPER_SERVER', 'ZOOKEEPER_SERVER', 'NAMENODE'], servicesMasters: ['ZOOKEEPER_SERVER', 'ZOOKEEPER_SERVER', 'NAMENODE'], showRemoveControl: [true, true, undefined], - zId: [1, 2, 1] + serviceComponentId: [1, 2, undefined] } } ]); - tests.forEach(function(test) { - beforeEach(function() { + tests.forEach(function (test) { + beforeEach(function () { App.reopen({isHaEnabled: test.isHaEnabled}); }); - it(test.m, function() { + it(test.m, function () { + modelSetup.setupStackServiceComponent(); + sinon.stub(App.StackService, 'find', function () { + return test.services; + }); App.set('isHaEnabled', test.isHaEnabled); c.reopen({ content: Em.Object.create({ @@ -718,10 +569,12 @@ describe('App.WizardStep5Controller', function () { }) }); c.renderComponents(test.masterComponents); + App.StackService.find.restore(); + modelSetup.cleanStackServiceComponent(); expect(c.get('selectedServicesMasters').mapProperty('component_name')).to.eql(test.e.selectedServicesMasters); expect(c.get('servicesMasters').mapProperty('component_name')).to.eql(test.e.servicesMasters); expect(c.get('selectedServicesMasters').mapProperty('showRemoveControl')).to.eql(test.e.showRemoveControl); - expect(c.get('selectedServicesMasters').mapProperty('zId')).to.eql(test.e.zId); + expect(c.get('selectedServicesMasters').mapProperty('serviceComponentId')).to.eql(test.e.serviceComponentId); if (c.get('isReasignController')) { expect(c.get('servicesMasters').mapProperty('isInstalled')).to.eql(test.e.isInstalled); } @@ -729,133 +582,82 @@ describe('App.WizardStep5Controller', function () { }); }); - describe('#updateHiveCoHosts', function() { - var tests = Em.A([ - { - selectedServicesMasters: Em.A([ - Em.Object.create({component_name: 'HIVE_SERVER', selectedHost: 'h1'}), - Em.Object.create({component_name: 'HIVE_METASTORE', selectedHost: 'h2'}), - Em.Object.create({component_name: 'WEBHCAT_SERVER', selectedHost: 'h3'}) - ]), - servicesMasters: Em.A([ - Em.Object.create({component_name: 'HIVE_SERVER', selectedHost: 'h1'}) - ]), - isReassignHive: false, - m: 'should set new host for both', - e: ['h1','h1','h1'] - }, - { - selectedServicesMasters: Em.A([ - Em.Object.create({component_name: 'HIVE_SERVER', selectedHost: 'h1'}), - Em.Object.create({component_name: 'HIVE_METASTORE', selectedHost: 'h2'}), - Em.Object.create({component_name: 'WEBHCAT_SERVER', selectedHost: 'h3'}) - ]), - servicesMasters: Em.A([ - Em.Object.create({component_name: 'HIVE_METASTORE', selectedHost: 'h1'}) - ]), - isReassignHive: false, - m: 'should set new host for WEBHCAT_SERVER', - e: ['h1','h2','h1'] - }, - { - selectedServicesMasters: Em.A([ - Em.Object.create({component_name: 'HIVE_METASTORE', selectedHost: 'h2'}), - Em.Object.create({component_name: 'WEBHCAT_SERVER', selectedHost: 'h3'}) - ]), - servicesMasters: Em.A([ - Em.Object.create({component_name: 'HIVE_METASTORE', selectedHost: 'h1'}) - ]), - isReassignHive: false, - m: 'missing HIVE_SERVER', - e: ['h2','h3'] - } - ]); - - tests.forEach(function(test) { - it(test.m, function() { - c.set('selectedServicesMasters', test.selectedServicesMasters); - c.set('servicesMasters', test.servicesMasters); - c.reopen({isReassignHive: test.isReassignHive}); - c.updateHiveCoHosts(); - expect(c.get('selectedServicesMasters').mapProperty('selectedHost')).to.eql(test.e); - }); - }); - - }); - - describe('#assignHostToMaster', function() { + describe('#assignHostToMaster', function () { var tests = Em.A([ - { - componentName: 'c1', - selectedHost: 'h2', - zId: '1', - e: { - indx: 0 - } - }, - { - componentName: 'c2', - selectedHost: 'h3', - zId: '2', - e: { - indx: 3 - } - }, - { - componentName: 'c3', - selectedHost: 'h1', - e: { - indx: 2 - } - }, - { - componentName: 'c2', - selectedHost: 'h4', - e: { - indx: 1 + { + componentName: 'c1', + selectedHost: 'h2', + serviceComponentId: '1', + e: { + indx: 0 + } + }, + { + componentName: 'c2', + selectedHost: 'h3', + serviceComponentId: '2', + e: { + indx: 3 + } + }, + { + componentName: 'c3', + selectedHost: 'h1', + e: { + indx: 2 + } + }, + { + componentName: 'c2', + selectedHost: 'h4', + e: { + indx: 1 + } } - } - ]), - selectedServicesMasters = Em.A([ - Em.Object.create({component_name: 'c1', zId: '1', selectedHost: 'h1'}), - Em.Object.create({component_name: 'c2', zId: '1', selectedHost: 'h1'}), - Em.Object.create({component_name: 'c3', zId: '1', selectedHost: 'h3'}), - Em.Object.create({component_name: 'c2', zId: '2', selectedHost: 'h2'}) - ]); + ]), + selectedServicesMasters = Em.A([ + Em.Object.create({component_name: 'c1', serviceComponentId: '1', selectedHost: 'h1'}), + Em.Object.create({component_name: 'c2', serviceComponentId: '1', selectedHost: 'h1'}), + Em.Object.create({component_name: 'c3', serviceComponentId: '1', selectedHost: 'h3'}), + Em.Object.create({component_name: 'c2', serviceComponentId: '2', selectedHost: 'h2'}) + ]); - tests.forEach(function(test) { - it(test.componentName + ' ' + test.selectedHost + ' ' + test.zId, function() { + tests.forEach(function (test) { + it(test.componentName + ' ' + test.selectedHost + ' ' + test.serviceComponentId, function () { c.set('selectedServicesMasters', selectedServicesMasters); - c.assignHostToMaster(test.componentName, test.selectedHost, test.zId); + c.assignHostToMaster(test.componentName, test.selectedHost, test.serviceComponentId); expect(c.get('selectedServicesMasters').objectAt(test.e.indx).get('selectedHost')).to.equal(test.selectedHost); }) }); }); - describe('#submit', function() { - beforeEach(function() { + describe('#submit', function () { + beforeEach(function () { + if (!App.router) { + App.router = Em.Object.create({send: Em.K}); + } sinon.spy(App.router, 'send'); }); - afterEach(function() { + afterEach(function () { App.router.send.restore(); }); - it('should go next if not isSubmitDisabled', function() { + it('should go next if not isSubmitDisabled', function () { c.reopen({isSubmitDisabled: false}); c.submit(); expect(App.router.send.calledWith('next')).to.equal(true); }); - it('shouldn\'t go next if isSubmitDisabled', function() { + it('shouldn\'t go next if isSubmitDisabled', function () { c.reopen({isSubmitDisabled: true}); c.submit(); expect(App.router.send.called).to.equal(false); }); }); - describe('#removeComponent', function() { + describe('#removeComponent', function () { var tests = Em.A([ { componentName: 'c1', - zId: 1, + serviceComponentId: 1, selectedServicesMasters: Em.A([]), hosts: [], m: 'empty selectedServicesMasters', @@ -863,9 +665,9 @@ describe('App.WizardStep5Controller', function () { }, { componentName: 'ZOOKEPEER_SERVER', - zId: 1, + serviceComponentId: 1, selectedServicesMasters: Em.A([ - Em.Object.create({zId: 1, component_name: 'HBASE_SERVER'}) + Em.Object.create({serviceComponentId: 1, component_name: 'HBASE_SERVER'}) ]), hosts: [], m: 'no such components', @@ -873,9 +675,9 @@ describe('App.WizardStep5Controller', function () { }, { componentName: 'ZOOKEPEER_SERVER', - zId: 1, + serviceComponentId: 1, selectedServicesMasters: Em.A([ - Em.Object.create({zId: 1, component_name: 'ZOOKEPEER_SERVER'}) + Em.Object.create({serviceComponentId: 1, component_name: 'ZOOKEPEER_SERVER'}) ]), hosts: [], m: 'component is only 1', @@ -883,12 +685,15 @@ describe('App.WizardStep5Controller', function () { }, { componentName: 'ZOOKEPEER_SERVER', - zId: 2, + serviceComponentId: 2, selectedServicesMasters: Em.A([ - Em.Object.create({zId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), - Em.Object.create({zId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}) + Em.Object.create({serviceComponentId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), + Em.Object.create({serviceComponentId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}) ]), - hosts: [{},{}], + hosts: [ + {}, + {} + ], m: 'two components, add allowed, remove not allowed', e: true, showAddControl: true, @@ -896,12 +701,14 @@ describe('App.WizardStep5Controller', function () { }, { componentName: 'ZOOKEPEER_SERVER', - zId: 2, + serviceComponentId: 2, selectedServicesMasters: Em.A([ - Em.Object.create({zId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), - Em.Object.create({zId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}) + Em.Object.create({serviceComponentId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), + Em.Object.create({serviceComponentId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}) ]), - hosts: [{}], + hosts: [ + {} + ], m: 'two components, add not allowed, remove not allowed', e: true, showAddControl: false, @@ -909,13 +716,16 @@ describe('App.WizardStep5Controller', function () { }, { componentName: 'ZOOKEPEER_SERVER', - zId: 2, + serviceComponentId: 2, selectedServicesMasters: Em.A([ - Em.Object.create({zId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), - Em.Object.create({zId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), - Em.Object.create({zId: 3, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: true}) + Em.Object.create({serviceComponentId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), + Em.Object.create({serviceComponentId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), + Em.Object.create({serviceComponentId: 3, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: true}) ]), - hosts: [{},{}], + hosts: [ + {}, + {} + ], m: 'three components, add not allowed, remove allowed', e: true, showAddControl: false, @@ -923,25 +733,29 @@ describe('App.WizardStep5Controller', function () { }, { componentName: 'ZOOKEPEER_SERVER', - zId: 2, + serviceComponentId: 2, selectedServicesMasters: Em.A([ - Em.Object.create({zId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), - Em.Object.create({zId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), - Em.Object.create({zId: 3, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: true}) + Em.Object.create({serviceComponentId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), + Em.Object.create({serviceComponentId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), + Em.Object.create({serviceComponentId: 3, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: true}) ]), - hosts: [{},{}, {}], + hosts: [ + {}, + {}, + {} + ], m: 'three components, add allowed, remove allowed', e: true, showAddControl: true, showRemoveControl: true } ]); - tests.forEach(function(test) { - it(test.m, function() { + tests.forEach(function (test) { + it(test.m, function () { c.set('selectedServicesMasters', test.selectedServicesMasters); c.set('hosts', test.hosts); - expect(c.removeComponent(test.componentName, test.zId)).to.equal(test.e); - if(test.e) { + expect(c.removeComponent(test.componentName, test.serviceComponentId)).to.equal(test.e); + if (test.e) { expect(c.get('selectedServicesMasters.lastObject.showRemoveControl')).to.equal(test.showRemoveControl); expect(c.get('selectedServicesMasters.lastObject.showAddControl')).to.equal(test.showAddControl); } @@ -949,7 +763,7 @@ describe('App.WizardStep5Controller', function () { }); }); - describe('#addComponent', function() { + describe('#addComponent', function () { var tests = Em.A([ { componentName: 'c1', @@ -961,7 +775,7 @@ describe('App.WizardStep5Controller', function () { { componentName: 'ZOOKEPEER_SERVER', selectedServicesMasters: Em.A([ - Em.Object.create({zId: 1, component_name: 'HBASE_SERVER'}) + Em.Object.create({serviceComponentId: 1, component_name: 'HBASE_SERVER'}) ]), hosts: [], m: 'no such components', @@ -970,7 +784,7 @@ describe('App.WizardStep5Controller', function () { { componentName: 'ZOOKEPEER_SERVER', selectedServicesMasters: Em.A([ - Em.Object.create({zId: 1, component_name: 'ZOOKEPEER_SERVER'}) + Em.Object.create({serviceComponentId: 1, component_name: 'ZOOKEPEER_SERVER'}) ]), hosts: [], m: 'one component, 0 hosts', @@ -979,8 +793,8 @@ describe('App.WizardStep5Controller', function () { { componentName: 'ZOOKEPEER_SERVER', selectedServicesMasters: Em.A([ - Em.Object.create({zId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), - Em.Object.create({zId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}) + Em.Object.create({serviceComponentId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), + Em.Object.create({serviceComponentId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}) ]), hosts: [Em.Object.create({}), Em.Object.create({})], m: 'two components, two hosts', @@ -989,16 +803,16 @@ describe('App.WizardStep5Controller', function () { { componentName: 'ZOOKEPEER_SERVER', selectedServicesMasters: Em.A([ - Em.Object.create({zId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), - Em.Object.create({zId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}) + Em.Object.create({serviceComponentId: 1, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}), + Em.Object.create({serviceComponentId: 2, component_name: 'ZOOKEPEER_SERVER', showAddControl: false, showRemoveControl: false}) ]), hosts: [Em.Object.create({}), Em.Object.create({}), Em.Object.create({})], m: 'two components, 3 hosts', e: true } ]); - tests.forEach(function(test) { - it(test.m, function() { + tests.forEach(function (test) { + it(test.m, function () { c.set('selectedServicesMasters', test.selectedServicesMasters); c.set('hosts', test.hosts); expect(c.addComponent(test.componentName)).to.equal(test.e); @@ -1006,28 +820,28 @@ describe('App.WizardStep5Controller', function () { }); }); - describe('#loadStep', function() { + describe('#loadStep', function () { var methods = Em.A(['clearStep', 'renderHostInfo', 'renderComponents', 'loadComponents']); - describe('should call several methods', function() { - beforeEach(function() { - methods.forEach(function(m) { + describe('should call several methods', function () { + beforeEach(function () { + methods.forEach(function (m) { sinon.spy(c, m); }); c.reopen({content: {services: Em.A([])}}); }); - afterEach(function() { - methods.forEach(function(m) { + afterEach(function () { + methods.forEach(function (m) { c[m].restore(); }); }); - methods.forEach(function(m) { - it(m, function() { + methods.forEach(function (m) { + it(m, function () { c.loadStep(); expect(c[m].calledOnce).to.equal(true); }); }); }); - it('should update HBASE if App.supports.multipleHBaseMasters is true', function() { + it('should update HBASE if App.supports.multipleHBaseMasters is true', function () { App.set('supports.multipleHBaseMasters', true); sinon.spy(c, 'updateComponent'); c.reopen({content: {services: Em.A([])}}); @@ -1037,34 +851,34 @@ describe('App.WizardStep5Controller', function () { }); }); - describe('#title', function() { - it('should be custom title for reassignMasterController', function() { + describe('#title', function () { + it('should be custom title for reassignMasterController', function () { c.set('content', {controllerName: 'reassignMasterController'}); expect(c.get('title')).to.equal(Em.I18n.t('installer.step5.reassign.header')); }); - it('should be default for other', function() { + it('should be default for other', function () { c.set('content', {controllerName: 'notReassignMasterController'}); expect(c.get('title')).to.equal(Em.I18n.t('installer.step5.header')); }); }); - describe('#isSubmitDisabled', function() { - it('should be false if no isReassignWizard', function() { + describe('#isSubmitDisabled', function () { + it('should be false if no isReassignWizard', function () { c.reopen({isReassignWizard: false}); expect(c.get('isSubmitDisabled')).to.equal(false); }); - it('should be true if isReassignWizard', function() { + it('should be true if isReassignWizard', function () { var hostComponents = Em.A([ Em.Object.create({componentName: 'c1', host: Em.Object.create({hostName: 'h1'})}), Em.Object.create({componentName: 'c1', host: Em.Object.create({hostName: 'h2'})}) ]); - sinon.stub(App.HostComponent, 'find', function() { + sinon.stub(App.HostComponent, 'find', function () { return hostComponents; }); c.reopen({ isReassignWizard: true, - content:{ - reassign:{ + content: { + reassign: { component_name: 'c1' } }, @@ -1078,19 +892,19 @@ describe('App.WizardStep5Controller', function () { App.HostComponent.find.restore(); }); - it('should be false if isReassignWizard', function() { + it('should be false if isReassignWizard', function () { var hostComponents = Em.A([ Em.Object.create({componentName: 'c1', host: Em.Object.create({hostName: 'h1'})}), Em.Object.create({componentName: 'c1', host: Em.Object.create({hostName: 'h2'})}), Em.Object.create({componentName: 'c1', host: Em.Object.create({hostName: 'h3'})}) ]); - sinon.stub(App.HostComponent, 'find', function() { + sinon.stub(App.HostComponent, 'find', function () { return hostComponents; }); c.reopen({ isReassignWizard: true, - content:{ - reassign:{ + content: { + reassign: { component_name: 'c1' } }, @@ -1105,7 +919,7 @@ describe('App.WizardStep5Controller', function () { }); - describe('#masterHostMapping', function() { + describe('#masterHostMapping', function () { Em.A([ { selectedServicesMasters: [ @@ -1119,8 +933,13 @@ describe('App.WizardStep5Controller', function () { ], m: 'Two hosts', e: [ - {host_name: 'h1', hostInfo: {}, masterServices: [{}, {}]}, - {host_name: 'h2', hostInfo: {}, masterServices: [{}]} + {host_name: 'h1', hostInfo: {}, masterServices: [ + {}, + {} + ]}, + {host_name: 'h2', hostInfo: {}, masterServices: [ + {} + ]} ] }, { @@ -1139,7 +958,10 @@ describe('App.WizardStep5Controller', function () { ], m: 'One host', e: [ - {host_name: 'h1', hostInfo: {}, masterServices: [{}, {}]} + {host_name: 'h1', hostInfo: {}, masterServices: [ + {}, + {} + ]} ] } ]).forEach(function (test) { @@ -1150,7 +972,7 @@ describe('App.WizardStep5Controller', function () { }); var result = c.get('masterHostMapping'); expect(result.length).to.equal(test.e.length); - result.forEach(function(r, i) { + result.forEach(function (r, i) { expect(r.get('host_name')).to.equal(test.e[i].host_name); expect(r.get('masterServices.length')).to.equal(test.e[i].masterServices.length); expect(r.get('hostInfo')).to.be.an.object; @@ -1159,7 +981,7 @@ describe('App.WizardStep5Controller', function () { }); }); - describe('#loadComponents', function() { + describe('#loadComponents', function () { Em.A([ { services: [ @@ -1218,8 +1040,7 @@ describe('App.WizardStep5Controller', function () { display_name: 'c1d', selectedHost: 'h3', isInstalled: false, - serviceId: 's1', - isHiveCoHost: false + serviceId: 's1' } }, { @@ -1239,8 +1060,7 @@ describe('App.WizardStep5Controller', function () { display_name: 'c1d', selectedHost: 'h3', isInstalled: false, - serviceId: 's1', - isHiveCoHost: false + serviceId: 's1' } }, { @@ -1260,8 +1080,7 @@ describe('App.WizardStep5Controller', function () { display_name: 'c1d', selectedHost: 'h2', isInstalled: true, - serviceId: 's1', - isHiveCoHost: false + serviceId: 's1' } }, { @@ -1281,76 +1100,34 @@ describe('App.WizardStep5Controller', function () { display_name: 'c1d', selectedHost: 'h2', isInstalled: true, - serviceId: 's1', - isHiveCoHost: false + serviceId: 's1' } } ]).forEach(function (test) { - it(test.m, function() { + it(test.m, function () { c.reopen({ content: { - services: test.services, masterComponentHosts: test.masterComponentHosts } }); - sinon.stub(App.StackServiceComponent, 'find', function() { + sinon.stub(App.StackService, 'find', function () { + return test.services; + }); + sinon.stub(App.StackServiceComponent, 'find', function () { return test.masterComponents; }); - sinon.stub(c, 'selectHost', function() { + sinon.stub(c, 'selectHost', function () { return test.selectHost; }); var r = c.loadComponents(); + App.StackService.find.restore(); App.StackServiceComponent.find.restore(); c.selectHost.restore(); expect(r.length).to.equal(1); - Em.keys(test.e).forEach(function(k) { + Em.keys(test.e).forEach(function (k) { expect(r[0][k]).to.equal(test.e[k]); }); }); }); }); - - describe('#_isHiveCoHost', function() { - Em.A([ - { - componentName: 'HIVE_METASTORE', - isReassignWizard: false, - e: true - }, - { - componentName: 'WEBHCAT_SERVER', - isReassignWizard: false, - e: true - }, - { - componentName: 'HIVE_METASTORE', - isReassignWizard: true, - e: false - }, - { - componentName: 'WEBHCAT_SERVER', - isReassignWizard: true, - e: false - }, - { - componentName: 'C1', - isReassignWizard: false, - e: false - }, - { - componentName: 'C1', - isReassignWizard: true, - e: false - } - ]).forEach(function (test) { - it(test.componentName.toString() + ' ' + test.isReassignWizard.toString(), function () { - c.reopen({ - isReassignWizard: test.isReassignWizard - }); - var r = c._isHiveCoHost(test.componentName); - expect(r).to.equal(test.e); - }); - }); - }); - }); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/test/controllers/wizard/step6_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/wizard/step6_test.js b/ambari-web/test/controllers/wizard/step6_test.js index 536503f..7b28e1f 100644 --- a/ambari-web/test/controllers/wizard/step6_test.js +++ b/ambari-web/test/controllers/wizard/step6_test.js @@ -56,9 +56,6 @@ describe('App.WizardStep6Controller', function () { masterComponentHosts: {}, services: services }); - sinon.stub(controller, 'getComponentDisplayName', function (c) { - return App.format.components[c]; - }); var h = {}, m = []; Em.A(['host0', 'host1', 'host2', 'host3']).forEach(function (hostName) { @@ -77,9 +74,6 @@ describe('App.WizardStep6Controller', function () { }); - afterEach(function () { - controller.getComponentDisplayName.restore(); - }); describe('#loadStep', function () { Em.A([ http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/test/controllers/wizard/step8_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/wizard/step8_test.js b/ambari-web/test/controllers/wizard/step8_test.js index aa147d4..7a329e5 100644 --- a/ambari-web/test/controllers/wizard/step8_test.js +++ b/ambari-web/test/controllers/wizard/step8_test.js @@ -17,6 +17,7 @@ */ var App = require('app'); +var modelSetup = require('test/init_model_test'); require('utils/ajax/ajax_queue'); require('controllers/main/admin/security'); require('controllers/main/service/info/configs'); @@ -487,6 +488,158 @@ describe('App.WizardStep8Controller', function () { }); }); + describe('#loadServices()', function() { + var serviceComponentGenerator = function(componentName, displayName, componentValue) { + return Em.Object.create({ + component_name: componentName, + display_name: displayName, + component_value: componentValue + }) + }; + + var slaveComponentGenerator = function(componentName, hosts) { + return Em.Object.create({ + componentName: componentName, + hosts: hosts.map(function(host) { return {'hostName' : host } }) + }); + }; + var masterComponentGenerator = function(componentName, hostName) { + return Em.Object.create({ + component: componentName, + hostName: hostName + }); + }; + + var serviceConfigGenerator = function(name, value) { + return Em.Object.create({ + name: name, + value: value + }); + } + before(function() { + modelSetup.setupStackServiceComponent(); + var services = ['HDFS', 'YARN', 'TEZ', 'NAGIOS', 'GANGLIA','OOZIE']; + this.controller = App.WizardStep8Controller.create({ + content: { + services: App.StackService.find().setEach('isSelected', true).setEach('isInstalled', false).filterProperty('stackVersion', '2.1').filter(function(service) { + return services.contains(service.get('serviceName')); + }), + slaveComponentHosts: Em.A([ + slaveComponentGenerator('DATANODE', ['h1','h2']), + slaveComponentGenerator('NODEMANAGER', ['h1']), + slaveComponentGenerator('CLIENT', ['h1']) + ]), + masterComponentHosts: Em.A([ + masterComponentGenerator('NAMENODE', 'h1'), + masterComponentGenerator('SECONDARY_NAMENODE', 'h2'), + masterComponentGenerator('APP_TIMELINE_SERVER', 'h1'), + masterComponentGenerator('RESOURCEMANAGER', 'h1'), + masterComponentGenerator('NAGIOS_SERVER', 'h1'), + masterComponentGenerator('GANGLIA_SERVER', 'h2'), + masterComponentGenerator('OOZIE_SERVER', 'h2') + ]), + serviceConfigProperties: Em.A([ + serviceConfigGenerator('nagios_web_login', 'admin'), + serviceConfigGenerator('nagios_contact', 'admin@admin.com'), + serviceConfigGenerator('oozie_database', 'New Derby Database'), + serviceConfigGenerator('oozie_derby_database', '') + ]) + } + }); + var _this = this; + this.controller.reopen({ + wizardController: { + getDBProperty: function() { + return _this.controller.get('content.serviceConfigProperties') + } + } + }); + this.controller.loadServices(); + }); + + var tests = [ + { + service_name: 'HDFS', + display_name: 'HDFS', + service_components: Em.A([ + serviceComponentGenerator('NAMENODE', 'NameNode', 'h1'), + serviceComponentGenerator('DATANODE', 'DataNode', '2 hosts'), + serviceComponentGenerator('SECONDARY_NAMENODE', 'SNameNode', 'h2') + ]) + }, + { + service_name: 'YARN', + display_name: 'YARN + MapReduce2', + service_components: Em.A([ + serviceComponentGenerator('RESOURCEMANAGER', 'ResourceManager', 'h1'), + serviceComponentGenerator('NODEMANAGER', 'NodeManager', '1 host'), + serviceComponentGenerator('APP_TIMELINE_SERVER', 'App Timeline Server', 'h1') + ]) + }, + { + service_name: 'TEZ', + display_name: 'Tez', + service_components: Em.A([ + serviceComponentGenerator('CLIENT', 'Clients', '1 host') + ]) + }, + { + service_name: 'NAGIOS', + display_name: 'Nagios', + service_components: Em.A([ + serviceComponentGenerator('NAGIOS_SERVER', 'Server', 'h1'), + serviceComponentGenerator('Custom', 'Administrator', 'admin / (admin@admin.com)') + ]) + }, + { + service_name: 'GANGLIA', + display_name: 'Ganglia', + service_components: Em.A([ + serviceComponentGenerator('GANGLIA_SERVER', 'Server', 'h2') + ]) + }, + { + service_name: 'OOZIE', + display_name: 'Oozie', + service_components: Em.A([ + serviceComponentGenerator('OOZIE_SERVER', 'Server', 'h2'), + serviceComponentGenerator('Custom', 'Database', ' (New Derby Database)') + ]) + } + ]; + + tests.forEach(function(test) { + describe('Load review for `' + test.service_name + '` service', function(){ + it('{0} service should be displayed as {1}'.format(test.service_name, test.display_name), function() { + expect(this.controller.get('services').findProperty('service_name', test.service_name).get('display_name')).to.eql(test.display_name); + }); + it('{0}: all components present'.format(test.service_name), function() { + var serviceObj = this.controller.get('services').findProperty('service_name', test.service_name); + expect(test.service_components.length).to.be.eql(serviceObj.get('service_components.length')); + }); + test.service_components.forEach(function(serviceComponent) { + var testMessage = '`{0}` component present with `{1}` value and displayed as `{2}`'; + it(testMessage.format(serviceComponent.get('component_name'), serviceComponent.get('component_value'), serviceComponent.get('display_name')), function() { + var serviceObj = this.controller.get('services').findProperty('service_name', test.service_name); + var component; + if (serviceComponent.get('component_name') === 'Custom') { + component = serviceObj.get('service_components').findProperty('display_name', serviceComponent.get('display_name')); + } else + component = serviceObj.get('service_components').findProperty('component_name', serviceComponent.get('component_name')); + if (serviceComponent.get('component_name') !== 'Custom') + expect(component.get('component_name')).to.eql(serviceComponent.get('component_name')); + expect(component.get('component_value')).to.eql(serviceComponent.get('component_value')); + expect(component.get('display_name')).to.eql(serviceComponent.get('display_name')); + }); + }); + }) + }); + + after(function() { + modelSetup.cleanStackServiceComponent(); + }); + }); + describe('#removeHiveConfigs', function () { Em.A([ { http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/test/controllers/wizard/step9_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/wizard/step9_test.js b/ambari-web/test/controllers/wizard/step9_test.js index b7972fe..b9c57e0 100644 --- a/ambari-web/test/controllers/wizard/step9_test.js +++ b/ambari-web/test/controllers/wizard/step9_test.js @@ -23,6 +23,8 @@ require('models/stack_service_component'); require('models/hosts'); require('controllers/wizard/step9_controller'); require('utils/helper'); +require('utils/ajax/ajax'); + var modelSetup = require('test/init_model_test'); var c, obj; describe('App.InstallerStep9Controller', function () { http://git-wip-us.apache.org/repos/asf/ambari/blob/00f8d5c5/ambari-web/test/init_model_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/init_model_test.js b/ambari-web/test/init_model_test.js index 3ed3b06..1b4b183 100644 --- a/ambari-web/test/init_model_test.js +++ b/ambari-web/test/init_model_test.js @@ -19,21 +19,15 @@ var App = require('app'); require('models/stack_service_component'); require('mappers/server_data_mapper'); -require('mappers/stack_service_component_mapper'); +require('mappers/stack_service_mapper'); module.exports = { setupStackServiceComponent: function() { /** - * initialization of App.StackServiceComponent model + * initialization of App.StackServiceComponent and App.StackService models * @type {*} */ - var data = {items: Em.A([])}; - require('test/service_components').items.forEach(function(i) { - i.serviceComponents.forEach(function(sc) { - data.items.pushObject(sc.StackServiceComponents); - }); - }); - App.stackServiceComponentMapper.map(data); + App.stackServiceMapper.map(require('test/service_components')); }, cleanStackServiceComponent: function(){ App.StackServiceComponent.find().set('content',[]);