check_stack.c 25 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042
  1. /*
  2. ============================================================================
  3. Name : check_stack.c
  4. Author :
  5. Version :
  6. Copyright : Your copyright notice
  7. Description :
  8. ============================================================================
  9. */
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include "UA_config.h"
  13. #include "opcua_transportLayer.h"
  14. #include "opcua_binaryEncDec.h"
  15. #include "opcua_encodingLayer.h"
  16. #include "opcua_advancedDatatypes.h"
  17. //#include "check_stdint.h"
  18. #include "check.h"
  19. START_TEST(test_getPacketType_validParameter)
  20. {
  21. char buf[] = {'C','L','O'};
  22. Int32 pos = 0;
  23. UA_ByteString msg;
  24. msg.Data = buf;
  25. msg.Length = 3;
  26. ck_assert_int_eq(TL_getPacketType(&msg, &pos),packetType_CLO);
  27. }
  28. END_TEST
  29. START_TEST(encodeByte_test)
  30. {
  31. AD_RawMessage rawMessage;
  32. Int32 position = 0;
  33. //EncodeByte
  34. char *mem = malloc(sizeof(Byte));
  35. rawMessage.message = mem;
  36. Byte testByte = 0x08;
  37. rawMessage.length = 1;
  38. position = 0;
  39. encodeByte(testByte, &position, rawMessage.message);
  40. ck_assert_int_eq(rawMessage.message[0], 0x08);
  41. ck_assert_int_eq(rawMessage.length, 1);
  42. ck_assert_int_eq(position, 1);
  43. free(mem);
  44. }
  45. END_TEST
  46. /*
  47. START_TEST(decodeRequestHeader_test_validParameter)
  48. {
  49. char testMessage = {0x00,0x00,0x72,0xf1,0xdc,0xc9,0x87,0x0b,
  50. 0xcf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
  51. 0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,
  52. 0x00,0x00,0x00,0x00,0x00};
  53. AD_RawMessage rawMessage;
  54. rawMessage.message = &testMessage;
  55. rawMessage.length = 29;
  56. Int32 position = 0;
  57. T_RequestHeader requestHeader;
  58. decodeRequestHeader(rawMessage,&position,&requestHeader);
  59. ck_assert_int_eq(requestHeader.authenticationToken.EncodingByte,0);
  60. ck_assert_int_eq(requestHeader.returnDiagnostics,0);
  61. ck_assert_int_eq(requestHeader.authenticationToken.EncodingByte,0);
  62. }
  63. END_TEST
  64. */
  65. START_TEST(decodeInt16_test_positives)
  66. {
  67. Int32 p = 0;
  68. Int16 val;
  69. AD_RawMessage rawMessage;
  70. char mem[] = {
  71. 0x00,0x00, // 0
  72. 0x01,0x00, // 1
  73. 0xFF,0x00, // 255
  74. 0x00,0x01, // 256
  75. };
  76. rawMessage.message = mem;
  77. rawMessage.length = sizeof(mem);
  78. ck_assert_int_eq(rawMessage.length,8);
  79. decoder_decodeBuiltInDatatype(rawMessage.message,INT16,&p,&val);
  80. ck_assert_int_eq(val,0);
  81. decoder_decodeBuiltInDatatype(rawMessage.message,INT16,&p,&val);
  82. ck_assert_int_eq(val,1);
  83. decoder_decodeBuiltInDatatype(rawMessage.message,INT16,&p,&val);
  84. ck_assert_int_eq(val,255);
  85. decoder_decodeBuiltInDatatype(rawMessage.message,INT16,&p,&val);
  86. ck_assert_int_eq(val,256);
  87. }
  88. END_TEST
  89. START_TEST(decodeInt16_test_negatives)
  90. {
  91. Int32 p = 0;
  92. Int16 val;
  93. AD_RawMessage rawMessage;
  94. char mem[] = {
  95. 0xFF,0xFF, // -1
  96. 0x00,0x80, // -32768
  97. };
  98. rawMessage.message = mem;
  99. rawMessage.length = sizeof(mem);
  100. ck_assert_int_eq(rawMessage.length,4);
  101. decoder_decodeBuiltInDatatype(rawMessage.message,INT16,&p,&val);
  102. ck_assert_int_eq(val,-1);
  103. decoder_decodeBuiltInDatatype(rawMessage.message,INT16,&p,&val);
  104. ck_assert_int_eq(val,-32768);
  105. }
  106. END_TEST
  107. START_TEST(encodeInt16_test)
  108. {
  109. AD_RawMessage rawMessage;
  110. Int32 position = 0;
  111. //EncodeUInt16
  112. char *mem = malloc(sizeof(UInt16));
  113. rawMessage.message = mem;
  114. UInt16 testUInt16 = 1;
  115. rawMessage.length = 2;
  116. position = 0;
  117. encodeUInt16(testUInt16, &position, rawMessage.message);
  118. //encodeUInt16(testUInt16, &position, &rawMessage);
  119. ck_assert_int_eq(position, 2);
  120. Int32 p = 0;
  121. Int16 val;
  122. decoder_decodeBuiltInDatatype(rawMessage.message, INT16, &p, &val);
  123. ck_assert_int_eq(val,testUInt16);
  124. //ck_assert_int_eq(rawMessage.message[0], 0xAB);
  125. }
  126. END_TEST
  127. START_TEST(decodeUInt16_test)
  128. {
  129. AD_RawMessage rawMessage;
  130. Int32 position = 0;
  131. //EncodeUInt16
  132. char mem[2] = {0x01,0x00};
  133. rawMessage.message = mem;
  134. rawMessage.length = 2;
  135. //encodeUInt16(testUInt16, &position, &rawMessage);
  136. Int32 p = 0;
  137. UInt16 val;
  138. decoder_decodeBuiltInDatatype(rawMessage.message,UINT16,&p,&val);
  139. ck_assert_int_eq(val,1);
  140. //ck_assert_int_eq(p, 2);
  141. //ck_assert_int_eq(rawMessage.message[0], 0xAB);
  142. }
  143. END_TEST
  144. START_TEST(encodeUInt16_test)
  145. {
  146. AD_RawMessage rawMessage;
  147. Int32 position = 0;
  148. //EncodeUInt16
  149. char *mem = malloc(sizeof(UInt16));
  150. rawMessage.message = mem;
  151. UInt16 testUInt16 = 1;
  152. rawMessage.length = 2;
  153. position = 0;
  154. encodeUInt16(testUInt16, &position, rawMessage.message);
  155. //encodeUInt16(testUInt16, &position, &rawMessage);
  156. ck_assert_int_eq(position, 2);
  157. Int32 p = 0;
  158. UInt16 val;
  159. decoder_decodeBuiltInDatatype(rawMessage.message, UINT16, &p, &val);
  160. ck_assert_int_eq(val,testUInt16);
  161. //ck_assert_int_eq(rawMessage.message[0], 0xAB);
  162. }
  163. END_TEST
  164. START_TEST(decodeUInt32_test)
  165. {
  166. AD_RawMessage rawMessage;
  167. Int32 position = 0;
  168. //EncodeUInt16
  169. char mem[4] = {0xFF,0x00,0x00,0x00};
  170. rawMessage.message = mem;
  171. rawMessage.length = 4;
  172. Int32 p = 0;
  173. UInt32 val;
  174. decoder_decodeBuiltInDatatype(rawMessage.message, UINT32, &p, &val);
  175. ck_assert_uint_eq(val,255);
  176. }
  177. END_TEST
  178. START_TEST(encodeUInt32_test)
  179. {
  180. AD_RawMessage rawMessage;
  181. Int32 position = 0;
  182. UInt32 value = 0x0101FF00;
  183. //EncodeUInt16
  184. rawMessage.message = (char*)opcua_malloc(2 * sizeof(UInt32));
  185. rawMessage.length = 8;
  186. Int32 p = 4;
  187. //encodeUInt32(value, &p,rawMessage.message);
  188. encoder_encodeBuiltInDatatype(&value,UINT32,&p,rawMessage.message);
  189. ck_assert_uint_eq((Byte)rawMessage.message[4],0x00);
  190. ck_assert_uint_eq((Byte)rawMessage.message[5],0xFF);
  191. ck_assert_uint_eq((Byte)rawMessage.message[6],0x01);
  192. ck_assert_uint_eq((Byte)rawMessage.message[7],0x01);
  193. ck_assert_int_eq(p,8);
  194. }
  195. END_TEST
  196. START_TEST(decodeInt32_test)
  197. {
  198. AD_RawMessage rawMessage;
  199. Int32 position = 0;
  200. //EncodeUInt16
  201. char mem[4] = {0x00,0xCA,0x9A,0x3B};
  202. rawMessage.message = mem;
  203. rawMessage.length = 4;
  204. Int32 p = 0;
  205. Int32 val;
  206. decoder_decodeBuiltInDatatype(rawMessage.message, INT32, &p, &val);
  207. ck_assert_int_eq(val,1000000000);
  208. }
  209. END_TEST
  210. START_TEST(encodeInt32_test)
  211. {
  212. }
  213. END_TEST
  214. START_TEST(decodeUInt64_test)
  215. {
  216. AD_RawMessage rawMessage;
  217. Int32 position = 0;
  218. UInt64 expectedVal = 0xFF;
  219. expectedVal = expectedVal << 56;
  220. char mem[8] = {00,00,00,00,0x00,0x00,0x00,0xFF};
  221. rawMessage.message = mem;
  222. rawMessage.length = 8;
  223. Int32 p = 0;
  224. UInt64 val;
  225. decoder_decodeBuiltInDatatype(rawMessage.message, UINT64, &p, &val);
  226. ck_assert_uint_eq(val, expectedVal);
  227. }
  228. END_TEST
  229. START_TEST(encodeUInt64_test)
  230. {
  231. AD_RawMessage rawMessage;
  232. Int32 position = 0;
  233. UInt64 value = 0x0101FF00FF00FF00;
  234. //EncodeUInt16
  235. rawMessage.message = (char*)opcua_malloc(sizeof(UInt32));
  236. rawMessage.length = 8;
  237. Int32 p = 0;
  238. encodeUInt64(value, &p,rawMessage.message);
  239. ck_assert_uint_eq((Byte)rawMessage.message[0],0x00);
  240. ck_assert_uint_eq((Byte)rawMessage.message[1],0xFF);
  241. ck_assert_uint_eq((Byte)rawMessage.message[2],0x00);
  242. ck_assert_uint_eq((Byte)rawMessage.message[3],0xFF);
  243. ck_assert_uint_eq((Byte)rawMessage.message[4],0x00);
  244. ck_assert_uint_eq((Byte)rawMessage.message[5],0xFF);
  245. ck_assert_uint_eq((Byte)rawMessage.message[6],0x01);
  246. ck_assert_uint_eq((Byte)rawMessage.message[7],0x01);
  247. }
  248. END_TEST
  249. START_TEST(decodeInt64_test)
  250. {
  251. AD_RawMessage rawMessage;
  252. Int32 position = 0;
  253. Int64 expectedVal = 0xFF;
  254. expectedVal = expectedVal << 56;
  255. char mem[8] = {00,00,00,00,0x00,0x00,0x00,0xFF};
  256. rawMessage.message = mem;
  257. rawMessage.length = 8;
  258. Int32 p = 0;
  259. Int64 val;
  260. decoder_decodeBuiltInDatatype(rawMessage.message, INT64, &p, &val);
  261. ck_assert_uint_eq(val, expectedVal);
  262. }
  263. END_TEST
  264. START_TEST(encodeInt64_test)
  265. {
  266. AD_RawMessage rawMessage;
  267. Int32 position = 0;
  268. UInt64 value = 0x0101FF00FF00FF00;
  269. //EncodeUInt16
  270. rawMessage.message = (char*)opcua_malloc(sizeof(UInt32));
  271. rawMessage.length = 8;
  272. Int32 p = 0;
  273. encodeUInt64(value, &p,rawMessage.message);
  274. ck_assert_uint_eq((Byte)rawMessage.message[0],0x00);
  275. ck_assert_uint_eq((Byte)rawMessage.message[1],0xFF);
  276. ck_assert_uint_eq((Byte)rawMessage.message[2],0x00);
  277. ck_assert_uint_eq((Byte)rawMessage.message[3],0xFF);
  278. ck_assert_uint_eq((Byte)rawMessage.message[4],0x00);
  279. ck_assert_uint_eq((Byte)rawMessage.message[5],0xFF);
  280. ck_assert_uint_eq((Byte)rawMessage.message[6],0x01);
  281. ck_assert_uint_eq((Byte)rawMessage.message[7],0x01);
  282. }
  283. END_TEST
  284. START_TEST(decodeFloat_test)
  285. {
  286. Float expectedValue = -6.5;
  287. Int32 pos = 0;
  288. char buf[4] = {0x00,0x00,0xD0,0xC0};
  289. Float calcVal;
  290. decoder_decodeBuiltInDatatype(buf, FLOAT, &pos, &calcVal);
  291. //val should be -6.5
  292. Int32 val = (calcVal > -6.501 && calcVal < -6.499);
  293. ck_assert_int_gt(val,0);
  294. opcua_free(buf);
  295. }
  296. END_TEST
  297. START_TEST(encodeFloat_test)
  298. {
  299. Float value = -6.5;
  300. Int32 pos = 0;
  301. char *buf = (char*)opcua_malloc(sizeof(Float));
  302. encodeFloat(value,&pos,buf);
  303. ck_assert_uint_eq((Byte)buf[2],0xD0);
  304. ck_assert_uint_eq((Byte)buf[3],0xC0);
  305. opcua_free(buf);
  306. }
  307. END_TEST
  308. START_TEST(decodeDouble_test)
  309. {
  310. }
  311. END_TEST
  312. START_TEST(encodeDouble_test)
  313. {
  314. Float value = -6.5;
  315. Int32 pos = 0;
  316. char *buf = (char*)opcua_malloc(sizeof(Float));
  317. encodeDouble(value,&pos,buf);
  318. ck_assert_uint_eq((Byte)buf[6],0xD0);
  319. ck_assert_uint_eq((Byte)buf[7],0xC0);
  320. opcua_free(buf);
  321. }
  322. END_TEST
  323. START_TEST(encodeUAString_test)
  324. {
  325. Int32 pos = 0;
  326. UA_String string;
  327. Int32 l = 11;
  328. char mem[11] = "ACPLT OPCUA";
  329. char *dstBuf = (char*) malloc(sizeof(Int32)+l);
  330. string.Data = mem;
  331. string.Length = 11;
  332. encodeUAString(&string, &pos, dstBuf);
  333. ck_assert_int_eq(dstBuf[0],11);
  334. ck_assert_int_eq(dstBuf[0+sizeof(Int32)],'A');
  335. }
  336. END_TEST
  337. START_TEST(decodeUAString_test)
  338. {
  339. Int32 pos = 0;
  340. UA_String string;
  341. Int32 l = 11;
  342. char binString[15] = {11,0x00,0x00,0x00,'A','C','P','L','T',' ','U','A'};
  343. char *dstBuf = (char*) malloc(l-sizeof(Int32));
  344. string.Data = dstBuf;
  345. string.Length = 0;
  346. decodeUAString(binString, &pos, &string);
  347. ck_assert_int_eq(string.Length,11);
  348. ck_assert_int_eq(string.Data[3],'L');
  349. }
  350. END_TEST
  351. START_TEST(diagnosticInfo_calcSize_test)
  352. {
  353. Int32 valreal = 0;
  354. Int32 valcalc = 0;
  355. UA_DiagnosticInfo diagnosticInfo;
  356. diagnosticInfo.EncodingMask = 0x01 | 0x02 | 0x04 | 0x08 | 0x10;
  357. diagnosticInfo.SymbolicId = 30;
  358. diagnosticInfo.NamespaceUri = 25;
  359. diagnosticInfo.LocalizedText = 22;
  360. diagnosticInfo.AdditionalInfo.Data = "OPCUA";
  361. diagnosticInfo.AdditionalInfo.Length = 5;
  362. ck_assert_int_eq(diagnosticInfo_calcSize(&diagnosticInfo),26);
  363. ck_assert_int_eq(diagnosticInfo_calcSize(&the_empty_UA_DiagnosticInfo),1);
  364. }
  365. END_TEST
  366. START_TEST(extensionObject_calcSize_test)
  367. {
  368. Int32 valreal = 0;
  369. Int32 valcalc = 0;
  370. Byte data[3] = {1,2,3};
  371. UA_ExtensionObject extensionObject;
  372. // empty ExtensionObject
  373. ck_assert_int_eq(extensionObject_calcSize(&the_empty_UA_ExtensionObject), 1 + 1 + 1);
  374. // empty ExtensionObject, handcoded
  375. extensionObject.TypeId.EncodingByte = NIEVT_TWO_BYTE;
  376. extensionObject.TypeId.Identifier.Numeric = 0;
  377. extensionObject.Encoding = NO_BODY_IS_ENCODED;
  378. ck_assert_int_eq(extensionObject_calcSize(&extensionObject), 1 + 1 + 1);
  379. // ExtensionObject with ByteString-Body
  380. extensionObject.Encoding = BODY_IS_BYTE_STRING;
  381. extensionObject.Body.Data = data;
  382. extensionObject.Body.Length = 3;
  383. ck_assert_int_eq(extensionObject_calcSize(&extensionObject), 3 + 4 + 3);
  384. }
  385. END_TEST
  386. START_TEST(responseHeader_calcSize_test)
  387. {
  388. UA_AD_ResponseHeader responseHeader;
  389. UA_DiagnosticInfo diagnosticInfo;
  390. UA_ExtensionObject extensionObject;
  391. //Should have the size of 26 Bytes
  392. diagnosticInfo.EncodingMask = DIEMT_SYMBOLIC_ID | DIEMT_NAMESPACE | DIEMT_LOCALIZED_TEXT | DIEMT_LOCALE | DIEMT_ADDITIONAL_INFO; // Byte: 1
  393. // Indices into to Stringtable of the responseHeader (62541-6 §5.5.12 )
  394. diagnosticInfo.SymbolicId = -1; // Int32: 4
  395. diagnosticInfo.NamespaceUri = -1; // Int32: 4
  396. diagnosticInfo.LocalizedText = -1; // Int32: 4
  397. diagnosticInfo.Locale = -1; // Int32: 4
  398. // Additional Info
  399. diagnosticInfo.AdditionalInfo.Length = 5; // Int32: 4
  400. diagnosticInfo.AdditionalInfo.Data = "OPCUA"; // Byte[]: 5
  401. responseHeader.serviceDiagnostics = &diagnosticInfo;
  402. ck_assert_int_eq(diagnosticInfo_calcSize(&diagnosticInfo),1+(4+4+4+4)+(4+5));
  403. responseHeader.noOfStringTable = -1; // Int32: 4
  404. responseHeader.stringTable = NULL;
  405. responseHeader.additionalHeader = &the_empty_UA_ExtensionObject; // 3
  406. ck_assert_int_eq(responseHeader_calcSize(&responseHeader),16+26+4+3);
  407. responseHeader.serviceDiagnostics = &the_empty_UA_DiagnosticInfo;
  408. ck_assert_int_eq(responseHeader_calcSize(&responseHeader),16+1+4+3);
  409. }
  410. END_TEST
  411. //ToDo: Function needs to be filled
  412. START_TEST(expandedNodeId_calcSize_test)
  413. {
  414. Int32 valreal = 300;
  415. Int32 valcalc = 0;
  416. ck_assert_int_eq(valcalc,valreal);
  417. }
  418. END_TEST
  419. START_TEST(encodeDataValue_test)
  420. {
  421. UA_DataValue dataValue;
  422. Int32 pos = 0;
  423. char *buf = (char*)opcua_malloc(15);
  424. UA_DateTime dateTime;
  425. dateTime = 80;
  426. dataValue.ServerTimestamp = dateTime;
  427. //--without Variant
  428. dataValue.EncodingMask = 0x08; //Only the SourvePicoseconds
  429. encodeDataValue(&dataValue, &pos, buf);
  430. ck_assert_int_eq(pos, 9);// represents the length
  431. ck_assert_int_eq(buf[0], 0x08);
  432. ck_assert_int_eq(buf[1], 80);
  433. ck_assert_int_eq(buf[2], 0);
  434. ck_assert_int_eq(buf[3], 0);
  435. ck_assert_int_eq(buf[4], 0);
  436. ck_assert_int_eq(buf[5], 0);
  437. ck_assert_int_eq(buf[6], 0);
  438. ck_assert_int_eq(buf[7], 0);
  439. ck_assert_int_eq(buf[8], 0);
  440. //TestCase for a DataValue with a Variant!
  441. //ToDo: Need to be checked after the function for encoding variants has been implemented
  442. pos = 0;
  443. dataValue.EncodingMask = 0x01 || 0x08; //Variant & SourvePicoseconds
  444. UA_Variant variant;
  445. variant.ArrayLength = 0;
  446. variant.EncodingMask = VTEMT_INT32;
  447. UA_VariantUnion variantUnion;
  448. //ToDo: needs to be adjusted: variantUnion.Int32 = 45;
  449. fail(); ////ToDo: needs to be adjusted: Just to see that see that this needs to be adjusted
  450. variant.Value = &variantUnion;
  451. dataValue.Value = variant;
  452. encodeDataValue(&dataValue, &pos, buf);
  453. ck_assert_int_eq(pos, 14);// represents the length
  454. ck_assert_int_eq(buf[0], 0x08);
  455. ck_assert_int_eq(buf[1], 0x06);
  456. ck_assert_int_eq(buf[2], 45);
  457. ck_assert_int_eq(buf[3], 0);
  458. ck_assert_int_eq(buf[4], 0);
  459. ck_assert_int_eq(buf[5], 0);
  460. ck_assert_int_eq(buf[6], 80);
  461. ck_assert_int_eq(buf[7], 0);
  462. }
  463. END_TEST
  464. START_TEST(DataValue_calcSize_test)
  465. {
  466. UA_DataValue dataValue;
  467. dataValue.EncodingMask = 0x02 + 0x04 + 0x10;
  468. dataValue.Status = 12;
  469. UA_DateTime dateTime;
  470. dateTime = 80;
  471. dataValue.SourceTimestamp = dateTime;
  472. UA_DateTime sourceTime;
  473. dateTime = 214;
  474. dataValue.SourcePicoseconds = sourceTime;
  475. int size = 0;
  476. size = DataValue_calcSize(&dataValue);
  477. ck_assert_int_eq(size, 21);
  478. }
  479. END_TEST
  480. START_TEST(encode_builtInDatatypeArray_test_String)
  481. {
  482. Int32 noElements = 2;
  483. UA_ByteString s1 = { 6, "OPC UA" };
  484. UA_ByteString s2 = { -1, NULL };
  485. UA_ByteString* array[] = { &s1, &s2 };
  486. Int32 pos = 0, i;
  487. char buf[256];
  488. char result[] = {
  489. 0x02, 0x00, 0x00, 0x00, // noElements
  490. 0x06, 0x00, 0x00, 0x00, // s1.Length
  491. 'O', 'P', 'C', ' ', 'U', 'A', // s1.Data
  492. 0xFF, 0xFF, 0xFF, 0xFF // s2.Length
  493. };
  494. encode_builtInDatatypeArray(array, noElements, BYTE_STRING, &pos, buf);
  495. // check size
  496. ck_assert_int_eq(pos, 4 + 4 + 6 + 4);
  497. // check result
  498. for (i=0; i< sizeof(result); i++) {
  499. ck_assert_int_eq(buf[i],result[i]);
  500. }
  501. }
  502. END_TEST
  503. Suite *testSuite_getPacketType(void)
  504. {
  505. Suite *s = suite_create("getPacketType");
  506. TCase *tc_core = tcase_create("Core");
  507. tcase_add_test(tc_core,test_getPacketType_validParameter);
  508. suite_add_tcase(s,tc_core);
  509. return s;
  510. }
  511. Suite *testSuite_encodeByte(void)
  512. {
  513. Suite *s = suite_create("encodeByte_test");
  514. TCase *tc_core = tcase_create("Core");
  515. tcase_add_test(tc_core, encodeByte_test);
  516. suite_add_tcase(s,tc_core);
  517. return s;
  518. }
  519. Suite *testSuite_decodeInt16(void)
  520. {
  521. Suite *s = suite_create("decodeInt16_test");
  522. TCase *tc_core = tcase_create("Core");
  523. tcase_add_test(tc_core, decodeInt16_test_positives);
  524. tcase_add_test(tc_core, decodeInt16_test_negatives);
  525. suite_add_tcase(s,tc_core);
  526. return s;
  527. }
  528. Suite*testSuite_encodeInt16(void)
  529. {
  530. Suite *s = suite_create("encodeInt16_test");
  531. TCase *tc_core = tcase_create("Core");
  532. tcase_add_test(tc_core, encodeInt16_test);
  533. suite_add_tcase(s,tc_core);
  534. return s;
  535. }
  536. Suite *testSuite_decodeUInt16(void)
  537. {
  538. Suite *s = suite_create("decodeUInt16_test");
  539. TCase *tc_core = tcase_create("Core");
  540. tcase_add_test(tc_core, decodeUInt16_test);
  541. suite_add_tcase(s,tc_core);
  542. return s;
  543. }
  544. Suite*testSuite_encodeUInt16(void)
  545. {
  546. Suite *s = suite_create("encodeUInt16_test");
  547. TCase *tc_core = tcase_create("Core");
  548. tcase_add_test(tc_core, encodeUInt16_test);
  549. suite_add_tcase(s,tc_core);
  550. return s;
  551. }
  552. Suite*testSuite_decodeUInt32(void)
  553. {
  554. Suite *s = suite_create("decodeUInt32_test");
  555. TCase *tc_core = tcase_create("Core");
  556. tcase_add_test(tc_core, decodeUInt32_test);
  557. suite_add_tcase(s,tc_core);
  558. return s;
  559. }
  560. Suite*testSuite_encodeUInt32(void)
  561. {
  562. Suite *s = suite_create("encodeUInt32_test");
  563. TCase *tc_core = tcase_create("Core");
  564. tcase_add_test(tc_core, encodeUInt32_test);
  565. suite_add_tcase(s,tc_core);
  566. return s;
  567. }
  568. Suite*testSuite_decodeInt32(void)
  569. {
  570. Suite *s = suite_create("decodeInt32_test");
  571. TCase *tc_core = tcase_create("Core");
  572. tcase_add_test(tc_core, decodeInt32_test);
  573. suite_add_tcase(s,tc_core);
  574. return s;
  575. }
  576. Suite*testSuite_encodeInt32(void)
  577. {
  578. Suite *s = suite_create("encodeInt32_test");
  579. TCase *tc_core = tcase_create("Core");
  580. tcase_add_test(tc_core, encodeInt32_test);
  581. suite_add_tcase(s,tc_core);
  582. return s;
  583. }
  584. Suite*testSuite_decodeUInt64(void)
  585. {
  586. Suite *s = suite_create("decodeUInt64_test");
  587. TCase *tc_core = tcase_create("Core");
  588. tcase_add_test(tc_core, decodeUInt64_test);
  589. suite_add_tcase(s,tc_core);
  590. return s;
  591. }
  592. Suite*testSuite_encodeUInt64(void)
  593. {
  594. Suite *s = suite_create("encodeUInt64_test");
  595. TCase *tc_core = tcase_create("Core");
  596. tcase_add_test(tc_core, encodeUInt64_test);
  597. suite_add_tcase(s,tc_core);
  598. return s;
  599. }
  600. Suite*testSuite_decodeInt64(void)
  601. {
  602. Suite *s = suite_create("decodeInt64_test");
  603. TCase *tc_core = tcase_create("Core");
  604. tcase_add_test(tc_core, decodeInt64_test);
  605. suite_add_tcase(s,tc_core);
  606. return s;
  607. }
  608. Suite*testSuite_encodeInt64(void)
  609. {
  610. Suite *s = suite_create("encodeInt64_test");
  611. TCase *tc_core = tcase_create("Core");
  612. tcase_add_test(tc_core, encodeInt64_test);
  613. suite_add_tcase(s,tc_core);
  614. return s;
  615. }
  616. Suite *testSuite_encodeFloat(void)
  617. {
  618. Suite *s = suite_create("encodeFloat_test");
  619. TCase *tc_core = tcase_create("Core");
  620. tcase_add_test(tc_core, encodeFloat_test);
  621. suite_add_tcase(s,tc_core);
  622. return s;
  623. }
  624. Suite *testSuite_decodeFloat(void)
  625. {
  626. Suite *s = suite_create("decodeFloat_test");
  627. TCase *tc_core = tcase_create("Core");
  628. tcase_add_test(tc_core, decodeFloat_test);
  629. suite_add_tcase(s,tc_core);
  630. return s;
  631. }
  632. Suite *testSuite_encodeDouble(void)
  633. {
  634. Suite *s = suite_create("encodeDouble_test");
  635. TCase *tc_core = tcase_create("Core");
  636. tcase_add_test(tc_core, encodeDouble_test);
  637. suite_add_tcase(s,tc_core);
  638. return s;
  639. }
  640. Suite *testSuite_decodeDouble(void)
  641. {
  642. Suite *s = suite_create("decodeDouble_test");
  643. TCase *tc_core = tcase_create("Core");
  644. tcase_add_test(tc_core, decodeDouble_test);
  645. suite_add_tcase(s,tc_core);
  646. return s;
  647. }
  648. Suite * testSuite_encodeUAString(void)
  649. {
  650. Suite *s = suite_create("encodeUAString_test");
  651. TCase *tc_core = tcase_create("Core");
  652. tcase_add_test(tc_core, encodeUAString_test);
  653. suite_add_tcase(s,tc_core);
  654. return s;
  655. }
  656. Suite * testSuite_decodeUAString(void)
  657. {
  658. Suite *s = suite_create("decodeUAString_test");
  659. TCase *tc_core = tcase_create("Core");
  660. tcase_add_test(tc_core, decodeUAString_test);
  661. suite_add_tcase(s,tc_core);
  662. return s;
  663. }
  664. Suite* testSuite_encodeDataValue()
  665. {
  666. Suite *s = suite_create("encodeDataValue");
  667. TCase *tc_core = tcase_create("Core");
  668. tcase_add_test(tc_core, encodeDataValue_test);
  669. suite_add_tcase(s,tc_core);
  670. return s;
  671. }
  672. Suite* testSuite_encode_builtInDatatypeArray()
  673. {
  674. Suite *s = suite_create("encode_builtInDatatypeArray");
  675. TCase *tc_core = tcase_create("Core");
  676. tcase_add_test(tc_core, encode_builtInDatatypeArray_test_String);
  677. suite_add_tcase(s,tc_core);
  678. return s;
  679. }
  680. Suite* testSuite_expandedNodeId_calcSize(void)
  681. {
  682. Suite *s = suite_create("expandedNodeId_calcSize");
  683. TCase *tc_core = tcase_create("Core");
  684. tcase_add_test(tc_core,expandedNodeId_calcSize_test);
  685. suite_add_tcase(s,tc_core);
  686. return s;
  687. }
  688. /*
  689. Suite* TL_<TESTSUITENAME>(void)
  690. {
  691. Suite *s = suite_create("<TESTSUITENAME>");
  692. TCase *tc_core = tcase_create("Core");
  693. tcase_add_test(tc_core,<TEST_NAME>);
  694. suite_add_tcase(s,tc_core);
  695. return s;
  696. }
  697. */
  698. Suite* testSuite_diagnosticInfo_calcSize()
  699. {
  700. Suite *s = suite_create("diagnosticInfo_calcSize");
  701. TCase *tc_core = tcase_create("Core");
  702. tcase_add_test(tc_core, diagnosticInfo_calcSize_test);
  703. suite_add_tcase(s,tc_core);
  704. return s;
  705. }
  706. Suite* testSuite_extensionObject_calcSize()
  707. {
  708. Suite *s = suite_create("extensionObject_calcSize");
  709. TCase *tc_core = tcase_create("Core");
  710. tcase_add_test(tc_core, extensionObject_calcSize_test);
  711. suite_add_tcase(s,tc_core);
  712. return s;
  713. }
  714. Suite* testSuite_responseHeader_calcSize()
  715. {
  716. Suite *s = suite_create("responseHeader_calcSize");
  717. TCase *tc_core = tcase_create("Core");
  718. tcase_add_test(tc_core, responseHeader_calcSize_test);
  719. suite_add_tcase(s,tc_core);
  720. return s;
  721. }
  722. Suite* testSuite_dataValue_calcSize(void)
  723. {
  724. Suite *s = suite_create("dataValue_calcSize");
  725. TCase *tc_core = tcase_create("Core");
  726. tcase_add_test(tc_core,DataValue_calcSize_test);
  727. suite_add_tcase(s,tc_core);
  728. return s;
  729. }
  730. int main (void)
  731. {
  732. int number_failed = 0;
  733. Suite *s = testSuite_getPacketType();
  734. SRunner *sr = srunner_create(s);
  735. srunner_run_all(sr,CK_NORMAL);
  736. number_failed = srunner_ntests_failed(sr);
  737. srunner_free(sr);
  738. s = testSuite_decodeInt16();
  739. sr = srunner_create(s);
  740. srunner_run_all(sr,CK_NORMAL);
  741. number_failed += srunner_ntests_failed(sr);
  742. srunner_free(sr);
  743. s = testSuite_encodeInt16();
  744. sr = srunner_create(s);
  745. srunner_run_all(sr,CK_NORMAL);
  746. number_failed += srunner_ntests_failed(sr);
  747. srunner_free(sr);
  748. s = testSuite_decodeUInt16();
  749. sr = srunner_create(s);
  750. srunner_run_all(sr,CK_NORMAL);
  751. number_failed += srunner_ntests_failed(sr);
  752. srunner_free(sr);
  753. s = testSuite_encodeUInt16();
  754. sr = srunner_create(s);
  755. srunner_run_all(sr,CK_NORMAL);
  756. number_failed += srunner_ntests_failed(sr);
  757. srunner_free(sr);
  758. s = testSuite_decodeUInt32();
  759. sr = srunner_create(s);
  760. srunner_run_all(sr,CK_NORMAL);
  761. number_failed += srunner_ntests_failed(sr);
  762. srunner_free(sr);
  763. s = testSuite_encodeUInt32();
  764. sr = srunner_create(s);
  765. srunner_run_all(sr,CK_NORMAL);
  766. number_failed += srunner_ntests_failed(sr);
  767. srunner_free(sr);
  768. s = testSuite_decodeInt32();
  769. sr = srunner_create(s);
  770. srunner_run_all(sr,CK_NORMAL);
  771. number_failed += srunner_ntests_failed(sr);
  772. srunner_free(sr);
  773. s = testSuite_encodeInt32();
  774. sr = srunner_create(s);
  775. srunner_run_all(sr,CK_NORMAL);
  776. number_failed += srunner_ntests_failed(sr);
  777. srunner_free(sr);
  778. s = testSuite_decodeUInt64();
  779. sr = srunner_create(s);
  780. srunner_run_all(sr,CK_NORMAL);
  781. number_failed += srunner_ntests_failed(sr);
  782. srunner_free(sr);
  783. s = testSuite_encodeUInt64();
  784. sr = srunner_create(s);
  785. srunner_run_all(sr,CK_NORMAL);
  786. number_failed += srunner_ntests_failed(sr);
  787. srunner_free(sr);
  788. s = testSuite_decodeInt64();
  789. sr = srunner_create(s);
  790. srunner_run_all(sr,CK_NORMAL);
  791. number_failed += srunner_ntests_failed(sr);
  792. srunner_free(sr);
  793. s = testSuite_encodeInt64();
  794. sr = srunner_create(s);
  795. srunner_run_all(sr,CK_NORMAL);
  796. number_failed += srunner_ntests_failed(sr);
  797. srunner_free(sr);
  798. s = testSuite_encodeFloat();
  799. sr = srunner_create(s);
  800. srunner_run_all(sr,CK_NORMAL);
  801. number_failed += srunner_ntests_failed(sr);
  802. srunner_free(sr);
  803. s = testSuite_encodeDouble();
  804. sr = srunner_create(s);
  805. srunner_run_all(sr,CK_NORMAL);
  806. number_failed += srunner_ntests_failed(sr);
  807. srunner_free(sr);
  808. s = testSuite_encodeByte();
  809. sr = srunner_create(s);
  810. srunner_run_all(sr,CK_NORMAL);
  811. number_failed += srunner_ntests_failed(sr);
  812. srunner_free(sr);
  813. s = testSuite_encodeUAString();
  814. sr = srunner_create(s);
  815. srunner_run_all(sr,CK_NORMAL);
  816. number_failed += srunner_ntests_failed(sr);
  817. srunner_free(sr);
  818. s = testSuite_decodeUAString();
  819. sr = srunner_create(s);
  820. srunner_run_all(sr,CK_NORMAL);
  821. number_failed += srunner_ntests_failed(sr);
  822. srunner_free(sr);
  823. s = testSuite_diagnosticInfo_calcSize();
  824. sr = srunner_create(s);
  825. srunner_run_all(sr,CK_NORMAL);
  826. number_failed += srunner_ntests_failed(sr);
  827. srunner_free(sr);
  828. s = testSuite_extensionObject_calcSize();
  829. sr = srunner_create(s);
  830. srunner_run_all(sr,CK_NORMAL);
  831. number_failed += srunner_ntests_failed(sr);
  832. srunner_free(sr);
  833. s = testSuite_responseHeader_calcSize();
  834. sr = srunner_create(s);
  835. srunner_run_all(sr,CK_NORMAL);
  836. number_failed += srunner_ntests_failed(sr);
  837. srunner_free(sr);
  838. s = testSuite_encodeDataValue();
  839. sr = srunner_create(s);
  840. srunner_run_all(sr,CK_NORMAL);
  841. number_failed += srunner_ntests_failed(sr);
  842. srunner_free(sr);
  843. s = testSuite_encode_builtInDatatypeArray();
  844. sr = srunner_create(s);
  845. srunner_run_all(sr,CK_NORMAL);
  846. number_failed += srunner_ntests_failed(sr);
  847. srunner_free(sr);
  848. s = testSuite_expandedNodeId_calcSize();
  849. sr = srunner_create(s);
  850. srunner_run_all(sr,CK_NORMAL);
  851. number_failed += srunner_ntests_failed(sr);
  852. srunner_free(sr);
  853. s = testSuite_dataValue_calcSize();
  854. sr = srunner_create(s);
  855. srunner_run_all(sr,CK_NORMAL);
  856. number_failed += srunner_ntests_failed(sr);
  857. srunner_free(sr);
  858. /* <TESTSUITE_TEMPLATE>
  859. s = <TESTSUITENAME>;
  860. sr = srunner_create(s);
  861. srunner_run_all(sr,CK_NORMAL);
  862. number_failed += srunner_ntests_failed(sr);
  863. srunner_free(sr);
  864. */
  865. return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  866. }