class Test_create_session_cache(unittest.TestCase): def setUp(self): self.hash = DummyHash({}) self.hash_patch = mock.patch('stubo.cache.Hash', self.hash) self.hash_patch.start() from stubo.testing import DummyScenario self.scenario = DummyScenario() self.db_patch = mock.patch('stubo.cache.Scenario', self.scenario) self.db_patch.start() self.patch_module = mock.patch('stubo.ext.module.Module', DummyModule) self.patch_module.start() def tearDown(self): self.hash_patch.stop() self.db_patch.stop() self.patch_module.stop() def _get_cache(self): from stubo.cache import Cache return Cache('localhost') def _make_scenario(self, name, **kwargs): doc = dict(name=name, **kwargs) self.scenario.insert(**doc) def test_no_stubs(self): from stubo.exceptions import HTTPServerError with self.assertRaises(HTTPServerError): self._get_cache().create_session_cache('foo', 'bar') def test_new_session(self): from stubo.cache import compute_hash scenario_name = 'foo' self._make_scenario('localhost:foo') from stubo.model.stub import create, Stub stub = Stub(create('<test>match this</test>', '<test>OK</test>'), 'localhost:foo') doc = dict(scenario='localhost:foo', stub=stub) self.scenario.insert_stub(doc, stateful=True) cache = self._get_cache() cache.create_session_cache('foo', 'bar') session = self.hash.get('localhost:foo', 'bar') self.assertEqual(session["status"], "playback") self.assertEqual(session['session'], 'bar') self.assertEqual(session["scenario"], "localhost:foo") self.assertTrue('stubs' in session) stubs = session['stubs'] self.assertEqual(len(stubs), 1) from stubo.model.stub import StubCache stub = StubCache(stubs[0], 'localhost:foo', 'bar') self.assertEqual(stub.contains_matchers(), ["<test>match this</test>"]) self.assertEqual(stub.response_ids(), [compute_hash('<test>OK</test>')]) self.assertEqual(self.hash.get_raw('localhost:sessions', 'bar'), 'foo') def test_new_session_with_state(self): from stubo.cache import compute_hash scenario_name = 'foo' self._make_scenario('localhost:foo') from stubo.model.stub import create, Stub stub = Stub(create('<test>match this</test>', '<test>OK</test>'), 'localhost:foo') doc = dict(scenario='localhost:foo', stub=stub) self.scenario.insert_stub(doc, stateful=True) stub2 = Stub(create('<test>match this</test>', '<test>BAD</test>'), 'localhost:foo') doc2 = dict(scenario='localhost:foo', stub=stub2) self.scenario.insert_stub(doc2, stateful=True) cache = self._get_cache() cache.create_session_cache('foo', 'bar') session = self.hash.get('localhost:foo', 'bar') self.assertEqual(session["status"], "playback") self.assertEqual(session['session'], 'bar') self.assertEqual(session["scenario"], "localhost:foo") self.assertTrue('stubs' in session) stubs = session['stubs'] self.assertEqual(len(stubs), 1) from stubo.model.stub import StubCache stub = StubCache(stubs[0], session["scenario"], session['session']) responses = stub.response_ids() self.assertEqual(len(responses), 2) self.assertEqual(stub.contains_matchers(), ["<test>match this</test>"]) self.assertEqual(responses, [ compute_hash('<test>OK</test>'), compute_hash('<test>BAD</test>') ]) self.assertEqual(self.hash.get_raw('localhost:sessions', 'bar'), 'foo') def test_update_dormant_session_with_stubs(self): self.hash.set('somehost:foo', 'bar', { 'status': 'dormant', 'session': 'bar', 'scenario': 'localhost:foo' }) from stubo.cache import compute_hash scenario_name = 'foo' self._make_scenario('localhost:foo') from stubo.model.stub import create, Stub stub = Stub(create('<test>match this</test>', '<test>OK</test>'), 'localhost:foo') doc = dict(scenario='localhost:foo', stub=stub) self.scenario.insert_stub(doc, stateful=True) cache = self._get_cache() cache.create_session_cache('foo', 'bar') session = self.hash.get('localhost:foo', 'bar') self.assertEqual(session["status"], "playback") self.assertEqual(session['session'], 'bar') self.assertEqual(session["scenario"], "localhost:foo") self.assertTrue('stubs' in session) stubs = session['stubs'] self.assertEqual(len(stubs), 1) from stubo.model.stub import StubCache stub = StubCache(stubs[0], session["scenario"], session['session']) self.assertEqual(stub.contains_matchers(), ["<test>match this</test>"]) self.assertEqual(stub.response_ids(), [compute_hash('<test>OK</test>')]) def test_update_dormat_session_with_stubs_and_delay(self): self.hash.set('localhost:foo', 'bar', { 'status': 'dormant', 'session': 'bar', 'scenario': 'localhost:foo' }) delay_policy = { "delay_type": "fixed", "name": "slow", "milliseconds": "500" } self.hash.set('localhost:delay_policy', 'slow', delay_policy) self._make_scenario('localhost:foo') from stubo.model.stub import create, Stub stub = Stub(create('<test>match this</test>', '<test>OK</test>'), 'localhost:foo') stub.set_delay_policy('slow') doc = dict(scenario='localhost:foo', stub=stub) self.scenario.insert_stub(doc, stateful=True) self._get_cache().create_session_cache('foo', 'bar') session = self.hash.get('localhost:foo', 'bar') self.assertTrue('stubs' in session) stubs = session['stubs'] self.assertEqual(len(stubs), 1) from stubo.model.stub import StubCache stub = StubCache(stubs[0], session["scenario"], session['session']) self.assertEqual(stub.delay_policy(), delay_policy) def test_update_dormat_session_with_stubs_and_module(self): self.hash.set('localhost:foo', 'bar', { 'status': 'dormant', 'session': 'bar', 'scenario': 'localhost:foo' }) module = {"system_date": "2013-09-24", "version": 1, "name": "funcky"} self._make_scenario('localhost:foo') from stubo.model.stub import create, Stub stub = Stub(create('<test>match this</test>', '<test>OK</test>'), 'localhost:foo') stub.set_module(module) doc = dict(scenario='localhost:foo', stub=stub) self.scenario.insert_stub(doc, stateful=True) self._get_cache().create_session_cache('foo', 'bar') session = self.hash.get('localhost:foo', 'bar') self.assertTrue('stubs' in session) stubs = session['stubs'] self.assertEqual(len(stubs), 1) from stubo.model.stub import StubCache stub = StubCache(stubs[0], session["scenario"], session['session']) self.assertEqual(stub.module(), module)
class Test_add_request(unittest.TestCase): def setUp(self): self.session = { u'status': u'playback', u'system_date': u'2013-11-14', u'scenario': u'localhost:converse', u'stubs': [ make_stub([u'updatePNR\n'], [ u'bb6d03d2e0d01a2ae60aa5564a0048b6dc9237763d2f1dcdae84a12b' ]), make_stub([u'getPNR\n'], [ u'64f2b6d69e151aa9df847dfe025038d095dc6455beebef93e30e9ed0', u'188ac03461437e7e65e059cb023bfcce5604084503e7da118db5b495' ]) ], u'scenario_id': u'52849a0831588e01441d47b3', u'session': u'conv_1' } self.hash = DummyHash() self.patch = mock.patch('stubo.cache.Hash', self.hash) self.patch.start() self.patch2 = mock.patch('stubo.cache.get_redis_server', lambda x: x) self.patch2.start() def tearDown(self): self.patch.stop() self.patch2.stop() def _get_cache(self): from stubo.cache import Cache return Cache('localhost') def _func(self, session, request_id, response_ids, delay_policy_name, recorded='2013-09-05', system_date='2013-09-05', module=None, stub_number=0): from stubo.model.stub import StubCache from stubo.cache import add_request stub = StubCache({}, session.get('scenario'), session.get('session')) stub.load_from_cache(response_ids, delay_policy_name, recorded, system_date, module, request_id) stub.set_delay_policy(dict(name=delay_policy_name)) module = module or {} return add_request(session, request_id, stub, system_date, stub_number) def test_it(self): self._func(self.session, '1', '1', 'slow') self.assertEqual( self.hash.get('localhost:converse:request', 'conv_1:1'), [ "1", "slow", "2013-09-05", "2013-09-05", {}, "4ba2c60758312bd8f67dfd227f301a860a2a4f5542359338e7ce7514" ]) def test_it_with_no_delay(self): self._func(self.session, '1', '1', '') self.assertEqual( self.hash.get('localhost:converse:request', 'conv_1:1'), [ "1", "", "2013-09-05", "2013-09-05", {}, "4ba2c60758312bd8f67dfd227f301a860a2a4f5542359338e7ce7514" ]) def test_it_with_module(self): module = {"system_date": "2013-08-07", "version": 1, "name": "amadeus"} self._func(self.session, '1', '1', '', module=module) self.assertEqual( self.hash.get('localhost:converse:request', 'conv_1:1'), [ "1", "", "2013-09-05", "2013-09-05", module, "4ba2c60758312bd8f67dfd227f301a860a2a4f5542359338e7ce7514" ]) def test_request_cache_limit(self): for i in range(15): self._func(self.session, '{0}'.format(i), '1', 'slow') self.assertEqual(len(self.hash.get_all('localhost:converse:request')), 10) def test_request_cache_limit2(self): self._func(self.session, 'x', '2', 'slow') for i in range(15): self._func(self.session, '{0}'.format(i), '1', 'slow') self.assertEqual(len(self.hash.get_all('localhost:converse:request')), 11)