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 *===========================================================================*/ 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 *===========================================================================*/ 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 *===========================================================================*/ 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 *===========================================================================*/ 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 *===========================================================================*/ 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 *===========================================================================*/ 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 *===========================================================================*/ 172 int main(void) 173 { 174 /* SEF local startup. */ 175 sef_local_startup(); 176 177 return 0; 178 } 179