def test_unbind_failed_on_consumer(self): # Setup self.populate() manager = factory.consumer_bind_manager() bind = manager.bind(self.CONSUMER_ID, self.REPO_ID, self.DISTRIBUTOR_ID, self.NOTIFY_AGENT, self.BINDING_CONFIG) # Test options = {} itinerary = unbind_itinerary( self.CONSUMER_ID, self.REPO_ID, self.DISTRIBUTOR_ID, options) call_reports = self.coordinator.execute_multiple_calls(itinerary) # Verify self.assertEqual(len(call_reports), 3) for call in call_reports: self.assertNotEqual(call.state, dispatch_constants.CALL_REJECTED_RESPONSE) # run task #1 (actual unbind) self.run_next() # verify bind marked deleted collection = Bind.get_collection() bind = collection.find_one(self.QUERY) self.assertTrue(bind['deleted']) # run task #2 (notify consumer) self.run_next() # verify agent notified self.assertTrue(mock_agent.Consumer.unbind.called) # verify consumer request (pending) request_id = call_reports[1].call_request_id collection = Bind.get_collection() bind = collection.find_one(self.QUERY) self.assertTrue(bind is not None) actions = bind['consumer_actions'] self.assertEqual(len(actions), 1) self.assertEqual(actions[0]['id'], request_id) self.assertEqual(actions[0]['action'], Bind.Action.UNBIND) self.assertEqual(actions[0]['status'], Bind.Status.PENDING) self.assertTrue(isinstance(actions[0]['timestamp'], float)) # simulated asynchronous task result report = DispatchReport() report.succeeded = False self.coordinator.complete_call_success(request_id, report.dict()) # verify not found (marked deleted) binds = manager.find_by_consumer(self.CONSUMER_ID) self.assertEquals(len(binds), 0) # run task #3 (bind actually deleted) self.run_next() # verify bind not deleted collection = Bind.get_collection() bind = collection.find_one(self.QUERY) self.assertTrue(bind is not None) actions = bind['consumer_actions'] self.assertEqual(len(actions), 1) self.assertEqual(actions[0]['id'], request_id) self.assertEqual(actions[0]['action'], Bind.Action.UNBIND) self.assertEqual(actions[0]['status'], Bind.Status.FAILED) self.assertTrue(isinstance(actions[0]['timestamp'], float))
def test_unbind_failed_on_consumer(self): # Setup self.populate() manager = factory.consumer_bind_manager() bind = manager.bind(self.CONSUMER_ID, self.REPO_ID, self.DISTRIBUTOR_ID, self.NOTIFY_AGENT, self.BINDING_CONFIG) # Test options = {} itinerary = unbind_itinerary( self.CONSUMER_ID, self.REPO_ID, self.DISTRIBUTOR_ID, options) call_reports = self.coordinator.execute_multiple_calls(itinerary) # Verify self.assertEqual(len(call_reports), 3) for call in call_reports: self.assertNotEqual(call.state, dispatch_constants.CALL_REJECTED_RESPONSE) # run task #1 (actual unbind) self.run_next() # verify bind marked deleted collection = Bind.get_collection() bind = collection.find_one(self.QUERY) self.assertTrue(bind['deleted']) # run task #2 (notify consumer) self.run_next() # verify agent notified self.assertTrue(mock_agent.Consumer.unbind.called) # verify consumer request (pending) request_id = call_reports[1].call_request_id collection = Bind.get_collection() bind = collection.find_one(self.QUERY) self.assertTrue(bind is not None) actions = bind['consumer_actions'] self.assertEqual(len(actions), 1) self.assertEqual(actions[0]['id'], request_id) self.assertEqual(actions[0]['action'], Bind.Action.UNBIND) self.assertEqual(actions[0]['status'], Bind.Status.PENDING) self.assertTrue(isinstance(actions[0]['timestamp'], float)) # simulated asynchronous task result report = DispatchReport() report.succeeded = False self.coordinator.complete_call_success(request_id, report.dict()) # verify not found (marked deleted) binds = manager.find_by_consumer(self.CONSUMER_ID) self.assertEquals(len(binds), 0) # run task #3 (bind actually deleted) self.run_next() # verify bind not deleted collection = Bind.get_collection() bind = collection.find_one(self.QUERY) self.assertTrue(bind is not None) actions = bind['consumer_actions'] self.assertEqual(len(actions), 1) self.assertEqual(actions[0]['id'], request_id) self.assertEqual(actions[0]['action'], Bind.Action.UNBIND) self.assertEqual(actions[0]['status'], Bind.Status.FAILED) self.assertTrue(isinstance(actions[0]['timestamp'], float))
def test_bind_failed_on_consumer(self): # Setup self.populate() # Test options = {} itinerary = bind_itinerary( self.CONSUMER_ID, self.REPO_ID, self.DISTRIBUTOR_ID, self.NOTIFY_AGENT, self.BINDING_CONFIG, options) call_reports = self.coordinator.execute_multiple_calls(itinerary) # Verify self.assertEqual(len(call_reports), 2) for call in call_reports: self.assertNotEqual(call.state, dispatch_constants.CALL_REJECTED_RESPONSE) # run task #1 (actual bind) self.run_next() # verify bind created manager = factory.consumer_bind_manager() binds = manager.find_by_consumer(self.CONSUMER_ID) self.assertEquals(len(binds), 1) bind = binds[0] self.assertEqual(bind['consumer_id'], self.CONSUMER_ID) self.assertEqual(bind['repo_id'], self.REPO_ID) self.assertEqual(bind['distributor_id'], self.DISTRIBUTOR_ID) self.assertEqual(bind['notify_agent'], self.NOTIFY_AGENT) self.assertEqual(bind['binding_config'], self.BINDING_CONFIG) # run task #2 (notify consumer) self.run_next() # verify pending consumer request (pending) request_id = call_reports[1].call_request_id bind = manager.get_bind(self.CONSUMER_ID, self.REPO_ID, self.DISTRIBUTOR_ID) actions = bind['consumer_actions'] self.assertEqual(len(actions), 1) self.assertEqual(actions[0]['id'], request_id) self.assertEqual(actions[0]['action'], Bind.Action.BIND) self.assertEqual(actions[0]['status'], Bind.Status.PENDING) self.assertTrue(isinstance(actions[0]['timestamp'], float)) # verify agent notified self.assertTrue(mock_agent.Consumer.bind.called) # simulated asynchronous task result report = DispatchReport() report.succeeded = False self.coordinator.complete_call_success(request_id, report.dict()) # verify pending consumer request (failed) manager = factory.consumer_bind_manager() bind = manager.get_bind(self.CONSUMER_ID, self.REPO_ID, self.DISTRIBUTOR_ID) actions = bind['consumer_actions'] self.assertEqual(len(actions), 1) self.assertEqual(actions[0]['id'], request_id) self.assertEqual(actions[0]['action'], Bind.Action.BIND) self.assertEqual(actions[0]['status'], Bind.Status.FAILED) self.assertTrue(isinstance(actions[0]['timestamp'], float))
def test_bind_failed_on_consumer(self): # Setup self.populate() # Test options = {} itinerary = bind_itinerary( self.CONSUMER_ID, self.REPO_ID, self.DISTRIBUTOR_ID, self.NOTIFY_AGENT, self.BINDING_CONFIG, options) call_reports = self.coordinator.execute_multiple_calls(itinerary) # Verify self.assertEqual(len(call_reports), 2) for call in call_reports: self.assertNotEqual(call.state, dispatch_constants.CALL_REJECTED_RESPONSE) # run task #1 (actual bind) self.run_next() # verify bind created manager = factory.consumer_bind_manager() binds = manager.find_by_consumer(self.CONSUMER_ID) self.assertEquals(len(binds), 1) bind = binds[0] self.assertEqual(bind['consumer_id'], self.CONSUMER_ID) self.assertEqual(bind['repo_id'], self.REPO_ID) self.assertEqual(bind['distributor_id'], self.DISTRIBUTOR_ID) self.assertEqual(bind['notify_agent'], self.NOTIFY_AGENT) self.assertEqual(bind['binding_config'], self.BINDING_CONFIG) # run task #2 (notify consumer) self.run_next() # verify pending consumer request (pending) request_id = call_reports[1].call_request_id bind = manager.get_bind(self.CONSUMER_ID, self.REPO_ID, self.DISTRIBUTOR_ID) actions = bind['consumer_actions'] self.assertEqual(len(actions), 1) self.assertEqual(actions[0]['id'], request_id) self.assertEqual(actions[0]['action'], Bind.Action.BIND) self.assertEqual(actions[0]['status'], Bind.Status.PENDING) self.assertTrue(isinstance(actions[0]['timestamp'], float)) # verify agent notified self.assertTrue(mock_agent.Consumer.bind.called) # simulated asynchronous task result report = DispatchReport() report.succeeded = False self.coordinator.complete_call_success(request_id, report.dict()) # verify pending consumer request (failed) manager = factory.consumer_bind_manager() bind = manager.get_bind(self.CONSUMER_ID, self.REPO_ID, self.DISTRIBUTOR_ID) actions = bind['consumer_actions'] self.assertEqual(len(actions), 1) self.assertEqual(actions[0]['id'], request_id) self.assertEqual(actions[0]['action'], Bind.Action.BIND) self.assertEqual(actions[0]['status'], Bind.Status.FAILED) self.assertTrue(isinstance(actions[0]['timestamp'], float))