Repository: ambari Updated Branches: refs/heads/trunk 060387783 -> 3ad2ffb85
AMBARI-19208. Manage Journalnode Wizard: error on step3 akovalenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/3ad2ffb8 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/3ad2ffb8 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/3ad2ffb8 Branch: refs/heads/trunk Commit: 3ad2ffb851831aa958b0f5a479e7f84d52c815a7 Parents: 0603877 Author: Aleksandr Kovalenko <akovale...@hortonworks.com> Authored: Thu Dec 15 13:38:34 2016 +0200 Committer: Aleksandr Kovalenko <akovale...@hortonworks.com> Committed: Thu Dec 15 13:40:13 2016 +0200 ---------------------------------------------------------------------- .../main/admin/highAvailability_controller.js | 15 ++++-- ambari-web/app/messages.js | 1 + .../admin/highAvailability_controller_test.js | 53 ++++++++++++++++++++ 3 files changed, 66 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/3ad2ffb8/ambari-web/app/controllers/main/admin/highAvailability_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/highAvailability_controller.js b/ambari-web/app/controllers/main/admin/highAvailability_controller.js index 71c11db..4899b43 100644 --- a/ambari-web/app/controllers/main/admin/highAvailability_controller.js +++ b/ambari-web/app/controllers/main/admin/highAvailability_controller.js @@ -115,10 +115,19 @@ App.MainAdminHighAvailabilityController = App.WizardController.extend({ App.router.transitionTo('main.services.enableRAHighAvailability'); return true; }, - + + /** + * open Manage JournalNode Wizard if there are two started NameNodes with defined active/standby state + * @returns {boolean} + */ manageJournalNode: function() { - App.router.transitionTo('main.services.manageJournalNode'); - return true; + var nameNodes = App.HostComponent.find().filterProperty('componentName', 'NAMENODE'); + if (nameNodes.someProperty('displayNameAdvanced', 'Active NameNode') && nameNodes.someProperty('displayNameAdvanced', 'Standby NameNode')) { + App.router.transitionTo('main.services.manageJournalNode'); + return true; + } + this.showErrorPopup(Em.I18n.t('admin.manageJournalNode.warning')); + return false; }, /** http://git-wip-us.apache.org/repos/asf/ambari/blob/3ad2ffb8/ambari-web/app/messages.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index 24ff1fc..cc8102a 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -1295,6 +1295,7 @@ Em.I18n.translations = { 'admin.kerberos.wizard.step1.notice.inProgress': 'Please wait while cluster is being unkerberized', 'admin.manageJournalNode.label': 'Manage JournalNodes', + 'admin.manageJournalNode.warning': 'Manage JournalNodes Wizard requires all NameNodes be started and have Active/Standby state defined', 'admin.manageJournalNode.wizard.header': 'Manage JournalNodes Wizard', 'admin.manageJournalNode.wizard.step1.header': 'Assign JournalNodes', 'admin.manageJournalNode.wizard.step2.header': 'Review', http://git-wip-us.apache.org/repos/asf/ambari/blob/3ad2ffb8/ambari-web/test/controllers/main/admin/highAvailability_controller_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/admin/highAvailability_controller_test.js b/ambari-web/test/controllers/main/admin/highAvailability_controller_test.js index 1e3d140..f5a144b 100644 --- a/ambari-web/test/controllers/main/admin/highAvailability_controller_test.js +++ b/ambari-web/test/controllers/main/admin/highAvailability_controller_test.js @@ -200,4 +200,57 @@ describe('App.MainAdminHighAvailabilityController', function () { }); }); + describe('#manageJournalNode()', function () { + + beforeEach(function () { + this.mock = sinon.stub(App.HostComponent, 'find'); + sinon.stub(App.router, 'transitionTo', Em.K); + sinon.spy(controller, "showErrorPopup"); + }); + + afterEach(function () { + App.router.transitionTo.restore(); + controller.showErrorPopup.restore(); + App.HostComponent.find.restore(); + }); + + it('should show error popup if there is no NNs', function () { + this.mock.returns([]); + var result = controller.manageJournalNode(); + expect(result).to.be.false; + expect(controller.showErrorPopup.calledOnce).to.be.true; + }); + + it('should show error popup if there is no NNs', function () { + this.mock.returns([ + Em.Object.create({ + componentName: 'NAMENODE', + displayNameAdvanced: 'Active NameNode' + }), + Em.Object.create({ + componentName: 'NAMENODE' + }) + ]); + var result = controller.manageJournalNode(); + expect(result).to.be.false; + expect(controller.showErrorPopup.calledOnce).to.be.true; + }); + + it('should call transition to wizard if we have both standby and active NNs', function () { + this.mock.returns([ + Em.Object.create({ + componentName: 'NAMENODE', + displayNameAdvanced: 'Active NameNode' + }), + Em.Object.create({ + componentName: 'NAMENODE', + displayNameAdvanced: 'Standby NameNode' + }) + ]); + var result = controller.manageJournalNode(); + expect(result).to.be.true; + expect(App.router.transitionTo.calledOnce).to.be.true; + }); + }); + });