X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=snaps%2Fopenstack%2Ftests%2Fcreate_stack_tests.py;fp=snaps%2Fopenstack%2Ftests%2Fcreate_stack_tests.py;h=be4d6ea87748809499e2a554707e5eac2d42cc30;hb=0175feef9f00ea7595e4f7cc13f3b7a9c26e9a02;hp=a320aa018696838ed0615ae4879e90d0868fe00d;hpb=b2590d79a80dc12948d028ffee5b911b59daa777;p=snaps.git diff --git a/snaps/openstack/tests/create_stack_tests.py b/snaps/openstack/tests/create_stack_tests.py index a320aa0..be4d6ea 100644 --- a/snaps/openstack/tests/create_stack_tests.py +++ b/snaps/openstack/tests/create_stack_tests.py @@ -22,7 +22,8 @@ import snaps from snaps import file_utils from snaps.config.flavor import FlavorConfig from snaps.config.image import ImageConfig -from snaps.config.stack import StackConfigError, StackConfig +from snaps.config.stack import (StackConfigError, StackConfig, + STATUS_UPDATE_COMPLETE) from snaps.openstack.create_flavor import OpenStackFlavor from snaps.openstack.create_image import OpenStackImage @@ -208,7 +209,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase): env_values=self.env_values) self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) - created_stack = self.stack_creator.create() + created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(created_stack) retrieved_stack = heat_utils.get_stack_by_id(self.heat_cli, @@ -239,7 +240,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase): self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) with self.assertRaises(StackCreationError): - self.stack_creator.create() + self.stack_creator.create(block=True) def test_create_stack_template_dict(self): """ @@ -256,7 +257,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase): env_values=self.env_values) self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) - created_stack = self.stack_creator.create() + created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(created_stack) retrieved_stack = heat_utils.get_stack_by_id(self.heat_cli, @@ -280,7 +281,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase): env_values=self.env_values) self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) - created_stack = self.stack_creator.create() + created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(created_stack) retrieved_stack = heat_utils.get_stack_by_id(self.heat_cli, @@ -324,7 +325,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase): env_values=self.env_values) self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) - created_stack1 = self.stack_creator.create() + created_stack1 = self.stack_creator.create(block=True) retrieved_stack = heat_utils.get_stack_by_id(self.heat_cli, created_stack1.id) @@ -335,7 +336,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase): # Should be retrieving the instance data stack_creator2 = OpenStackHeatStack(self.os_creds, stack_settings) - stack2 = stack_creator2.create() + stack2 = stack_creator2.create(block=True) self.assertEqual(created_stack1.id, stack2.id) def test_retrieve_network_creators(self): @@ -349,7 +350,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase): env_values=self.env_values) self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) - created_stack = self.stack_creator.create() + created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(created_stack) net_creators = self.stack_creator.get_network_creators() @@ -390,7 +391,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase): env_values=self.env_values) self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) - created_stack = self.stack_creator.create() + created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(created_stack) vm_inst_creators = self.stack_creator.get_vm_inst_creators() @@ -502,7 +503,7 @@ class CreateStackFloatingIpTests(OSIntegrationTestCase): self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings, [self.image_creator.image_settings]) - created_stack = self.stack_creator.create() + created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(created_stack) self.vm_inst_creators = self.stack_creator.get_vm_inst_creators( @@ -531,7 +532,7 @@ class CreateStackFloatingIpTests(OSIntegrationTestCase): self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings, [self.image_creator.image_settings]) - created_stack = self.stack_creator.create() + created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(created_stack) derived_stack = create_stack.generate_creator( @@ -647,7 +648,7 @@ class CreateStackNestedResourceTests(OSIntegrationTestCase): the retrieval of two VM instance creators and attempt to connect via SSH to the first one with a floating IP. """ - created_stack = self.stack_creator.create() + created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(created_stack) self.vm_inst_creators = self.stack_creator.get_vm_inst_creators( @@ -660,6 +661,135 @@ class CreateStackNestedResourceTests(OSIntegrationTestCase): create_instance_tests.validate_ssh_client(vm_inst_creator)) +class CreateStackUpdateTests(OSIntegrationTestCase): + """ + Tests to ensure that stack update commands work + """ + + def setUp(self): + self.user_roles = ['heat_stack_owner'] + + super(self.__class__, self).__start__() + + self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4()) + + self.heat_cli = heat_utils.heat_client(self.os_creds, self.os_session) + self.stack_creator = None + + self.image_creator = OpenStackImage( + self.os_creds, openstack_tests.cirros_image_settings( + name=self.guid + '-image', + image_metadata=self.image_metadata)) + self.image_creator.create() + + self.flavor_creator = OpenStackFlavor( + self.admin_os_creds, + FlavorConfig( + name=self.guid + '-flavor-name', ram=256, disk=10, vcpus=1)) + self.flavor_creator.create() + + env_values = { + 'network_name': self.guid + '-network', + 'public_network': self.ext_net_name, + 'agent_image': self.image_creator.image_settings.name, + 'agent_flavor': self.flavor_creator.flavor_settings.name, + 'key_name': self.guid + '-key', + } + + heat_tmplt_path = pkg_resources.resource_filename( + 'snaps.openstack.tests.heat', 'agent-group.yaml') + heat_resource_path = pkg_resources.resource_filename( + 'snaps.openstack.tests.heat', 'agent.yaml') + + stack_settings = StackConfig( + name=self.__class__.__name__ + '-' + str(self.guid) + '-stack', + template_path=heat_tmplt_path, + resource_files=[heat_resource_path], + env_values=env_values) + + self.stack_creator = OpenStackHeatStack( + self.os_creds, stack_settings, + [self.image_creator.image_settings]) + + self.vm_inst_creators = list() + + def tearDown(self): + """ + Cleans the stack and downloaded stack file + """ + if self.stack_creator: + try: + self.stack_creator.clean() + except: + pass + + if self.image_creator: + try: + self.image_creator.clean() + except: + pass + + if self.flavor_creator: + try: + self.flavor_creator.clean() + except: + pass + + for vm_inst_creator in self.vm_inst_creators: + try: + keypair_settings = vm_inst_creator.keypair_settings + if keypair_settings and keypair_settings.private_filepath: + expanded_path = os.path.expanduser( + keypair_settings.private_filepath) + os.chmod(expanded_path, 0o755) + os.remove(expanded_path) + except: + pass + + super(self.__class__, self).__clean__() + + def test_update(self): + """ + Tests the update of an OpenStack stack from Heat template file + by changing the number of VM instances from 1 to 2, and + the retrieval of two VM instance creators and attempt to connect via + SSH to the first one with a floating IP. + """ + created_stack = self.stack_creator.create(block=True) + self.assertIsNotNone(created_stack) + + self.vm_inst_creators = self.stack_creator.get_vm_inst_creators( + heat_keypair_option='private_key') + self.assertIsNotNone(self.vm_inst_creators) + self.assertEqual(1, len(self.vm_inst_creators)) + + for vm_inst_creator in self.vm_inst_creators: + self.assertTrue( + create_instance_tests.validate_ssh_client(vm_inst_creator)) + + env_values = { + 'network_name': self.guid + '-network', + 'public_network': self.ext_net_name, + 'agent_count': 2, + 'agent_image': self.image_creator.image_settings.name, + 'agent_flavor': self.flavor_creator.flavor_settings.name, + 'key_name': self.guid + '-key', + } + + updated_stack = self.stack_creator.update(env_values, block=True) + self.assertIsNotNone(updated_stack) + self.assertEqual(STATUS_UPDATE_COMPLETE, updated_stack.status) + + self.vm_inst_creators = self.stack_creator.get_vm_inst_creators( + heat_keypair_option='private_key') + self.assertIsNotNone(self.vm_inst_creators) + self.assertEqual(2, len(self.vm_inst_creators)) + + for vm_inst_creator in self.vm_inst_creators: + self.assertTrue( + create_instance_tests.validate_ssh_client(vm_inst_creator)) + + class CreateStackRouterTests(OSIntegrationTestCase): """ Tests for the CreateStack class defined in create_stack.py where the @@ -701,7 +831,7 @@ class CreateStackRouterTests(OSIntegrationTestCase): env_values=self.env_values) self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) - self.created_stack = self.stack_creator.create() + self.created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(self.created_stack) def tearDown(self): @@ -767,7 +897,7 @@ class CreateStackVolumeTests(OSIntegrationTestCase): env_values=self.env_values) self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) - self.created_stack = self.stack_creator.create() + self.created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(self.created_stack) def tearDown(self): @@ -853,7 +983,7 @@ class CreateStackFlavorTests(OSIntegrationTestCase): template_path=self.heat_tmplt_path) self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) - self.created_stack = self.stack_creator.create() + self.created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(self.created_stack) def tearDown(self): @@ -919,7 +1049,7 @@ class CreateStackKeypairTests(OSIntegrationTestCase): env_values=self.env_values) self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) - self.created_stack = self.stack_creator.create() + self.created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(self.created_stack) self.keypair_creators = list() @@ -1003,7 +1133,7 @@ class CreateStackSecurityGroupTests(OSIntegrationTestCase): env_values=self.env_values) self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) - self.created_stack = self.stack_creator.create() + self.created_stack = self.stack_creator.create(block=True) self.assertIsNotNone(self.created_stack) def tearDown(self): @@ -1092,7 +1222,7 @@ class CreateStackNegativeTests(OSIntegrationTestCase): self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) with self.assertRaises(HTTPBadRequest): - self.stack_creator.create() + self.stack_creator.create(block=True) def test_bad_stack_file(self): """ @@ -1103,7 +1233,7 @@ class CreateStackNegativeTests(OSIntegrationTestCase): self.stack_creator = OpenStackHeatStack( self.os_creds, stack_settings) with self.assertRaises(IOError): - self.stack_creator.create() + self.stack_creator.create(block=True) class CreateStackFailureTests(OSIntegrationTestCase): @@ -1200,7 +1330,7 @@ class CreateStackFailureTests(OSIntegrationTestCase): with self.assertRaises(StackError): try: - self.stack_creator.create() + self.stack_creator.create(block=True) except StackError: resources = heat_utils.get_resources( self.heat_cli, self.stack_creator.get_stack().id)