def test_543334_HeatStackCreateWithURL(self):
        """ This test case checks creation of stack using template URL.

        Steps:
        1. Create stack using template URL.
        2. Check that the stack is in the list of stacks
        3. Check that stack status is 'CREATE_COMPLETE'
        4. Delete stack
        """
        stack_name = "empty__543334"
        template_url = (
            "https://raw.githubusercontent.com/tkuterina/"
            "mos-integration-tests/master/mos_tests/heat/"
            "templates/empty_heat_templ.yaml"
        )
        timeout = 20
        if common_functions.is_stack_exists(stack_name, self.heat):
            uid = common_functions.get_stack_id(self.heat, stack_name)
            common_functions.delete_stack(self.heat, uid)
        stack_data = {
            "stack_name": stack_name,
            "template_url": template_url,
            "parameters": {"param": "some_param_string"},
            "timeout_mins": timeout,
        }
        output = self.heat.stacks.create(**stack_data)
        stack_id = output["stack"]["id"]
        self.uid_list.append(stack_id)
        stacks_id = [s.id for s in self.heat.stacks.list()]
        self.assertIn(stack_id, stacks_id)
        self.assertTrue(common_functions.check_stack_status(stack_name, self.heat, "CREATE_COMPLETE", timeout))
    def test_543338_StackCancelUpdate(self):
        """ This test check the possibility to cancel update

        Steps:
        1. Create new stack
        2. Launch heat action-suspend stack_name
        3. Launch heat stack-update stack_name
        4. Launch heat stack-cancel-update stack_name while update
        operation is in progress
        5. Check state of stack after cancel update
        """

        # network ID, image ID, InstanceType
        networks = self.neutron.list_networks()["networks"]
        internal_net = [net["id"] for net in networks if not net["router:external"]][0]
        image_id = self.nova.images.list()[0].id
        instance_type = "m1.tiny"

        # Stack creation
        stack_name = "stack_to_cancel_update_543338"
        template_content = common_functions.read_template(self.templates_dir, "heat_create_neutron_stack_template.yaml")
        initial_params = {"network": internal_net, "ImageId": image_id, "InstanceType": instance_type}
        stack_id = common_functions.create_stack(self.heat, stack_name, template_content, initial_params)
        self.uid_list.append(stack_id)

        # Stack update (from m1.tiny to m1.small)
        upd_params = {"network": internal_net, "ImageId": image_id, "InstanceType": "m1.small"}
        d_updated = {"stack_name": stack_name, "template": template_content, "parameters": upd_params}
        self.heat.stacks.update(stack_id, **d_updated)

        # Perform cancel-update operation
        # when stack status is 'UPDATE_IN_PROGRESS'
        timeout = time.time() + 60
        while True:
            status = self.heat.stacks.get(stack_id).to_dict()["stack_status"]
            if status == "UPDATE_IN_PROGRESS":
                self.heat.actions.cancel_update(stack_id)
                break
            elif time.time() > timeout:
                raise AttributeError(
                    "Unable to find stack in 'UPDATE_IN_PROGRESS' state. "
                    "Status '{0}' doesn't allow to perform cancel-update".format(status)
                )
            else:
                time.sleep(1)

        # Wait for rollback competed and check
        self.assertTrue(common_functions.check_stack_status(stack_name, self.heat, "ROLLBACK_COMPLETE", 120))
    def test_543333_HeatStackCreateWithTemplate(self):
        """ This test case checks creation of stack.

        Steps:
        1. Create stack using template file empty_heat_templ.yaml.
        2. Check that the stack is in the list of stacks
        3. Check that stack status is 'CREATE_COMPLETE'
        4. Delete stack
        """
        stack_name = "empty__543333"
        parameter = "some_param_string"
        timeout = 20
        if common_functions.is_stack_exists(stack_name, self.heat):
            uid = common_functions.get_stack_id(self.heat, stack_name)
            common_functions.delete_stack(self.heat, uid)
        template = common_functions.read_template(self.templates_dir, "empty_heat_templ.yaml")
        uid = common_functions.create_stack(
            self.heat, stack_name, template, timeout=timeout, parameters={"param": parameter}
        )
        self.uid_list.append(uid)
        stacks_id = [s.id for s in self.heat.stacks.list()]
        self.assertIn(uid, stacks_id)
        self.assertTrue(common_functions.check_stack_status(stack_name, self.heat, "CREATE_COMPLETE", timeout))
    def test_543344_HeatStackTemplateShow(self):
        """ This test case checks representation of template of created stack.

        Steps:
        1. Create stack using template file empty_heat_templ.yaml.
        2. Check that template of created stack has correct \
        representation.
        """
        stack_name = "empty_stack"
        timeout = 60
        parameter = "some_string"
        if common_functions.is_stack_exists(stack_name, self.heat):
            uid = common_functions.get_stack_id(self.heat, stack_name)
            common_functions.delete_stack(self.heat, uid)
        template = common_functions.read_template(self.templates_dir, "empty_heat_templ.yaml")
        uid = common_functions.create_stack(
            self.heat, stack_name, template, timeout=timeout, parameters={"param": parameter}
        )
        self.uid_list.append(uid)
        self.assertTrue(common_functions.check_stack_status(stack_name, self.heat, "CREATE_COMPLETE"))
        stack_dict = {s.stack_name: s.id for s in self.heat.stacks.list()}
        stack_id = stack_dict[stack_name]
        stack_template = self.heat.stacks.template(stack_id)
        self.assertIsInstance(stack_template, dict)
    def test_543335_HeatStackDelete(self):
        """ This test case checks deletion of stack.

        Steps:
        1. Create stack using template file empty_heat_templ.yaml.
        2. Check that the stack is in the list of stacks
        3. Delete the stack.
        4. Check that the stack is absent in the list of stacks

        """
        stack_name = "empty_543335"
        timeout = 20
        parameter = "some_param_string"
        if common_functions.is_stack_exists(stack_name, self.heat):
            uid = common_functions.get_stack_id(self.heat, stack_name)
            common_functions.delete_stack(self.heat, uid)
        template = common_functions.read_template(self.templates_dir, "empty_heat_templ.yaml")
        uid = common_functions.create_stack(
            self.heat, stack_name, template, timeout=timeout, parameters={"param": parameter}
        )
        self.assertTrue(common_functions.check_stack_status(stack_name, self.heat, "CREATE_COMPLETE", timeout))
        common_functions.delete_stack(self.heat, uid)
        stacks = [s.stack_name for s in self.heat.stacks.list()]
        self.assertNotIn(stack_name, stacks)