summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Makefile4
-rw-r--r--test/test_key_value_load.c124
-rw-r--r--test/test_key_value_match.c223
-rw-r--r--test/test_key_value_store.c4
4 files changed, 308 insertions, 47 deletions
diff --git a/test/Makefile b/test/Makefile
index c70c7f0..75a56ef 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -3,13 +3,13 @@ CFLAGS=-g3 -I../ -lnetbytes -Wl,-rpath=../ -L../
LDFLAGS=
SOURCE=test_save test_multiple_write test_multiple_read test_add_elem test_alltypes \
-test_key_value_store test_key_value_load
+test_key_value_store test_key_value_load test_key_value_match
SOURCES=$(SOURCE:=.c)
make: $(SOURCE)
leak:
- valgrind --leak-check=full --track-origins=yes --log-file=log.txt ./test_key_value_store
+ valgrind --leak-check=full --track-origins=yes --log-file=log.txt ./test_key_value_load
clean:
rm -f $(SOURCE) \ No newline at end of file
diff --git a/test/test_key_value_load.c b/test/test_key_value_load.c
index f020e34..afe5450 100644
--- a/test/test_key_value_load.c
+++ b/test/test_key_value_load.c
@@ -3,80 +3,118 @@
#include <netbytes.h>
-void pr_u8( nb_u8 *u8 )
+char *alloc_new_str_s(char *str, size_t size)
{
- if ( !u8 )
- {
- printf("u8: NULL\n");
- return;
- } else
+ char *ret = NULL;
+
+ if (str == NULL)
{
- printf("u8: t=0x%x v=0x%x\n", u8->type, u8->val );
+ return NULL;
}
-}
-void pr_u8arr( nb_u8arr *u8arr )
-{
- if (!u8arr)
+ //1MB is enought
+ if (size > (1024*1024))
{
- printf("u8arr: NULL\n");
- return ;
- } else
+ return NULL;
+ }
+
+ ret = malloc(size+1); //extra for 1 zero at then end
+ if (ret == NULL)
{
- printf("u8arr: t=0x%x l=0x%x v=0x%x\n",
- u8arr->type, u8arr->len, u8arr->val );
+ return NULL;
}
+
+ memcpy(ret, str, size);
+ ret[size] = 0; //add zero at the end
+
+ return ret;
+}
+
+char *alloc_new_str(char *str)
+{
+ return alloc_new_str_s(str, strlen(str));
}
-void pr_store( netbyte_store *nb )
+typedef struct kv_user_name
{
- int i;
+ int id;
+ char *name;
+ char *desc;
+} kv_user_name;
- if (!nb)
+kv_user_name* kv_new(int id, char *name, char *desc)
+{
+ kv_user_name *ret = NULL;
+
+ ret = malloc(sizeof(kv_user_name));
+ if (!ret)
{
- printf("nb: NULL\n");
- return;
+ return NULL;
}
- printf("nb: s=0x%x c=0x%x\n", nb->size, nb->count );
- for (i=0;i<nb->count;i++)
+ ret->id = id;
+ ret->name = alloc_new_str(name);
+ ret->desc = alloc_new_str(desc);
+
+ return ret;
+}
+
+netbyte_store* kv_marsh(kv_user_name *kv)
+{
+ netbyte_store *nb=NULL;
+ nb_u8 nb_id;
+ nb_u8arr nb_name, nb_desc;
+
+ nb = calloc(1,sizeof(netbyte_store));
+ nb_init(nb);
+
+ nb_u8_create(&nb_id, kv->id);
+ nb_add_u8(nb, &nb_id);
+ nb_u8arr_create(&nb_name, strlen(kv->name), kv->name);
+ nb_add_u8arr(nb, &nb_name);
+ nb_u8arr_create(&nb_desc, strlen(kv->desc), kv->desc);
+ nb_add_u8arr(nb, &nb_desc);
+
+ nb_print(nb);
+ nb_print(nb);
+
+ return nb;
+}
+
+void kv_free(kv_user_name *kv)
+{
+ if (kv!=NULL)
{
- printf("\t[%x] -> ",i );
- if ( nb->types[i].type == NBT_U8 )
- {
- pr_u8( (nb_u8 *)nb->types[i].nb_val );
- } else if ( nb->types[i].type == NBT_U8ARRAY )
- {
- pr_u8arr( (nb_u8arr *)nb->types[i].nb_val );
- } else
- {
- printf("Unknown\n");
- }
+ free(kv->name);
+ free(kv->desc);
+ free(kv);
}
}
int main()
{
-
- int er;
- uint8_t *res;
- FILE *f;
+ int er=-1;
+ uint8_t *res=NULL;
+ FILE *f=NULL;
int i=0;
- netbyte_store nb;
+ netbyte_store *nb=malloc(sizeof(netbyte_store));
printf("Start test\n");
- nb_init( &nb );
- f = fopen("test_many.nb","r");
- while (nb_fread( &nb, fileno(f) ) == 0)
+ f = fopen("test_kv_save.md","r");
+ while (nb_fread( nb, fileno(f) ) == 0)
{
printf("ITER %d: ", i );
- pr_store( &nb );
+ nb_print( nb );
i += 1;
+
}
fclose( f );
+ nb_free(nb);
+
+
printf("End test\n");
return 0;
} \ No newline at end of file
diff --git a/test/test_key_value_match.c b/test/test_key_value_match.c
new file mode 100644
index 0000000..4384a07
--- /dev/null
+++ b/test/test_key_value_match.c
@@ -0,0 +1,223 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <netbytes.h>
+
+char *alloc_new_str_s(char *str, size_t size)
+{
+ char *ret = NULL;
+
+ if (str == NULL)
+ {
+ return NULL;
+ }
+
+ //1MB is enought
+ if (size > (1024*1024))
+ {
+ return NULL;
+ }
+
+ ret = malloc(size+1); //extra for 1 zero at then end
+ if (ret == NULL)
+ {
+ return NULL;
+ }
+
+ memcpy(ret, str, size);
+ ret[size] = 0; //add zero at the end
+
+ return ret;
+}
+
+char *alloc_new_str(char *str)
+{
+ return alloc_new_str_s(str, strlen(str));
+}
+
+typedef struct kv_user_name
+{
+ int id;
+ char *name;
+ char *desc;
+} kv_user_name;
+
+kv_user_name* kv_new(int id, char *name, char *desc)
+{
+ kv_user_name *ret = NULL;
+
+ ret = malloc(sizeof(kv_user_name));
+ if (!ret)
+ {
+ return NULL;
+ }
+
+ ret->id = id;
+ ret->name = alloc_new_str(name);
+ ret->desc = alloc_new_str(desc);
+
+ return ret;
+}
+
+kv_user_name* kv_empty()
+{
+ kv_user_name *ret = NULL;
+
+ ret = calloc(1, sizeof(kv_user_name));
+ if (!ret)
+ {
+ return NULL;
+ }
+
+
+ return ret;
+}
+
+netbyte_store* kv_marsh(kv_user_name *kv)
+{
+ netbyte_store *nb=NULL;
+ nb_u8 nb_id;
+ nb_u8arr nb_name, nb_desc;
+
+ nb = calloc(1,sizeof(netbyte_store));
+ nb_init(nb);
+
+ nb_u8_create(&nb_id, kv->id);
+ nb_add_u8(nb, &nb_id);
+ nb_u8arr_create(&nb_name, strlen(kv->name), kv->name);
+ nb_add_u8arr(nb, &nb_name);
+ nb_u8arr_create(&nb_desc, strlen(kv->desc), kv->desc);
+ nb_add_u8arr(nb, &nb_desc);
+
+ nb_print(nb);
+ nb_print(nb);
+
+ return nb;
+}
+
+
+int kv_unmarsh(netbyte_store *store, kv_user_name *kv)
+{
+ __nb_type *type=NULL;
+
+ if (!store)
+ {
+ return -1;
+ }
+
+ if (!kv)
+ {
+ return -1;
+ }
+
+ if (0 == nb_val(store, 0, &type))
+ if (type->type == NBT_U8)
+ {
+ nb_u8 *u8 = (nb_u8 *)type->nb_val;
+ kv->id = u8->val;
+ } else
+ {
+ printf("ERR\n");
+ }
+
+ if (0 == nb_val(store, 1, &type))
+ if (type->type == NBT_U8ARRAY)
+ {
+ nb_u8arr *u8arr = (nb_u8arr *)type->nb_val;
+ kv->name = alloc_new_str_s(u8arr->val, u8arr->len);
+ } else
+ {
+ printf("ERR\n");
+ }
+
+ if (0 == nb_val(store, 2, &type))
+ if (type->type == NBT_U8ARRAY)
+ {
+ nb_u8arr *u8arr = (nb_u8arr *)type->nb_val;
+ kv->desc = alloc_new_str_s(u8arr->val, u8arr->len);
+ } else
+ {
+ printf("ERR\n");
+ }
+
+ return 0;
+}
+
+
+void kv_free(kv_user_name *kv)
+{
+ if (kv!=NULL)
+ {
+ free(kv->name);
+ free(kv->desc);
+ free(kv);
+ }
+}
+
+int main()
+{
+ int er=-1;
+ uint8_t *res=NULL;
+ FILE *f=NULL;
+ int i=0;
+
+ kv_user_name *kv=NULL;
+
+ netbyte_store *nb=malloc(sizeof(netbyte_store));
+ nb_tok_arr *pat = NULL;
+
+ printf("Start test\n");
+
+ f = fopen("test_kv_save.md","r");
+ if (nb_fread( nb, fileno(f) ) == 0)
+ {
+ nb_print( nb );
+ }
+ fclose( f );
+
+
+ pat = nb_tok_create(32);
+ if (pat == NULL)
+ {
+ printf("ERR nb_tok_create\n");
+ }
+ if (-1 == nb_parse("u8,u8[],u8[] ",pat))
+ {
+ printf("ERR nb_parse\n");
+ }
+
+
+ for (i=0;i<pat->len;i++)
+ {
+ nb_tok tok = pat->tok[i];
+ printf("%d S:%d TS:%d L:%d A:%d\n",
+ i, tok.sign, tok.type_size, tok.len, tok.arr
+ );
+ }
+
+ if (nb_match(nb, pat)==0)
+ {
+ printf("Match\n");
+ } else
+ {
+ printf("No match\n");
+ }
+
+
+
+ kv = kv_empty();
+ kv_unmarsh(nb, kv);
+
+
+ printf("ID:%d\n", kv->id);
+ printf("NAME:%s\n",kv->name);
+ printf("DESC:%s\n", kv->desc);
+
+ kv_free(kv);
+
+ nb_free(nb);
+
+
+ printf("End test\n");
+ return 0;
+} \ No newline at end of file
diff --git a/test/test_key_value_store.c b/test/test_key_value_store.c
index b499c9a..de939da 100644
--- a/test/test_key_value_store.c
+++ b/test/test_key_value_store.c
@@ -106,7 +106,7 @@ int main()
printf("Start test\n");
- kv = kv_new(1,"Name","Name of the human");
+ kv = kv_new(1,"Jhony","Name of the human");
nb = kv_marsh(kv);
nb_print(nb);
kv_free(kv);
@@ -114,7 +114,7 @@ int main()
//nb_print(nb);
res = nb_create(nb);
- f = fopen("test_kv_save.nd","w+");
+ f = fopen("test_kv_save.md","w+");
fwrite(res, 1, nb->size, f);
fclose(f);