check_stack.c 26 KB

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