Răsfoiți Sursa

Fixed unit tests for subnet and network security groups

vikramdoda 9 ani în urmă
părinte
comite
098ffefe8c

+ 34 - 30
azure_integration_test/test_integration_azure_instance_service.py

@@ -9,25 +9,25 @@ class AzureIntegrationInstanceServiceTestCase(ProviderTestBase):
     @helpers.skipIfNoService(['compute.instances'])
     def test_azure_instance_service(self):
         instance_name = 'CbAzure-test6-{0}'.format(uuid.uuid4().hex[:6])
-        # image_name = 'CbAzure-img-{0}'.format(uuid.uuid4().hex[:6])
+        image_name = 'CbAzure-img-{0}'.format(uuid.uuid4().hex[:6])
         security_group_name = 'CbAzure-sg-{0}'.format(uuid.uuid4().hex[:6])
         network_name = 'CbAzure-net-{0}'.format(uuid.uuid4().hex[:6])
         subnet_name = 'CbAzure-subnet-{0}'.format(uuid.uuid4().hex[:6])
-        # key_pair_name = 'CbAzure-keypair-4e36b7'
+        key_pair_name = 'CbAzure-keypair-{0}'.format(uuid.uuid4().hex[:6])
 
-        image_id = 'CBAZURE-USER-TEST-IMG'
+        image_id = 'CbTest-Img'
 
         img = self.provider.compute.images.get(image_id)
 
         self.assertIsNotNone(img)
 
-        # key_pair = self.provider.security.\
-        #     key_pairs.create(key_pair_name)
-        #
-        # self.assertIsNotNone(key_pair)
-        #
-        # with open('{0}.pem'.format(key_pair_name), 'w') as f:
-        #     f.write(key_pair.material)
+        key_pair = self.provider.security.\
+            key_pairs.create(key_pair_name)
+
+        self.assertIsNotNone(key_pair)
+
+        with open('{0}.pem'.format(key_pair_name), 'w') as f:
+            f.write(key_pair.material)
 
         inst_type = [t for t in self.provider.compute.instance_types.list()
                      if t.name == 'Standard_DS2_v2'][0]
@@ -48,6 +48,16 @@ class AzureIntegrationInstanceServiceTestCase(ProviderTestBase):
 
         sg.add_rule('tcp', 22, 22, '0.0.0.0/0')
 
+        new_security_group_name = 'CbAzure-sg-{0}'.format(uuid.uuid4().hex[:6])
+
+        new_sg = self.provider.security.security_groups. \
+            create(new_security_group_name,
+                   'A security group used by CloudBridge', '')
+
+        self.assertIsNotNone(new_sg)
+
+        new_sg.add_rule('*', 0, 65535, '*')
+
         # lc = self.provider.compute.instances.create_launch_config()
         #
         # volume = self.provider.block_store.\
@@ -86,7 +96,8 @@ class AzureIntegrationInstanceServiceTestCase(ProviderTestBase):
         inst = self.provider.compute.instances.create(
             name=instance_name, image=img, instance_type=inst_type,
             subnet=subnet, zone=None,
-            key_pair=None, security_groups=None, user_data=None,
+            key_pair=key_pair, security_groups=[sg, new_sg],
+            user_data=None,
             launch_config=None)
 
         inst.wait_till_ready()
@@ -101,23 +112,16 @@ class AzureIntegrationInstanceServiceTestCase(ProviderTestBase):
 
         self.assertIsNotNone(inst.public_ips[0])
 
-        # inst = self.provider.compute.instances.
-        # get('/subscriptions/7904d702-e01c-4826-8519-f5a25c866a96
-        # /resourceGroups/CB-INST-DEMO-RG/providers/
-        # Microsoft.Compute/virtualMachines/CbAzure-inst-304a17-968334')
-        #
-        # img = inst.\
-        #     create_image(image_name)
-        # self.assertIsNotNone(img)
+        img = inst.create_image(image_name)
 
-        # inst.terminate()
-        #
-        # subnet.delete()
-        #
-        # net.delete()
-        #
-        # sg.delete()
-        #
-        # snapshot.delete()
-        #
-        # img.delete()
+        self.assertIsNotNone(img)
+
+        inst.terminate()
+
+        subnet.delete()
+
+        net.delete()
+
+        sg.delete()
+
+        img.delete()

+ 2 - 2
azure_test/test_azure_network_service.py

@@ -10,7 +10,7 @@ class AzureNetworkServiceTestCase(ProviderTestBase):
             print("List( " + "Name: " + network.name + ", Id: " +
                   str(network.id) + ", State: " + network.state +
                   ", Cidr_Block: " + str(network.cidr_block) + " )")
-        self.assertTrue(len(networks) == 2, "Count should be 2")
+        self.assertTrue(len(networks) == 3, "Count should be 3")
 
     @helpers.skipIfNoService(['network'])
     def test_azure_network_service_list_check_values(self):
@@ -19,7 +19,7 @@ class AzureNetworkServiceTestCase(ProviderTestBase):
             print("List( " + "Name: " + network.name + ", Id: " +
                   str(network.id) + ", State: " + network.state +
                   ", Cidr_Block: " + str(network.cidr_block) + " )")
-        self.assertTrue(len(networks) == 2, "Count should be 2")
+        self.assertTrue(len(networks) == 3, "Count should be 3")
         self.assertEqual(networks[0].id, 'CloudBridgeNet1')
         self.assertEqual(networks[0].name, "CloudBridgeNet1")
         self.assertEqual(networks[0].cidr_block,

+ 6 - 6
azure_test/test_azure_subnet_service.py

@@ -12,7 +12,7 @@ class AzureSubnetServiceTestCase(ProviderTestBase):
             print("network_id" + subnet.network_id)
 
     def test_azure_subnet_service_list_filter_network_id(self):
-        network_id = 'CloudBridgeNet2'
+        network_id = 'CloudBridgeNet4'
         subnets = self.provider.network.subnets.list(network_id)
         self.assertIsNotNone(subnets)
         for subnet in subnets:
@@ -22,7 +22,7 @@ class AzureSubnetServiceTestCase(ProviderTestBase):
             print("network_id" + subnet.network_id)
 
     def test_azure_subnet_service_list_filter_network_object(self):
-        network_id = 'CloudBridgeNet2'
+        network_id = 'CloudBridgeNet4'
         network = self.provider.network.get(network_id)
         subnets = self.provider.network.subnets.list(network)
         self.assertIsNotNone(subnets)
@@ -33,7 +33,7 @@ class AzureSubnetServiceTestCase(ProviderTestBase):
             print("network_id" + subnet.network_id)
 
     def test_azure_subnet_service_get(self):
-        subnet_id = 'MySN1'
+        subnet_id = 'CloudBridgeNet4|$|MySN1'
         subnet = self.provider.network.subnets.get(subnet_id)
         self.assertIsNotNone(subnet)
         if subnet:
@@ -44,12 +44,12 @@ class AzureSubnetServiceTestCase(ProviderTestBase):
             print("network_id" + subnet.network_id)
 
     def test_azure_subnet_service_get_invalid_subnet(self):
-        subnet_id = 'MySN'
+        subnet_id = 'CloudBridgeNet4|$|MySN'
         subnet = self.provider.network.subnets.get(subnet_id)
         self.assertIsNone(subnet)
 
     def test_azure_create_and_delete_from_resource_subnet(self):
-        network_id = 'CloudBridgeNet2'
+        network_id = 'CloudBridgeNet4'
         subnet = self.provider.network.\
             subnets.create(network=network_id,
                            cidr_block='10.0.0.0/24')
@@ -61,7 +61,7 @@ class AzureSubnetServiceTestCase(ProviderTestBase):
         self.assertFalse(deleted)
 
     def test_azure_create_and_delete_from_service_subnet(self):
-        network_id = 'CloudBridgeNet2'
+        network_id = 'CloudBridgeNet4'
         subnet = self.provider.network.\
             subnets.create(network=network_id,
                            name='test', cidr_block='10.0.0.0/24')

+ 15 - 5
cloudbridge/cloud/providers/azure/mock_azure_client.py

@@ -36,8 +36,8 @@ class MockAzureClient:
                             direction="Inbound")
     sg_rule1.name = "rule1"
     sg_rule1.id = "r1"
-    sg_rule1.destination_port_range = "*"
-    sg_rule1.source_port_range = "25-1"
+    sg_rule1.source_port_range = "*"
+    sg_rule1.destination_port_range = "25-1"
 
     sg_rule2 = SecurityRule(protocol='*', source_address_prefix='100',
                             destination_address_prefix="*", access="Allow",
@@ -131,7 +131,17 @@ class MockAzureClient:
     network3.address_space.address_prefixes = ['10.0.0.0/16']
     network3.provisioning_state = "Succeeded"
 
-    networks = [network1, network2, network3]
+    network4 = VirtualNetwork()
+    network4.id = '/subscriptions/7904d702-e01c-4826-8519-f5a25c866a96' \
+                  '/resourceGroups/cloudbridge/providers' \
+                  '/Microsoft.Network/virtualNetworks/CloudBridgeNet4'
+    network4.name = "CloudBridgeNet4"
+    network4.location = 'eastus'
+    network4.address_space = AddressSpace()
+    network4.address_space.address_prefixes = ['10.0.0.0/16']
+    network4.provisioning_state = "Succeeded"
+
+    networks = [network1, network2, network3, network4]
 
     floating_ip1 = PublicIPAddress()
     floating_ip1.id = '/subscriptions/7904d702-e01c-4826-8519-f5a25c866a96' \
@@ -353,14 +363,14 @@ class MockAzureClient:
     subnet1 = Subnet()
     subnet1.id = '/subscriptions/7904d702-e01c-4826-8519-f5a25c866a96' \
                  '/resourceGroups/cloudbridge/providers/' \
-                 'Microsoft.Network/virtualNetworks/CloudBridgeNet1/subnets/' \
+                 'Microsoft.Network/virtualNetworks/CloudBridgeNet4/subnets/' \
                  'MySN1'
     subnet1.name = 'MySN1'
     subnet1.address_prefix = '10.0.0.0/24'
     subnet2 = Subnet()
     subnet2.id = '/subscriptions/7904d702-e01c-4826-8519-f5a25c866a96/' \
                  'resourceGroups/cloudbridge/providers/' \
-                 'Microsoft.Network/virtualNetworks/CloudBridgeNet1/' \
+                 'Microsoft.Network/virtualNetworks/CloudBridgeNet4/' \
                  'subnets/MySN2'
     subnet2.name = 'MySN2'
     subnet2.address_prefix = '10.0.0.0/25'

+ 3 - 3
cloudbridge/cloud/providers/azure/resources.py

@@ -1119,9 +1119,9 @@ class AzureSubnet(BaseSubnet):
         :return:
         """
         try:
-            self._provider.azure_client.\
-                delete_subnet(self.network_id,
-                              self.id)
+            subnet_id_parts = self.id.split('|$|')
+            self._provider.azure_client. \
+                delete_subnet(subnet_id_parts[0], subnet_id_parts[1])
             return True
         except CloudError as cloudError:
             log.exception(cloudError.message)

+ 18 - 5
cloudbridge/cloud/providers/azure/services.py

@@ -1,3 +1,4 @@
+import base64
 import logging
 import uuid
 
@@ -500,6 +501,9 @@ class AzureInstanceService(BaseInstanceService):
             instance_name + '_nic',
             nic_params
         )
+        # #! indicates shell script
+        ud = '#cloud-config\n' + user_data \
+            if user_data and not user_data.startswith('#!') else user_data
 
         params = {
             'location': zone_id or self._provider.region_name,
@@ -546,6 +550,10 @@ class AzureInstanceService(BaseInstanceService):
             params['storage_profile']['os_disk']['disk_size_gb'] = \
                 root_disk_size
 
+        if user_data:
+            custom_data = base64.b64encode(bytes(ud, 'utf-8'))
+            params['os_profile']['custom_data'] = str(custom_data, 'utf-8'),
+
         self.provider.azure_client.create_vm(instance_name, params)
         vm = self._provider.azure_client.get_vm(instance_name)
         return AzureInstance(self.provider, vm)
@@ -903,11 +911,16 @@ class AzureSubnetService(BaseSubnetService):
         :param subnet_id:
         :return:
         """
-        subnet_id_parts = subnet_id.split('|$|')
-        azure_subnet = self.provider.azure_client.\
-            get_subnet(subnet_id_parts[0], subnet_id_parts[1])
-        return AzureSubnet(self.provider,
-                           azure_subnet) if azure_subnet else None
+        try:
+            subnet_id_parts = subnet_id.split('|$|')
+            azure_subnet = self.provider.azure_client.\
+                get_subnet(subnet_id_parts[0], subnet_id_parts[1])
+            return AzureSubnet(self.provider,
+                               azure_subnet) if azure_subnet else None
+        except CloudError as cloudError:
+            # Azure raises the cloud error if the resource not available
+            log.exception(cloudError.message)
+            return None
 
     def list(self, network=None, limit=None, marker=None):
         """

+ 1 - 1
test/test_azure_security_service.py

@@ -113,7 +113,7 @@ class AzureSecurityServiceTestCase(ProviderTestBase):
         rules[1].delete()
         rules = cb.rules
         print("After deleting Rule length - " + str(len(rules)))
-        self.assertEqual(len(rules), 3)
+        self.assertEqual(len(rules), 4)
 
     @helpers.skipIfNoService(['security.security_groups'])
     def test_azure_security_group_rule_get_exist(self):