def _mock_event(event_id, resource_id): ev_info = {"links": [{"href": "http://heat/foo", "rel": "self"}], "logical_resource_id": resource_id, "physical_resource_id": resource_id, "resource_status": "CREATE_COMPLETE", "resource_status_reason": "state changed", "event_time": "2014-12-05T14:14:30Z", "id": event_id} return hc_ev.Event(manager=None, info=ev_info)
def test_event_show(self): arglist = ['--format', self.format, 'my_stack', 'my_resource', '1234'] parsed_args = self.check_parser(self.cmd, arglist, []) self.event_client.get.return_value = events.Event(None, self.response) self.cmd.take_action(parsed_args) self.event_client.get.assert_called_with(**{ 'stack_id': 'my_stack', 'resource_name': 'my_resource', 'event_id': '1234' })
def _mock_stack_event(event_id, stack_name, stack_status='CREATE_COMPLETE'): stack_id = 'abcdef' ev_info = {"links": [{"href": "http://heat/foo", "rel": "self"}, {"href": "http://heat/stacks/%s/%s" % (stack_name, stack_id), "rel": "stack"}], "logical_resource_id": stack_name, "physical_resource_id": stack_id, "resource_name": stack_name, "resource_status": stack_status, "resource_status_reason": "state changed", "event_time": "2014-12-05T14:14:30Z", "id": event_id} return hc_ev.Event(manager=None, info=ev_info)
def wait_for_events(ws, stack_name, out=None): """Receive events over the passed websocket and wait for final status.""" msg_template = _("\n Stack %(name)s %(status)s \n") if not out: out = sys.stdout event_log_context = utils.EventLogContext() while True: data = ws.recv()['body'] event = events_mod.Event(None, data['payload'], True) # Keep compatibility with the HTTP API event.event_time = data['timestamp'] event.resource_status = '%s_%s' % (event.resource_action, event.resource_status) events_log = utils.event_log_formatter([event], event_log_context) out.write(events_log) out.write('\n') if data['payload']['resource_name'] == stack_name: stack_status = data['payload']['resource_status'] if stack_status in ('COMPLETE', 'FAILED'): msg = msg_template % dict(name=stack_name, status=event.resource_status) return '%s_%s' % (event.resource_action, stack_status), msg
def data(TEST): # Stack TEST.heatclient_stacks = test_data_utils.TestDataContainer() stack_1 = stacks.Stack( stacks.StackManager(None), { 'id': 'stack-id-1', 'stack_name': 'overcloud', 'stack_status': 'RUNNING', 'outputs': [{ 'output_key': 'KeystoneURL', 'output_value': 'http://192.0.2.23:5000/v2', }], 'parameters': { 'plan_id': 'plan-1', 'one': 'one', 'two': 'two', } }) TEST.heatclient_stacks.add(stack_1) # Events TEST.heatclient_events = test_data_utils.TestDataContainer() event_1 = events.Event( events.EventManager(None), { 'id': 1, 'stack_id': 'stack-id-1', 'resource_name': 'Controller', 'resource_status': 'CREATE_IN_PROGRESS', 'resource_status_reason': 'state changed', 'event_time': '2014-01-01T07:26:15Z' }) event_2 = events.Event( events.EventManager(None), { 'id': 2, 'stack_id': 'stack-id-1', 'resource_name': 'Compute0', 'resource_status': 'CREATE_IN_PROGRESS', 'resource_status_reason': 'state changed', 'event_time': '2014-01-01T07:26:27Z' }) event_3 = events.Event( events.EventManager(None), { 'id': 3, 'stack_id': 'stack-id-1', 'resource_name': 'Compute1', 'resource_status': 'CREATE_IN_PROGRESS', 'resource_status_reason': 'state changed', 'event_time': '2014-01-01T07:26:44Z' }) event_4 = events.Event( events.EventManager(None), { 'id': 4, 'stack_id': 'stack-id-1', 'resource_name': 'Compute0', 'resource_status': 'CREATE_COMPLETE', 'resource_status_reason': 'state changed', 'event_time': '2014-01-01T07:27:14Z' }) event_5 = events.Event( events.EventManager(None), { 'id': 5, 'stack_id': 'stack-id-1', 'resource_name': 'Compute2', 'resource_status': 'CREATE_IN_PROGRESS', 'resource_status_reason': 'state changed', 'event_time': '2014-01-01T07:27:31Z' }) event_6 = events.Event( events.EventManager(None), { 'id': 6, 'stack_id': 'stack-id-1', 'resource_name': 'Compute1', 'resource_status': 'CREATE_COMPLETE', 'resource_status_reason': 'state changed', 'event_time': '2014-01-01T07:28:01Z' }) event_7 = events.Event( events.EventManager(None), { 'id': 7, 'stack_id': 'stack-id-1', 'resource_name': 'Controller', 'resource_status': 'CREATE_COMPLETE', 'resource_status_reason': 'state changed', 'event_time': '2014-01-01T07:28:59Z' }) event_8 = events.Event( events.EventManager(None), { 'id': 8, 'stack_id': 'stack-id-1', 'resource_name': 'Compute2', 'resource_status': 'CREATE_COMPLETE', 'resource_status_reason': 'state changed', 'event_time': '2014-01-01T07:29:11Z' }) TEST.heatclient_events.add(event_1, event_2, event_3, event_4, event_5, event_6, event_7, event_8) # Resource TEST.heatclient_resources = test_data_utils.TestDataContainer() resource_1 = resources.Resource( resources.ResourceManager(None), { 'id': '1-resource-id', 'stack_id': 'stack-id-1', 'resource_name': 'Compute0', 'logical_resource_id': 'Compute0', 'physical_resource_id': 'aa', 'resource_status': 'CREATE_COMPLETE', 'resource_type': 'Compute' }) resource_2 = resources.Resource( resources.ResourceManager(None), { 'id': '2-resource-id', 'stack_id': 'stack-id-1', 'resource_name': 'Controller', 'logical_resource_id': 'Controller', 'physical_resource_id': 'bb', 'resource_status': 'CREATE_COMPLETE', 'resource_type': 'Controller' }) resource_3 = resources.Resource( resources.ResourceManager(None), { 'id': '3-resource-id', 'stack_id': 'stack-id-1', 'resource_name': 'Compute1', 'logical_resource_id': 'Compute1', 'physical_resource_id': 'cc', 'resource_status': 'CREATE_COMPLETE', 'resource_type': 'Compute' }) resource_4 = resources.Resource( resources.ResourceManager(None), { 'id': '4-resource-id', 'stack_id': 'stack-id-4', 'resource_name': 'Compute2', 'logical_resource_id': 'Compute2', 'physical_resource_id': 'dd', 'resource_status': 'CREATE_COMPLETE', 'resource_type': 'Compute' }) TEST.heatclient_resources.add(resource_1, resource_2, resource_3, resource_4) # Server TEST.novaclient_servers = test_data_utils.TestDataContainer() s_1 = servers.Server( servers.ServerManager(None), { 'id': 'aa', 'name': 'Compute', 'created': '2014-06-26T20:38:06Z', 'image': { 'id': '1' }, 'flavor': { 'id': '1', }, 'status': 'ACTIVE', 'public_ip': '192.168.1.1' }) s_2 = servers.Server( servers.ServerManager(None), { 'id': 'bb', 'name': 'Controller', 'created': '2014-06-27T20:38:06Z', 'image': { 'id': '2' }, 'flavor': { 'id': '2', }, 'status': 'ACTIVE', 'public_ip': '192.168.1.2' }) s_3 = servers.Server( servers.ServerManager(None), { 'id': 'cc', 'name': 'Compute', 'created': '2014-06-28T20:38:06Z', 'image': { 'id': '1' }, 'flavor': { 'id': '1', }, 'status': 'BUILD', 'public_ip': '192.168.1.3' }) s_4 = servers.Server( servers.ServerManager(None), { 'id': 'dd', 'name': 'Compute', 'created': '2014-06-29T20:38:06Z', 'image': { 'id': '1' }, 'flavor': { 'id': '1', }, 'status': 'ERROR', 'public_ip': '192.168.1.4' }) TEST.novaclient_servers.add(s_1, s_2, s_3, s_4) # Image TEST.glanceclient_images = test_data_utils.TestDataContainer() image_1 = images.Image(images.ImageManager(None), { 'id': '2', 'name': 'overcloud-control' }) image_2 = images.Image(images.ImageManager(None), { 'id': '1', 'name': 'overcloud-compute' }) image_3 = images.Image(images.ImageManager(None), { 'id': '3', 'name': 'Object Storage Image' }) image_4 = images.Image(images.ImageManager(None), { 'id': '4', 'name': 'Block Storage Image' }) TEST.glanceclient_images.add(image_1, image_2, image_3, image_4)
class TestStackHookPoll(TestStack): stack = stacks.Stack( None, { "id": '1234', "stack_name": 'my_stack', "creation_time": "2013-08-04T20:57:55Z", "updated_time": "2013-08-04T20:57:55Z", "stack_status": "CREATE_IN_PROGRESS" }) resource = resources.Resource( None, { 'resource_name': 'resource1', 'links': [{ 'href': 'http://heat.example.com:8004/resource1', 'rel': 'self' }, { 'href': 'http://192.168.27.100:8004/my_stack', 'rel': 'stack' }], 'logical_resource_id': 'random_group', 'creation_time': '2015-12-03T16:50:56', 'resource_status': 'INIT_COMPLETE', 'updated_time': '2015-12-03T16:50:56', 'required_by': [], 'resource_status_reason': '', 'physical_resource_id': '', 'resource_type': 'OS::Heat::ResourceGroup', 'id': '1111' }) columns = ['ID', 'Resource Status Reason', 'Resource Status', 'Event Time'] event0 = events.Event(manager=None, info={ 'resource_name': 'my_stack', 'event_time': '2015-12-02T16:50:56', 'logical_resource_id': 'my_stack', 'resource_status': 'CREATE_IN_PROGRESS', 'resource_status_reason': 'Stack CREATE started', 'id': '1234' }) event1 = events.Event(manager=None, info={ 'resource_name': 'resource1', 'event_time': '2015-12-03T19:59:58', 'logical_resource_id': 'resource1', 'resource_status': 'INIT_COMPLETE', 'resource_status_reason': 'CREATE paused until Hook pre-create is cleared', 'id': '1111' }) row1 = ('resource1', '1111', 'CREATE paused until Hook pre-create is cleared', 'INIT_COMPLETE', '2015-12-03T19:59:58') def setUp(self): super(TestStackHookPoll, self).setUp() self.cmd = stack.StackHookPoll(self.app, None) self.mock_client.stacks.get = mock.Mock(return_value=self.stack) self.mock_client.events.list = mock.Mock( return_value=[self.event0, self.event1]) self.mock_client.resources.list = mock.Mock( return_value=[self.resource]) def test_hook_poll(self): expected_columns = ['Resource Name'] + self.columns expected_rows = [self.row1] arglist = ['my_stack'] parsed_args = self.check_parser(self.cmd, arglist, []) columns, rows = self.cmd.take_action(parsed_args) self.assertEqual(expected_rows, list(rows)) self.assertEqual(expected_columns, columns) def test_hook_poll_nested(self): expected_columns = ['Resource Name'] + self.columns + ['Stack Name'] expected_rows = [self.row1 + ('my_stack', )] arglist = ['my_stack', '--nested-depth=10'] parsed_args = self.check_parser(self.cmd, arglist, []) columns, rows = self.cmd.take_action(parsed_args) self.assertEqual(expected_rows, list(rows)) self.assertEqual(expected_columns, columns) def test_hook_poll_nested_invalid(self): arglist = ['my_stack', '--nested-depth=ugly'] parsed_args = self.check_parser(self.cmd, arglist, []) self.assertRaises(exc.CommandError, self.cmd.take_action, parsed_args)
def test_is_diff_object_with_diff_type(self): # Two resources with different types: is different object r1 = events.Event(None, {'id': 1}) r2 = stacks.Stack(None, {'id': 1}) self.assertFalse(r1.is_same_obj(r2)) self.assertFalse(r2.is_same_obj(r1))
def test_two_resources_with_diff_type_are_not_equal(self): # Two resoruces of different types: never equal r1 = base.Resource(None, {'id': 1}) r2 = events.Event(None, {'id': 1}) self.assertNotEqual(r1, r2)