def test_responseError(self): test = b'-ERR random error\r\n' p = redis_parser() p.feed(test) value = p.get() self.assertIsInstance(value, ResponseError) self.assertEqual(str(value), 'random error')
def test_noscriptError(self): test = b'-NOSCRIPT random error\r\n' p = redis_parser() p.feed(test) value = p.get() self.assertIsInstance(value, NoScriptError) self.assertEqual(str(value), 'random error')
def create_store(cls, address, namespace=None, pool_size=2, **kw): if cls.redis_py_parser: kw['parser_class'] = redis_parser(True) if not namespace: namespace = cls.randomkey(6).lower() return create_store(address, namespace=namespace, pool_size=pool_size, **kw)
def test_binary(self): test = (b'$31\r\n\x80\x02]q\x00(X\x04\x00\x00\x00ciaoq\x01X\x05\x00' b'\x00\x00pippoq\x02e.\r\n') p = redis_parser() p.feed(test) self.assertEqual(p.buffer(), test) value = p.get() self.assertTrue(value) self.assertEqual(p.buffer(), b'')
def setUpClass(cls): size = cls.cfg.size nsize = cls._sizes[size] cls.data = [''.join((choice(characters) for l in range(20))) for s in range(nsize)] cls.data_bytes = [(''.join((choice(characters) for l in range(20))) ).encode('utf-8') for s in range(nsize)] cls.parser = redis_parser(cls.redis_py_parser)() cls.chunk = cls.parser.multi_bulk(cls.data)
def test_nested(self): p = redis_parser() result = lua_nested_table(2) chunk = p.multi_bulk(result) p.feed(chunk) res2 = p.get() self.assertEqual(len(res2), len(result)) self.assertEqual(res2[0], b'100') self.assertEqual(res2[1], result[1])
def test_multi(self): test = (b'+OK\r\n+QUEUED\r\n+QUEUED\r\n+QUEUED\r\n*3\r\n$-1\r\n:1' b'\r\n:39\r\n') p = redis_parser() p.feed(test) self.assertEqual(p.get(), b'OK') self.assertEqual(p.get(), b'QUEUED') self.assertEqual(p.get(), b'QUEUED') self.assertEqual(p.get(), b'QUEUED') self.assertEqual(p.get(), [None, 1, 39])
def _init(self, namespace=None, parser_class=None, pool_size=50, decode_responses=False, **kwargs): self._decode_responses = decode_responses if not parser_class: actor = get_actor() pyparser = actor.cfg.redis_py_parser if actor else False parser_class = redis_parser(pyparser) self._parser_class = parser_class if namespace: self._urlparams['namespace'] = namespace self._pool = Pool(self.connect, pool_size=pool_size, loop=self._loop) self.loaded_scripts = {}
def test_nested_a_drop_at_a_time(self): p = redis_parser() result = lua_nested_table(3) data = p.multi_bulk(result) while data: self.assertEqual(p.get(), False) i = randint(1, 30) chunk, data = data[:i], data[i:] p.feed(chunk) res2 = p.get() self.assertEqual(len(res2), len(result)) self.assertEqual(res2[0], b'100') self.assertEqual(res2[1], result[1])
def test_nested_bug_fixer(self): p = redis_parser() result = [ b'100', b'1234567890', [b'-8', b'1234567890', None], [b'-8', b'1234567890', None], b'1' ] data = p.multi_bulk(result) chunks = [ b'*5\r\n$3\r\n100', b'\r\n$10\r\n12345', b'67890\r\n*3', b'\r\n$2\r', b'\n-8\r\n$10\r', b'\n1234567890\r\n$-1\r\n', b'*3\r\n$2\r\n-8\r\n$10\r\n1234567890\r\n$-1\r\n$1\r\n1\r\n' ] self.assertEqual(data, b''.join(chunks)) for chunk in chunks[:-1]: p.feed(chunk) self.assertEqual(p.get(), False) p.feed(chunks[-1]) self.assertEqual(p.get(), result)
def test_nested_bug_fixer(self): p = redis_parser() result = [b'100', b'1234567890', [b'-8', b'1234567890', None], [b'-8', b'1234567890', None], b'1'] data = p.multi_bulk(result) chunks = [b'*5\r\n$3\r\n100', b'\r\n$10\r\n12345', b'67890\r\n*3', b'\r\n$2\r', b'\n-8\r\n$10\r', b'\n1234567890\r\n$-1\r\n', b'*3\r\n$2\r\n-8\r\n$10\r\n1234567890\r\n$-1\r\n$1\r\n1\r\n'] self.assertEqual(data, b''.join(chunks)) for chunk in chunks[:-1]: p.feed(chunk) self.assertEqual(p.get(), False) p.feed(chunks[-1]) self.assertEqual(p.get(), result)
def test_empty_string(self): test = b'$0\r\n\r\n' p = redis_parser() p.feed(test) self.assertEqual(p.get(), b'') self.assertEqual(p.buffer(), b'')
def test_parseError(self): test = b'pxxxx\r\n' p = redis_parser() p.feed(test) self.assertRaises(InvalidResponse, p.get)
def test_empty_vector(self): test = b'*0\r\n' p = redis_parser() p.feed(test) self.assertEqual(p.get(), []) self.assertEqual(p.buffer(), b'')
def test_null(self): test = b'$-1\r\n' p = redis_parser() p.feed(test) self.assertEqual(p.get(), None)
def parser(self): return redis_parser(True)()
def test_encode_empty_string(self): p = redis_parser() chunk = p.bulk(None) self.assertEqual(chunk, b'$-1\r\n')
def parser(self): return redis_parser()()
def test_encode_multi_bulk(self): p = redis_parser() self.assertEqual(p.multi_bulk([]), b'*0\r\n') self.assertEqual(p.multi_bulk(()), b'*0\r\n')
def test_encode_commands(self): p = redis_parser() chunk = p.pack_command(['whatever', None]) self.assertEqual(chunk, b'*2\r\n$8\r\nwhatever\r\n$4\r\nNone\r\n')