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);
+      });
+    });
+
+  });
+});

Reply via email to