def test_create_table_async(self, mock_table_info_repo): context = mock.Mock(tenant='fake_tenant') table_name = 'fake_table' table_schema = 'fake_table_schema' mock_storage_driver = mock.Mock() mock_storage_driver.create_table.return_value = "fake_internal_name" table_info_save_args_list = [] def side_effect(*args): table_info_save_args_list.append(deepcopy(args)) mock_table_info_repo.save.side_effect = side_effect storage_manager = AsyncSimpleStorageManager(mock_storage_driver, mock_table_info_repo) storage_manager.create_table(context, table_name, table_schema) # called once, length of call_args_list indicates number of calls self.assertEqual(1, len(table_info_save_args_list)) # CallList is tuple of Mock and TableInfo self.assertEqual(2, len(table_info_save_args_list[0])) # TableInfo status should be creating initially when # table_info_repo.save is called self.assertEquals(models.TableMeta.TABLE_STATUS_CREATING, table_info_save_args_list[0][1].status) # wait for async create table call to finish for i in range(10): if mock_table_info_repo.update.called: table_info_update_args_list = ( mock_table_info_repo.update.call_args_list ) # called once # length of call_args_list indicates number of calls self.assertEqual(1, len(table_info_update_args_list)) self.assertEqual(2, len(table_info_update_args_list[0])) # tuple of Mock, TableInfo, and status list self.assertEqual(3, len(table_info_update_args_list[0][0])) # TableInfo status should be active by now self.assertEqual(models.TableMeta.TABLE_STATUS_ACTIVE, table_info_update_args_list[0][0][1].status) break else: time.sleep(1) # create_table method has been called self.assertTrue(mock_storage_driver.create_table.called)
def test_create_table_async(self, mock_table_info_repo): context = mock.Mock(tenant='fake_tenant') table_name = 'fake_table' table_schema = 'fake_table_schema' mock_storage_driver = mock.Mock() mock_storage_driver.create_table.return_value = "fake_internal_name" table_info_save_args_list = [] def side_effect(*args): table_info_save_args_list.append(deepcopy(args)) mock_table_info_repo.save.side_effect = side_effect storage_manager = AsyncSimpleStorageManager(mock_storage_driver, mock_table_info_repo) storage_manager.create_table(context, table_name, table_schema) # called once, length of call_args_list indicates number of calls self.assertEqual(1, len(table_info_save_args_list)) # CallList is tuple of Mock and TableInfo self.assertEqual(2, len(table_info_save_args_list[0])) # TableInfo status should be creating initially when # table_info_repo.save is called self.assertEquals(models.TableMeta.TABLE_STATUS_CREATING, table_info_save_args_list[0][1].status) # wait for async create table call to finish for i in range(10): if mock_table_info_repo.update.called: table_info_update_args_list = ( mock_table_info_repo.update.call_args_list) # called once # length of call_args_list indicates number of calls self.assertEqual(1, len(table_info_update_args_list)) self.assertEqual(2, len(table_info_update_args_list[0])) # tuple of Mock, TableInfo, and status list self.assertEqual(3, len(table_info_update_args_list[0][0])) # TableInfo status should be active by now self.assertEqual(models.TableMeta.TABLE_STATUS_ACTIVE, table_info_update_args_list[0][0][1].status) break else: time.sleep(1) # create_table method has been called self.assertTrue(mock_storage_driver.create_table.called)
def test_notify_create_table_async(self, mock_table_info_repo): TestNotify.cleanup_test_notifier() context = mock.Mock(tenant='fake_tenant') table_name = 'fake_table' table_schema = 'fake_table_schema' mock_storage_driver = mock.Mock() mock_storage_driver.create_table.return_value = True storage_manager = AsyncSimpleStorageManager(mock_storage_driver, mock_table_info_repo) storage_manager.create_table(context, table_name, table_schema) # wait for async create table call to finish for i in range(10): if (mock_table_info_repo.update.called and len(test_notifier.NOTIFICATIONS) == 2): break else: time.sleep(1) else: self.fail("Couldn't wait for async request completion") # create_table method has been called self.assertTrue(mock_storage_driver.create_table.called) # check notification queue self.assertEqual(len(test_notifier.NOTIFICATIONS), 2) start_event = test_notifier.NOTIFICATIONS[0] end_event = test_notifier.NOTIFICATIONS[1] self.assertEqual(start_event['priority'], cfg.CONF.default_notification_level) self.assertEqual(start_event['event_type'], notifier.EVENT_TYPE_TABLE_CREATE_START) self.assertEqual(start_event['payload'], table_schema) self.assertEqual(end_event['priority'], cfg.CONF.default_notification_level) self.assertEqual(end_event['event_type'], notifier.EVENT_TYPE_TABLE_CREATE_END) self.assertEqual(end_event['payload'], table_schema) time_start = datetime.datetime.strptime( start_event['timestamp'], DATETIMEFORMAT) time_end = datetime.datetime.strptime( end_event['timestamp'], DATETIMEFORMAT) self.assertTrue(time_start < time_end, "start event is later than end event")
def test_notify_create_table_async(self, mock_table_info_repo): self.cleanup_test_notifier() context = mock.Mock(tenant='fake_tenant') table_name = 'fake_table' table_schema = 'fake_table_schema' mock_storage_driver = mock.Mock() mock_storage_driver.create_table.return_value = True storage_manager = AsyncSimpleStorageManager(mock_storage_driver, mock_table_info_repo) storage_manager.create_table(context, table_name, table_schema) # wait for async create table call to finish for i in range(10): if (mock_table_info_repo.update.called and len(self.get_notifications()) == 2): break else: time.sleep(1) else: self.fail("Couldn't wait for async request completion") # create_table method has been called self.assertTrue(mock_storage_driver.create_table.called) # check notification queue self.assertEqual(len(self.get_notifications()), 2) start_event = self.get_notifications()[0] end_event = self.get_notifications()[1] self.assertEqual(start_event['priority'], 'INFO') self.assertEqual(start_event['event_type'], notifier.EVENT_TYPE_TABLE_CREATE_START) self.assertEqual(start_event['payload'], table_schema) self.assertEqual(end_event['priority'], 'INFO') self.assertEqual(end_event['event_type'], notifier.EVENT_TYPE_TABLE_CREATE_END) self.assertEqual(end_event['payload'], table_schema) time_start = datetime.datetime.strptime( start_event['timestamp'], DATETIMEFORMAT) time_end = datetime.datetime.strptime( end_event['timestamp'], DATETIMEFORMAT) self.assertTrue(time_start < time_end, "start event is later than end event")