コード例 #1
0
 def test_stop_option(self):
     add_rule(Criteria(path='/foo'),
              Actions(set_input_header=('Header-Name', 'FOO')), stop=True)
     add_rule(Criteria(path='/foo'),
              Actions(set_input_header=('Header-Name', 'BAR')))
     request = HTTPServerRequest(method='GET', uri='/foo')
     Rules.execute_input_actions(HTTPExchange(request))
     self.assertEqual(request.headers['Header-Name'], 'FOO')
コード例 #2
0
ファイル: test_criteria.py プロジェクト: jorviizheng/thr
    def test_does_not_match_function(self):
        def criterion_function(path):
            return False

        request = HTTPServerRequest(uri='/foo/bar')
        criteria = Criteria(custom=criterion_function)
        result = criteria.match(HTTPExchange(request))
        self.assertFalse(result)
コード例 #3
0
ファイル: test_criteria.py プロジェクト: jorviizheng/thr
    def test_remote_ip_does_not_match_function(self):
        def criterion_function(arg):
            return False

        request = HTTPServerRequest(uri='/')
        request.remote_ip = '10.0.0.1'
        criteria = Criteria(remote_ip=criterion_function)
        result = criteria.match(HTTPExchange(request))
        self.assertFalse(result)
コード例 #4
0
    def test_matching_coroutine_rule(self):
        @tornado.gen.coroutine
        def coroutine_rule(request):
            yield tornado.gen.maybe_future(None)
            raise tornado.gen.Return(False)

        add_rule(Criteria(path=coroutine_rule),
                 Actions(set_redis_queue='no-match'),
                 stop=1)
        add_rule(Criteria(path='/quux'), Actions(set_redis_queue='test-queue'))
        yield self.http_client.fetch(self.get_url('/quux'), raise_error=False)
        yield self.redis.connect()
        result = yield self.redis.call('BRPOP', 'test-queue', 1)
        data = json.loads(result[1].decode())
        self.assertEqual(data['path'], '/quux')
コード例 #5
0
    def test_set_redis_queue_based_on_callable(self):

        def callback_false(request):
            return False

        def callback_true(request):
            return True

        add_rule(Criteria(custom=callback_false),
                 Actions(set_redis_queue='not-this-one'), stop=1)
        add_rule(Criteria(custom=callback_true),
                 Actions(set_redis_queue='yes-this-one'))
        request = HTTPServerRequest(method='GET', uri='/foo')
        exchange = HTTPExchange(request)
        Rules.execute_input_actions(exchange)
        self.assertEqual(exchange.redis_queue, 'yes-this-one')
コード例 #6
0
 def test_write_something_to_queue(self):
     add_rule(Criteria(path='/quux'), Actions(set_redis_queue='test-queue'))
     yield self.redis.connect()
     yield self.redis.call('DEL', 'test-queue')
     yield self.http_client.fetch(self.get_url('/quux'), raise_error=False)
     result = yield self.redis.call('BRPOP', 'test-queue', 1)
     data = json.loads(result[1].decode())
     self.assertEqual(data['path'], '/quux')
     self.assertEqual(data['extra']['response_key'],
                      "thr:queue:response:%s" % self.response_key)
コード例 #7
0
    def test_coroutine_action(self):
        Rules.reset()

        @gen.coroutine
        def coroutine_action(exchange):
            yield gen.sleep(0.1)
            exchange.set_status_code(202)

        add_rule(Criteria(path='/quux'),
                 Actions(custom_input=coroutine_action,
                         set_redis_queue='test-queue'),
                 stop=1)
        response = yield self.http_client.fetch(self.get_url('/quux'))
        self.assertEqual(response.code, 202)
コード例 #8
0
ファイル: test_criteria.py プロジェクト: jorviizheng/thr
 def test_remote_ip_match2(self):
     request = HTTPServerRequest(uri='/')
     request.remote_ip = '10.0.0.1'
     criteria = Criteria(remote_ip=glob('192.168.0.*', '10.0.0.*'))
     result = criteria.match(HTTPExchange(request))
     self.assertTrue(result)
コード例 #9
0
ファイル: test_criteria.py プロジェクト: jorviizheng/thr
 def test_path_does_not_match(self):
     request = HTTPServerRequest(uri='/quux/bar')
     criteria = Criteria(path=regexp('^/foo.*$'))
     result = criteria.match(HTTPExchange(request))
     self.assertFalse(result)
コード例 #10
0
ファイル: test_criteria.py プロジェクト: jorviizheng/thr
 def test_path_match2(self):
     request = HTTPServerRequest(uri='/foo/bar')
     criteria = Criteria(path=regexp('^/bar.*$', '^/foo.*$'))
     result = criteria.match(HTTPExchange(request))
     self.assertTrue(result)
コード例 #11
0
ファイル: test_criteria.py プロジェクト: jorviizheng/thr
 def test_method_does_not_match(self):
     request = HTTPServerRequest(method='GET', uri='/')
     criteria = Criteria(method='POST')
     result = criteria.match(HTTPExchange(request))
     self.assertFalse(result)
コード例 #12
0
ファイル: test_criteria.py プロジェクト: jorviizheng/thr
 def test_method_match2(self):
     request = HTTPServerRequest(method='POST', uri='/')
     criteria = Criteria(method=['GET', 'POST'])
     result = criteria.match(HTTPExchange(request))
     self.assertTrue(result)
コード例 #13
0
 def test_add_rule(self):
     add_rule(Criteria(), Actions())
     self.assertEqual(Rules.count(), 1)
コード例 #14
0
 def add_basic_rules(self):
     add_rule(Criteria(path="/baz"), Actions(set_redis_queue="null"))
     add_rule(Criteria(path='/foo'), Actions(set_status_code=201))
     add_rule(Criteria(path='/bar'), Actions(set_status_code=202))
コード例 #15
0
 def test_set_redis_queue_based_on_path(self):
     add_rule(Criteria(path='/foo'), Actions(set_redis_queue='test-queue'))
     request = HTTPServerRequest(method='GET', uri='/foo')
     exchange = HTTPExchange(request)
     Rules.execute_input_actions(exchange)
     self.assertEqual(exchange.redis_queue, 'test-queue')
コード例 #16
0
ファイル: test_criteria.py プロジェクト: jorviizheng/thr
 def test_remote_ip_does_not_match(self):
     request = HTTPServerRequest(uri='/')
     request.remote_ip = '10.0.0.1'
     criteria = Criteria(remote_ip=glob('10.0.1.*'))
     result = criteria.match(HTTPExchange(request))
     self.assertFalse(result)
コード例 #17
0
from tornado import gen
from thr.http2redis.rules import add_rule, Criteria, Actions


@gen.coroutine
def coroutine_set_status_code(exchange):
    yield gen.sleep(0.1)
    exchange.set_status_code(201)


add_rule(Criteria(path='/foo'),
         Actions(custom_input=coroutine_set_status_code))
add_rule(Criteria(path='/bar'), Actions(set_status_code=202))
コード例 #18
0
ファイル: http2redis_conf.py プロジェクト: jorviizheng/thr
from thr.http2redis.rules import add_rule, Criteria, Actions

# Match any incoming request and push it to thr:queue:hello
add_rule(Criteria(), Actions(set_redis_queue='thr:queue:hello'))