AMBARI-10701. hosts page rack tooltip hangs around (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ee3bfa11 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ee3bfa11 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ee3bfa11 Branch: refs/heads/trunk Commit: ee3bfa112e02e147e595e0eddb5eb44c38010b8c Parents: 571c192 Author: Alex Antonenko <hiv...@gmail.com> Authored: Thu Apr 23 16:55:41 2015 +0300 Committer: Alex Antonenko <hiv...@gmail.com> Committed: Thu Apr 23 18:04:49 2015 +0300 ---------------------------------------------------------------------- ambari-web/app/views/main/host.js | 1 + .../test/controllers/wizard/step8_test.js | 692 +++++++++++++++++++ .../test/controllers/wizard/step9_test.js | 324 +++++++++ 3 files changed, 1017 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/ee3bfa11/ambari-web/app/views/main/host.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/host.js b/ambari-web/app/views/main/host.js index d28a5d8..d3de708 100644 --- a/ambari-web/app/views/main/host.js +++ b/ambari-web/app/views/main/host.js @@ -216,6 +216,7 @@ App.MainHostView = App.TableView.extend(App.TableServerViewMixin, { willDestroyElement: function () { this.clearExpandedSections(); + $('.tooltip').remove(); }, clearExpandedSections: function () { http://git-wip-us.apache.org/repos/asf/ambari/blob/ee3bfa11/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 1b97f6d..2dd939a 100644 --- a/ambari-web/test/controllers/wizard/step8_test.js +++ b/ambari-web/test/controllers/wizard/step8_test.js @@ -236,6 +236,629 @@ describe('App.WizardStep8Controller', function () { }); }); + describe('#createCoreSiteObj', function () { + it('should return config', function () { + var content = Em.Object.create({ + services: Em.A([ + Em.Object.create({ + serviceName: 's1', + isSelected: true, + isInstalled: false + }), + Em.Object.create({ + serviceName: 's2', + isSelected: true, + isInstalled: false + }), + Em.Object.create({ + serviceName: 's3', + isSelected: true, + isInstalled: false + }), + Em.Object.create({ + serviceName: 'GLUSTERFS', + isSelected: false, + isInstalled: true, + configTypesRendered: {hdfs:'tag1'} + }) + ]) + }); + var installedServices = content.services.filterProperty('isInstalled', true); + var selectedServices = content.services.filterProperty('isSelected', true); + installerStep8Controller.set('content', content); + installerStep8Controller.set('installedServices', installedServices); + installerStep8Controller.set('selectedServices', selectedServices); + installerStep8Controller.set('configs', Em.A([ + Em.Object.create({ + name: 'fs_glusterfs_default_name', + filename: 'core-site.xml', + value: 'value', + overrides: Em.A([ + Em.Object.create({ + value: '4', + hosts: Em.A(['h1','h2']) + }) + ]) + }), + Em.Object.create({ + name: 'fs.defaultFS', + filename: 'core-site.xml', + value: 'value', + overrides: Em.A([ + Em.Object.create({ + value: '4', + hosts: Em.A(['h1','h2']) + }) + ]) + }), + Em.Object.create({ + name: 'glusterfs_defaultFS_name', + filename: 'core-site.xml', + value: 'value', + overrides: Em.A([ + Em.Object.create({ + value: '4', + hosts: Em.A(['h1','h2']) + }) + ]) + }) + ])); + var expected = { + "type": "core-site", + "tag": "version1", + "properties": { + "fs_glusterfs_default_name": "value", + "fs.defaultFS": "value", + "glusterfs_defaultFS_name": "value" + } + }; + + expect(installerStep8Controller.createCoreSiteObj()).to.eql(expected); + }); + }); + + describe('#createConfigurationGroups', function () { + beforeEach(function() { + sinon.stub(App.router,'get').returns(Em.Object.create({ + getDBProperty: function() { + return Em.A([ + Em.Object.create({ + value: 1 + }) + ]); + }, + getConfigAttributes: function() { + return Em.A(['atr']); + } + })); + }); + afterEach(function() { + App.router.get.restore(); + }); + it('should push group in properties', function () { + var content = Em.Object.create({ + configGroups: Em.A([ + Em.Object.create({ + isDefault: true, + service: Em.Object.create({ + id: 1 + }), + name: 'n1', + description: 'describe', + hosts: ['h1', 'h2'], + properties: Em.A([ + Em.Object.create({ + value: 'p1', + filename: 'file.xml' + }), + Em.Object.create({ + value: 'p2', + filename: 'file1.xml' + }) + ]) + }), + Em.Object.create({ + isDefault: false, + service: Em.Object.create({ + id: 2 + }), + name: 'n2', + hosts: ['h3', 'h4'], + description: 'describe1', + properties: Em.A([ + Em.Object.create({ + value: 'p3', + filename: 'file2.xml' + }), + Em.Object.create({ + value: 'p4', + filename: 'file3.xml' + }) + ]) + }) + ]) + }); + var defaultGroups = Em.A([ + Em.Object.create({ + group: 'n2', + filename: 'file5.xml' + }), + Em.Object.create({ + group: 'n1', + filename: 'file4.xml' + }) + ]); + installerStep8Controller.set('content', content); + installerStep8Controller.set('clusterName', 'name'); + installerStep8Controller.set('customNonDefaultGroupConfigs', defaultGroups); + installerStep8Controller.set('ajaxRequestsQueue', App.ajaxQueue.create()); + installerStep8Controller.get('ajaxRequestsQueue').clear(); + installerStep8Controller.createConfigurationGroups(); + var expected = [ + { + "value": "p3", + "filename": "file2.xml" + }, + { + "value": "p4", + "filename": "file3.xml" + }, + { + "group": "n2", + "filename": "file5.xml" + } + ]; + var result = JSON.parse(JSON.stringify(content.configGroups[1].properties)); + expect(result).to.eql(expected); + }); + }); + + describe('#getGlobConfigValueWithOverrides', function () { + it('should retun empty objects', function () { + expect(installerStep8Controller.getGlobConfigValueWithOverrides('','','')).to.eql({ + "value": "", + "overrides": [] + }); + }); + it('should retun overrides', function () { + var expression = '<cod index=[1]></cod index=[2]>'; + installerStep8Controller.set('configs', Em.A([ + Em.Object.create({ + name:'name', overrides: Em.A([ + Em.Object.create({ + value: '4', + hosts: Em.A(['h1','h2']) + }) + ]) + }) + ])); + var names = Em.A(['name0', 'name', 'name', 'ad']); + var result = { + "value": "undefinedundefined", + "overrides": [ + { + "value": "44", + "hosts": [ + "h1", + "h2" + ] + } + ] + }; + expect(installerStep8Controller.getGlobConfigValueWithOverrides(names,expression,'')).to.eql(result); + }); + }); + + describe('#isConfigsChanged', function () { + it('should return true if config changed', function () { + var properties = Em.Object.create({ + property:true, + property1: Em.Object.create({ + hasInitialValue: false, + isNotDefaultValue: false + }) + }); + var configs = Em.A([Em.Object.create({ + name: 'property' + })]); + expect(installerStep8Controller.isConfigsChanged(properties,configs)).to.be.true; + }); + }); + + describe('#loadServices', function () { + it('should load services', function () { + var services = Em.A([ + Em.Object.create({ + serviceName: 's1', + isSelected: true, + displayNameOnSelectServicePage: 's01', + isClientOnlyService: false, + serviceComponents: Em.A([ + Em.Object.create({ + isClient: true + }) + ]), + isHiddenOnSelectServicePage: false + }), + Em.Object.create({ + serviceName: 's2', + isSelected: true, + displayNameOnSelectServicePage: 's02', + serviceComponents: Em.A([ + Em.Object.create({ + isMaster: true + }) + ]), + isHiddenOnSelectServicePage: false + }), + Em.Object.create({ + serviceName: 's3', + isSelected: true, + displayNameOnSelectServicePage: 's03', + serviceComponents: Em.A([ + Em.Object.create({ + isHAComponentOnly: true + }) + ]), + isHiddenOnSelectServicePage: false + }), + Em.Object.create({ + serviceName: 's4', + isSelected: true, + displayNameOnSelectServicePage: 's03', + isClientOnlyService: true, + serviceComponents: Em.A([ + Em.Object.create({ + isClient: true + }) + ]), + isHiddenOnSelectServicePage: false + }) + ]); + var selectedServices = services.filterProperty('isSelected'); + var slaveComponentHosts = Em.A([ + Em.Object.create({ + componentName: 'CLIENT', + hostName: 'h1', + hosts: Em.A([ + Em.Object.create({hostName: 'h1', isInstalled: true}), + Em.Object.create({hostName: 'h2', isInstalled: false}) + ]) + }) + ]); + var content = Em.Object.create({ + services: services, + selectedServices: selectedServices, + slaveComponentHosts: slaveComponentHosts + }); + installerStep8Controller.set('content', content); + installerStep8Controller.set('services', Em.A([])); + installerStep8Controller.reopen({selectedServices: selectedServices}); + installerStep8Controller.loadServices(); + var expected = [ + { + "service_name": "s1", + "display_name": "s01", + "service_components": [] + }, + { + "service_name": "s2", + "display_name": "s02", + "service_components": [] + }, + { + "service_name": "s3", + "display_name": "s03", + "service_components": [] + }, + { + "service_name": "s4", + "display_name": "s03", + "service_components": [ + { + "component_name": "CLIENT", + "display_name": "Clients", + "component_value": "2 hosts" + } + ] + } + ]; + var result = JSON.parse(JSON.stringify(installerStep8Controller.get('services'))); + expect(result).to.be.eql(expected); + }); + }); + + describe('#removeClientsFromList', function () { + it('should remove h1', function () { + installerStep8Controller.set('content', Em.Object.create({ + hosts: Em.Object.create({ + h1: Em.Object.create({ + hostName: 'h1', + isInstalled: true, + hostComponents: Em.A([Em.Object.create({HostRoles: Em.Object.create({component_name: "h1"})})]) + }), + h2: Em.Object.create({ + hostName: 'h2', + isInstalled: true, + hostComponents: Em.A([Em.Object.create({HostRoles: Em.Object.create({component_name: "h2"})})]) + }) + }) + })); + var hostList = Em.A(['h1','h2']); + installerStep8Controller.removeClientsFromList('h1', hostList); + expect(JSON.parse(JSON.stringify(hostList))).to.eql(["h2"]); + }); + }); + + describe('#createSlaveAndClientsHostComponents', function () { + it('should return non install object', function () { + installerStep8Controller.set('content', Em.Object.create({ + masterComponentHosts: Em.A([ + Em.Object.create({ + componentName: 'CLIENT', + component: 'HBASE_MASTER', + hostName: 'h1' + }) + ]), + slaveComponentHosts: Em.A([ + Em.Object.create({ + componentName: 'CLIENT', + hostName: 'h1', + hosts: Em.A([ + Em.Object.create({hostName: 'h1', isInstalled: true}), + Em.Object.create({hostName: 'h2', isInstalled: false}) + ]) + }), + Em.Object.create({ + componentName: 'CLIENT1', + hostName: 'h1', + hosts: Em.A([ + Em.Object.create({hostName: 'h1', isInstalled: true}), + Em.Object.create({hostName: 'h2', isInstalled: false}) + ]) + }) + ]), + clients: Em.A([ + Em.Object.create({ + isInstalled: false + }) + ]), + services: Em.A([ + Em.Object.create({ + isInstalled: true, + serviceName: "name", + isClient: true + }) + ]), + hosts: Em.Object.create({ + h1: Em.Object.create({ + hostName: 'h1', + isInstalled: true, + hostComponents: Em.A([Em.Object.create({})]) + }), + h2: Em.Object.create({ + hostName: 'h2', + isInstalled: false, + hostComponents: Em.A([Em.Object.create({})]) + }) + }), + additionalClients: Em.A([{hostNames: "name", componentName: "client"}]) + })); + installerStep8Controller.set('ajaxRequestsQueue', App.ajaxQueue.create()); + installerStep8Controller.get('ajaxRequestsQueue').clear(); + installerStep8Controller.createSlaveAndClientsHostComponents(); + expect(installerStep8Controller.get('content.clients')[0].isInstalled).to.be.false; + }); + }); + + describe('#createAdditionalClientComponents', function () { + it('should bes equal to content.cluster.name', function () { + installerStep8Controller.set('content', Em.Object.create({ + masterComponentHosts: Em.A([ + Em.Object.create({ + componentName: 'CLIENT', + component: 'HBASE_MASTER', + hostName: 'h1' + }) + ]), + slaveComponentHosts: Em.A([ + Em.Object.create({ + componentName: 'CLIENT', + hostName: 'h1', + hosts: Em.A([ + Em.Object.create({hostName: 'h1', isInstalled: true}), + Em.Object.create({hostName: 'h2', isInstalled: false}) + ]) + }) + ]), + clients: Em.A([ + Em.Object.create({ + isInstalled: false + }) + ]), + services: Em.A([ + Em.Object.create({ + isInstalled: true, + serviceName: "name", + isClient: true + }) + ]), + hosts: Em.Object.create({ + h1: Em.Object.create({ + hostName: 'h1', + isInstalled: true, + hostComponents: Em.A([Em.Object.create({})]) + }), + h2: Em.Object.create({ + hostName: 'h2', + isInstalled: false, + hostComponents: Em.A([Em.Object.create({})]) + }) + }), + additionalClients: Em.A([{hostNames: "name", componentName: "client"}]) + })); + installerStep8Controller.set('ajaxRequestsQueue', App.ajaxQueue.create()); + installerStep8Controller.get('ajaxRequestsQueue').clear(); + installerStep8Controller.createAdditionalClientComponents(); + var result = [ + { + "hostNames": "name", + "componentName": "client" + } + ]; + var expected = installerStep8Controller.get('content.additionalClients'); + expect(JSON.parse(JSON.stringify(expected))).to.eql(result); + }); + }); + + describe('#assignComponentHosts', function () { + it('should return host name', function () { + var component = Em.Object.create({ + isMaster: true, + componentName: 'HBASE_MASTER', + hostName: 'h1' + }); + installerStep8Controller.set('content', Em.Object.create({ + masterComponentHosts:Em.A([ + Em.Object.create({component: 'HBASE_MASTER', hostName: 'h1'}) + ])})); + var res = installerStep8Controller.assignComponentHosts(component); + expect(res).to.equal("h1"); + }); + it('should return number of hosts', function () { + var component = Em.Object.create({ + componentName: 'HBASE_MASTER', + isClient: false, + hostName: 'h1' + }); + installerStep8Controller.set('content', Em.Object.create({ + slaveComponentHosts:Em.A([ + Em.Object.create({ + componentName: 'HBASE_MASTER', + hostName: 'h1', + hosts: [ + {hostName: 'h1'}, + {hostName: 'h2'} + ] + }) + ])})); + var res = installerStep8Controller.assignComponentHosts(component); + expect(res).to.equal("2 hosts"); + }); + }); + + describe('#loadClusterInfo', function () { + beforeEach(function () { + sinon.stub(App.Stack, 'find', function(){ + return Em.A([ + Em.Object.create({isSelected: false, hostName: 'h1'}), + Em.Object.create({ + isSelected: true, + hostName: 'h2', + operatingSystems: Em.A([Em.Object.create({ + name:'windows', + isSelected: true, + repositories: Em.A([Em.Object.create({ + baseUrl: "url", + osType: "2", + repoId: "3" + })]) + })]) + }), + Em.Object.create({isSelected: false, hostName: 'h3'}) + ]); + }); + }); + afterEach(function () { + App.Stack.find.restore(); + }); + it('should return config with display_name', function () { + installerStep8Controller.set('clusterInfo', Em.A([])); + installerStep8Controller.loadClusterInfo(); + var res = [{ + "config_name":"cluster", + "display_name":"Cluster Name" + },{ + "config_name":"hosts", + "display_name":"Total Hosts", + "config_value":"0 (0 new)" + }]; + var calcRes = JSON.parse(JSON.stringify(installerStep8Controller.get('clusterInfo'))); + expect(calcRes).to.eql(res); + }); + }); + + describe('#loadConfigs', function () { + beforeEach(function () { + sinon.stub(App.config, 'excludeUnsupportedConfigs', Em.K); + sinon.stub(installerStep8Controller, 'loadUiSideConfigs', Em.K); + }); + afterEach(function () { + App.config.excludeUnsupportedConfigs.restore(); + installerStep8Controller.loadUiSideConfigs.restore(); + }); + it('should stringify serviceConfigProperties', function () { + var serviceConfigProperties = [ + {name: 'oozie_hostname', value: true}, + {name: 'oozie_existing_oracle_host', value: true}, + {name: 'hive_database', value: false}, + {name: 'oozie_database', value: false} + ]; + var services = Em.A([ + Em.Object.create({serviceName: 's1'}), + Em.Object.create({serviceName: 's2'}), + Em.Object.create({serviceName: 's3'}) + ]); + var content = Em.Object.create({ + services: services, + serviceConfigProperties: serviceConfigProperties + }); + installerStep8Controller.set('content', content); + installerStep8Controller.set('configs', Em.A([])); + installerStep8Controller.loadConfigs(); + var expected = [ + {'name': 'oozie_hostname', 'value': 'true'}, + {'name': 'oozie_existing_oracle_host', 'value': 'true'}, + {'name': 'hive_database', 'value': 'false'}, + {'name': 'oozie_database', 'value': 'false'} + ]; + expect(JSON.parse(JSON.stringify(serviceConfigProperties))).to.eql(expected); + }); + }); + + describe('#isDeployStarted', function () { + it('should be undefined', function () { + installerStep8Controller.set('isSubmitDisabled',false); + expect(installerStep8Controller.get('isDeployStarted')).to.equal(undefined); + }); + }); + + describe('#configMapping', function () { + it('should object with isOverridable', function () { + var configMapping = [ + {foreignKey: null, templateName: 't1', value: 'v1', name: 'c1', filename: 'f1'}, + {foreignKey: null, templateName: 't2', value: 'v2', name: 'c2', filename: 'f2'}, + {foreignKey: null, templateName: 't3', value: 'v3', name: 'c3', filename: 'f2'}, + {foreignKey: null, templateName: 't4', value: 'v4', name: 'c4', filename: 'f1'} + ]; + installerStep8Controller.set(configMapping); + var result = { + "name": "hadoop.proxyuser.<foreignKey[0]>.groups", + "templateName": [ + "proxyuser_group" + ], + "foreignKey": [ + "hive_user" + ], + "value": "<templateName[0]>", + "filename": "core-site.xml", + "isOverridable": true + }; + + expect(installerStep8Controller.get('configMapping')[0]).to.eql(result); + }); + }); + describe('#loadStep', function () { beforeEach(function () { sinon.stub(installerStep8Controller, 'clearStep', Em.K); @@ -299,6 +922,17 @@ describe('App.WizardStep8Controller', function () { }, { globals: [ + {name: 'hive_database', value: 'New PostgreSQL Database'}, + {name: 'hive_database_type', value: 'postgresql'}, + {name: 'hive_ambari_host', value: 'h1'}, + {name: 'hive_hostname', value: 'h2'} + ], + removed: Em.A(['hive_existing_mysql_database', 'hive_existing_oracle_database', 'hive_existing_postgresql_database', 'hive_master_hosts']), + m: 'hive_database: New PostgreSQL Database', + host: 'h1' + }, + { + globals: [ {name: 'hive_database', value: 'Existing MySQL Database'}, {name: 'hive_database_type', value: 'mysql'}, {name: 'hive_existing_mysql_host', value: 'h1'}, @@ -310,6 +944,28 @@ describe('App.WizardStep8Controller', function () { }, { globals: [ + {name: 'hive_database', value: 'Existing MSSQL Server database with SQL authentication'}, + {name: 'hive_database_type', value: 'mssql_server'}, + {name: 'hive_existing_mssql_server_host', value: 'h1'}, + {name: 'hive_hostname', value: 'h2'} + ], + removed: Em.A(['hive_ambari_database', 'hive_existing_oracle_database', 'hive_existing_postgresql_database', 'hive_master_hosts']), + m: 'hive_database: Existing MSSQL Server Database', + host: 'h1' + }, + { + globals: [ + {name: 'hive_database', value: 'Existing MSSQL Server database with integrated authentication'}, + {name: 'hive_database_type', value: 'mssql_server2'}, + {name: 'hive_existing_mssql_server_2_host', value: 'h1'}, + {name: 'hive_hostname', value: 'h2'} + ], + removed: Em.A(['hive_ambari_database', 'hive_existing_oracle_database', 'hive_existing_postgresql_database', 'hive_master_hosts']), + m: 'hive_database: Existing MSSQL Server database with integrated authentication', + host: 'h1' + }, + { + globals: [ {name: 'hive_database', value: 'Existing PostgreSQL Database'}, {name: 'hive_database_type', value: 'postgresql'}, {name: 'hive_existing_postgresql_host', value: 'h1'}, @@ -380,6 +1036,26 @@ describe('App.WizardStep8Controller', function () { }, { globals: [ + {name: 'oozie_database', value: 'Existing MSSQL Server database with SQL authentication'}, + {name: 'oozie_existing_mssql_server_host', value: 'h1'}, + {name: 'oozie_hostname', value: 'h2'} + ], + removed: Em.A(['oozie_existing_mssql_server_database', 'oozie_existing_mssql_server_2_database', 'oozie_existing_mysql_database']), + m: 'oozie_database: Existing MSSQL with SQL authentication Database', + host: 'h1' + }, + { + globals: [ + {name: 'oozie_database', value: 'Existing MSSQL Server database with integrated authentication'}, + {name: 'oozie_existing_mssql_server_2_host', value: 'h1'}, + {name: 'oozie_hostname', value: 'h2'} + ], + removed: Em.A(['oozie_existing_mssql_server_database', 'oozie_existing_oracle_database', 'oozie_existing_mysql_database']), + m: 'oozie_database: Existing MSSQL with integrated authentication Database', + host: 'h1' + }, + { + globals: [ {name: 'oozie_database', value: 'Existing Oracle Database'}, {name: 'oozie_existing_oracle_host', value: 'h1'}, {name: 'oozie_hostname', value: 'h2'} @@ -601,6 +1277,22 @@ describe('App.WizardStep8Controller', function () { }, { serviceConfigProperties: [ + {name: 'hive_database', value: 'Existing MSSQL Server database with SQL authentication'}, + {name: 'hive_existing_mssql_server_database', value: 'dbname'} + ], + m: 'Existing MSSQL Server database with SQL authentication', + e: 'dbname (Existing MSSQL Server database with SQL authentication)' + }, + { + serviceConfigProperties: [ + {name: 'hive_database', value: 'Existing MSSQL Server database with integrated authentication'}, + {name: 'hive_existing_mssql_server_2_database', value: 'dbname'} + ], + m: 'Existing MSSQL Server database with integrated authentication', + e: 'dbname (Existing MSSQL Server database with integrated authentication)' + }, + { + serviceConfigProperties: [ {name: 'hive_database', value: 'New PostgreSQL Database'} ], m: 'New PostgreSQL Database', http://git-wip-us.apache.org/repos/asf/ambari/blob/ee3bfa11/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 b16e4d2..d0a895a 100644 --- a/ambari-web/test/controllers/wizard/step9_test.js +++ b/ambari-web/test/controllers/wizard/step9_test.js @@ -52,6 +52,9 @@ describe('App.InstallerStep9Controller', function () { obj = App.InstallerController.create(); sinon.stub(App.ajax, 'send', function() { return { + then: function() { + return true; + }, retry: function() { return { then: Em.K, @@ -199,6 +202,148 @@ describe('App.InstallerStep9Controller', function () { }); }); + describe('#setParseHostInfo', function () { + var tasks = Em.A([ + Em.Object.create({ + Tasks: Em.Object.create({ + host_name: 'host1', + status: 'PENDING' + }) + }), + Em.Object.create({ + Tasks: Em.Object.create({ + host_name: 'host1', + status: 'PENDING' + }) + }) + ]); + var content = Em.Object.create({ + cluster: Em.Object.create({ + requestId: '11', + status: 'PENDING' + }) + }); + beforeEach(function(){ + c.set('content', content) + }); + it('Should make parseHostInfo false"', function () { + var polledData = Em.Object.create({ + tasks: tasks, + Requests: Em.Object.create({ + id: '222' + }) + }); + c.setParseHostInfo(polledData); + expect(c.get('parseHostInfo')).to.be.false; + }); + it('Should set polledData"', function () { + var polledData = Em.Object.create({ + tasks: tasks, + Requests: Em.Object.create({ + id: '11' + }) + }); + c.setParseHostInfo(polledData); + var expected = [ + { + "Tasks": { + "status": "PENDING", + "host_name": "host1", + "request_id": "11" + } + }, + { + "Tasks": { + "status": "PENDING", + "host_name": "host1", + "request_id": "11" + } + } + ]; + var result = JSON.parse(JSON.stringify(c.get('polledData'))); + expect(result).to.eql(expected); + }); + it('Should set progress for hosts"', function () { + var polledData = Em.Object.create({ + tasks: tasks, + Requests: Em.Object.create({ + id: '11' + }) + }); + var hosts = Em.A([ + Em.Object.create({ + name: 'host1', + logTasks: [ + {Tasks: {role: 'HDFS_CLIENT'}}, + {Tasks: {role: 'DATANODE'}} + ], + status: 'old_status', + progress: '10', + isNoTasksForInstall: true, + e: {status: 'old_status', progress: '10'} + }), + Em.Object.create({ + name: 'host2', + logTasks: [ + {Tasks: {role: 'HDFS_CLIENT'}} + ], + status: 'old_status', + progress: '10', + e: {status: 'success', progress: '100'} + }) + ]); + c.set('hosts', hosts); + c.setParseHostInfo(polledData); + var expected = [ + { + "name": "host1", + "logTasks": [ + { + "Tasks": { + "role": "HDFS_CLIENT", + "status": "PENDING" + } + }, + { + "Tasks": { + "role": "DATANODE" + } + } + ], + "progress": "0", + "isNoTasksForInstall": false, + "e": { + "status": "old_status", + "progress": "10" + }, + "status": "in_progress", + "message": "" + }, + { + "name": "host2", + "logTasks": [ + { + "Tasks": { + "role": "HDFS_CLIENT" + } + } + ], + "progress": "33", + "e": { + "status": "success", + "progress": "100" + }, + "status": "pending", + "isNoTasksForInstall": true, + "message": "Install complete (Waiting to start)" + } + ]; + + var result = JSON.parse(JSON.stringify(c.get('hosts'))); + expect(result).to.eql(expected); + }); + }); + var hosts_for_load_and_render = { 'host1': { message: 'message1', @@ -266,6 +411,185 @@ describe('App.InstallerStep9Controller', function () { }); }); + describe('#isServicesStarted', function () { + it('Should return false when server not started', function () { + var polledData = Em.A([ + Em.Object.create({ + Tasks: Em.Object.create({ + status: 'PENDING' + }) + }), + Em.Object.create({ + Tasks: Em.Object.create({ + status: 'PENDING' + }) + }) + ]); + expect(c.isServicesStarted(polledData)).to.be.false; + }); + it('Should return true when server started', function () { + var polledData = Em.A([ + Em.Object.create({ + Tasks: Em.Object.create({ + status: 'NONE' + }) + }), + Em.Object.create({ + Tasks: Em.Object.create({ + status: 'NONE' + }) + }) + ]); + expect(c.isServicesStarted(polledData)).to.be.true; + }); + it('Should return true when tasks completed', function () { + var polledData = Em.A([ + Em.Object.create({ + Tasks: Em.Object.create({ + status: 'COMPLETED' + }) + }), + Em.Object.create({ + Tasks: Em.Object.create({ + status: 'COMPLETED' + }) + }) + ]); + expect(c.isServicesStarted(polledData)).to.be.true; + }); + }); + + describe('#setIsServicesInstalled', function () { + it('Should return 100% completed', function () { + var polledData = Em.A([ + Em.Object.create({ + Tasks: Em.Object.create({ + status: 'NONE' + }) + }), + Em.Object.create({ + Tasks: Em.Object.create({ + status: 'NONE' + }) + }) + ]); + c.set('status', 'failed'); + c.set('hosts', Em.A([ + Em.Object.create({ + progress: 0 + }) + ])); + c.setIsServicesInstalled(polledData); + expect(c.get('progress')).to.equal('100'); + }); + it('Should return 34% completed', function () { + var polledData = Em.A([ + Em.Object.create({ + Tasks: Em.Object.create({ + status: 'NONE' + }) + }), + Em.Object.create({ + Tasks: Em.Object.create({ + status: 'NONE' + }) + }) + ]); + c.set('status', ''); + c.set('hosts', Em.A([ + Em.Object.create({ + progress: 0 + }) + ])); + c.set('content', Em.Object.create({ + controllerName: 'installerController' + })); + c.setIsServicesInstalled(polledData); + expect(c.get('progress')).to.equal('34'); + }); + }); + + describe('#launchStartServices', function () { + beforeEach(function() { + sinon.stub(App, 'get', function(k) { + if (k === 'components.slaves') + return ["TASKTRACKER", "DATANODE", + "JOURNALNODE", "ZKFC", + "APP_TIMELINE_SERVER", + "NODEMANAGER", + "GANGLIA_MONITOR", + "HBASE_REGIONSERVER", + "SUPERVISOR", + "FLUME_HANDLER"]; + return true; + }); + }); + afterEach(function() { + App.get.restore(); + }); + var tests = [ + { + expected: [], + message: 'should return query', + controllerName: 'addHostController', + hosts: Em.A([ + Em.Object.create({ + name: 'h1' + }), + Em.Object.create({ + name: 'h2' + }) + ]) + }, + { + expected: [], + text: 'should return server info', + controllerName: 'addServiceController', + services: Em.A([ + Em.Object.create({ + serviceName: 'OOZIE', + isSelected: true, + isInstalled: false + }), + Em.Object.create({ + serviceName: 'h2', + isSelected: false, + isInstalled: true + }) + ]) + }, + { + expected: [], + text: 'should return default data', + controllerName: 'addHostContro', + hosts: Em.A([ + Em.Object.create({ + name: 'h1' + }), + Em.Object.create({ + name: 'h2' + }) + ]) + } + ]; + tests.forEach(function(test) { + it(test.message, function () { + var content = Em.Object.create({ + controllerName: test.controllerName, + services: test.services + }); + var wizardController = Em.Object.create({ + getDBProperty: function() { + return test.hosts + } + }); + c.set('content', content); + c.set('wizardController', wizardController); + expect(c.launchStartServices(function(){})).to.be.true; + }); + }) + }); + describe('#hostHasClientsOnly', function () { var tests = Em.A([ {