Пример #1
0
 def test_parse_save_command(self):
     '''
     SAVE
     :return:
     '''
     response = parse_command("*1\r\n$4\r\nSAVE\r\n", 0)
     self.assertEqual(response[0], "SAVE")
Пример #2
0
 def test_parse_flush_command(self):
     '''
     FLUSH
     :return:
     '''
     response = parse_command("*1\r\n$5\r\nFLUSH\r\n", 0)
     self.assertEqual(response[0], "FLUSH")
Пример #3
0
def read_from_client(s, address):
    """
    this is the function that handles incoming commands, and sends them off to be parsed and then handled
    finally, it will print the output back to the socket
    :param s:
    :param address:
    :return:
    """
    while True:
        try:
            data = s.recvfrom(65536)
            if data is not None and data[0] is not None:
                try:
                    command_arr = parse_command(data[0].decode('utf-8'), 0)
                    response = handle_command(command_arr)
                    s.send(bytes(response, 'utf-8'))
                except socket.error:
                    raise
                except Exception as e:
                    s.send(
                        bytes(
                            resp_error(
                                "An unspecified error occurred. {0}".format(
                                    str(e))), 'utf-8'))
        except socket.error:
            print(socket.error)
            break
    s.close()
Пример #4
0
 def test_parse_llen_command(self):
     '''
     LLEN key
     :return:
     '''
     response = parse_command("*2\r\n$4\r\nLLEN\r\n$3\r\nkey\r\n", 0)
     self.assertEqual(response[0], "LLEN")
     self.assertEqual(response[1], "key")
Пример #5
0
 def test_parse_get_command(self):
     '''
     GET key
     :return:
     '''
     response = parse_command("*2\r\n$3\r\nGET\r\n$3\r\nkey\r\n", 0)
     self.assertEqual(response[0], "GET")
     self.assertEqual(response[1], "key")
Пример #6
0
 def test_parse_lpop_command(self):
     '''
     LPOP  key
     :return:
     '''
     response = parse_command("*2\r\n$4\r\nLPOP\r\n$3\r\nkey\r\n", 0)
     self.assertEqual(response[0], "LPOP")
     self.assertEqual(response[1], "key")
Пример #7
0
 def test_parse_ttl_command(self):
     '''
     TTL key
     :return:
     '''
     response = parse_command("*2\r\n$3\r\nTTL\r\n$3\r\nkey\r\n", 0)
     self.assertEqual(response[0], "TTL")
     self.assertEqual(response[1], "key")
Пример #8
0
 def test_parse_exists_command(self):
     '''
     EXISTS key
     :return:
     '''
     response = parse_command("*2\r\n$6\r\nEXISTS\r\n$3\r\nkey\r\n", 0)
     self.assertEqual(response[0], "EXISTS")
     self.assertEqual(response[1], "key")
Пример #9
0
 def test_parse_hgetall_command(self):
     '''
     HGETALL key
     :return:
     '''
     response = parse_command("*2\r\n$7\r\nHGETALL\r\n$3\r\nkey\r\n", 0)
     self.assertEqual(response[0], "HGETALL")
     self.assertEqual(response[1], "key")
Пример #10
0
 def test_parse_del_command(self):
     '''
     DEL key [key ...]
     :return:
     '''
     response = parse_command("*2\r\n$3\r\nDEL\r\n$3\r\nkey\r\n", 0)
     self.assertEqual(response[0], "DEL")
     self.assertEqual(response[1], "key")
Пример #11
0
 def test_parse_hget_command(self):
     '''
     HGET key field
     :return:
     '''
     response = parse_command(
         "*3\r\n$4\r\nHGET\r\n$3\r\nkey\r\n$5\r\nfield\r\n", 0)
     self.assertEqual(response[0], "HGET")
     self.assertEqual(response[1], "key")
     self.assertEqual(response[2], "field")
Пример #12
0
 def test_parse_lpush_command(self):
     '''
     LPUSH key value
     :return:
     '''
     response = parse_command(
         "*3\r\n$5\r\nLPUSH\r\n$3\r\nkey\r\n$5\r\nvalue\r\n", 0)
     self.assertEqual(response[0], "LPUSH")
     self.assertEqual(response[1], "key")
     self.assertEqual(response[2], "value")
Пример #13
0
 def test_parse_set_command(self):
     '''
     SET key value
     :return:
     '''
     response = parse_command(
         "*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n", 0)
     self.assertEqual(response[0], "SET")
     self.assertEqual(response[1], "key")
     self.assertEqual(response[2], "value")
Пример #14
0
 def test_parse_sinter_command(self):
     '''
     SINTER group1 group2
     :return:
     '''
     response = parse_command(
         "*3\r\n$6\r\nSINTER\r\n$6\r\ngroup1\r\n$6\r\ngroup2\r\n", 0)
     self.assertEqual(response[0], "SINTER")
     self.assertEqual(response[1], "group1")
     self.assertEqual(response[2], "group2")
Пример #15
0
 def test_parse_sunion_coomand(self):
     '''
     SUNION group1 group2
     :return:
     '''
     response = parse_command(
         "*3\r\n$6\r\nSUNION\r\n$6\r\ngroup1\r\n$6\r\ngroup2\r\n", 0)
     self.assertEqual(response[0], "SUNION")
     self.assertEqual(response[1], "group1")
     self.assertEqual(response[2], "group2")
Пример #16
0
 def test_parse_sadd_command(self):
     '''
     SADD key member [member ...]
     :return:
     '''
     response = parse_command(
         "*3\r\n$4\r\nSADD\r\n$3\r\nkey\r\n$3\r\nmember\r\n", 0)
     self.assertEqual(response[0], "SADD")
     self.assertEqual(response[1], "key")
     self.assertEqual(response[2], "member")
Пример #17
0
 def test_parse_sdiff_command(self):
     '''
     SDIFF group1 group2
     :return:
     '''
     response = parse_command(
         "*3\r\n$5\r\nSDIFF\r\n$6\r\ngroup1\r\n$6\r\ngroup2\r\n", 0)
     self.assertEqual(response[0], "SDIFF")
     self.assertEqual(response[1], "group1")
     self.assertEqual(response[2], "group2")
Пример #18
0
 def test_parse_hmget_command(self):
     '''
     HMGET key field1 field2
     :return:
     '''
     response = parse_command(
         "*3\r\n$5\r\nHMGET\r\n$3\r\nkey\r\n$6\r\nfield1\r\n$6\r\nfield2\r\n",
         0)
     self.assertEqual(response[0], "HMGET")
     self.assertEqual(response[1], "key")
     self.assertEqual(response[2], "field1")
     self.assertEqual(response[3], "field2")
Пример #19
0
 def test_parse_hset_command(self):
     '''
     HSET key field value
     :return:
     '''
     response = parse_command(
         "*4\r\n$4\r\nHSET\r\n$3\r\nkey\r\n$5\r\nfield\r\n$5\r\nvalue\r\n",
         0)
     self.assertEqual(response[0], "HSET")
     self.assertEqual(response[1], "key")
     self.assertEqual(response[2], "field")
     self.assertEqual(response[3], "value")
Пример #20
0
 def test_parse_hmset_command(self):
     '''
     HMSET key field1 value1 field2 valu2
     :return:
     '''
     response = parse_command(
         "*5\r\n$5\r\nHMSET\r\n$3\r\nkey\r\n$6\r\nfield1\r\n$6\r\nvalue1\r\n$6\r\nfield2\r\n$6\r\nvalue2\r\n",
         0)
     self.assertEqual(response[0], "HMSET")
     self.assertEqual(response[1], "key")
     self.assertEqual(response[2], "field1")
     self.assertEqual(response[3], "value1")
     self.assertEqual(response[4], "field2")
     self.assertEqual(response[5], "value2")
Пример #21
0
def read_from_client(s, address):
    """
    处理客户端传入命令的函数,将他们发送至命令解析器中解析并最后用命令处理器处理。
    最后,它将输出到客户端
    :param s: 客户端传入的命令
    :param address:
    :return:
    """
    while True:
        try:
            data = s.recvfrom(65536) # 从客户端读取套接字
            if data is not None and data[0] is not None:
                try:
                    command_arr = parse_command(data[0].decode('utf-8'), 0) # 解析命令
                    response = handle_command(command_arr) # 处理命令
                    s.send(bytes(response, 'utf-8')) # 向客户端发送套接字回复
                except socket.error:
                    raise
                except Exception as e:
                    s.send(bytes(resp_error("An unspecified error occurred. {0}".format(str(e))), 'utf-8'))
        except socket.error:
            print(socket.error)
            break
    s.close() # 关闭套接字
Пример #22
0
 def test_parse_commandt(self):
     response = parse_command("*1\r\n$7\r\nCOMMAND\r\n", 0)
     self.assertEqual(response[0], "COMMAND")
Пример #23
0
 def test_parse_set_command(self):  # 测试解析set命令
     response = parse_command(
         "*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n", 0)
     self.assertEqual(response[0], "SET")
     self.assertEqual(response[1], "key")
     self.assertEqual(response[2], "value")