text.c 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. #include "t.h"
  2. #include <string.h>
  3. #include <yrmcds.h>
  4. DEF_TEST(set) {
  5. // quiet cannot be used
  6. ASSERT( yrmcds_set(c, "a", 1, "a", 1, 0, 0, 0, 1, NULL) == YRMCDS_BAD_ARGUMENT, 0 );
  7. uint32_t serial;
  8. check_error( yrmcds_set(c, "hoge", 4, "hoge", 4, 1, 0, 0, 0, &serial) );
  9. yrmcds_response r;
  10. check_error( yrmcds_recv(c, &r) );
  11. ASSERT( r.serial == serial, 0 );
  12. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  13. check_error( yrmcds_get(c, "hoge", 4, 0, &serial) );
  14. check_error( yrmcds_recv(c, &r) );
  15. ASSERT( r.serial == serial, 0 );
  16. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  17. ASSERT( r.data_len == 4, 0 );
  18. ASSERT( memcmp(r.data, "hoge", 4) == 0, 0 );
  19. ASSERT( r.flags == 1, 0 );
  20. // CAS failure
  21. check_error( yrmcds_set(c, "hoge", 4, "fu", 2, 2, 0, r.cas_unique+1,
  22. 0, &serial) );
  23. check_error( yrmcds_recv(c, &r) );
  24. ASSERT( r.serial == serial, 0 );
  25. ASSERT( r.status == YRMCDS_STATUS_EXISTS, 1 );
  26. check_error( yrmcds_getk(c, "hoge", 4, 0, &serial) );
  27. check_error( yrmcds_recv(c, &r) );
  28. ASSERT( r.serial == serial, 0 );
  29. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  30. ASSERT( r.key_len == 4, 0 );
  31. ASSERT( memcmp(r.key, "hoge", 4) == 0, 0 );
  32. ASSERT( r.data_len == 4, 0 );
  33. ASSERT( memcmp(r.data, "hoge", 4) == 0, 0 );
  34. ASSERT( r.flags == 1, 0 );
  35. // CAS success
  36. check_error( yrmcds_set(c, "hoge", 4, "fu", 2, 4097, 0, r.cas_unique,
  37. 0, &serial) );
  38. check_error( yrmcds_recv(c, &r) );
  39. ASSERT( r.serial == serial, 0 );
  40. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  41. check_error( yrmcds_getk(c, "hoge", 4, 0, &serial) );
  42. check_error( yrmcds_recv(c, &r) );
  43. ASSERT( r.serial == serial, 0 );
  44. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  45. ASSERT( r.key_len == 4, 0 );
  46. ASSERT( memcmp(r.key, "hoge", 4) == 0, 0 );
  47. ASSERT( r.data_len == 2, 0 );
  48. ASSERT( memcmp(r.data, "fu", 2) == 0, 0 );
  49. ASSERT( r.flags == 4097, 0 );
  50. // set exptime
  51. check_error( yrmcds_set(c, "hoge", 4, "999", 3, 0, 1, 0, 0, &serial) );
  52. check_error( yrmcds_recv(c, &r) );
  53. ASSERT( r.serial == serial, 0 );
  54. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  55. sleep(2);
  56. check_error( yrmcds_getk(c, "hoge", 4, 0, &serial) );
  57. check_error( yrmcds_recv(c, &r) );
  58. ASSERT( r.serial == serial, 0 );
  59. ASSERT( r.status == YRMCDS_STATUS_NOTFOUND, 1 );
  60. }
  61. DEF_TEST(add) {
  62. // quiet cannot be used
  63. ASSERT( yrmcds_add(c, "a", 1, "a", 1, 0, 0, 0, 1, NULL) == YRMCDS_BAD_ARGUMENT, 0 );
  64. uint32_t serial;
  65. check_error( yrmcds_add(c, "hoge", 4, "hoge", 4, 1, 0, 0, 0, &serial) );
  66. yrmcds_response r;
  67. check_error( yrmcds_recv(c, &r) );
  68. ASSERT( r.serial == serial, 0 );
  69. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  70. check_error( yrmcds_add(c, "hoge", 4, "fu", 2, 16, 0, 0, 0, &serial) );
  71. check_error( yrmcds_recv(c, &r) );
  72. ASSERT( r.serial == serial, 0 );
  73. ASSERT( r.status == YRMCDS_STATUS_NOTSTORED, 1 );
  74. }
  75. DEF_TEST(replace) {
  76. // quiet cannot be used
  77. ASSERT( yrmcds_replace(c, "a", 1, "a", 1, 0, 0, 0, 1, NULL) == YRMCDS_BAD_ARGUMENT, 0 );
  78. uint32_t serial;
  79. check_error( yrmcds_replace(c, "abc", 3, "hoge", 4, 1, 0, 0, 0, &serial) );
  80. yrmcds_response r;
  81. check_error( yrmcds_recv(c, &r) );
  82. ASSERT( r.serial == serial, 0 );
  83. ASSERT( r.status == YRMCDS_STATUS_NOTSTORED, 1 );
  84. check_error( yrmcds_set(c, "abc", 3, "def", 3, 16, 0, 0, 0, &serial) );
  85. check_error( yrmcds_recv(c, &r) );
  86. ASSERT( r.serial == serial, 0 );
  87. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  88. check_error( yrmcds_replace(c, "abc", 3, "hoge", 4, 1, 0, 0, 0, &serial) );
  89. check_error( yrmcds_recv(c, &r) );
  90. ASSERT( r.serial == serial, 0 );
  91. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  92. }
  93. DEF_TEST(append) {
  94. uint32_t serial;
  95. yrmcds_response r;
  96. // quiet cannot be used
  97. ASSERT( yrmcds_append(c, "a", 1, "a", 1, 1, NULL) == YRMCDS_BAD_ARGUMENT, 0 );
  98. check_error( yrmcds_append(c, "012", 3, "345", 3, 0, &serial) );
  99. check_error( yrmcds_recv(c, &r) );
  100. ASSERT( r.serial == serial, 0 );
  101. ASSERT( r.status == YRMCDS_STATUS_NOTSTORED, 1 );
  102. check_error( yrmcds_set(c, "012", 3, "345", 3, 1, 0, 0, 0, &serial) );
  103. check_error( yrmcds_recv(c, &r) );
  104. ASSERT( r.serial == serial, 0 );
  105. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  106. check_error( yrmcds_append(c, "012", 3, "6789", 4, 0, &serial) );
  107. check_error( yrmcds_recv(c, &r) );
  108. ASSERT( r.serial == serial, 0 );
  109. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  110. check_error( yrmcds_getk(c, "012", 3, 0, &serial) );
  111. check_error( yrmcds_recv(c, &r) );
  112. ASSERT( r.serial == serial, 0 );
  113. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  114. ASSERT( r.data_len == 7, 1 );
  115. ASSERT( memcmp(r.data, "3456789", 7) == 0, 0 );
  116. }
  117. DEF_TEST(prepend) {
  118. uint32_t serial;
  119. yrmcds_response r;
  120. // quiet cannot be used
  121. ASSERT( yrmcds_prepend(c, "a", 1, "a", 1, 1, NULL) == YRMCDS_BAD_ARGUMENT, 0 );
  122. check_error( yrmcds_prepend(c, "012", 3, "345", 3, 0, &serial) );
  123. check_error( yrmcds_recv(c, &r) );
  124. ASSERT( r.serial == serial, 0 );
  125. ASSERT( r.status == YRMCDS_STATUS_NOTSTORED, 1 );
  126. check_error( yrmcds_set(c, "012", 3, "345", 3, 1, 0, 0, 0, &serial) );
  127. check_error( yrmcds_recv(c, &r) );
  128. ASSERT( r.serial == serial, 0 );
  129. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  130. check_error( yrmcds_prepend(c, "012", 3, "6789", 4, 0, &serial) );
  131. check_error( yrmcds_recv(c, &r) );
  132. ASSERT( r.serial == serial, 0 );
  133. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  134. check_error( yrmcds_getk(c, "012", 3, 0, &serial) );
  135. check_error( yrmcds_recv(c, &r) );
  136. ASSERT( r.serial == serial, 0 );
  137. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  138. ASSERT( r.data_len == 7, 1 );
  139. ASSERT( memcmp(r.data, "6789345", 7) == 0, 0 );
  140. }
  141. DEF_TEST(touch) {
  142. uint32_t serial;
  143. yrmcds_response r;
  144. // quiet cannot be used
  145. ASSERT( yrmcds_touch(c, "a", 1, 0, 1, NULL) == YRMCDS_BAD_ARGUMENT, 0 );
  146. check_error( yrmcds_set(c, "a", 1, "345", 3, 0, 1, 0, 0, &serial) );
  147. check_error( yrmcds_recv(c, &r) );
  148. ASSERT( r.serial == serial, 0 );
  149. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  150. check_error( yrmcds_touch(c, "a", 1, 0, 0, &serial) );
  151. check_error( yrmcds_recv(c, &r) );
  152. ASSERT( r.serial == serial, 0 );
  153. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  154. sleep(2);
  155. check_error( yrmcds_getk(c, "a", 1, 0, &serial) );
  156. check_error( yrmcds_recv(c, &r) );
  157. ASSERT( r.serial == serial, 0 );
  158. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  159. }
  160. DEF_TEST(incdec) {
  161. uint32_t serial;
  162. yrmcds_response r;
  163. // quiet cannot be used
  164. ASSERT( yrmcds_incr(c, "a", 1, 100, 1, NULL) == YRMCDS_BAD_ARGUMENT, 0 );
  165. ASSERT( yrmcds_decr(c, "a", 1, 100, 1, NULL) == YRMCDS_BAD_ARGUMENT, 0 );
  166. check_error( yrmcds_incr(c, "a", 1, 100, 0, &serial) );
  167. check_error( yrmcds_recv(c, &r) );
  168. ASSERT( r.serial == serial, 0 );
  169. ASSERT( r.status == YRMCDS_STATUS_NOTFOUND, 0 );
  170. check_error( yrmcds_decr(c, "a", 1, 100, 0, &serial) );
  171. check_error( yrmcds_recv(c, &r) );
  172. ASSERT( r.serial == serial, 0 );
  173. ASSERT( r.status == YRMCDS_STATUS_NOTFOUND, 0 );
  174. check_error( yrmcds_set(c, "a", 1, "345", 3, 0, 1, 0, 0, &serial) );
  175. check_error( yrmcds_recv(c, &r) );
  176. ASSERT( r.serial == serial, 0 );
  177. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  178. check_error( yrmcds_incr(c, "a", 1, 1000, 0, &serial) );
  179. check_error( yrmcds_recv(c, &r) );
  180. ASSERT( r.serial == serial, 0 );
  181. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  182. ASSERT( r.value == 1345, 1 );
  183. check_error( yrmcds_decr(c, "a", 1, 1, 0, &serial) );
  184. check_error( yrmcds_recv(c, &r) );
  185. ASSERT( r.serial == serial, 0 );
  186. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  187. ASSERT( r.value == 1344, 1 );
  188. check_error( yrmcds_getk(c, "a", 1, 0, &serial) );
  189. check_error( yrmcds_recv(c, &r) );
  190. ASSERT( r.serial == serial, 0 );
  191. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  192. ASSERT( r.data_len == 4, 1 );
  193. ASSERT( memcmp(r.data, "1344", 4) == 0, 0 );
  194. }
  195. DEF_TEST(remove) {
  196. uint32_t serial;
  197. yrmcds_response r;
  198. // quiet cannot be used
  199. ASSERT( yrmcds_remove(c, "a", 1, 1, NULL) == YRMCDS_BAD_ARGUMENT, 0 );
  200. check_error( yrmcds_remove(c, "uuu", 3, 0, &serial) );
  201. check_error( yrmcds_recv(c, &r) );
  202. ASSERT( r.serial == serial, 0 );
  203. ASSERT( r.status == YRMCDS_STATUS_NOTFOUND, 0 );
  204. check_error( yrmcds_set(c, "uuu", 3, "345", 3, 111, 0, 0, 0, &serial) );
  205. check_error( yrmcds_recv(c, &r) );
  206. ASSERT( r.serial == serial, 0 );
  207. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  208. check_error( yrmcds_remove(c, "uuu", 3, 0, &serial) );
  209. check_error( yrmcds_recv(c, &r) );
  210. ASSERT( r.serial == serial, 0 );
  211. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  212. check_error( yrmcds_getk(c, "uuu", 3, 0, &serial) );
  213. check_error( yrmcds_recv(c, &r) );
  214. ASSERT( r.serial == serial, 0 );
  215. ASSERT( r.status == YRMCDS_STATUS_NOTFOUND, 1 );
  216. }
  217. DEF_TEST(version) {
  218. uint32_t serial;
  219. yrmcds_response r;
  220. check_error( yrmcds_version(c, &serial) );
  221. check_error( yrmcds_recv(c, &r) );
  222. ASSERT( r.serial == serial, 0 );
  223. ASSERT( r.status == YRMCDS_STATUS_OK, 1 );
  224. ASSERT( r.data_len > 0, 1 );
  225. fprintf(stderr, "version=%.*s\n", (int)r.data_len, r.data);
  226. }
  227. TEST_MAIN() {
  228. check_error( yrmcds_text_mode(c) );
  229. CALL_TEST(set);
  230. CALL_TEST(add);
  231. CALL_TEST(replace);
  232. CALL_TEST(append);
  233. CALL_TEST(prepend);
  234. CALL_TEST(touch);
  235. CALL_TEST(incdec);
  236. CALL_TEST(remove);
  237. CALL_TEST(version);
  238. }