Ensure project IDs are handled correctly for Network/Subnets
[snaps.git] / snaps / openstack / utils / tests / settings_utils_tests.py
index f84e6a0..5dabe38 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 import logging
+import unittest
+
 import os
 import uuid
 
+from snaps.config.network import SubnetConfig, NetworkConfig, PortConfig
+from snaps.config.flavor import FlavorConfig
+from snaps.config.keypair import KeypairConfig
+from snaps.config.qos import Consumer
+from snaps.config.security_group import (
+    SecurityGroupRuleConfig, Direction, Protocol, SecurityGroupConfig)
+from snaps.config.vm_inst import VmInstanceConfig, FloatingIpConfig
+from snaps.domain.flavor import Flavor
+from snaps.domain.volume import (
+    Volume, VolumeType, VolumeTypeEncryption, QoSSpec)
 from snaps.openstack import (
     create_image, create_network, create_router, create_flavor,
     create_keypairs, create_instance)
-from snaps.openstack.create_network import (
-    NetworkSettings, OpenStackNetwork, SubnetSettings)
-from snaps.openstack.create_security_group import (
-    SecurityGroupRuleSettings,  Direction, Protocol, OpenStackSecurityGroup,
-    SecurityGroupSettings)
+from snaps.openstack.create_qos import Consumer
+from snaps.openstack.create_network import OpenStackNetwork
+from snaps.openstack.create_security_group import OpenStackSecurityGroup
 from snaps.openstack.tests import openstack_tests
 from snaps.openstack.tests.os_source_file_test import OSComponentTestCase
 from snaps.openstack.utils import (
@@ -36,7 +46,7 @@ logger = logging.getLogger('nova_utils_tests')
 
 class SettingsUtilsNetworkingTests(OSComponentTestCase):
     """
-    Tests the ability to reverse engineer NetworkSettings objects from existing
+    Tests the ability to reverse engineer NetworkConfig objects from existing
     networks deployed to OpenStack
     """
 
@@ -62,16 +72,16 @@ class SettingsUtilsNetworkingTests(OSComponentTestCase):
 
     def test_derive_net_settings_no_subnet(self):
         """
-        Validates the utility function settings_utils#create_network_settings
-        returns an acceptable NetworkSettings object and ensures that the
+        Validates the utility function settings_utils#create_network_config
+        returns an acceptable NetworkConfig object and ensures that the
         new settings object will not cause the new OpenStackNetwork instance
         to create another network
         """
-        net_settings = NetworkSettings(name=self.network_name)
+        net_settings = NetworkConfig(name=self.network_name)
         self.net_creator = OpenStackNetwork(self.os_creds, net_settings)
         network = self.net_creator.create()
 
-        derived_settings = settings_utils.create_network_settings(
+        derived_settings = settings_utils.create_network_config(
             self.neutron, network)
 
         self.assertIsNotNone(derived_settings)
@@ -89,18 +99,18 @@ class SettingsUtilsNetworkingTests(OSComponentTestCase):
 
     def test_derive_net_settings_two_subnets(self):
         """
-        Validates the utility function settings_utils#create_network_settings
-        returns an acceptable NetworkSettings object
+        Validates the utility function settings_utils#create_network_config
+        returns an acceptable NetworkConfig object
         """
         subnet_settings = list()
-        subnet_settings.append(SubnetSettings(name='sub1', cidr='10.0.0.0/24'))
-        subnet_settings.append(SubnetSettings(name='sub2', cidr='10.0.1.0/24'))
-        net_settings = NetworkSettings(name=self.network_name,
-                                       subnet_settings=subnet_settings)
+        subnet_settings.append(SubnetConfig(name='sub1', cidr='10.0.0.0/24'))
+        subnet_settings.append(SubnetConfig(name='sub2', cidr='10.0.1.0/24'))
+        net_settings = NetworkConfig(
+            name=self.network_name, subnet_settings=subnet_settings)
         self.net_creator = OpenStackNetwork(self.os_creds, net_settings)
         network = self.net_creator.create()
 
-        derived_settings = settings_utils.create_network_settings(
+        derived_settings = settings_utils.create_network_config(
             self.neutron, network)
 
         self.assertIsNotNone(derived_settings)
@@ -135,7 +145,7 @@ class SettingsUtilsNetworkingTests(OSComponentTestCase):
 
 class SettingsUtilsVmInstTests(OSComponentTestCase):
     """
-    Tests the ability to reverse engineer VmInstanceSettings objects from
+    Tests the ability to reverse engineer VmInstanceConfig objects from
     existing VMs/servers deployed to OpenStack
     """
 
@@ -144,8 +154,6 @@ class SettingsUtilsVmInstTests(OSComponentTestCase):
         Instantiates the CreateImage object that is responsible for downloading
         and creating an OS image file within OpenStack
         """
-        # super(self.__class__, self).__start__()
-
         self.nova = nova_utils.nova_client(self.os_creds)
         self.glance = glance_utils.glance_client(self.os_creds)
         self.neutron = neutron_utils.neutron_client(self.os_creds)
@@ -196,13 +204,13 @@ class SettingsUtilsVmInstTests(OSComponentTestCase):
             # Create Flavor
             self.flavor_creator = create_flavor.OpenStackFlavor(
                 self.os_creds,
-                create_flavor.FlavorSettings(name=guid + '-flavor-name',
-                                             ram=256, disk=1, vcpus=1))
+                FlavorConfig(
+                    name=guid + '-flavor-name', ram=256, disk=1, vcpus=1))
             self.flavor_creator.create()
 
             # Create Key/Pair
             self.keypair_creator = create_keypairs.OpenStackKeypair(
-                self.os_creds, create_keypairs.KeypairSettings(
+                self.os_creds, KeypairConfig(
                     name=self.keypair_name,
                     public_filepath=self.keypair_pub_filepath,
                     private_filepath=self.keypair_priv_filepath))
@@ -210,32 +218,30 @@ class SettingsUtilsVmInstTests(OSComponentTestCase):
 
             # Create Security Group
             sec_grp_name = guid + '-sec-grp'
-            rule1 = SecurityGroupRuleSettings(sec_grp_name=sec_grp_name,
-                                              direction=Direction.ingress,
-                                              protocol=Protocol.icmp)
-            rule2 = SecurityGroupRuleSettings(sec_grp_name=sec_grp_name,
-                                              direction=Direction.ingress,
-                                              protocol=Protocol.tcp,
-                                              port_range_min=22,
-                                              port_range_max=22)
+            rule1 = SecurityGroupRuleConfig(
+                sec_grp_name=sec_grp_name, direction=Direction.ingress,
+                protocol=Protocol.icmp)
+            rule2 = SecurityGroupRuleConfig(
+                sec_grp_name=sec_grp_name, direction=Direction.ingress,
+                protocol=Protocol.tcp, port_range_min=22, port_range_max=22)
             self.sec_grp_creator = OpenStackSecurityGroup(
                 self.os_creds,
-                SecurityGroupSettings(name=sec_grp_name,
-                                      rule_settings=[rule1, rule2]))
+                SecurityGroupConfig(
+                    name=sec_grp_name, rule_settings=[rule1, rule2]))
             self.sec_grp_creator.create()
 
             # Create instance
             ports_settings = list()
             ports_settings.append(
-                create_network.PortSettings(
+                PortConfig(
                     name=self.port_1_name,
                     network_name=self.pub_net_config.network_settings.name))
 
-            instance_settings = create_instance.VmInstanceSettings(
+            instance_settings = VmInstanceConfig(
                 name=self.vm_inst_name,
                 flavor=self.flavor_creator.flavor_settings.name,
                 port_settings=ports_settings,
-                floating_ip_settings=[create_instance.FloatingIpSettings(
+                floating_ip_settings=[FloatingIpConfig(
                     name=self.floating_ip_name, port_name=self.port_1_name,
                     router_name=self.pub_net_config.router_settings.name)])
 
@@ -310,17 +316,18 @@ class SettingsUtilsVmInstTests(OSComponentTestCase):
 
         # super(self.__class__, self).__clean__()
 
-    def test_derive_vm_inst_settings(self):
+    def test_derive_vm_inst_config(self):
         """
-        Validates the utility function settings_utils#create_vm_inst_settings
-        returns an acceptable VmInstanceSettings object
+        Validates the utility function settings_utils#create_vm_inst_config
+        returns an acceptable VmInstanceConfig object
         """
         self.inst_creator.create(block=True)
 
         server = nova_utils.get_server(
-            self.nova, vm_inst_settings=self.inst_creator.instance_settings)
-        derived_vm_settings = settings_utils.create_vm_inst_settings(
-            self.nova, self.neutron, server)
+            self.nova, self.neutron,
+            vm_inst_settings=self.inst_creator.instance_settings)
+        derived_vm_settings = settings_utils.create_vm_inst_config(
+            self.nova, self.neutron, server, self.project_id)
         self.assertIsNotNone(derived_vm_settings)
         self.assertIsNotNone(derived_vm_settings.port_settings)
         self.assertIsNotNone(derived_vm_settings.floating_ip_settings)
@@ -328,14 +335,72 @@ class SettingsUtilsVmInstTests(OSComponentTestCase):
     def test_derive_image_settings(self):
         """
         Validates the utility function settings_utils#create_image_settings
-        returns an acceptable ImageSettings object
+        returns an acceptable ImageConfig object
         """
         self.inst_creator.create(block=True)
 
         server = nova_utils.get_server(
-            self.nova, vm_inst_settings=self.inst_creator.instance_settings)
-        derived_image_settings = settings_utils.determine_image_settings(
+            self.nova, self.neutron,
+            vm_inst_settings=self.inst_creator.instance_settings)
+        derived_image_settings = settings_utils.determine_image_config(
             self.glance, server, [self.image_creator.image_settings])
         self.assertIsNotNone(derived_image_settings)
         self.assertEqual(self.image_creator.image_settings.name,
                          derived_image_settings.name)
+
+
+class SettingsUtilsUnitTests(unittest.TestCase):
+    """
+    Exercises the settings_utils.py functions around volumes
+    """
+
+    def test_vol_settings_from_vol(self):
+        volume = Volume(
+            name='vol-name', volume_id='vol-id', description='desc', size=99,
+            vol_type='vol-type', availability_zone='zone1', multi_attach=True)
+        settings = settings_utils.create_volume_config(volume)
+        self.assertEqual(volume.name, settings.name)
+        self.assertEqual(volume.description, settings.description)
+        self.assertEqual(volume.size, settings.size)
+        self.assertEqual(volume.type, settings.type_name)
+        self.assertEqual(volume.availability_zone, settings.availability_zone)
+        self.assertEqual(volume.multi_attach, settings.multi_attach)
+
+    def test_vol_type_settings_from_vol(self):
+        encryption = VolumeTypeEncryption(
+            volume_encryption_id='vol-encrypt-id', volume_type_id='vol-typ-id',
+            control_location='front-end', provider='FooClass', cipher='1',
+            key_size=1)
+        qos_spec = QoSSpec(name='qos-spec-name', spec_id='qos-spec-id',
+                           consumer=Consumer.back_end)
+        volume_type = VolumeType(
+            name='vol-type-name', volume_type_id='vol-type-id', public=True,
+            encryption=encryption, qos_spec=qos_spec)
+
+        settings = settings_utils.create_volume_type_config(volume_type)
+        self.assertEqual(volume_type.name, settings.name)
+        self.assertEqual(volume_type.public, settings.public)
+
+        encrypt_settings = settings.encryption
+        self.assertIsNotNone(encrypt_settings)
+        self.assertEqual(encryption.control_location,
+                         encrypt_settings.control_location.value)
+        self.assertEqual(encryption.cipher, encrypt_settings.cipher)
+        self.assertEqual(encryption.key_size, encrypt_settings.key_size)
+
+        self.assertEqual(qos_spec.name, settings.qos_spec_name)
+
+    def test_flavor_settings_from_flavor(self):
+        flavor = Flavor(
+            name='flavor-name', flavor_id='flavor-id', ram=99, disk=101,
+            vcpus=9, ephemeral=3, swap=5, rxtx_factor=7, is_public=False)
+        settings = settings_utils.create_flavor_config(flavor)
+        self.assertEqual(flavor.name, settings.name)
+        self.assertEqual(flavor.id, settings.flavor_id)
+        self.assertEqual(flavor.ram, settings.ram)
+        self.assertEqual(flavor.disk, settings.disk)
+        self.assertEqual(flavor.vcpus, settings.vcpus)
+        self.assertEqual(flavor.ephemeral, settings.ephemeral)
+        self.assertEqual(flavor.swap, settings.swap)
+        self.assertEqual(flavor.rxtx_factor, settings.rxtx_factor)
+        self.assertEqual(flavor.is_public, settings.is_public)