Browse Source

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)

Aleksandr Kovalenko 10 years ago
parent
commit
1c85788c91

+ 1 - 1
ambari-web/app/controllers/main/service/manage_config_groups_controller.js

@@ -401,7 +401,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'));

+ 136 - 0
ambari-web/test/controllers/main/service/manage_config_groups_controller_test.js

@@ -68,4 +68,140 @@ describe('App.ManageConfigGroupsController', function() {
 			});
 		});
 	});
+  
+  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() {
+          manageConfigGroupsController = 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(manageConfigGroupsController.hostsToPublic(test.hostsList)).to.eql(test.e);
+          });
+        });
+      });
+
+      describe('#publicToHostName', function() {
+        beforeEach(function() {
+          manageConfigGroupsController = 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(manageConfigGroupsController.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() {
+      manageConfigGroupsController = 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() {
+        manageConfigGroupsController.reopen({
+          selectedHosts: test.selectedHosts,
+          selectedConfigGroup: test.selectedConfigGroup
+        });
+        manageConfigGroupsController.deleteHosts();
+        expect(manageConfigGroupsController.get('selectedConfigGroup.publicHosts').toArray()).to.eql(test.e);
+      });
+    });
+
+  });
 });