コード例 #1
0
ファイル: test_cache.py プロジェクト: robinj/stubo-app
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)
コード例 #2
0
ファイル: test_cache.py プロジェクト: robinj/stubo-app
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)