Repository: ambari Updated Branches: refs/heads/branch-1.7.0 6d70bc044 -> 32e08df54
AMBARI-7956. It is not possible to remove custom config group with linked host on EC2 (+external host names instead internal). (Denys Buzhor via akovalenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/32e08df5 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/32e08df5 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/32e08df5 Branch: refs/heads/branch-1.7.0 Commit: 32e08df543a163cf4c1eabd309a043858dfc068d Parents: 6d70bc0 Author: Aleksandr Kovalenko <[email protected]> Authored: Fri Oct 24 21:18:34 2014 +0300 Committer: Aleksandr Kovalenko <[email protected]> Committed: Fri Oct 24 21:18:34 2014 +0300 ---------------------------------------------------------------------- ambari-web/app/assets/test/tests.js | 1 + .../service/manage_config_groups_controller.js | 2 +- .../manage_config_groups_controller_test.js | 159 +++++++++++++++++++ 3 files changed, 161 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/32e08df5/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 0a0d960..775822b 100644 --- a/ambari-web/app/assets/test/tests.js +++ b/ambari-web/app/assets/test/tests.js @@ -72,6 +72,7 @@ var files = ['test/init_model_test', 'test/controllers/main/host/configs_service_test', 'test/controllers/main/host/details_test', 'test/controllers/main/service/add_controller_test', + 'test/controllers/main/service/manage_config_groups_controller_test', 'test/controllers/main/service/reassign_controller_test', 'test/controllers/main/service/reassign/step2_controller_test', 'test/controllers/main/service/reassign/step4_controller_test', http://git-wip-us.apache.org/repos/asf/ambari/blob/32e08df5/ambari-web/app/controllers/main/service/manage_config_groups_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/service/manage_config_groups_controller.js b/ambari-web/app/controllers/main/service/manage_config_groups_controller.js index 56c77f4..3b67cad 100644 --- a/ambari-web/app/controllers/main/service/manage_config_groups_controller.js +++ b/ambari-web/app/controllers/main/service/manage_config_groups_controller.js @@ -400,7 +400,7 @@ App.ManageConfigGroupsController = Em.Controller.extend({ return; } //move hosts of group to default group (available hosts) - this.set('selectedHosts', selectedConfigGroup.get('hosts')); + this.set('selectedHosts', selectedConfigGroup.get('publicHosts')); this.deleteHosts(); this.get('configGroups').removeObject(selectedConfigGroup); this.set('selectedConfigGroup', this.get('configGroups').findProperty('isDefault')); http://git-wip-us.apache.org/repos/asf/ambari/blob/32e08df5/ambari-web/test/controllers/main/service/manage_config_groups_controller_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/service/manage_config_groups_controller_test.js b/ambari-web/test/controllers/main/service/manage_config_groups_controller_test.js new file mode 100644 index 0000000..2fdbdf0 --- /dev/null +++ b/ambari-web/test/controllers/main/service/manage_config_groups_controller_test.js @@ -0,0 +1,159 @@ +/** + * 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'); + +describe('App.ManageConfigGroupsController', function() { + var controller = App.ManageConfigGroupsController.create({}); + + describe('Host Name converting', function() { + describe('#convertHostNames', function() { + var hosts = [ + Em.Object.create({ + hostName: 'internal-1.com', + publicHostName: 'external-1.com' + }), + Em.Object.create({ + hostName: 'internal-2.com', + publicHostName: 'external-2.com' + }), + Em.Object.create({ + hostName: 'internal-3.com', + publicHostName: 'external-3.com' + }) + ]; + + describe('#hostsToPublic', function() { + beforeEach(function() { + controller = App.ManageConfigGroupsController.create({ + clusterHosts: Em.A(hosts) + }); + }); + + var tests = [ + { + hostsList: ['internal-1.com', 'internal-2.com', 'internal-3.com'], + e: ['external-1.com', 'external-2.com', 'external-3.com'] + }, + { + hostsList: 'internal-2.com', + e: 'external-2.com' + } + ]; + var message = 'should convert internal host names `{0}` to external host names `{1}`'; + tests.forEach(function(test) { + it(message.format(test.hostsList, test.e), function() { + expect(controller.hostsToPublic(test.hostsList)).to.eql(test.e); + }); + }); + }); + + describe('#publicToHostName', function() { + beforeEach(function() { + controller = App.ManageConfigGroupsController.create({ + clusterHosts: Em.A(hosts) + }); + }); + + var tests = [ + { + hostsList: ['external-1.com', 'external-2.com', 'external-3.com'], + e: ['internal-1.com', 'internal-2.com', 'internal-3.com'] + }, + { + hostsList: 'external-2.com', + e: 'internal-2.com' + } + ]; + var message = 'should convert internal host names `{0}` to external host names `{1}`'; + tests.forEach(function(test) { + it(message.format(test.hostsList, test.e), function() { + expect(controller.publicToHostName(test.hostsList)).to.eql(test.e); + }); + }); + }); + }); + + }); + + describe('#deleteHosts', function() { + var hosts = [ + Em.Object.create({ + hostName: 'internal-1.com', + publicHostName: 'external-1.com' + }), + Em.Object.create({ + hostName: 'internal-2.com', + publicHostName: 'external-2.com' + }), + Em.Object.create({ + hostName: 'internal-3.com', + publicHostName: 'external-3.com' + }) + ]; + + beforeEach(function() { + controller = App.ManageConfigGroupsController.create({ + clusterHosts: hosts + }); + }); + + var createConfigGroupWithParentMock = function(groupHosts, groupPublicHosts, allHosts) { + var parentCGHosts = allHosts.filter(function(host) { + return !groupHosts.contains(host.get('hostName')); + }); + return Em.Object.create({ + parentConfigGroup: { + hosts: parentCGHosts.mapProperty('hostName'), + publicHosts: parentCGHosts.mapProperty('publicHostName') + }, + hosts: groupHosts, + publicHosts: groupPublicHosts + }); + }; + + var tests = [ + { + selectedHosts: ['external-1.com', 'external-2.com'], + selectedConfigGroup: createConfigGroupWithParentMock( + ['internal-1.com', 'internal-2.com'], + ['external-1.com', 'external-2.com'], hosts), + e: [] + }, + { + selectedHosts: ['external-1.com'], + selectedConfigGroup: createConfigGroupWithParentMock( + ['internal-1.com', 'internal-2.com'], + ['external-1.com', 'external-2.com'], hosts), + e: ['external-2.com'] + } + ]; + + tests.forEach(function(test) { + it('should remove {0}'.format(test.selectedHosts.slice(0)), function() { + controller.reopen({ + selectedHosts: test.selectedHosts, + selectedConfigGroup: test.selectedConfigGroup + }); + controller.deleteHosts(); + expect(controller.get('selectedConfigGroup.publicHosts').toArray()).to.eql(test.e); + }); + }); + + }); +});
