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")
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")
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()
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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() # 关闭套接字
def test_parse_commandt(self): response = parse_command("*1\r\n$7\r\nCOMMAND\r\n", 0) self.assertEqual(response[0], "COMMAND")
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")