1 #include "inc.h"
2
3 char *key_u32 = "test_u32";
4 char *key_str = "test_str";
5 char *key_mem = "test_mem";
6 char *key_label = "test_label";
7
8 /*===========================================================================*
9 * test_u32 *
10 *===========================================================================*/
test_u32(void)11 void test_u32(void)
12 {
13 int r;
14 u32_t value;
15
16 /* Publish and retrieve. */
17 r = ds_publish_u32(key_u32, 1234, 0);
18 assert(r == OK);
19 r = ds_retrieve_u32(key_u32, &value);
20 assert(r == OK && value == 1234);
21
22 /* If dstest deletes 'test_u32' immediately after publishing it,
23 * subs will catch the event, but it can't check it immediately.
24 * So dstest will sleep 2 seconds to wait for subs to complete. */
25 sleep(2);
26
27 /* Publish again without DSF_OVERWRITE. */
28 r = ds_publish_u32(key_u32, 4321, 0);
29 assert(r == EEXIST);
30
31 /* Publish again with DSF_OVERWRITE to overwrite it. */
32 r = ds_publish_u32(key_u32, 4321, DSF_OVERWRITE);
33 assert(r == OK);
34 r = ds_retrieve_u32(key_u32, &value);
35 assert(r == OK && value == 4321);
36
37 /* Delete. */
38 r = ds_delete_u32(key_u32);
39 assert(r == OK);
40 r = ds_retrieve_u32(key_u32, &value);
41 assert(r == ESRCH);
42
43 printf("DSTEST: U32 test successful!\n");
44 }
45
46 /*===========================================================================*
47 * test_str *
48 *===========================================================================*/
test_str(void)49 void test_str(void)
50 {
51 int r;
52 char *string = "little";
53 char *longstring = "verylooooooongstring";
54 char buf[17];
55
56 r = ds_publish_str(key_str, string, 0);
57 assert(r == OK);
58
59 r = ds_retrieve_str(key_str, buf, sizeof(buf)-1);
60 assert(r == OK && strcmp(string, buf) == 0);
61
62 r = ds_delete_str(key_str);
63 assert(r == OK);
64
65 /* Publish a long string. */
66 r = ds_publish_str(key_str, longstring, 0);
67 assert(r == OK);
68
69 r = ds_retrieve_str(key_str, buf, sizeof(buf)-1);
70 assert(r == OK && strcmp(string, buf) != 0
71 && strncmp(longstring, buf, sizeof(buf)-1) == 0);
72
73 r = ds_delete_str(key_str);
74 assert(r == OK);
75
76 printf("DSTEST: STRING test successful!\n");
77 }
78
79 /*===========================================================================*
80 * test_mem *
81 *===========================================================================*/
test_mem(void)82 void test_mem(void)
83 {
84 char *string1 = "ok, this is a string";
85 char *string2 = "ok, this is a very looooong string";
86 size_t len1 = strlen(string1) + 1;
87 size_t len2 = strlen(string2) + 1;
88 char buf[100];
89 size_t get_len;
90 int r;
91
92 /* Publish and retrieve. */
93 r = ds_publish_mem(key_mem, string1, len1, 0);
94 assert(r == OK);
95 get_len = 100;
96 r = ds_retrieve_mem(key_mem, buf, &get_len);
97 assert(r == OK && strcmp(string1, buf) == 0);
98 assert(get_len == len1);
99
100 /* Let get_len=8, which is less than strlen(string1). */
101 get_len = 8;
102 r = ds_retrieve_mem(key_mem, buf, &get_len);
103 assert(r == OK && get_len == 8);
104
105 /* Publish again to overwrite with a bigger memory range. */
106 r = ds_publish_mem(key_mem, string2, len2, DSF_OVERWRITE);
107 assert(r == OK);
108
109 get_len = 100;
110 r = ds_retrieve_mem(key_mem, buf, &get_len);
111 assert(r == OK && strcmp(string2, buf) == 0);
112 assert(get_len == len2);
113
114 r = ds_delete_mem(key_mem);
115 assert(r == OK);
116
117 printf("DSTEST: MEM test successful!\n");
118 }
119
120 /*===========================================================================*
121 * test_label *
122 *===========================================================================*/
test_label(void)123 void test_label(void)
124 {
125 int r;
126 char label[DS_MAX_KEYLEN];
127 endpoint_t endpoint;
128
129 /* Retrieve own label and endpoint. */
130 r = ds_retrieve_label_name(label, sef_self());
131 assert(r == OK);
132 r = ds_retrieve_label_endpt(label, &endpoint);
133 assert(r == OK && endpoint == sef_self());
134
135 /* Publish and delete. */
136 r = ds_publish_label(label, endpoint, 0);
137 assert(r == EPERM);
138 r = ds_delete_label(label);
139 assert(r == EPERM);
140
141 printf("DSTEST: LABEL test successful!\n");
142 }
143
144 /*===========================================================================*
145 * sef_cb_init_fresh *
146 *===========================================================================*/
sef_cb_init_fresh(int UNUSED (type),sef_init_info_t * UNUSED (info))147 static int sef_cb_init_fresh(int UNUSED(type), sef_init_info_t *UNUSED(info))
148 {
149 /* Run all the tests. */
150 test_u32();
151 test_str();
152 test_mem();
153 test_label();
154
155 return OK;
156 }
157
158 /*===========================================================================*
159 * sef_local_startup *
160 *===========================================================================*/
sef_local_startup(void)161 static void sef_local_startup(void)
162 {
163 /* Let SEF perform startup. */
164 sef_setcb_init_fresh(sef_cb_init_fresh);
165
166 sef_startup();
167 }
168
169 /*===========================================================================*
170 * main *
171 *===========================================================================*/
main(void)172 int main(void)
173 {
174 /* SEF local startup. */
175 sef_local_startup();
176
177 return 0;
178 }
179