check_stack.c 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. /*
  2. ============================================================================
  3. Name : opcuaServer.c
  4. Author :
  5. Version :
  6. Copyright : Your copyright notice
  7. Description :
  8. ============================================================================
  9. */
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include "../src/opcua_transportLayer.h"
  13. #include "../src/opcua_binaryEncDec.h"
  14. #include "../src/opcua_encodingLayer.h"
  15. #include "../src/opcua_advancedDatatypes.h"
  16. #include "check.h"
  17. START_TEST(test_getPacketType_validParameter)
  18. {
  19. char buf[] = {'C','L','O'};
  20. AD_RawMessage rawMessage;
  21. rawMessage.message = buf;
  22. rawMessage.length = 3;
  23. ck_assert_int_eq(TL_getPacketType(&rawMessage),packetType_CLO);
  24. }
  25. END_TEST
  26. /*
  27. START_TEST(decodeRequestHeader_test_validParameter)
  28. {
  29. char testMessage = {0x00,0x00,0x72,0xf1,0xdc,0xc9,0x87,0x0b,
  30. 0xcf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
  31. 0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,
  32. 0x00,0x00,0x00,0x00,0x00};
  33. AD_RawMessage rawMessage;
  34. rawMessage.message = &testMessage;
  35. rawMessage.length = 29;
  36. Int32 position = 0;
  37. T_RequestHeader requestHeader;
  38. decodeRequestHeader(rawMessage,&position,&requestHeader);
  39. ck_assert_int_eq(requestHeader.authenticationToken.EncodingByte,0);
  40. ck_assert_int_eq(requestHeader.returnDiagnostics,0);
  41. ck_assert_int_eq(requestHeader.authenticationToken.EncodingByte,0);
  42. }
  43. END_TEST
  44. */
  45. START_TEST(encodeByte_test)
  46. {
  47. AD_RawMessage rawMessage;
  48. Int32 position = 0;
  49. //EncodeByte
  50. char *mem = malloc(sizeof(Byte));
  51. rawMessage.message = mem;
  52. Byte testByte = 0x08;
  53. rawMessage.length = 1;
  54. position = 0;
  55. encodeByte(testByte, &position, rawMessage.message);
  56. ck_assert_int_eq(rawMessage.message[0], 0x08);
  57. ck_assert_int_eq(rawMessage.length, 1);
  58. ck_assert_int_eq(position, 1);
  59. free(mem);
  60. }
  61. END_TEST
  62. START_TEST(decodeUInt16_test)
  63. {
  64. AD_RawMessage rawMessage;
  65. Int32 position = 0;
  66. //EncodeUInt16
  67. char mem[2] = {0x01,0x00};
  68. rawMessage.message = mem;
  69. rawMessage.length = 2;
  70. //encodeUInt16(testUInt16, &position, &rawMessage);
  71. Int32 p = 0;
  72. UInt16 val = decodeUInt16(rawMessage.message,&p);
  73. ck_assert_int_eq(val,1);
  74. //ck_assert_int_eq(p, 2);
  75. //ck_assert_int_eq(rawMessage.message[0], 0xAB);
  76. }
  77. END_TEST
  78. START_TEST(encodeUInt16_test)
  79. {
  80. AD_RawMessage rawMessage;
  81. Int32 position = 0;
  82. //EncodeUInt16
  83. char *mem = malloc(sizeof(UInt16));
  84. rawMessage.message = mem;
  85. UInt16 testUInt16 = 1;
  86. rawMessage.length = 2;
  87. position = 0;
  88. encodeUInt16(testUInt16, &position, rawMessage.message);
  89. //encodeUInt16(testUInt16, &position, &rawMessage);
  90. ck_assert_int_eq(position, 2);
  91. Int32 p = 0;
  92. Int16 val = decodeUInt16(rawMessage.message,&p);
  93. ck_assert_int_eq(val,testUInt16);
  94. //ck_assert_int_eq(rawMessage.message[0], 0xAB);
  95. }
  96. END_TEST
  97. START_TEST(encodeFloat_test)
  98. {
  99. Float value = -6.5;
  100. Int32 pos = 0;
  101. char *buf = (char*)opcua_malloc(sizeof(Float));
  102. encodeFloat(value,&pos,buf);
  103. ck_assert_int_eq(buf[2],0xD0);
  104. ck_assert_int_eq(buf[3],0xC0);
  105. opcua_free(buf);
  106. }
  107. END_TEST
  108. START_TEST(encodeDouble_test)
  109. {
  110. }
  111. END_TEST
  112. START_TEST(encodeUAString_test)
  113. {
  114. Int32 pos = 0;
  115. UA_String string;
  116. Int32 l = 11;
  117. char mem[11] = "ACPLT OPCUA";
  118. char *dstBuf = (char*) malloc(sizeof(Int32)+l);
  119. string.Data = mem;
  120. string.Length = 11;
  121. encodeUAString(&string, &pos, dstBuf);
  122. ck_assert_int_eq(dstBuf[0],11);
  123. ck_assert_int_eq(dstBuf[0+sizeof(Int32)],'A');
  124. }
  125. END_TEST
  126. START_TEST(decodeUAString_test)
  127. {
  128. Int32 pos = 0;
  129. UA_String string;
  130. Int32 l = 11;
  131. char binString[15] = {11,0x00,0x00,0x00,'A','C','P','L','T',' ','U','A'};
  132. char *dstBuf = (char*) malloc(l-sizeof(Int32));
  133. string.Data = dstBuf;
  134. string.Length = 0;
  135. decodeUAString(binString, &pos, &string);
  136. ck_assert_int_eq(string.Length,11);
  137. ck_assert_int_eq(string.Data[3],'L');
  138. }
  139. END_TEST
  140. START_TEST(diagnosticInfo_calcSize_test)
  141. {
  142. Int32 valreal = 0;
  143. Int32 valcalc = 0;
  144. UA_DiagnosticInfo diagnosticInfo;
  145. diagnosticInfo.EncodingMask = 0x01 | 0x02 | 0x04 | 0x08 | 0x10;
  146. diagnosticInfo.SymbolicId = 30;
  147. diagnosticInfo.NamespaceUri = 25;
  148. diagnosticInfo.LocalizedText = 22;
  149. diagnosticInfo.AdditionalInfo.Data = "OPCUA";
  150. diagnosticInfo.AdditionalInfo.Length = 5;
  151. valcalc = diagnosticInfo_calcSize(&diagnosticInfo);
  152. valreal = 26;
  153. ck_assert_int_eq(valcalc,valreal);
  154. }
  155. END_TEST
  156. START_TEST(extensionObject_calcSize_test)
  157. {
  158. Int32 valreal = 0;
  159. Int32 valcalc = 0;
  160. Byte data[3] = {1,2,3};
  161. UA_ExtensionObject extensionObject;
  162. extensionObject.TypeId.EncodingByte = NIEVT_TWO_BYTE;; // Numeric TWO BYTES
  163. extensionObject.TypeId.Identifier.Numeric = 0;
  164. extensionObject.Encoding = 0x00;
  165. extensionObject.Length = 0;
  166. //extensionObject.Body = &data;
  167. valcalc = extensionObject_calcSize(&extensionObject);
  168. valreal = 3;
  169. ck_assert_int_eq(valcalc, valreal);
  170. }
  171. END_TEST
  172. START_TEST(responseHeader_calcSize_test)
  173. {
  174. Int32 valreal = 0;
  175. Int32 valcalc = 0;
  176. T_ResponseHeader responseHeader;
  177. UA_DiagnosticInfo diagnosticInfo;
  178. UA_ExtensionObject extensionObject;
  179. //Should have the size of 16 Bytes
  180. responseHeader.timestamp = 150014;
  181. responseHeader.requestHandle = 514;
  182. responseHeader.serviceResult = 504;
  183. //Should have the size of 26 Bytes
  184. diagnosticInfo.EncodingMask = 0x01 | 0x02 | 0x04 | 0x08 | 0x10;
  185. diagnosticInfo.SymbolicId = 30;
  186. diagnosticInfo.NamespaceUri = 25;
  187. diagnosticInfo.LocalizedText = 22;
  188. diagnosticInfo.AdditionalInfo.Data = "OPCUA";
  189. diagnosticInfo.AdditionalInfo.Length = 5;
  190. responseHeader.serviceDiagnostics = &diagnosticInfo;
  191. //Should have the size of 4 Bytes
  192. responseHeader.noOfStringTable = 0;
  193. //Should have the size of 3 Bytes
  194. extensionObject.TypeId.EncodingByte = NIEVT_TWO_BYTE;
  195. extensionObject.TypeId.Identifier.Numeric = 0;
  196. extensionObject.Encoding = 0x00; //binaryBody = false, xmlBody = false
  197. responseHeader.additionalHeader = extensionObject;
  198. valcalc = responseHeader_calcSize(&responseHeader);
  199. valreal = 49;
  200. ck_assert_int_eq(valcalc,valreal);
  201. }
  202. END_TEST
  203. Suite *testSuite_getPacketType(void)
  204. {
  205. Suite *s = suite_create("getPacketType");
  206. TCase *tc_core = tcase_create("Core");
  207. tcase_add_test(tc_core,test_getPacketType_validParameter);
  208. suite_add_tcase(s,tc_core);
  209. return s;
  210. }
  211. Suite *testSuite_encodeByte(void)
  212. {
  213. Suite *s = suite_create("encodeByte_test");
  214. TCase *tc_core = tcase_create("Core");
  215. tcase_add_test(tc_core, encodeByte_test);
  216. suite_add_tcase(s,tc_core);
  217. return s;
  218. }
  219. Suite *testSuite_decodeUInt16(void)
  220. {
  221. Suite *s = suite_create("decodeUInt16_test");
  222. TCase *tc_core = tcase_create("Core");
  223. tcase_add_test(tc_core, decodeUInt16_test);
  224. suite_add_tcase(s,tc_core);
  225. return s;
  226. }
  227. Suite*testSuite_encodeUInt16(void)
  228. {
  229. Suite *s = suite_create("encodeUInt16_test");
  230. TCase *tc_core = tcase_create("Core");
  231. tcase_add_test(tc_core, encodeUInt16_test);
  232. suite_add_tcase(s,tc_core);
  233. return s;
  234. }
  235. Suite *testSuite_encodeFloat(void)
  236. {
  237. Suite *s = suite_create("encodeFloat_test");
  238. TCase *tc_core = tcase_create("Core");
  239. tcase_add_test(tc_core, encodeFloat_test);
  240. suite_add_tcase(s,tc_core);
  241. return s;
  242. }
  243. Suite *testSuite_encodeDouble(void)
  244. {
  245. Suite *s = suite_create("encodeDouble_test");
  246. TCase *tc_core = tcase_create("Core");
  247. tcase_add_test(tc_core, encodeDouble_test);
  248. suite_add_tcase(s,tc_core);
  249. return s;
  250. }
  251. Suite * testSuite_encodeUAString(void)
  252. {
  253. Suite *s = suite_create("encodeUAString_test");
  254. TCase *tc_core = tcase_create("Core");
  255. tcase_add_test(tc_core, encodeUAString_test);
  256. suite_add_tcase(s,tc_core);
  257. return s;
  258. }
  259. Suite * testSuite_decodeUAString(void)
  260. {
  261. Suite *s = suite_create("decodeUAString_test");
  262. TCase *tc_core = tcase_create("Core");
  263. tcase_add_test(tc_core, decodeUAString_test);
  264. suite_add_tcase(s,tc_core);
  265. return s;
  266. }
  267. /*
  268. Suite* TL_<TESTSUITENAME>(void)
  269. {
  270. Suite *s = suite_create("<TESTSUITENAME>");
  271. TCase *tc_core = tcase_create("Core");
  272. tcase_add_test(tc_core,<TEST_NAME>);
  273. suite_add_tcase(s,tc_core);
  274. return s;
  275. }
  276. */
  277. Suite* testSuite_diagnosticInfo_calcSize()
  278. {
  279. Suite *s = suite_create("diagnosticInfo_calcSize");
  280. TCase *tc_core = tcase_create("Core");
  281. tcase_add_test(tc_core, diagnosticInfo_calcSize_test);
  282. suite_add_tcase(s,tc_core);
  283. return s;
  284. }
  285. Suite* testSuite_extensionObject_calcSize()
  286. {
  287. Suite *s = suite_create("extensionObject_calcSize");
  288. TCase *tc_core = tcase_create("Core");
  289. tcase_add_test(tc_core, extensionObject_calcSize_test);
  290. suite_add_tcase(s,tc_core);
  291. return s;
  292. }
  293. Suite* testSuite_responseHeader_calcSize()
  294. {
  295. Suite *s = suite_create("responseHeader_calcSize");
  296. TCase *tc_core = tcase_create("Core");
  297. tcase_add_test(tc_core, responseHeader_calcSize_test);
  298. suite_add_tcase(s,tc_core);
  299. return s;
  300. }
  301. int main (void)
  302. {
  303. int number_failed = 0;
  304. Suite *s = testSuite_getPacketType();
  305. SRunner *sr = srunner_create(s);
  306. srunner_run_all(sr,CK_NORMAL);
  307. number_failed = srunner_ntests_failed(sr);
  308. srunner_free(sr);
  309. s = testSuite_decodeUInt16();
  310. sr = srunner_create(s);
  311. srunner_run_all(sr,CK_NORMAL);
  312. number_failed += srunner_ntests_failed(sr);
  313. srunner_free(sr);
  314. s = testSuite_encodeUInt16();
  315. sr = srunner_create(s);
  316. srunner_run_all(sr,CK_NORMAL);
  317. number_failed += srunner_ntests_failed(sr);
  318. srunner_free(sr);
  319. s = testSuite_encodeFloat();
  320. sr = srunner_create(s);
  321. srunner_run_all(sr,CK_NORMAL);
  322. number_failed += srunner_ntests_failed(sr);
  323. srunner_free(sr);
  324. s = testSuite_encodeDouble();
  325. sr = srunner_create(s);
  326. srunner_run_all(sr,CK_NORMAL);
  327. number_failed += srunner_ntests_failed(sr);
  328. srunner_free(sr);
  329. s = testSuite_encodeByte();
  330. sr = srunner_create(s);
  331. srunner_run_all(sr,CK_NORMAL);
  332. number_failed += srunner_ntests_failed(sr);
  333. srunner_free(sr);
  334. s = testSuite_encodeUAString();
  335. sr = srunner_create(s);
  336. srunner_run_all(sr,CK_NORMAL);
  337. number_failed += srunner_ntests_failed(sr);
  338. srunner_free(sr);
  339. s = testSuite_decodeUAString();
  340. sr = srunner_create(s);
  341. srunner_run_all(sr,CK_NORMAL);
  342. number_failed += srunner_ntests_failed(sr);
  343. srunner_free(sr);
  344. s = testSuite_diagnosticInfo_calcSize();
  345. sr = srunner_create(s);
  346. srunner_run_all(sr,CK_NORMAL);
  347. number_failed += srunner_ntests_failed(sr);
  348. srunner_free(sr);
  349. s = testSuite_extensionObject_calcSize();
  350. sr = srunner_create(s);
  351. srunner_run_all(sr,CK_NORMAL);
  352. number_failed += srunner_ntests_failed(sr);
  353. srunner_free(sr);
  354. s = testSuite_responseHeader_calcSize();
  355. sr = srunner_create(s);
  356. srunner_run_all(sr,CK_NORMAL);
  357. number_failed += srunner_ntests_failed(sr);
  358. srunner_free(sr);
  359. /* <TESTSUITE_TEMPLATE>
  360. s = <TESTSUITENAME>;
  361. sr = srunner_create(s);
  362. srunner_run_all(sr,CK_NORMAL);
  363. number_failed += srunner_ntests_failed(sr);
  364. srunner_free(sr);
  365. */
  366. return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  367. }