check_stack.c 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  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(diagnosticInfo_calcSize_test)
  98. {
  99. Int32 valreal = 0;
  100. Int32 valcalc = 0;
  101. UA_DiagnosticInfo diagnosticInfo;
  102. diagnosticInfo.EncodingMask = 0x01 | 0x02 | 0x04 | 0x08 | 0x10;
  103. diagnosticInfo.SymbolicId = 30;
  104. diagnosticInfo.NamespaceUri = 25;
  105. diagnosticInfo.LocalizedText = 22;
  106. diagnosticInfo.AdditionalInfo.Data = "OPCUA";
  107. diagnosticInfo.AdditionalInfo.Length = 5;
  108. valcalc = diagnosticInfo_calcSize(&diagnosticInfo);
  109. valreal = 26;
  110. ck_assert_int_eq(valcalc,valreal);
  111. }
  112. END_TEST
  113. START_TEST(extensionObject_calcSize_test)
  114. {
  115. Int32 valreal = 0;
  116. Int32 valcalc = 0;
  117. Byte data[3] = {1,2,3};
  118. UA_ExtensionObject extensionObject;
  119. extensionObject.TypeId.EncodingByte = NIEVT_TWO_BYTE;; // Numeric TWO BYTES
  120. extensionObject.TypeId.Identifier.Numeric = 0;
  121. extensionObject.Encoding = 0x00;
  122. extensionObject.Length = 0;
  123. //extensionObject.Body = &data;
  124. valcalc = extensionObject_calcSize(&extensionObject);
  125. valreal = 3;
  126. ck_assert_int_eq(valcalc, valreal);
  127. }
  128. END_TEST
  129. START_TEST(responseHeader_calcSize_test)
  130. {
  131. Int32 valreal = 0;
  132. Int32 valcalc = 0;
  133. T_ResponseHeader responseHeader;
  134. UA_DiagnosticInfo diagnosticInfo;
  135. UA_ExtensionObject extensionObject;
  136. //Should have the size of 16 Bytes
  137. responseHeader.timestamp = 150014;
  138. responseHeader.requestHandle = 514;
  139. responseHeader.serviceResult = 504;
  140. //Should have the size of 26 Bytes
  141. diagnosticInfo.EncodingMask = 0x01 | 0x02 | 0x04 | 0x08 | 0x10;
  142. diagnosticInfo.SymbolicId = 30;
  143. diagnosticInfo.NamespaceUri = 25;
  144. diagnosticInfo.LocalizedText = 22;
  145. diagnosticInfo.AdditionalInfo.Data = "OPCUA";
  146. diagnosticInfo.AdditionalInfo.Length = 5;
  147. responseHeader.serviceDiagnostics = &diagnosticInfo;
  148. //Should have the size of 4 Bytes
  149. responseHeader.noOfStringTable = 0;
  150. //Should have the size of 3 Bytes
  151. extensionObject.TypeId.EncodingByte = NIEVT_TWO_BYTE;
  152. extensionObject.TypeId.Identifier.Numeric = 0;
  153. extensionObject.Encoding = 0x00; //binaryBody = false, xmlBody = false
  154. responseHeader.additionalHeader = extensionObject;
  155. valcalc = responseHeader_calcSize(&responseHeader);
  156. valreal = 49;
  157. ck_assert_int_eq(valcalc,valreal);
  158. }
  159. END_TEST
  160. Suite* TL_testSuite_getPacketType(void)
  161. {
  162. Suite *s = suite_create("getPacketType");
  163. TCase *tc_core = tcase_create("Core");
  164. tcase_add_test(tc_core,test_getPacketType_validParameter);
  165. suite_add_tcase(s,tc_core);
  166. return s;
  167. }
  168. Suite* TL_testSuite_decodeUInt16(void)
  169. {
  170. Suite *s = suite_create("decodeUInt16_test");
  171. TCase *tc_core = tcase_create("Core");
  172. tcase_add_test(tc_core, decodeUInt16_test);
  173. suite_add_tcase(s,tc_core);
  174. return s;
  175. }
  176. Suite* TL_testSuite_encodeUInt16(void)
  177. {
  178. Suite *s = suite_create("encodeUInt16_test");
  179. TCase *tc_core = tcase_create("Core");
  180. tcase_add_test(tc_core, encodeUInt16_test);
  181. suite_add_tcase(s,tc_core);
  182. return s;
  183. }
  184. Suite* TL_testSuite_encodeByte(void)
  185. {
  186. Suite *s = suite_create("encodeByte_test");
  187. TCase *tc_core = tcase_create("Core");
  188. tcase_add_test(tc_core, encodeByte_test);
  189. suite_add_tcase(s,tc_core);
  190. return s;
  191. }
  192. /*
  193. Suite* TL_<TESTSUITENAME>(void)
  194. {
  195. Suite *s = suite_create("<TESTSUITENAME>");
  196. TCase *tc_core = tcase_create("Core");
  197. tcase_add_test(tc_core,<TEST_NAME>);
  198. suite_add_tcase(s,tc_core);
  199. return s;
  200. }
  201. */
  202. Suite* TL_testSuite_diagnosticInfo_calcSize()
  203. {
  204. Suite *s = suite_create("diagnosticInfo_calcSize");
  205. TCase *tc_core = tcase_create("Core");
  206. tcase_add_test(tc_core, diagnosticInfo_calcSize_test);
  207. suite_add_tcase(s,tc_core);
  208. return s;
  209. }
  210. Suite* TL_testSuite_extensionObject_calcSize()
  211. {
  212. Suite *s = suite_create("extensionObject_calcSize");
  213. TCase *tc_core = tcase_create("Core");
  214. tcase_add_test(tc_core, extensionObject_calcSize_test);
  215. suite_add_tcase(s,tc_core);
  216. return s;
  217. }
  218. Suite* TL_testSuite_responseHeader_calcSize()
  219. {
  220. Suite *s = suite_create("responseHeader_calcSize");
  221. TCase *tc_core = tcase_create("Core");
  222. tcase_add_test(tc_core, responseHeader_calcSize_test);
  223. suite_add_tcase(s,tc_core);
  224. return s;
  225. }
  226. int main (void)
  227. {
  228. int number_failed = 0;
  229. Suite *s = TL_testSuite_getPacketType();
  230. SRunner *sr = srunner_create(s);
  231. srunner_run_all(sr,CK_NORMAL);
  232. number_failed = srunner_ntests_failed(sr);
  233. srunner_free(sr);
  234. s = TL_testSuite_decodeUInt16();
  235. sr = srunner_create(s);
  236. srunner_run_all(sr,CK_NORMAL);
  237. number_failed += srunner_ntests_failed(sr);
  238. srunner_free(sr);
  239. s = TL_testSuite_encodeUInt16();
  240. sr = srunner_create(s);
  241. srunner_run_all(sr,CK_NORMAL);
  242. number_failed += srunner_ntests_failed(sr);
  243. srunner_free(sr);
  244. s = TL_testSuite_encodeByte();
  245. sr = srunner_create(s);
  246. srunner_run_all(sr,CK_NORMAL);
  247. number_failed += srunner_ntests_failed(sr);
  248. srunner_free(sr);
  249. s = TL_testSuite_diagnosticInfo_calcSize();
  250. sr = srunner_create(s);
  251. srunner_run_all(sr,CK_NORMAL);
  252. number_failed += srunner_ntests_failed(sr);
  253. srunner_free(sr);
  254. s = TL_testSuite_extensionObject_calcSize();
  255. sr = srunner_create(s);
  256. srunner_run_all(sr,CK_NORMAL);
  257. number_failed += srunner_ntests_failed(sr);
  258. srunner_free(sr);
  259. s = TL_testSuite_responseHeader_calcSize();
  260. sr = srunner_create(s);
  261. srunner_run_all(sr,CK_NORMAL);
  262. number_failed += srunner_ntests_failed(sr);
  263. srunner_free(sr);
  264. /* <TESTSUITE_TEMPLATE>
  265. s = <TESTSUITENAME>;
  266. sr = srunner_create(s);
  267. srunner_run_all(sr,CK_NORMAL);
  268. number_failed += srunner_ntests_failed(sr);
  269. srunner_free(sr);
  270. */
  271. return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  272. }