def test_set_get(self): """ Set and then get key :return: """ data = RedisEncoder.encodeArray(['set', '1', 'one']) self.proto.dataReceived(data) self.assertEqual(b'+OK\r\n', self.tr.value()) self.tr.clear() data = RedisEncoder.encodeArray(['get', '1']) self.proto.dataReceived(data) self.assertEqual(b'$3\r\none\r\n', self.tr.value()) self.tr.clear()
def test_lrange_None(self): """ Get array that is not set :return: """ data = RedisEncoder.encodeArray(['lrange', 'nonset', '0', '1']) self.proto.dataReceived(data) self.assertEqual(b'*-1\r\n', self.tr.value()) self.tr.clear()
def test_get_None(self): """ Get key that is not set :return: """ data = RedisEncoder.encodeArray(['get', 'nonset']) self.proto.dataReceived(data) self.assertEqual(b'$-1\r\n', self.tr.value()) self.tr.clear()
def test_send_receive(self): """ Test sending and receiving data """ with patch('builtins.input', self.fake_input): with patch('builtins.print', self.fake_print): self.proto = self.factory.buildProtocol(self.addr) self.input = 'set 1 one' self.proto.makeConnection(self.tr) command = RedisEncoder.encodeArray(['set', '1', 'one']) self.assertEqual(command, self.tr.value()) self.tr.clear() self.input = 'get 1' self.proto.dataReceived(b'+OK\r\n') self.assertEqual('OK', self.output) command = RedisEncoder.encodeArray(['get', '1']) self.assertEqual(command, self.tr.value())
def test_wrong_first_byte(self): """ Receive data with wrong first byte, then receive normal data. :return: """ with patch('builtins.print', self.fake_print): data = b'abc' self.proto.dataReceived(data) self.assertEqual(b'', self.tr.value()) self.assertEqual(b'', self.proto._data_buffer) data = RedisEncoder.encodeArray(['set', '1', 'one']) self.proto.dataReceived(data) self.assertEqual(b'+OK\r\n', self.tr.value()) self.tr.clear()
def test_disconnect_on_garbage(self): """ Test disconnecting when garbage received (no first bit in data) """ with patch('builtins.input', self.fake_input): with patch('builtins.print', self.fake_print): self.proto = self.factory.buildProtocol(self.addr) self.input = 'set 1 one' self.proto.makeConnection(self.tr) command = RedisEncoder.encodeArray(['set', '1', 'one']) self.assertEqual(command, self.tr.value()) self.tr.clear() self.proto.dataReceived(b'OK\r\n') self.assertEqual(True, self.tr.disconnecting)
def _encodeResult(self, result): """ Method for encoding result as bytes according to Redis protocol :return: """ if result is BulkStringNone: ans = RedisEncoder.encodeBulkString(None) elif result is ArrayNone: ans = RedisEncoder.encodeArray(None) elif result is CommandParserSuccess: ans = RedisEncoder.encodeString('OK') elif isinstance(result, Exception): ans = RedisEncoder.encodeError(result) elif isinstance(result, list): ans = RedisEncoder.encodeArray(result) elif isinstance(result, int): ans = RedisEncoder.encodeInt(result) elif isinstance(result, str): ans = RedisEncoder.encodeBulkString(result) else: raise UnidentifiedParserResult( f"Don't know to encode result of type {type(result)}.") return ans
def test_simple_string(self): self.assertEqual(b'+OK\r\n', RedisEncoder.encodeString('OK'))
def test_array_none(self): self.assertEqual(b'*-1\r\n', RedisEncoder.encodeArray(None))
def test_array(self): self.assertEqual(b'*2\r\n$2\r\nHi\r\n$2\r\nHo\r\n', RedisEncoder.encodeArray(['Hi', 'Ho'])) self.assertEqual(b'*3\r\n$2\r\nHi\r\n:1\r\n*2\r\n:1\r\n:2\r\n', RedisEncoder.encodeArray(['Hi', 1, [1, 2]]))
def test_int(self): self.assertEqual(b':123\r\n', RedisEncoder.encodeInt(123))
def test_bulk_string_none(self): self.assertEqual(b'$-1\r\n', RedisEncoder.encodeBulkString(None))
def test_bulk_string(self): self.assertEqual(b'$2\r\nHi\r\n', RedisEncoder.encodeBulkString('Hi'))