summaryrefslogtreecommitdiff
path: root/test/swarmkv_gtest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/swarmkv_gtest.cpp')
-rw-r--r--test/swarmkv_gtest.cpp311
1 files changed, 227 insertions, 84 deletions
diff --git a/test/swarmkv_gtest.cpp b/test/swarmkv_gtest.cpp
index 4af72dd..87920de 100644
--- a/test/swarmkv_gtest.cpp
+++ b/test/swarmkv_gtest.cpp
@@ -19,19 +19,6 @@
#define CMD_EXEC_TIMEOUT_MS 1000*2
-void generic_callback(const struct swarmkv_reply *reply, void * cb_arg)
-{
- struct cmd_exec_arg *arg=(struct cmd_exec_arg*)cb_arg;
- if(0==reply_compare(reply, &(arg->expected_reply)))
- {
- cmd_exec_arg_success(arg);
- }
- else
- {
- cmd_exec_arg_failed(arg);
- }
- return;
-}
static int g_current_thread_id=0;
void copy_reply_callback(const struct swarmkv_reply *reply, void * cb_arg)
{
@@ -67,6 +54,7 @@ protected:
free(err);
}
swarmkv_register_thread(db);
+ //swarmkv_command(db, "monreg %s", swarmkv_self_address(db));
}
static void TearDownTestCase()
{
@@ -92,11 +80,30 @@ TEST_F(SwarmkvBasicTest, TypeString)
EXPECT_STREQ(reply->str, "OK");
swarmkv_reply_free(reply);
- reply=swarmkv_command(db, "GET %s", key);
+ reply=swarmkv_command(db, "type %s", key);
ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
- EXPECT_STREQ(reply->str, val);
+ EXPECT_STREQ(reply->str, "string");
swarmkv_reply_free(reply);
+ const char *string_key="string-key";
+ reply=swarmkv_command(db, "SET %s abc", string_key);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
+ EXPECT_STREQ(reply->str, "OK");
+ swarmkv_reply_free(reply);
+
+
+ key="name2";
+ val="lisi";
+ swarmkv_set(db, key, strlen(key), val, strlen(val), copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
+ swarmkv_reply_free(reply);
+
+ swarmkv_get(db, key, strlen(key), copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
+ EXPECT_STREQ(reply->str, val);
+ swarmkv_reply_free(reply);
}
TEST_F(SwarmkvBasicTest, TypeInteger)
{
@@ -132,6 +139,18 @@ TEST_F(SwarmkvBasicTest, TypeInteger)
swarmkv_reply_free(reply);
}
EXPECT_EQ(value, 100);
+
+ reply=swarmkv_command(db, "type %s", key);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
+ EXPECT_STREQ(reply->str, "integer");
+ swarmkv_reply_free(reply);
+
+ key="int2";
+ swarmkv_incrby(db, key, strlen(key), 100, copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ EXPECT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, 100);
+ swarmkv_reply_free(reply);
}
TEST_F(SwarmkvBasicTest, GenericDEL)
{
@@ -150,72 +169,86 @@ TEST_F(SwarmkvBasicTest, GenericDEL)
ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
EXPECT_EQ(reply->integer, 1);
swarmkv_reply_free(reply);
+
+ reply=swarmkv_command(db, "SET %s %s", key, val);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
+ EXPECT_STREQ(reply->str, "OK");
+ swarmkv_reply_free(reply);
+
+ swarmkv_del(db, key, strlen(key), copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, 1);
+ swarmkv_reply_free(reply);
}
-TEST_F(SwarmkvBasicTest, GenericTYPE)
+TEST_F(SwarmkvBasicTest, GenericTTL)
{
struct swarmkv *db=SwarmkvBasicTest::db;
+ const char *key="quarantine";
+ const char *val="wuhan-江夏-如家";
+ int seconds=3;
struct swarmkv_reply *reply=NULL;
- //TYPE string
- const char *string_key="string-key";
- reply=swarmkv_command(db, "SET %s abc", string_key);
+ reply=swarmkv_command(db, "SET %s %s", key, val);
ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
EXPECT_STREQ(reply->str, "OK");
swarmkv_reply_free(reply);
- reply=swarmkv_command(db, "type %s", string_key);
- ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
- EXPECT_STREQ(reply->str, "string");
+ reply=swarmkv_command(db, "EXPIRE %s %d", key, seconds);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, 1);
swarmkv_reply_free(reply);
- //type integer
- const char *integer_key="integer-key";
- reply=swarmkv_command(db, "SET %s 123", integer_key);
- ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
- EXPECT_STREQ(reply->str, "OK");
+ reply=swarmkv_command(db, "TTL %s", key);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, seconds);
swarmkv_reply_free(reply);
- reply=swarmkv_command(db, "type %s", integer_key);
- ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
- EXPECT_STREQ(reply->str, "integer");
+ sleep(seconds+1);
+
+ reply=swarmkv_command(db, "GET %s", key);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_NIL);
swarmkv_reply_free(reply);
- //type set
- const char *set_key="set-key";
- reply=swarmkv_command(db, "SADD %s a b c d", set_key);
+ reply=swarmkv_command(db, "EXPIRE %s %d", key, seconds);
ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
- EXPECT_EQ(reply->integer, 4);
+ EXPECT_EQ(reply->integer, 0);
swarmkv_reply_free(reply);
- reply=swarmkv_command(db, "type %s", set_key);
- ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
- EXPECT_STREQ(reply->str, "set");
+ reply=swarmkv_command(db, "TTL %s", key);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, -2);
swarmkv_reply_free(reply);
- //type token-bucket
- const char *tb_key="tb-key";
- reply=swarmkv_command(db, "TCFG %s 4000 2000", tb_key);
+ //API test
+ reply=swarmkv_command(db, "SET %s %s", key, val);
ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
EXPECT_STREQ(reply->str, "OK");
swarmkv_reply_free(reply);
- reply=swarmkv_command(db, "type %s", tb_key);
- ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
- EXPECT_STREQ(reply->str, "token-bucket");
+ swarmkv_expire(db, key, strlen(key), seconds, copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, 1);
swarmkv_reply_free(reply);
- //type hash
- const char *hash_key="hash-key";
- reply=swarmkv_command(db, "HSET %s name zhangsan gender male age 18 gender male", hash_key);
+ swarmkv_ttl(db, key, strlen(key), copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
- EXPECT_EQ(reply->integer, 3);
+ EXPECT_EQ(reply->integer, seconds);
swarmkv_reply_free(reply);
- reply=swarmkv_command(db, "type %s", hash_key);
- ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
- EXPECT_STREQ(reply->str, "hash");
+ swarmkv_persist(db, key, strlen(key), copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, 1);
swarmkv_reply_free(reply);
-
+}
+TEST_F(SwarmkvBasicTest, GenericTYPE)
+{
+ struct swarmkv *db=SwarmkvBasicTest::db;
+ struct swarmkv_reply *reply=NULL;
+
//type non-exist key
const char *nonexist_key="non-exist-key";
reply=swarmkv_command(db, "type %s", nonexist_key);
@@ -266,6 +299,11 @@ TEST_F(SwarmkvBasicTest, TypeSet)
EXPECT_EQ(reply->integer, 3);
swarmkv_reply_free(reply);
+ reply=swarmkv_command(db, "type %s", key);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
+ EXPECT_STREQ(reply->str, "set");
+ swarmkv_reply_free(reply);
+
reply=swarmkv_command(db, "DEL %s", key);
ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
EXPECT_EQ(reply->integer, 1);
@@ -281,6 +319,48 @@ TEST_F(SwarmkvBasicTest, TypeSet)
EXPECT_EQ(reply->integer, 0);
swarmkv_reply_free(reply);
+ //API test
+ size_t member_len[4]={strlen(member[0]), strlen(member[1]), strlen(member[2]), strlen(member[3])};
+ swarmkv_sadd(db, key, strlen(key), member, member_len, 4, copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, 4);
+ swarmkv_reply_free(reply);
+
+ swarmkv_srem(db, key, strlen(key), member, member_len, 2, copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, 2);
+ swarmkv_reply_free(reply);
+
+ swarmkv_sismember(db, key, strlen(key), member[0], strlen(member[0]), copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, 0);
+ swarmkv_reply_free(reply);
+
+ swarmkv_sismember(db, key, strlen(key), member[2], strlen(member[2]), copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, 1);
+ swarmkv_reply_free(reply);
+
+ swarmkv_smembers(db, key, strlen(key), copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_ARRAY);
+ EXPECT_EQ(reply->n_element, 2);
+ for(i=0; i<reply->n_element; i++)
+ {
+ EXPECT_EQ(reply->elements[i]->type, SWARMKV_REPLY_STRING);
+ }
+ swarmkv_reply_free(reply);
+
+ swarmkv_scard(db, key, strlen(key), copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, 2);
+ swarmkv_reply_free(reply);
+
}
TEST_F(SwarmkvBasicTest, TypeHash)
{
@@ -355,6 +435,11 @@ TEST_F(SwarmkvBasicTest, TypeHash)
ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
EXPECT_EQ(reply->integer, 30-1);
swarmkv_reply_free(reply);
+
+ reply=swarmkv_command(db, "type %s", key2);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
+ EXPECT_STREQ(reply->str, "hash");
+ swarmkv_reply_free(reply);
}
TEST_F(SwarmkvBasicTest, TypeTokenBucket)
{
@@ -428,6 +513,17 @@ TEST_F(SwarmkvBasicTest, TypeTokenBucket)
ASSERT_EQ(reply->n_element, 12);
EXPECT_EQ(reply->elements[7]->integer, allocated_tokens+inf_token);
swarmkv_reply_free(reply);
+
+ reply=swarmkv_command(db, "type %s", key);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
+ EXPECT_STREQ(reply->str, "token-bucket");
+ swarmkv_reply_free(reply);
+
+ swarmkv_tconsume(db, key, strlen(key), 100, copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ EXPECT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->integer, 100);
+ swarmkv_reply_free(reply);
}
TEST_F(SwarmkvBasicTest, TypeFairTokenBucket)
{
@@ -476,6 +572,12 @@ TEST_F(SwarmkvBasicTest, TypeFairTokenBucket)
ASSERT_EQ(reply->n_element, 16);
EXPECT_EQ(reply->elements[7]->integer, allocated_tokens+inf_token);
swarmkv_reply_free(reply);
+
+ reply=swarmkv_command(db, "type %s", key);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
+ EXPECT_STREQ(reply->str, "fair-token-bucket");
+ swarmkv_reply_free(reply);
+
}
TEST_F(SwarmkvBasicTest, TypeBulkTokenBucket)
{
@@ -527,6 +629,10 @@ TEST_F(SwarmkvBasicTest, TypeBulkTokenBucket)
}
EXPECT_EQ(t, 10000*i);
+ reply=swarmkv_command(db, "type %s", key);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
+ EXPECT_STREQ(reply->str, "bulk-token-bucket");
+ swarmkv_reply_free(reply);
}
TEST_F(SwarmkvBasicTest, TypeBloomFilter)
@@ -626,11 +732,37 @@ TEST_F(SwarmkvBasicTest, TypeBloomFilter)
EXPECT_EQ(reply->integer, 1);
swarmkv_reply_free(reply);
+ reply=swarmkv_command(db, "type %s", key);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
+ EXPECT_STREQ(reply->str, "bloom-filter");
+ swarmkv_reply_free(reply);
reply=swarmkv_command(db, "DEL %s", key);
ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
ASSERT_EQ(reply->integer, 1);
swarmkv_reply_free(reply);
+
+ //API test
+ key="bf-api";
+ reply=swarmkv_command(db, "BFINIT %s %f %lld TIME %lld 12", key, error_rate, capacity, time_window_ms);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
+ swarmkv_reply_free(reply);
+
+ size_t item_len[4]={strlen(item[0]), strlen(item[1]), strlen(item[2]), strlen(item[3])};
+ swarmkv_bfadd(db, key, strlen(key), item, item_len, 4, copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
+ swarmkv_reply_free(reply);
+
+ swarmkv_bfmexists(db, key, strlen(key), item, item_len, 4, copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_ARRAY);
+ ASSERT_EQ(reply->n_element, 4);
+ for(size_t i=0; i<reply->n_element; i++)
+ {
+ ASSERT_EQ(reply->elements[i]->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->elements[i]->integer, 1);
+ }
}
TEST_F(SwarmkvBasicTest, TypeCMS)
{
@@ -677,46 +809,48 @@ TEST_F(SwarmkvBasicTest, TypeCMS)
ASSERT_EQ(reply->elements[3]->type, SWARMKV_REPLY_INTEGER);
EXPECT_EQ(reply->elements[3]->integer, depth);
swarmkv_reply_free(reply);
-}
-TEST_F(SwarmkvBasicTest, EXPIRE_TTL)
-{
- struct swarmkv *db=SwarmkvBasicTest::db;
- const char *key="quarantine";
- const char *val="wuhan-江夏-如家";
- int seconds=3;
- struct swarmkv_reply *reply=NULL;
- reply=swarmkv_command(db, "SET %s %s", key, val);
- ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
- EXPECT_STREQ(reply->str, "OK");
+ reply=swarmkv_command(db, "type %s", key);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STRING);
+ EXPECT_STREQ(reply->str, "count-min-sketch");
swarmkv_reply_free(reply);
- reply=swarmkv_command(db, "EXPIRE %s %d", key, seconds);
+ reply=swarmkv_command(db, "DEL %s", key);
ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
EXPECT_EQ(reply->integer, 1);
swarmkv_reply_free(reply);
- reply=swarmkv_command(db, "TTL %s", key);
- ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
- EXPECT_EQ(reply->integer, seconds);
- swarmkv_reply_free(reply);
-
- sleep(seconds+1);
-
- reply=swarmkv_command(db, "GET %s", key);
- ASSERT_EQ(reply->type, SWARMKV_REPLY_NIL);
+ //API test
+ key="cms-api";
+ size_t item_len[5]={strlen(item[0]), strlen(item[1]), strlen(item[2]), strlen(item[3]), strlen(item[4])};
+ long long count[5]={1, 2, 3, 4, 5};
+ reply=swarmkv_command(db, "CMSINITBYDIM %s %lld %lld", key, width, depth);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
swarmkv_reply_free(reply);
- reply=swarmkv_command(db, "EXPIRE %s %d", key, seconds);
- ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
- EXPECT_EQ(reply->integer, 0);
+ swarmkv_cmsincrby(db, key, strlen(key), item, item_len, count, 5, copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_ARRAY);
+ ASSERT_EQ(reply->n_element, 5);
+ for(size_t i=0; i<reply->n_element; i++)
+ {
+ ASSERT_EQ(reply->elements[i]->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->elements[i]->integer, count[i]);
+ }
swarmkv_reply_free(reply);
- reply=swarmkv_command(db, "TTL %s", key);
- ASSERT_EQ(reply->type, SWARMKV_REPLY_INTEGER);
- EXPECT_EQ(reply->integer, -2);
+ swarmkv_cmsmquery(db, key, strlen(key), item, item_len, 5, copy_reply_callback, &reply);
+ swarmkv_caller_loop(db, SWARMKV_LOOP_ONCE, NULL);
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_ARRAY);
+ ASSERT_EQ(reply->n_element, 5);
+ for(size_t i=0; i<reply->n_element; i++)
+ {
+ ASSERT_EQ(reply->elements[i]->type, SWARMKV_REPLY_INTEGER);
+ EXPECT_EQ(reply->elements[i]->integer, count[i]);
+ }
swarmkv_reply_free(reply);
}
+
TEST_F(SwarmkvBasicTest, HashTags)
{
struct swarmkv *db=SwarmkvBasicTest::db;
@@ -1593,9 +1727,7 @@ TEST_F(SwarmkvTwoNodes, TypeBulkTokenBucket)
upper_limit=upper_limit*n_member;
double accuracy=(double)allocated_tokens/(upper_limit<requested_tokens?upper_limit:requested_tokens);
EXPECT_NEAR(accuracy, 1, 0.035);
-
- //wait_for_sync();
- sleep(100);
+ wait_for_sync();
reply=swarmkv_command(db[0], "BTINFO %s", key);
ASSERT_EQ(reply->type, SWARMKV_REPLY_ARRAY);
ASSERT_EQ(reply->n_element, 16);
@@ -1751,7 +1883,6 @@ TEST_F(SwarmkvTwoNodes, TypeCMS)
reply=swarmkv_command(db[0], "CMSRCLEAR %s %s", key, uuid);
ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
swarmkv_reply_free(reply);
-
}
TEST_F(SwarmkvTwoNodes, Info)
{
@@ -1766,11 +1897,23 @@ TEST_F(SwarmkvTwoNodes, Info)
swarmkv_reply_free(reply);
}
}
-
+TEST_F(SwarmkvTwoNodes, Monitor)
+{
+ struct swarmkv *db[2];
+ db[0]=SwarmkvTwoNodes::db1;
+ db[1]=SwarmkvTwoNodes::db2;
+ struct swarmkv_reply *reply=NULL;
+ for(size_t i=0; i<2; i++)
+ {
+ reply=swarmkv_command(db[i%2], "MONREG %s g?t", swarmkv_self_address(db[i%2]));
+ ASSERT_EQ(reply->type, SWARMKV_REPLY_STATUS);
+ swarmkv_reply_free(reply);
+ }
+}
TEST_F(SwarmkvTwoNodes, Wait)
{
//return;
- //sleep(3600*2);
+ sleep(3600*2);
}
TEST(CloudNative, AnnounceIPPort)
{