def test_different_processes_dont_pick_up_each_others_requests( self, max_batch_size, req_count_1, req_count_2): """ This is a test for horizontal scaling functionality of the Configuration Controller. It tests if two processes (in this case associated with different Session instances) only pick those requests that have no lock on them. """ # Given config = self.get_config() config.REQUEST_PROCESSING_LIMIT = max_batch_size session1 = Session(bind=self.engine) session2 = Session(bind=self.engine) consumer = RequestDBConsumer( "someRequest", request_processing_limit=config.REQUEST_PROCESSING_LIMIT, ) self._prepare_two_pending_and_one_processed_request() # When reqs1 = consumer.get_pending_requests(session1) reqs2 = consumer.get_pending_requests(session2) reqs1_list = list(reqs1.values())[0] reqs2_list = list(reqs2.values())[0] session1.commit() session2.commit() # Then self.assertEqual(req_count_1, len(reqs1_list)) self.assertEqual(req_count_2, len(reqs2_list)) if reqs1_list and reqs2_list: # Making sure we're not getting the same requests in both sessions self.assertNotEqual(reqs1_list[0].cbsd_id, reqs2_list[0].cbsd_id) session1.close() session2.close()
class DBTestCase(unittest.TestCase): def get_config(self): return TestConfig() def setUp(self): config = self.get_config() self.engine = create_engine( url=config.SQLALCHEMY_DB_URI, encoding=config.SQLALCHEMY_DB_ENCODING, echo=False, future=config.SQLALCHEMY_FUTURE, ) Base.metadata.bind = self.engine Base.metadata.create_all() self.session = Session() def tearDown(self): self.session.rollback() self.session.close() self.drop_all() @staticmethod def drop_all(): Base.metadata.drop_all()