MessageTest.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. /******************************************************************
  2. *
  3. * uEcho for C
  4. *
  5. * Copyright (C) Satoshi Konno 2015
  6. *
  7. * This is licensed under BSD-style license, see file COPYING.
  8. *
  9. ******************************************************************/
  10. #include <boost/test/unit_test.hpp>
  11. #include <uecho/_message.h>
  12. BOOST_AUTO_TEST_CASE(MessageBasicFunctions)
  13. {
  14. uEchoMessage* msg = uecho_message_new();
  15. uecho_message_settid(msg, uEchoEhd1);
  16. BOOST_CHECK_EQUAL(uecho_message_gettid(msg), (uEchoTID)uEchoEhd1);
  17. uecho_message_setehd2(msg, uEchoEhd2);
  18. BOOST_CHECK_EQUAL(uecho_message_getehd2(msg), (uEchoTID)uEchoEhd2);
  19. uecho_message_delete(msg);
  20. }
  21. BOOST_AUTO_TEST_CASE(MessageTid)
  22. {
  23. uEchoMessage* msg = uecho_message_new();
  24. BOOST_CHECK(uecho_message_settid(msg, uEchoTidMin));
  25. BOOST_CHECK_EQUAL(uecho_message_gettid(msg), (uEchoTID)uEchoTidMin);
  26. BOOST_CHECK(uecho_message_settid(msg, uEchoTidMax));
  27. BOOST_CHECK_EQUAL(uecho_message_gettid(msg), (uEchoTID)uEchoTidMax);
  28. srand((int)time(NULL));
  29. for (int n = 0; n < 100; n++) {
  30. int tid = rand() % uEchoTidMax;
  31. BOOST_CHECK(uecho_message_settid(msg, tid));
  32. BOOST_CHECK_EQUAL(uecho_message_gettid(msg), tid);
  33. }
  34. uecho_message_delete(msg);
  35. }
  36. BOOST_AUTO_TEST_CASE(MessageBadDataLength)
  37. {
  38. uEchoMessage* msg = uecho_message_new();
  39. for (int n = 0; n < uEchoMessageMinLen; n++) {
  40. BOOST_CHECK(!uecho_message_parse(msg, NULL, n));
  41. }
  42. uecho_message_delete(msg);
  43. }
  44. BOOST_AUTO_TEST_CASE(MessageBadHeader)
  45. {
  46. uEchoMessage* msg = uecho_message_new();
  47. byte msg_bytes[] = {
  48. 0x00,
  49. 0x00,
  50. 0x00,
  51. 0x00,
  52. 0x00,
  53. 0x00,
  54. 0x00,
  55. 0x00,
  56. 0x00,
  57. 0x00,
  58. 0x00,
  59. 0x00,
  60. };
  61. BOOST_CHECK(!uecho_message_parse(msg, msg_bytes, uEchoMessageMinLen));
  62. uecho_message_delete(msg);
  63. }
  64. BOOST_AUTO_TEST_CASE(MessageRequest)
  65. {
  66. uEchoMessage* msg = uecho_message_new();
  67. byte msg_bytes[] = {
  68. uEchoEhd1,
  69. uEchoEhd2,
  70. 0x00,
  71. 0x00,
  72. 0xA0,
  73. 0xB0,
  74. 0xC0,
  75. 0xD0,
  76. 0xE0,
  77. 0xF0,
  78. uEchoEsvReadRequest,
  79. 3,
  80. 1,
  81. 1,
  82. 'a',
  83. 2,
  84. 2,
  85. 'b',
  86. 'c',
  87. 3,
  88. 3,
  89. 'c',
  90. 'd',
  91. 'e',
  92. };
  93. BOOST_CHECK(uecho_message_parse(msg, msg_bytes, sizeof(msg_bytes)));
  94. BOOST_CHECK_EQUAL(uecho_message_gettid(msg), 0);
  95. BOOST_CHECK_EQUAL(uecho_message_getsourceobjectcode(msg), 0xA0B0C0);
  96. BOOST_CHECK_EQUAL(uecho_message_getdestinationobjectcode(msg), 0xD0E0F0);
  97. BOOST_CHECK_EQUAL(uecho_message_getesv(msg), (uEchoEsv)uEchoEsvReadRequest);
  98. BOOST_CHECK_EQUAL(uecho_message_getopc(msg), 3);
  99. BOOST_CHECK_EQUAL(uecho_message_getopcset(msg), 0);
  100. BOOST_CHECK_EQUAL(uecho_message_getopcget(msg), 0);
  101. for (int n = 1; n <= uecho_message_getopc(msg); n++) {
  102. uEchoProperty* prop = uecho_message_getproperty(msg, (n - 1));
  103. BOOST_CHECK(prop);
  104. BOOST_CHECK_EQUAL(uecho_property_getcode(prop), n);
  105. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), n);
  106. byte* data = uecho_property_getdata(prop);
  107. BOOST_CHECK(data);
  108. for (int i = 0; i < uecho_property_getdatasize(prop); i++) {
  109. BOOST_CHECK_EQUAL(data[i], 'a' + (n - 1) + i);
  110. }
  111. }
  112. uEchoMessage* msg_copy = uecho_message_new();
  113. BOOST_CHECK(uecho_message_parse(msg_copy, uecho_message_getbytes(msg), uecho_message_size(msg)));
  114. BOOST_CHECK(uecho_message_equals(msg, msg_copy));
  115. uecho_message_delete(msg_copy);
  116. uecho_message_delete(msg);
  117. }
  118. BOOST_AUTO_TEST_CASE(MessageWriteReadRequest)
  119. {
  120. uEchoMessage* msg = uecho_message_new();
  121. byte msg_bytes[] = {
  122. uEchoEhd1,
  123. uEchoEhd2,
  124. 0x00,
  125. 0x00,
  126. 0xA0,
  127. 0xB0,
  128. 0xC0,
  129. 0xD0,
  130. 0xE0,
  131. 0xF0,
  132. uEchoEsvWriteReadRequest,
  133. 3,
  134. 1,
  135. 1,
  136. 'a',
  137. 2,
  138. 2,
  139. 'b',
  140. 'c',
  141. 3,
  142. 3,
  143. 'c',
  144. 'd',
  145. 'e',
  146. 3,
  147. 1,
  148. 1,
  149. 'v',
  150. 2,
  151. 2,
  152. 'w',
  153. 'x',
  154. 3,
  155. 3,
  156. 'x',
  157. 'y',
  158. 'z',
  159. };
  160. BOOST_CHECK(uecho_message_parse(msg, msg_bytes, sizeof(msg_bytes)));
  161. BOOST_CHECK_EQUAL(uecho_message_gettid(msg), 0);
  162. BOOST_CHECK_EQUAL(uecho_message_getsourceobjectcode(msg), 0xA0B0C0);
  163. BOOST_CHECK_EQUAL(uecho_message_getdestinationobjectcode(msg), 0xD0E0F0);
  164. BOOST_CHECK_EQUAL(uecho_message_getesv(msg), (uEchoEsv)uEchoEsvWriteReadRequest);
  165. BOOST_CHECK_EQUAL(uecho_message_getopc(msg), 0);
  166. BOOST_CHECK_EQUAL(uecho_message_getopcset(msg), 3);
  167. BOOST_CHECK_EQUAL(uecho_message_getopcget(msg), 3);
  168. for (int n = 1; n <= uecho_message_getopcset(msg); n++) {
  169. uEchoProperty* prop = uecho_message_getpropertyset(msg, (n - 1));
  170. BOOST_CHECK(prop);
  171. BOOST_CHECK_EQUAL(uecho_property_getcode(prop), n);
  172. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), n);
  173. byte* data = uecho_property_getdata(prop);
  174. BOOST_CHECK(data);
  175. for (int i = 0; i < uecho_property_getdatasize(prop); i++) {
  176. BOOST_CHECK_EQUAL(data[i], 'a' + (n - 1) + i);
  177. }
  178. }
  179. for (int n = 1; n <= uecho_message_getopcget(msg); n++) {
  180. uEchoProperty* prop = uecho_message_getpropertyget(msg, (n - 1));
  181. BOOST_CHECK(prop);
  182. BOOST_CHECK_EQUAL(uecho_property_getcode(prop), n);
  183. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), n);
  184. byte* data = uecho_property_getdata(prop);
  185. BOOST_CHECK(data);
  186. for (int i = 0; i < uecho_property_getdatasize(prop); i++) {
  187. BOOST_CHECK_EQUAL(data[i], 'v' + (n - 1) + i);
  188. }
  189. }
  190. uEchoMessage* msg_copy = uecho_message_new();
  191. BOOST_CHECK(uecho_message_parse(msg_copy, uecho_message_getbytes(msg), uecho_message_size(msg)));
  192. BOOST_CHECK(uecho_message_equals(msg, msg_copy));
  193. uecho_message_delete(msg_copy);
  194. uecho_message_delete(msg);
  195. }
  196. BOOST_AUTO_TEST_CASE(MessageEsvType)
  197. {
  198. uEchoMessage* msg = uecho_message_new();
  199. BOOST_CHECK(uecho_message_setesv(msg, uEchoEsvWriteRequest));
  200. BOOST_CHECK_EQUAL(uecho_message_iswriterequest(msg), true);
  201. BOOST_CHECK_EQUAL(uecho_message_isreadrequest(msg), false);
  202. BOOST_CHECK_EQUAL(uecho_message_isnotifyrequest(msg), false);
  203. BOOST_CHECK_EQUAL(uecho_message_iswriteresponse(msg), false);
  204. BOOST_CHECK_EQUAL(uecho_message_isreadresponse(msg), false);
  205. BOOST_CHECK_EQUAL(uecho_message_isnotifyresponse(msg), false);
  206. BOOST_CHECK(uecho_message_setesv(msg, uEchoEsvWriteRequestResponseRequired));
  207. BOOST_CHECK_EQUAL(uecho_message_iswriterequest(msg), true);
  208. BOOST_CHECK_EQUAL(uecho_message_isreadrequest(msg), false);
  209. BOOST_CHECK_EQUAL(uecho_message_isnotifyrequest(msg), false);
  210. BOOST_CHECK_EQUAL(uecho_message_iswriteresponse(msg), false);
  211. BOOST_CHECK_EQUAL(uecho_message_isreadresponse(msg), false);
  212. BOOST_CHECK_EQUAL(uecho_message_isnotifyresponse(msg), false);
  213. BOOST_CHECK(uecho_message_setesv(msg, uEchoEsvReadRequest));
  214. BOOST_CHECK_EQUAL(uecho_message_iswriterequest(msg), false);
  215. BOOST_CHECK_EQUAL(uecho_message_isreadrequest(msg), true);
  216. BOOST_CHECK_EQUAL(uecho_message_isnotifyrequest(msg), false);
  217. BOOST_CHECK_EQUAL(uecho_message_iswriteresponse(msg), false);
  218. BOOST_CHECK_EQUAL(uecho_message_isreadresponse(msg), false);
  219. BOOST_CHECK_EQUAL(uecho_message_isnotifyresponse(msg), false);
  220. BOOST_CHECK(uecho_message_setesv(msg, uEchoEsvNotificationRequest));
  221. BOOST_CHECK_EQUAL(uecho_message_iswriterequest(msg), false);
  222. BOOST_CHECK_EQUAL(uecho_message_isreadrequest(msg), false);
  223. BOOST_CHECK_EQUAL(uecho_message_isnotifyrequest(msg), true);
  224. BOOST_CHECK_EQUAL(uecho_message_iswriteresponse(msg), false);
  225. BOOST_CHECK_EQUAL(uecho_message_isreadresponse(msg), false);
  226. BOOST_CHECK_EQUAL(uecho_message_isnotifyresponse(msg), false);
  227. BOOST_CHECK(uecho_message_setesv(msg, uEchoEsvWriteReadRequest));
  228. BOOST_CHECK_EQUAL(uecho_message_iswriterequest(msg), true);
  229. BOOST_CHECK_EQUAL(uecho_message_isreadrequest(msg), true);
  230. BOOST_CHECK_EQUAL(uecho_message_isnotifyrequest(msg), false);
  231. BOOST_CHECK_EQUAL(uecho_message_iswriteresponse(msg), false);
  232. BOOST_CHECK_EQUAL(uecho_message_isreadresponse(msg), false);
  233. BOOST_CHECK_EQUAL(uecho_message_isnotifyresponse(msg), false);
  234. BOOST_CHECK(uecho_message_setesv(msg, uEchoEsvWriteResponse));
  235. BOOST_CHECK_EQUAL(uecho_message_iswriterequest(msg), false);
  236. BOOST_CHECK_EQUAL(uecho_message_isreadrequest(msg), false);
  237. BOOST_CHECK_EQUAL(uecho_message_isnotifyrequest(msg), false);
  238. BOOST_CHECK_EQUAL(uecho_message_iswriteresponse(msg), true);
  239. BOOST_CHECK_EQUAL(uecho_message_isreadresponse(msg), false);
  240. BOOST_CHECK_EQUAL(uecho_message_isnotifyresponse(msg), false);
  241. BOOST_CHECK(uecho_message_setesv(msg, uEchoEsvReadResponse));
  242. BOOST_CHECK_EQUAL(uecho_message_iswriterequest(msg), false);
  243. BOOST_CHECK_EQUAL(uecho_message_isreadrequest(msg), false);
  244. BOOST_CHECK_EQUAL(uecho_message_isnotifyrequest(msg), false);
  245. BOOST_CHECK_EQUAL(uecho_message_iswriteresponse(msg), false);
  246. BOOST_CHECK_EQUAL(uecho_message_isreadresponse(msg), true);
  247. BOOST_CHECK_EQUAL(uecho_message_isnotifyresponse(msg), false);
  248. BOOST_CHECK(uecho_message_setesv(msg, uEchoEsvNotification));
  249. BOOST_CHECK_EQUAL(uecho_message_iswriterequest(msg), false);
  250. BOOST_CHECK_EQUAL(uecho_message_isreadrequest(msg), false);
  251. BOOST_CHECK_EQUAL(uecho_message_isnotifyrequest(msg), false);
  252. BOOST_CHECK_EQUAL(uecho_message_iswriteresponse(msg), false);
  253. BOOST_CHECK_EQUAL(uecho_message_isreadresponse(msg), false);
  254. BOOST_CHECK_EQUAL(uecho_message_isnotifyresponse(msg), true);
  255. BOOST_CHECK(uecho_message_setesv(msg, uEchoEsvNotificationResponseRequired));
  256. BOOST_CHECK_EQUAL(uecho_message_iswriterequest(msg), false);
  257. BOOST_CHECK_EQUAL(uecho_message_isreadrequest(msg), false);
  258. BOOST_CHECK_EQUAL(uecho_message_isnotifyrequest(msg), true);
  259. BOOST_CHECK_EQUAL(uecho_message_iswriteresponse(msg), false);
  260. BOOST_CHECK_EQUAL(uecho_message_isreadresponse(msg), false);
  261. BOOST_CHECK_EQUAL(uecho_message_isnotifyresponse(msg), false);
  262. BOOST_CHECK(uecho_message_setesv(msg, uEchoEsvNotificationResponse));
  263. BOOST_CHECK_EQUAL(uecho_message_iswriterequest(msg), false);
  264. BOOST_CHECK_EQUAL(uecho_message_isreadrequest(msg), false);
  265. BOOST_CHECK_EQUAL(uecho_message_isnotifyrequest(msg), false);
  266. BOOST_CHECK_EQUAL(uecho_message_iswriteresponse(msg), false);
  267. BOOST_CHECK_EQUAL(uecho_message_isreadresponse(msg), false);
  268. BOOST_CHECK_EQUAL(uecho_message_isnotifyresponse(msg), true);
  269. BOOST_CHECK(uecho_message_setesv(msg, uEchoEsvWriteReadResponse));
  270. BOOST_CHECK_EQUAL(uecho_message_iswriterequest(msg), false);
  271. BOOST_CHECK_EQUAL(uecho_message_isreadrequest(msg), false);
  272. BOOST_CHECK_EQUAL(uecho_message_isnotifyrequest(msg), false);
  273. BOOST_CHECK_EQUAL(uecho_message_iswriteresponse(msg), true);
  274. BOOST_CHECK_EQUAL(uecho_message_isreadresponse(msg), true);
  275. BOOST_CHECK_EQUAL(uecho_message_isnotifyresponse(msg), false);
  276. uecho_message_delete(msg);
  277. }
  278. BOOST_AUTO_TEST_CASE(MessageSearch)
  279. {
  280. uEchoMessage* msg = uecho_message_search_new();
  281. BOOST_CHECK(uecho_message_issearchrequest(msg));
  282. BOOST_CHECK_EQUAL(uecho_message_size(msg), 14);
  283. uecho_message_delete(msg);
  284. }