Repository: ambari Updated Branches: refs/heads/trunk 3f5f8878c -> af0e297ee
AMBARI-5048. Host Details page: When adding slaves, INIT state is shown as "Unknown" with "Start" as allowable action. (onechiporenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/af0e297e Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/af0e297e Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/af0e297e Branch: refs/heads/trunk Commit: af0e297eec5abcf1741e8146c876a0c43196267d Parents: 3f5f887 Author: Oleg Nechiporenko <[email protected]> Authored: Wed Mar 12 14:21:29 2014 +0200 Committer: Oleg Nechiporenko <[email protected]> Committed: Wed Mar 12 14:32:54 2014 +0200 ---------------------------------------------------------------------- ambari-web/app/assets/test/tests.js | 1 + ambari-web/app/models/host_component.js | 17 ++ .../main/host/details/host_component.hbs | 31 ++-- .../main/host/details/host_component_view.js | 12 +- .../heatmap_metric_diskspaceused_test.js | 10 +- ambari-web/test/models/host_component_test.js | 33 ++++ .../test/views/main/dashboard/widget_test.js | 8 +- .../host/details/host_component_view_test.js | 179 +++++++++---------- 8 files changed, 180 insertions(+), 111 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af0e297e/ambari-web/app/assets/test/tests.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/assets/test/tests.js b/ambari-web/app/assets/test/tests.js index 8d80cae..8785cc2 100644 --- a/ambari-web/app/assets/test/tests.js +++ b/ambari-web/app/assets/test/tests.js @@ -109,4 +109,5 @@ require('test/views/main/host/details/host_component_views/decommissionable_test require('test/views/common/configs/services_config_test'); require('test/views/wizard/step9_view_test'); require('test/models/host_test'); +require('test/models/host_component_test'); require('test/models/rack_test'); http://git-wip-us.apache.org/repos/asf/ambari/blob/af0e297e/ambari-web/app/models/host_component.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/host_component.js b/ambari-web/app/models/host_component.js index f2b6e69..ebf3ca2 100644 --- a/ambari-web/app/models/host_component.js +++ b/ambari-web/app/models/host_component.js @@ -188,6 +188,7 @@ App.HostComponentStatus = { upgrade_failed: "UPGRADE_FAILED", unknown: "UNKNOWN", disabled: "DISABLED", + init: "INIT", /** * Get host component status in "machine" format @@ -242,8 +243,24 @@ App.HostComponentStatus = { return 'Upgrade Failed'; case this.disabled: return 'Disabled'; + case this.init: + return 'Install Pending...'; } return 'Unknown'; + }, + + /** + * Get list of possible <code>App.HostComponent</code> statuses + * @returns {String[]} + */ + getStatusesList: function() { + var ret = []; + for (var st in this) { + if (this.hasOwnProperty(st) && Em.typeOf(this[st]) == 'string') { + ret.push(this[st]); + } + } + return ret; } }; http://git-wip-us.apache.org/repos/asf/ambari/blob/af0e297e/ambari-web/app/templates/main/host/details/host_component.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/host/details/host_component.hbs b/ambari-web/app/templates/main/host/details/host_component.hbs index 560aa13..2e54629 100644 --- a/ambari-web/app/templates/main/host/details/host_component.hbs +++ b/ambari-web/app/templates/main/host/details/host_component.hbs @@ -76,11 +76,13 @@ </li> {{/if}} {{#unless view.isStart}} - <li {{bindAttr class="view.isUpgradeFailed:hidden view.isInstallFailed:hidden view.isDecommissioning:hidden view.noActionAvailable"}}> - <a href="javascript:void(null)" data-toggle="modal" {{action "startComponent" view.content target="controller"}}> - {{t common.start}} - </a> - </li> + {{#unless view.isInit}} + <li {{bindAttr class="view.isUpgradeFailed:hidden view.isInstallFailed:hidden view.isDecommissioning:hidden view.noActionAvailable"}}> + <a href="javascript:void(null)" data-toggle="modal" {{action "startComponent" view.content target="controller"}}> + {{t common.start}} + </a> + </li> + {{/unless}} {{/unless}} {{#if view.isUpgradeFailed}} <li {{bindAttr class="view.noActionAvailable"}}> @@ -104,11 +106,13 @@ </li> {{/if}} {{#if view.isActive}} - <li rel='passiveTooltip' {{bindAttr class="view.noActionAvailable" title="view.passiveImpliedTextStatus"}}> - <a href="javascript:void(null)" {{bindAttr class="view.isImplied:disabled"}} data-toggle="modal" {{action "turnOnOffPassiveConfirmation" view.content target="controller"}}> - {{t passiveState.turnOn}} - </a> - </li> + {{#unless view.isInit}} + <li rel='passiveTooltip' {{bindAttr class="view.noActionAvailable" title="view.passiveImpliedTextStatus"}}> + <a href="javascript:void(null)" {{bindAttr class="view.isImplied:disabled"}} data-toggle="modal" {{action "turnOnOffPassiveConfirmation" view.content target="controller"}}> + {{t passiveState.turnOn}} + </a> + </li> + {{/unless}} {{else}} <li rel='passiveTooltip' {{bindAttr class="view.noActionAvailable" title="view.passiveImpliedTextStatus"}}> <a href="javascript:void(null)" {{bindAttr class="view.isImplied:disabled"}} data-toggle="modal" {{action "turnOnOffPassiveConfirmation" view.content target="controller"}}> @@ -117,6 +121,13 @@ </li> {{/if}} {{/unless}} + {{#if view.isInit}} + <li {{bindAttr class="view."}}> + <a href="javascript:void(null)" data-toggle="modal" {{action "installComponent" view.content target="controller"}}> + {{t common.reinstall}} + </a> + </li> + {{/if}} {{#if view.isDeletableComponent}} <li {{bindAttr class="view.isDeleteComponentDisabled:disabled"}}> <a href="javascript:void(null)" data-toggle="modal" {{action "deleteComponent" view.content target="controller"}}> http://git-wip-us.apache.org/repos/asf/ambari/blob/af0e297e/ambari-web/app/views/main/host/details/host_component_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/host/details/host_component_view.js b/ambari-web/app/views/main/host/details/host_component_view.js index a68f0f2..9432120 100644 --- a/ambari-web/app/views/main/host/details/host_component_view.js +++ b/ambari-web/app/views/main/host/details/host_component_view.js @@ -147,7 +147,7 @@ App.HostComponentView = Em.View.extend({ * @type {bool} */ isStart: function () { - return (this.get('workStatus') == App.HostComponentStatus.started || this.get('workStatus') == App.HostComponentStatus.starting); + return [App.HostComponentStatus.started, App.HostComponentStatus.starting].contains(this.get('workStatus')); }.property('workStatus'), /** @@ -167,6 +167,14 @@ App.HostComponentView = Em.View.extend({ }.property('workStatus'), /** + * For Init state + * @type {bool} + */ + isInit: function() { + return this.get('workStatus') == App.HostComponentStatus.init; + }.property('workStatus'), + + /** * No action available while component is starting/stopping/unknown * @type {String} */ @@ -217,7 +225,7 @@ App.HostComponentView = Em.View.extend({ * @type {bool} */ isDeleteComponentDisabled: function () { - return ![App.HostComponentStatus.stopped, App.HostComponentStatus.unknown, App.HostComponentStatus.install_failed, App.HostComponentStatus.upgrade_failed].contains(this.get('workStatus')); + return ![App.HostComponentStatus.stopped, App.HostComponentStatus.unknown, App.HostComponentStatus.install_failed, App.HostComponentStatus.upgrade_failed, App.HostComponentStatus.init].contains(this.get('workStatus')); }.property('workStatus'), /** http://git-wip-us.apache.org/repos/asf/ambari/blob/af0e297e/ambari-web/test/controllers/main/charts/heatmap_metrics/heatmap_metric_diskspaceused_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/charts/heatmap_metrics/heatmap_metric_diskspaceused_test.js b/ambari-web/test/controllers/main/charts/heatmap_metrics/heatmap_metric_diskspaceused_test.js index 2875fa7..312c9c6 100644 --- a/ambari-web/test/controllers/main/charts/heatmap_metrics/heatmap_metric_diskspaceused_test.js +++ b/ambari-web/test/controllers/main/charts/heatmap_metrics/heatmap_metric_diskspaceused_test.js @@ -22,7 +22,7 @@ require('controllers/main/charts/heatmap_metrics/heatmap_metric_diskspaceused'); describe('App.MainChartHeatmapDiskSpaceUsedMetric', function () { - var tests = [ + var tests = Em.A([ { json:{ "items" : [ @@ -40,7 +40,7 @@ describe('App.MainChartHeatmapDiskSpaceUsedMetric', function () { ] }, m: 'One host', - e: {'dev01.hortonworks.com': '11.4'} + e: {'dev01.hortonworks.com': 11.37} }, { json:{ @@ -70,7 +70,7 @@ describe('App.MainChartHeatmapDiskSpaceUsedMetric', function () { ] }, m: 'Two hosts', - e: {'dev01.hortonworks.com': '11.4', 'dev02.hortonworks.com': '11.4'} + e: {'dev01.hortonworks.com': 11.37, 'dev02.hortonworks.com': 11.37} }, { json:{ @@ -97,9 +97,9 @@ describe('App.MainChartHeatmapDiskSpaceUsedMetric', function () { ] }, m: 'Two hosts, One without metric', - e: {'dev01.hortonworks.com': '11.4'} + e: {'dev01.hortonworks.com': 11.37} } - ]; + ]); describe('#metricMapper()', function() { var mainChartHeatmapDiskSpaceUsedMetric = App.MainChartHeatmapDiskSpaceUsedMetric.create(); http://git-wip-us.apache.org/repos/asf/ambari/blob/af0e297e/ambari-web/test/models/host_component_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/models/host_component_test.js b/ambari-web/test/models/host_component_test.js new file mode 100644 index 0000000..f9f14a0 --- /dev/null +++ b/ambari-web/test/models/host_component_test.js @@ -0,0 +1,33 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var App = require('app'); +require('models/host_component'); + +describe('App.HostComponentStatus', function() { + + describe('#getStatusesList', function() { + + it('allowed statuses', function() { + var statuses = ["STARTED","STARTING","INSTALLED","STOPPING","INSTALL_FAILED","INSTALLING","UPGRADE_FAILED","UNKNOWN","DISABLED","INIT"]; + expect(App.HostComponentStatus.getStatusesList()).to.include.members(statuses); + expect(statuses).to.include.members(App.HostComponentStatus.getStatusesList()); + }); + }); + +}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/af0e297e/ambari-web/test/views/main/dashboard/widget_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/main/dashboard/widget_test.js b/ambari-web/test/views/main/dashboard/widget_test.js index f1e0436..057b069 100644 --- a/ambari-web/test/views/main/dashboard/widget_test.js +++ b/ambari-web/test/views/main/dashboard/widget_test.js @@ -33,12 +33,12 @@ describe('App.DashboardWidgetView', function() { var tests = [ { h: ['', ''], - e: 'simple-text-hidden-two-line', + e: 'content-hidden-two-line', m: '2 lines' }, { h: ['', '', ''], - e: 'simple-text-hidden-three-line', + e: 'content-hidden-three-line', m: '3 lines' }, { @@ -53,12 +53,12 @@ describe('App.DashboardWidgetView', function() { }, { h: ['', '', '', '', ''], - e: 'simple-text-hidden-five-line', + e: 'content-hidden-five-line', m: '5 lines' }, { h: ['', '', '', ''], - e: 'simple-text-hidden-four-line', + e: 'content-hidden-four-line', m: '4 lines' } ]; http://git-wip-us.apache.org/repos/asf/ambari/blob/af0e297e/ambari-web/test/views/main/host/details/host_component_view_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/main/host/details/host_component_view_test.js b/ambari-web/test/views/main/host/details/host_component_view_test.js index 21c72d4..cac172d 100644 --- a/ambari-web/test/views/main/host/details/host_component_view_test.js +++ b/ambari-web/test/views/main/host/details/host_component_view_test.js @@ -126,15 +126,15 @@ describe('App.HostComponentView', function() { describe('#isUpgradeFailed', function() { - var tests = Em.A([ - {workStatus: 'UPGRADE_FAILED', e: true}, - {workStatus: 'OTHER_STATUS', e: false} - ]); - - tests.forEach(function(test) { - it(test.workStatus, function() { - hostComponentView.set('content', {workStatus: test.workStatus}); - expect(hostComponentView.get('isUpgradeFailed')).to.equal(test.e); + var tests = ['UPGRADE_FAILED']; + var testE = true; + var defaultE = false; + + App.HostComponentStatus.getStatusesList().forEach(function(status) { + it(status, function() { + hostComponentView.set('content', {workStatus: status}); + var e = tests.contains(status) ? testE : defaultE; + expect(hostComponentView.get('isUpgradeFailed')).to.equal(e); }); }); @@ -142,15 +142,15 @@ describe('App.HostComponentView', function() { describe('#isInstallFailed', function() { - var tests = Em.A([ - {workStatus: 'INSTALL_FAILED', e: true}, - {workStatus: 'OTHER_STATUS', e: false} - ]); + var tests = ['INSTALL_FAILED']; + var testE = true; + var defaultE = false; - tests.forEach(function(test) { - it(test.workStatus, function() { - hostComponentView.set('content', {workStatus: test.workStatus}); - expect(hostComponentView.get('isInstallFailed')).to.equal(test.e); + App.HostComponentStatus.getStatusesList().forEach(function(status) { + it(status, function() { + hostComponentView.set('content', {workStatus: status}); + var e = tests.contains(status) ? testE : defaultE; + expect(hostComponentView.get('isInstallFailed')).to.equal(e); }); }); @@ -158,16 +158,15 @@ describe('App.HostComponentView', function() { describe('#isStart', function() { - var tests = Em.A([ - {workStatus: 'STARTED', e: true}, - {workStatus: 'STARTING', e: true}, - {workStatus: 'OTHER_STATUS', e: false} - ]); + var tests = ['STARTED','STARTING']; + var testE = true; + var defaultE = false; - tests.forEach(function(test) { - it(test.workStatus, function() { - hostComponentView.set('content', {workStatus: test.workStatus}); - expect(hostComponentView.get('isStart')).to.equal(test.e); + App.HostComponentStatus.getStatusesList().forEach(function(status) { + it(status, function() { + hostComponentView.set('content', {workStatus: status}); + var e = tests.contains(status) ? testE : defaultE; + expect(hostComponentView.get('isStart')).to.equal(e); }); }); @@ -175,15 +174,15 @@ describe('App.HostComponentView', function() { describe('#isStop', function() { - var tests = Em.A([ - {workStatus: 'INSTALLED', e: true}, - {workStatus: 'OTHER_STATUS', e: false} - ]); + var tests = ['INSTALLED']; + var testE = true; + var defaultE = false; - tests.forEach(function(test) { - it(test.workStatus, function() { - hostComponentView.set('content', {workStatus: test.workStatus}); - expect(hostComponentView.get('isStop')).to.equal(test.e); + App.HostComponentStatus.getStatusesList().forEach(function(status) { + it(status, function() { + hostComponentView.set('content', {workStatus: status}); + var e = tests.contains(status) ? testE : defaultE; + expect(hostComponentView.get('isStop')).to.equal(e); }); }); @@ -191,15 +190,31 @@ describe('App.HostComponentView', function() { describe('#isInstalling', function() { - var tests = Em.A([ - {workStatus: 'INSTALLING', e: true}, - {workStatus: 'OTHER_STATUS', e: false} - ]); + var tests = ['INSTALLING']; + var testE = true; + var defaultE = false; - tests.forEach(function(test) { - it(test.workStatus, function() { - hostComponentView.set('content', {workStatus: test.workStatus}); - expect(hostComponentView.get('isInstalling')).to.equal(test.e); + App.HostComponentStatus.getStatusesList().forEach(function(status) { + it(status, function() { + hostComponentView.set('content', {workStatus: status}); + var e = tests.contains(status) ? testE : defaultE; + expect(hostComponentView.get('isInstalling')).to.equal(e); + }); + }); + + }); + + describe('#isInit', function() { + + var tests = ['INIT']; + var testE = true; + var defaultE = false; + + App.HostComponentStatus.getStatusesList().forEach(function(status) { + it(status, function() { + hostComponentView.set('content', {workStatus: status}); + var e = tests.contains(status) ? testE : defaultE; + expect(hostComponentView.get('isInit')).to.equal(e); }); }); @@ -207,18 +222,15 @@ describe('App.HostComponentView', function() { describe('#noActionAvailable', function() { - var tests = Em.A([ - {workStatus: 'STARTING', e: 'hidden'}, - {workStatus: 'STOPPING', e: 'hidden'}, - {workStatus: 'UNKNOWN', e: 'hidden'}, - {workStatus: 'DISABLED', e: 'hidden'}, - {workStatus: 'OTHER_STATUS', e: ''} - ]); + var tests = ['STARTING', 'STOPPING', 'UNKNOWN', 'DISABLED']; + var testE = 'hidden'; + var defaultE = ''; - tests.forEach(function(test) { - it(test.workStatus, function() { - hostComponentView.set('content', {workStatus: test.workStatus}); - expect(hostComponentView.get('noActionAvailable')).to.equal(test.e); + App.HostComponentStatus.getStatusesList().forEach(function(status) { + it(status, function() { + hostComponentView.set('content', {workStatus: status}); + var e = tests.contains(status) ? testE : defaultE; + expect(hostComponentView.get('noActionAvailable')).to.equal(e); }); }); @@ -286,15 +298,15 @@ describe('App.HostComponentView', function() { describe('#isRestartComponentDisabled', function() { - var tests = Em.A([ - {workStatus: 'STARTED', e: false}, - {workStatus: 'OTHER_STATUS', e: true} - ]); + var tests = ['STARTED']; + var testE = false; + var defaultE = true; - tests.forEach(function(test) { - it(test.workStatus, function() { - hostComponentView.set('content', {workStatus: test.workStatus}); - expect(hostComponentView.get('isRestartComponentDisabled')).to.equal(test.e); + App.HostComponentStatus.getStatusesList().forEach(function(status) { + it(status, function() { + hostComponentView.set('content', {workStatus: status}); + var e = tests.contains(status) ? testE : defaultE; + expect(hostComponentView.get('isRestartComponentDisabled')).to.equal(e); }); }); @@ -302,18 +314,15 @@ describe('App.HostComponentView', function() { describe('#isDeleteComponentDisabled', function() { - var tests = Em.A([ - {workStatus: 'INSTALLED', e: false}, - {workStatus: 'UNKNOWN', e: false}, - {workStatus: 'INSTALL_FAILED', e: false}, - {workStatus: 'UPGRADE_FAILED', e: false}, - {workStatus: 'OTHER_STATUS', e: true} - ]); + var tests = ['INSTALLED', 'UNKNOWN', 'INSTALL_FAILED', 'UPGRADE_FAILED', 'INIT']; + var testE = false; + var defaultE = true; - tests.forEach(function(test) { - it(test.workStatus, function() { - hostComponentView.set('content', {workStatus: test.workStatus}); - expect(hostComponentView.get('isDeleteComponentDisabled')).to.equal(test.e); + App.HostComponentStatus.getStatusesList().forEach(function(status) { + it(status, function() { + hostComponentView.set('content', {workStatus: status}); + var e = tests.contains(status) ? testE : defaultE; + expect(hostComponentView.get('isDeleteComponentDisabled')).to.equal(e); }); }); @@ -424,25 +433,15 @@ describe('App.HostComponentView', function() { describe('#isInProgress', function() { - var tests = Em.A([ - { - workStatus: App.HostComponentStatus.stopping, - e: true - }, - { - workStatus: App.HostComponentStatus.starting, - e: true - }, - { - workStatus: 'other_status', - e: false - } - ]); + var tests = ['STOPPING', 'STARTING']; + var testE = true; + var defaultE = false; - tests.forEach(function(test) { - it(test.workStatus, function() { - hostComponentView.set('content', Em.Object.create({workStatus: test.workStatus})); - expect(hostComponentView.get('isInProgress')).to.equal(test.e); + App.HostComponentStatus.getStatusesList().forEach(function(status) { + it(status, function() { + hostComponentView.set('content', {workStatus: status}); + var e = tests.contains(status) ? testE : defaultE; + expect(hostComponentView.get('isInProgress')).to.equal(e); }); });
