def test_execute_lifecycle_on_unsupported_lifecycle_raises_error(self):
     driver = ResourceDriverHandler(
         self.mock_location_translator,
         resource_driver_config=self.resource_driver_config,
         heat_translator_service=self.mock_heat_translator,
         tosca_discovery_service=self.mock_tosca_discover_service)
     with self.assertRaises(InvalidRequestError) as context:
         driver.execute_lifecycle('Start', self.heat_driver_files,
                                  self.system_properties,
                                  self.resource_properties, {},
                                  self.created_associated_topology,
                                  self.deployment_location)
     self.assertEqual(
         str(context.exception),
         'Openstack driver only supports Create and Delete transitions, not Start'
     )
 def test_create_infrastructure_with_invalid_tosca_template_throws_error(
         self):
     self.mock_heat_translator.generate_heat_template.side_effect = ToscaValidationError(
         'Validation error')
     driver = ResourceDriverHandler(
         self.mock_location_translator,
         resource_driver_config=self.resource_driver_config,
         heat_translator_service=self.mock_heat_translator,
         tosca_discovery_service=self.mock_tosca_discover_service)
     with self.assertRaises(InvalidDriverFilesError) as context:
         driver.execute_lifecycle('Create', self.tosca_driver_files,
                                  self.system_properties,
                                  self.resource_properties,
                                  {'template-type': 'TOSCA'},
                                  AssociatedTopology(),
                                  self.deployment_location)
     self.assertEqual(str(context.exception), 'Validation error')
 def test_create_infrastructure_with_invalid_template_type_throws_error(
         self):
     request_properties = {'template-type': 'YAML'}
     driver = ResourceDriverHandler(
         self.mock_location_translator,
         resource_driver_config=self.resource_driver_config,
         heat_translator_service=self.mock_heat_translator,
         tosca_discovery_service=self.mock_tosca_discover_service)
     with self.assertRaises(InvalidDriverFilesError) as context:
         driver.execute_lifecycle('Create', self.tosca_driver_files,
                                  self.system_properties,
                                  self.resource_properties,
                                  request_properties, AssociatedTopology(),
                                  self.deployment_location)
     self.assertEqual(
         str(context.exception),
         'Cannot create using template of type \'YAML\'. Must be one of: [\'TOSCA\', \'HEAT\']'
     )
 def test_create_infrastructure_with_not_found_stack_id(self):
     self.mock_heat_driver.get_stack.side_effect = StackNotFoundError(
         'Existing stack not found')
     driver = ResourceDriverHandler(
         self.mock_location_translator,
         resource_driver_config=self.resource_driver_config,
         heat_translator_service=self.mock_heat_translator,
         tosca_discovery_service=self.mock_tosca_discover_service)
     self.resource_properties['stack_id'] = {
         'type': 'string',
         'value': 'MY_STACK_ID'
     }
     with self.assertRaises(InfrastructureNotFoundError) as context:
         driver.execute_lifecycle('Create', self.heat_driver_files,
                                  self.system_properties,
                                  self.resource_properties, {},
                                  AssociatedTopology(),
                                  self.deployment_location)
     self.assertEqual(str(context.exception), 'Existing stack not found')
 def test_execute_lifecycle_removes_files(self):
     self.mock_heat_driver.create_stack.return_value = '1'
     driver = ResourceDriverHandler(
         self.mock_location_translator,
         resource_driver_config=self.resource_driver_config,
         heat_translator_service=self.mock_heat_translator,
         tosca_discovery_service=self.mock_tosca_discover_service)
     result = driver.execute_lifecycle('Create', self.heat_driver_files,
                                       self.system_properties,
                                       self.resource_properties, {},
                                       AssociatedTopology(),
                                       self.deployment_location)
     self.assertFalse(os.path.exists(self.heat_driver_files.root_path))
 def test_delete_infrastructure_stack_not_found(self):
     driver = ResourceDriverHandler(
         self.mock_location_translator,
         resource_driver_config=self.resource_driver_config,
         heat_translator_service=self.mock_heat_translator,
         tosca_discovery_service=self.mock_tosca_discover_service)
     self.mock_heat_driver.delete_stack.side_effect = StackNotFoundError(
         'Not found')
     result = driver.execute_lifecycle('Delete', self.heat_driver_files,
                                       self.system_properties,
                                       self.resource_properties, {},
                                       self.created_associated_topology,
                                       self.deployment_location)
     self.assert_request_id(result.request_id, 'Delete', '1')
 def test_delete_infrastructure(self):
     driver = ResourceDriverHandler(
         self.mock_location_translator,
         resource_driver_config=self.resource_driver_config,
         heat_translator_service=self.mock_heat_translator,
         tosca_discovery_service=self.mock_tosca_discover_service)
     result = driver.execute_lifecycle('Delete', self.heat_driver_files,
                                       self.system_properties,
                                       self.resource_properties, {},
                                       self.created_associated_topology,
                                       self.deployment_location)
     self.assertIsInstance(result, LifecycleExecuteResponse)
     self.assert_request_id(result.request_id, 'Delete', '1')
     self.mock_location_translator.from_deployment_location.assert_called_once_with(
         self.deployment_location)
     self.mock_heat_driver.delete_stack.assert_called_once_with('1')
 def test_create_infrastructure(self):
     self.mock_heat_driver.create_stack.return_value = '1'
     driver = ResourceDriverHandler(
         self.mock_location_translator,
         resource_driver_config=self.resource_driver_config,
         heat_translator_service=self.mock_heat_translator,
         tosca_discovery_service=self.mock_tosca_discover_service)
     result = driver.execute_lifecycle('Create', self.heat_driver_files,
                                       self.system_properties,
                                       self.resource_properties, {},
                                       AssociatedTopology(),
                                       self.deployment_location)
     self.assertIsInstance(result, LifecycleExecuteResponse)
     self.assert_request_id(result.request_id, 'Create', '1')
     self.assert_internal_resource(result.associated_topology, '1')
     self.mock_location_translator.from_deployment_location.assert_called_once_with(
         self.deployment_location)
     self.mock_heat_driver.create_stack.assert_called_once_with(
         ANY, self.heat_template, {'propA': 'valueA'})
 def test_create_infrastructure_uses_stack_name_creator(
         self, mock_stack_name_creator):
     self.mock_heat_driver.create_stack.return_value = '1'
     driver = ResourceDriverHandler(
         self.mock_location_translator,
         resource_driver_config=self.resource_driver_config,
         heat_translator_service=self.mock_heat_translator,
         tosca_discovery_service=self.mock_tosca_discover_service)
     result = driver.execute_lifecycle('Create', self.heat_driver_files,
                                       self.system_properties,
                                       self.resource_properties, {},
                                       AssociatedTopology(),
                                       self.deployment_location)
     mock_stack_name_creator_inst = mock_stack_name_creator.return_value
     mock_stack_name_creator_inst.create.assert_called_once_with(
         '123', 'TestResource')
     self.mock_heat_driver.create_stack.assert_called_once_with(
         mock_stack_name_creator_inst.create.return_value,
         self.heat_template, {'propA': 'valueA'})
 def test_create_infrastructure_uses_system_prop(self):
     self.mock_heat_input_utils.filter_used_properties.return_value = {
         'system_resourceId': '123'
     }
     self.mock_heat_driver.create_stack.return_value = '1'
     driver = ResourceDriverHandler(
         self.mock_location_translator,
         resource_driver_config=self.resource_driver_config,
         heat_translator_service=self.mock_heat_translator,
         tosca_discovery_service=self.mock_tosca_discover_service)
     result = driver.execute_lifecycle('Create', self.heat_driver_files,
                                       self.system_properties,
                                       self.resource_properties, {},
                                       AssociatedTopology(),
                                       self.deployment_location)
     self.mock_heat_input_utils.filter_used_properties.assert_called_once_with(
         self.heat_template,
         PropValueMap({
             'propA': {
                 'type': 'string',
                 'value': 'valueA'
             },
             'propB': {
                 'type': 'string',
                 'value': 'valueB'
             },
             'system_resourceId': {
                 'type': 'string',
                 'value': '123'
             },
             'system_resourceName': {
                 'type': 'string',
                 'value': 'TestResource'
             }
         }))
     self.mock_heat_driver.create_stack.assert_called_once_with(
         ANY, self.heat_template, {'system_resourceId': '123'})
 def test_create_infrastructure_with_stack_id_input(self):
     driver = ResourceDriverHandler(
         self.mock_location_translator,
         resource_driver_config=self.resource_driver_config,
         heat_translator_service=self.mock_heat_translator,
         tosca_discovery_service=self.mock_tosca_discover_service)
     self.resource_properties['stack_id'] = {
         'type': 'string',
         'value': 'MY_STACK_ID'
     }
     result = driver.execute_lifecycle('Create', self.heat_driver_files,
                                       self.system_properties,
                                       self.resource_properties, {},
                                       AssociatedTopology(),
                                       self.deployment_location)
     self.assertIsInstance(result, LifecycleExecuteResponse)
     self.assert_request_id(result.request_id, 'Create', 'MY_STACK_ID')
     self.assert_internal_resource(result.associated_topology,
                                   'MY_STACK_ID')
     self.mock_heat_translator.generate_heat_template.assert_not_called()
     self.mock_heat_driver.create_stack.assert_not_called()
     self.mock_location_translator.from_deployment_location.assert_called_once_with(
         self.deployment_location)
     self.mock_heat_driver.get_stack.assert_called_once_with('MY_STACK_ID')