check_stack.c 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  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);
  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);
  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(encodeUAString_test)
  98. {
  99. Int32 pos = 0;
  100. UA_String string;
  101. Int32 l = 11;
  102. char mem[11] = "ACPLT OPCUA";
  103. char *dstBuf = (char*) malloc(sizeof(Int32)+l);
  104. string.Data = mem;
  105. string.Length = 11;
  106. encodeUAString(&string, &pos, dstBuf);
  107. ck_assert_int_eq(dstBuf[0],11);
  108. ck_assert_int_eq(dstBuf[0+sizeof(Int32)],'A');
  109. }
  110. END_TEST
  111. START_TEST(decodeUAString_test)
  112. {
  113. Int32 pos = 0;
  114. UA_String string;
  115. Int32 l = 11;
  116. char binString[15] = {11,0x00,0x00,0x00,'A','C','P','L','T',' ','U','A'};
  117. char *dstBuf = (char*) malloc(l-sizeof(Int32));
  118. string.Data = dstBuf;
  119. string.Length = 0;
  120. decodeUAString(binString, &pos, &string);
  121. ck_assert_int_eq(string.Length,11);
  122. ck_assert_int_eq(string.Data[3],'L');
  123. }
  124. END_TEST
  125. START_TEST(diagnosticInfo_calcSize_test)
  126. {
  127. Int32 valreal = 0;
  128. Int32 valcalc = 0;
  129. UA_DiagnosticInfo diagnosticInfo;
  130. diagnosticInfo.EncodingMask = 0x01 | 0x02 | 0x04 | 0x08 | 0x10;
  131. diagnosticInfo.SymbolicId = 30;
  132. diagnosticInfo.NamespaceUri = 25;
  133. diagnosticInfo.LocalizedText = 22;
  134. diagnosticInfo.AdditionalInfo.Data = "OPCUA";
  135. diagnosticInfo.AdditionalInfo.Length = 5;
  136. valcalc = diagnosticInfo_calcSize(&diagnosticInfo);
  137. valreal = 26;
  138. ck_assert_int_eq(valcalc,valreal);
  139. }
  140. END_TEST
  141. START_TEST(extensionObject_calcSize_test)
  142. {
  143. Int32 valreal = 0;
  144. Int32 valcalc = 0;
  145. Byte data[3] = {1,2,3};
  146. UA_ExtensionObject extensionObject;
  147. extensionObject.TypeId.EncodingByte = NIEVT_TWO_BYTE;; // Numeric TWO BYTES
  148. extensionObject.TypeId.Identifier.Numeric = 0;
  149. extensionObject.Encoding = 0x00;
  150. extensionObject.Length = 0;
  151. //extensionObject.Body = &data;
  152. valcalc = extensionObject_calcSize(&extensionObject);
  153. valreal = 3;
  154. ck_assert_int_eq(valcalc, valreal);
  155. }
  156. END_TEST
  157. START_TEST(responseHeader_calcSize_test)
  158. {
  159. Int32 valreal = 0;
  160. Int32 valcalc = 0;
  161. T_ResponseHeader responseHeader;
  162. UA_DiagnosticInfo diagnosticInfo;
  163. UA_ExtensionObject extensionObject;
  164. //Should have the size of 16 Bytes
  165. responseHeader.timestamp = 150014;
  166. responseHeader.requestHandle = 514;
  167. responseHeader.serviceResult = 504;
  168. //Should have the size of 26 Bytes
  169. diagnosticInfo.EncodingMask = 0x01 | 0x02 | 0x04 | 0x08 | 0x10;
  170. diagnosticInfo.SymbolicId = 30;
  171. diagnosticInfo.NamespaceUri = 25;
  172. diagnosticInfo.LocalizedText = 22;
  173. diagnosticInfo.AdditionalInfo.Data = "OPCUA";
  174. diagnosticInfo.AdditionalInfo.Length = 5;
  175. responseHeader.serviceDiagnostics = &diagnosticInfo;
  176. //Should have the size of 4 Bytes
  177. responseHeader.noOfStringTable = 0;
  178. //Should have the size of 3 Bytes
  179. extensionObject.TypeId.EncodingByte = NIEVT_TWO_BYTE;
  180. extensionObject.TypeId.Identifier.Numeric = 0;
  181. extensionObject.Encoding = 0x00; //binaryBody = false, xmlBody = false
  182. responseHeader.additionalHeader = extensionObject;
  183. valcalc = responseHeader_calcSize(&responseHeader);
  184. valreal = 49;
  185. ck_assert_int_eq(valcalc,valreal);
  186. }
  187. END_TEST
  188. Suite* testSuite_getPacketType(void)
  189. {
  190. Suite *s = suite_create("getPacketType");
  191. TCase *tc_core = tcase_create("Core");
  192. tcase_add_test(tc_core,test_getPacketType_validParameter);
  193. suite_add_tcase(s,tc_core);
  194. return s;
  195. }
  196. Suite* testSuite_encodeByte(void)
  197. {
  198. Suite *s = suite_create("encodeByte_test");
  199. TCase *tc_core = tcase_create("Core");
  200. tcase_add_test(tc_core, encodeByte_test);
  201. suite_add_tcase(s,tc_core);
  202. return s;
  203. }
  204. Suite* testSuite_decodeUInt16(void)
  205. {
  206. Suite *s = suite_create("decodeUInt16_test");
  207. TCase *tc_core = tcase_create("Core");
  208. tcase_add_test(tc_core, decodeUInt16_test);
  209. suite_add_tcase(s,tc_core);
  210. return s;
  211. }
  212. Suite* testSuite_encodeUInt16(void)
  213. {
  214. Suite *s = suite_create("encodeUInt16_test");
  215. TCase *tc_core = tcase_create("Core");
  216. tcase_add_test(tc_core, encodeUInt16_test);
  217. suite_add_tcase(s,tc_core);
  218. return s;
  219. }
  220. Suite* testSuite_encodeUAString(void)
  221. {
  222. Suite *s = suite_create("encodeUAString_test");
  223. TCase *tc_core = tcase_create("Core");
  224. tcase_add_test(tc_core, encodeUAString_test);
  225. suite_add_tcase(s,tc_core);
  226. return s;
  227. }
  228. Suite* testSuite_decodeUAString(void)
  229. {
  230. Suite *s = suite_create("decodeUAString_test");
  231. TCase *tc_core = tcase_create("Core");
  232. tcase_add_test(tc_core, decodeUAString_test);
  233. suite_add_tcase(s,tc_core);
  234. return s;
  235. }
  236. /*
  237. Suite* TL_<TESTSUITENAME>(void)
  238. {
  239. Suite *s = suite_create("<TESTSUITENAME>");
  240. TCase *tc_core = tcase_create("Core");
  241. tcase_add_test(tc_core,<TEST_NAME>);
  242. suite_add_tcase(s,tc_core);
  243. return s;
  244. }
  245. */
  246. Suite* testSuite_diagnosticInfo_calcSize()
  247. {
  248. Suite *s = suite_create("diagnosticInfo_calcSize");
  249. TCase *tc_core = tcase_create("Core");
  250. tcase_add_test(tc_core, diagnosticInfo_calcSize_test);
  251. suite_add_tcase(s,tc_core);
  252. return s;
  253. }
  254. Suite* testSuite_extensionObject_calcSize()
  255. {
  256. Suite *s = suite_create("extensionObject_calcSize");
  257. TCase *tc_core = tcase_create("Core");
  258. tcase_add_test(tc_core, extensionObject_calcSize_test);
  259. suite_add_tcase(s,tc_core);
  260. return s;
  261. }
  262. Suite* testSuite_responseHeader_calcSize()
  263. {
  264. Suite *s = suite_create("responseHeader_calcSize");
  265. TCase *tc_core = tcase_create("Core");
  266. tcase_add_test(tc_core, responseHeader_calcSize_test);
  267. suite_add_tcase(s,tc_core);
  268. return s;
  269. }
  270. int main (void)
  271. {
  272. int number_failed = 0;
  273. Suite *s = testSuite_getPacketType();
  274. SRunner *sr = srunner_create(s);
  275. srunner_run_all(sr,CK_NORMAL);
  276. number_failed = srunner_ntests_failed(sr);
  277. srunner_free(sr);
  278. s = testSuite_decodeUInt16();
  279. sr = srunner_create(s);
  280. srunner_run_all(sr,CK_NORMAL);
  281. number_failed += srunner_ntests_failed(sr);
  282. srunner_free(sr);
  283. s = testSuite_encodeUInt16();
  284. sr = srunner_create(s);
  285. srunner_run_all(sr,CK_NORMAL);
  286. number_failed += srunner_ntests_failed(sr);
  287. srunner_free(sr);
  288. s = testSuite_encodeByte();
  289. sr = srunner_create(s);
  290. srunner_run_all(sr,CK_NORMAL);
  291. number_failed += srunner_ntests_failed(sr);
  292. srunner_free(sr);
  293. s = testSuite_encodeUAString();
  294. sr = srunner_create(s);
  295. srunner_run_all(sr,CK_NORMAL);
  296. number_failed += srunner_ntests_failed(sr);
  297. srunner_free(sr);
  298. s = testSuite_decodeUAString();
  299. sr = srunner_create(s);
  300. srunner_run_all(sr,CK_NORMAL);
  301. number_failed += srunner_ntests_failed(sr);
  302. srunner_free(sr);
  303. s = testSuite_diagnosticInfo_calcSize();
  304. sr = srunner_create(s);
  305. srunner_run_all(sr,CK_NORMAL);
  306. number_failed += srunner_ntests_failed(sr);
  307. srunner_free(sr);
  308. s = testSuite_extensionObject_calcSize();
  309. sr = srunner_create(s);
  310. srunner_run_all(sr,CK_NORMAL);
  311. number_failed += srunner_ntests_failed(sr);
  312. srunner_free(sr);
  313. s = testSuite_responseHeader_calcSize();
  314. sr = srunner_create(s);
  315. srunner_run_all(sr,CK_NORMAL);
  316. number_failed += srunner_ntests_failed(sr);
  317. srunner_free(sr);
  318. /* <TESTSUITE_TEMPLATE>
  319. s = <TESTSUITENAME>;
  320. sr = srunner_create(s);
  321. srunner_run_all(sr,CK_NORMAL);
  322. number_failed += srunner_ntests_failed(sr);
  323. srunner_free(sr);
  324. */
  325. return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  326. }