improve xkvmgr and testsuite for scheduler

This commit is contained in:
Rongsong Shen 2026-02-26 14:39:12 +08:00
parent 2ee87d4ee6
commit 598d381379
10 changed files with 327 additions and 64 deletions

View file

@ -1,76 +1,129 @@
#include <rtti.h>
#include <stdio.h>
#include <stdlib.h>
#include <unity/unity.h>
#include "kv.h"
#include "kvmgr.h"
#include <unity.h>
#include "objmgr.h"
#include "utils.h"
typedef struct {
char* key;
int data;
} kv_data_t;
static void test_kvadd(void)
static void test_kvmgr_create(void)
{
kvmgr_t mgr;
char *key = "key1";
kv_data_t data = { .key = key, .data = 100 };
kv_data_t* p = NULL;
kvmgr_params_t params = { .key_type = KVMGR_KEY_STRING,
.dynamic = 0,
.nslots = 4,
.delta = 4,
.datakiller = NULL };
var kvmgr = makeInstance(&xkvmgr_type, &params);
kvmgr_init(&mgr, string_hash_key, 4, 4, NULL);
kvmgr_add(&mgr, key, &data);
p = kvmgr_lock(&mgr, key, OBJREF_NOP);
TEST_ASSERT_TRUE(p != NULL);
TEST_ASSERT_TRUE(p == &data);
kvmgr_fini(&mgr);
TEST_ASSERT_TRUE(kvmgr != NULL);
destroy(kvmgr);
}
static void test_kvput(void)
{
kvmgr_t mgr;
char *key = "key1";
kv_data_t data = { .key = key, .data = 100 };
kv_data_t* p = NULL;
int idx = 10;
typedef struct {
char* name;
uint16_t age;
} user_t;
kvmgr_init(&mgr, string_hash_key, 4, 4, NULL);
kvmgr_put(&mgr, key, idx, &data);
p = kvmgr_lock(&mgr, key, OBJREF_NOP);
TEST_ASSERT_TRUE(p != NULL);
TEST_ASSERT_TRUE(p == &data);
p = kvmgr_lock_byid(&mgr, idx, OBJREF_NOP);
TEST_ASSERT_TRUE(p != NULL);
TEST_ASSERT_TRUE(p == &data);
static void my_user_killer(void* data)
{
user_t* u = (user_t*)data;
if (u == NULL) {
return;
}
FREEUP(u->name);
FREEUP(u);
}
static void test_kvmgr_add(void)
{
kvmgr_params_t params = { .key_type = KVMGR_KEY_STRING,
.dynamic = 0,
.nslots = 4,
.delta = 4,
.datakiller = my_user_killer };
var kvmgr = makeInstance(&xkvmgr_type, &params);
user_t* u = NULL;
int rc = 0;
void* data = NULL;
TEST_ASSERT_TRUE(kvmgr != NULL);
u = calloc(1, sizeof(*u));
TEST_ASSERT_TRUE(u != NULL);
u->name = strdup("tester1");
TEST_ASSERT_TRUE(u->name != NULL);
u->age = 32;
rc = key_add(kvmgr, (void*)u->name, (void*)u);
TEST_ASSERT_TRUE(rc >= 0);
rc = key_find(kvmgr, (void*)u->name, &data);
TEST_ASSERT_TRUE(rc >= 0);
TEST_ASSERT_TRUE(data == u);
destroy(kvmgr);
}
static void test_kvmgr_iter(void)
{
kvmgr_params_t params = { .key_type = KVMGR_KEY_INT,
.dynamic = 0,
.nslots = 4,
.delta = 4,
.datakiller = NULL };
var kvmgr = makeInstance(&xkvmgr_type, &params);
int rc = 0;
int i;
iterator_t it;
TEST_ASSERT_TRUE(kvmgr != NULL);
for (i = 0; i < 10; i++) {
rc = key_add(kvmgr, (void*)(long)i, (void*)(long)(i * i));
TEST_ASSERT_TRUE(rc >= 0);
}
rc = iter_make(&it, kvmgr);
TEST_ASSERT_TRUE(rc >= 0);
i = 0;
for (;;) {
void* data;
rc = iter_next(&it, &data);
TEST_ASSERT_TRUE(rc >= 0);
if (rc == RTTI_ITER_NO_DATA) {
break;
}
TEST_ASSERT_TRUE((int)(long)data == i * i);
i++;
}
TEST_ASSERT_TRUE(i == 10);
iter_destroy(&it);
kvmgr_fini(&mgr);
destroy(kvmgr);
}
static void test_kvdel(void)
{
kvmgr_t mgr;
char *key = "key1";
kv_data_t data = { .key = key, .data = 100 };
kv_data_t* p = NULL;
kvmgr_init(&mgr, string_hash_key, 4, 4, NULL);
kvmgr_add(&mgr, key, &data);
p = kvmgr_lock(&mgr, key, OBJREF_NOP);
TEST_ASSERT_TRUE(p != NULL);
TEST_ASSERT_TRUE(p == &data);
kvmgr_del(&mgr, key);
p = kvmgr_lock(&mgr, key, OBJREF_NOP);
TEST_ASSERT_TRUE( p == NULL);
kvmgr_fini(&mgr);
}
void test_kvmgr(void)
{
printf("\n>> kvmgr test\n");
RUN_TEST(test_kvadd);
RUN_TEST(test_kvput);
RUN_TEST(test_kvdel);
RUN_TEST(test_kvmgr_create);
RUN_TEST(test_kvmgr_add);
RUN_TEST(test_kvmgr_iter);
}