Skip to content

Commit f9f4312

Browse files
committed
Optimize redis tests --filter=[core]
1 parent b5c0c20 commit f9f4312

File tree

5 files changed

+44
-5
lines changed

5 files changed

+44
-5
lines changed

core-tests/include/redis_client.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ class RedisClient {
6262
bool Connect(const std::string &host = "127.0.0.1", int port = 6379, struct timeval timeout = {});
6363
std::string Get(const std::string &key);
6464
bool Set(const std::string &key, const std::string &value);
65+
long Ttl(const std::string &key);
6566
};
6667

6768
} // namespace swoole

core-tests/src/_lib/redis.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ string RedisClient::Get(const string &key) {
3535
}
3636
}
3737

38+
long RedisClient::Ttl(const std::string &key) {
39+
const char *argv[] = {"TTL", key.c_str()};
40+
size_t argvlen[] = {strlen(argv[0]), key.length()};
41+
42+
auto reply = Request(SW_ARRAY_SIZE(argv), argv, argvlen);
43+
if (!reply.empty() && reply->integer) {
44+
return reply->integer;
45+
} else {
46+
return 0;
47+
}
48+
}
49+
3850
bool RedisClient::Set(const string &key, const string &value) {
3951
const char *argv[] = {"SET", key.c_str(), value.c_str()};
4052
size_t argvlen[] = {strlen(argv[0]), key.length(), value.length()};

core-tests/src/protocol/redis.cpp

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ TEST(redis, server) {
4949
port->open_redis_protocol = true;
5050

5151
serv.create();
52+
std::unordered_map<std::string, std::string> redis_data;
5253

5354
serv.onWorkerStart = [&](Server *serv, Worker *worker) {
5455
if (worker->id != 0) {
@@ -61,23 +62,48 @@ TEST(redis, server) {
6162
ASSERT_TRUE(redis.Connect("127.0.0.1", serv->get_primary_port()->port));
6263
ASSERT_TRUE(redis.Set(REDIS_TEST_KEY, REDIS_TEST_VALUE));
6364
ASSERT_EQ(redis.Get(REDIS_TEST_KEY), REDIS_TEST_VALUE);
65+
66+
ASSERT_EQ(redis.Get(REDIS_TEST_KEY + "-not-exists"), "");
67+
68+
String rdata;
69+
rdata.append_random_bytes(128 * 1024, true);
70+
auto data = rdata.to_std_string();
71+
72+
ASSERT_TRUE(redis.Set(REDIS_TEST_KEY + "-big-key", data));
73+
ASSERT_EQ(redis.Get(REDIS_TEST_KEY + "-big-key"), data);
74+
75+
ASSERT_EQ(redis.Ttl(REDIS_TEST_KEY), -1);
76+
6477
kill(serv->gs->master_pid, SIGTERM);
6578
},
6679
serv);
6780
};
6881

69-
serv.onReceive = [](Server *serv, RecvData *req) -> int {
82+
serv.onReceive = [&redis_data](Server *serv, RecvData *req) -> int {
7083
int session_id = req->info.fd;
7184
auto list = redis::parse(req->data, req->info.len);
7285

7386
String *buffer = sw_tg_buffer();
7487
buffer->clear();
7588

7689
if (strcasecmp(list[0].c_str(), "GET") == 0) {
77-
redis::format(buffer, redis::REPLY_STRING, REDIS_TEST_VALUE);
78-
serv->send(session_id, buffer->str, buffer->length);
90+
auto result = redis_data.find(list[1]);
91+
if (result == redis_data.end()) {
92+
redis::format_nil(buffer);
93+
serv->send(session_id, buffer->str, buffer->length);
94+
} else {
95+
char buf[64];
96+
auto n = snprintf(buf, sizeof(buf), "$%zu\r\n", result->second.length());
97+
serv->send(session_id, buf, n);
98+
serv->send(session_id, result->second.c_str(), result->second.length());
99+
serv->send(session_id, SW_CRLF, SW_CRLF_LEN);
100+
}
79101
} else if (strcasecmp(list[0].c_str(), "SET") == 0) {
80102
redis::format(buffer, redis::REPLY_STATUS, "OK");
103+
redis_data[list[1]] = list[2];
104+
serv->send(session_id, buffer->str, buffer->length);
105+
} else if (strcasecmp(list[0].c_str(), "TTL") == 0) {
106+
redis::format(buffer, redis::REPLY_INT, -1);
81107
serv->send(session_id, buffer->str, buffer->length);
82108
}
83109

include/swoole_redis.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ static sw_inline const char *get_number(const char *p, int *_ret) {
6161

6262
int recv_packet(Protocol *protocol, Connection *conn, String *buffer);
6363
std::vector<std::string> parse(const char *data, size_t len);
64-
bool format(String *buf);
64+
bool format_nil(String *buf);
6565
bool format(String *buf, enum ReplyType type, const std::string &value);
6666
bool format(String *buf, enum ReplyType type, long value);
6767

src/protocol/redis.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ int recv_packet(Protocol *protocol, Connection *conn, String *buffer) {
173173
return SW_ERR;
174174
}
175175

176-
bool format(String *buf) {
176+
bool format_nil(String *buf) {
177177
return buf->append(SW_STRL(SW_REDIS_RETURN_NIL)) == SW_OK;
178178
}
179179

0 commit comments

Comments
 (0)