cipcommontests.cpp 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. /*******************************************************************************
  2. * Copyright (c) 2018, Rockwell Automation, Inc.
  3. * All rights reserved.
  4. *
  5. ******************************************************************************/
  6. #include <CppUTest/TestHarness.h>
  7. #include <stdint.h>
  8. #include <string.h>
  9. extern "C" {
  10. #include "cipcommon.h"
  11. }
  12. TEST_GROUP(CipCommon) {
  13. };
  14. TEST(CipCommon, GetSizeOfAttributeCipBool) {
  15. CipAttributeStruct attribute;
  16. attribute.type = kCipBool;
  17. CHECK_EQUAL(sizeof(CipBool), GetSizeOfAttribute(&attribute) );
  18. }
  19. TEST(CipCommon, GetSizeOfAttributeCipSint) {
  20. CipAttributeStruct attribute;
  21. attribute.type = kCipSint;
  22. CHECK_EQUAL(sizeof(CipSint), GetSizeOfAttribute(&attribute) );
  23. }
  24. TEST(CipCommon, GetSizeOfAttributeCipInt) {
  25. CipAttributeStruct attribute;
  26. attribute.type = kCipInt;
  27. CHECK_EQUAL(sizeof(CipInt), GetSizeOfAttribute(&attribute) );
  28. }
  29. TEST(CipCommon, GetSizeOfAttributeCipDint) {
  30. CipAttributeStruct attribute;
  31. attribute.type = kCipDint;
  32. CHECK_EQUAL(sizeof(CipDint), GetSizeOfAttribute(&attribute) );
  33. }
  34. TEST(CipCommon, GetSizeOfAttributeCipUsint) {
  35. CipAttributeStruct attribute;
  36. attribute.type = kCipUsint;
  37. CHECK_EQUAL(sizeof(CipUsint), GetSizeOfAttribute(&attribute) );
  38. }
  39. TEST(CipCommon, GetSizeOfAttributeCipUint) {
  40. CipAttributeStruct attribute;
  41. attribute.type = kCipUint;
  42. CHECK_EQUAL(sizeof(CipUint), GetSizeOfAttribute(&attribute) );
  43. }
  44. TEST(CipCommon, GetSizeOfAttributeCipUdint) {
  45. CipAttributeStruct attribute;
  46. attribute.type = kCipUdint;
  47. CHECK_EQUAL(sizeof(CipUdint), GetSizeOfAttribute(&attribute) );
  48. }
  49. TEST(CipCommon, GetSizeOfAttributeCipReal) {
  50. CipAttributeStruct attribute;
  51. attribute.type = kCipReal;
  52. CHECK_EQUAL(sizeof(CipReal), GetSizeOfAttribute(&attribute) );
  53. }
  54. #ifdef OPENER_SUPPORT_64BIT_DATATYPES
  55. TEST(CipCommon, GetSizeOfAttributeCipLreal) {
  56. CipAttributeStruct attribute;
  57. attribute.type = kCipLreal;
  58. CHECK_EQUAL(sizeof(CipLreal), GetSizeOfAttribute(&attribute) );
  59. }
  60. TEST(CipCommon, GetSizeOfAttributeCipUlint) {
  61. CipAttributeStruct attribute;
  62. attribute.type = kCipUlint;
  63. CHECK_EQUAL(sizeof(CipUlint), GetSizeOfAttribute(&attribute) );
  64. }
  65. TEST(CipCommon, GetSizeOfAttributeCipLint) {
  66. CipAttributeStruct attribute;
  67. attribute.type = kCipLint;
  68. CHECK_EQUAL(sizeof(CipLint), GetSizeOfAttribute(&attribute) );
  69. }
  70. TEST(CipCommon, GetSizeOfAttributeCipLword) {
  71. CipAttributeStruct attribute;
  72. attribute.type = kCipLword;
  73. CHECK_EQUAL(sizeof(CipLword), GetSizeOfAttribute(&attribute) );
  74. }
  75. TEST(CipCommon, GetSizeOfAttributeCipLtime) {
  76. CipAttributeStruct attribute;
  77. attribute.type = kCipLtime;
  78. CHECK_EQUAL(sizeof(CipLint), GetSizeOfAttribute(&attribute) );
  79. }
  80. #endif /* OPENER_SUPPORT_64BIT_DATATYPES */
  81. TEST(CipCommon, GetSizeOfAttributeCipStime) {
  82. CipAttributeStruct attribute;
  83. attribute.type = kCipStime;
  84. CHECK_EQUAL(sizeof(CipDint), GetSizeOfAttribute(&attribute) );
  85. }
  86. TEST(CipCommon, GetSizeOfAttributeCipData) {
  87. CipAttributeStruct attribute;
  88. attribute.type = kCipDate;
  89. CHECK_EQUAL(sizeof(CipUint), GetSizeOfAttribute(&attribute) );
  90. }
  91. TEST(CipCommon, GetSizeOfAttributeCipTimeOfDay) {
  92. CipAttributeStruct attribute;
  93. attribute.type = kCipTimeOfDay;
  94. CHECK_EQUAL(sizeof(CipUdint), GetSizeOfAttribute(&attribute) );
  95. }
  96. TEST(CipCommon, GetSizeOfAttributeCipDateAndTime) {
  97. CipAttributeStruct attribute;
  98. attribute.type = kCipDateAndTime;
  99. CHECK_EQUAL(sizeof(CipUdint) + sizeof(CipUint),
  100. GetSizeOfAttribute(&attribute) );
  101. }
  102. TEST(CipCommon, GetSizeOfAttributeCipString) {
  103. CipAttributeStruct attribute;
  104. char demo_string[] = "Hello World!";
  105. CipString test_string =
  106. { .length = sizeof(demo_string), .string = (EipByte *)demo_string };
  107. attribute.type = kCipString;
  108. attribute.data = (void *)&test_string;
  109. CHECK_EQUAL(
  110. sizeof(test_string.length) + test_string.length * sizeof(CipOctet),
  111. GetSizeOfAttribute(&attribute) );
  112. }
  113. TEST(CipCommon, GetSizeOfAttributeCipByte) {
  114. CipAttributeStruct attribute;
  115. attribute.type = kCipByte;
  116. CHECK_EQUAL(sizeof(CipByte), GetSizeOfAttribute(&attribute) );
  117. }
  118. TEST(CipCommon, GetSizeOfAttributeCipWord) {
  119. CipAttributeStruct attribute;
  120. attribute.type = kCipWord;
  121. CHECK_EQUAL(sizeof(CipWord), GetSizeOfAttribute(&attribute) );
  122. }
  123. TEST(CipCommon, GetSizeOfAttributeCipDword) {
  124. CipAttributeStruct attribute;
  125. attribute.type = kCipDword;
  126. CHECK_EQUAL(sizeof(CipDword), GetSizeOfAttribute(&attribute) );
  127. }
  128. TEST(CipCommon, GetSizeOfAttributeCipString2) {
  129. CipAttributeStruct attribute;
  130. char demo_string[] = "H e l l o W o r l d !"; /* \0 termination symbol is seen as second byte for ! */
  131. CipString test_string =
  132. { .length = sizeof(demo_string) / 2, .string = (EipByte *)demo_string };
  133. attribute.type = kCipString;
  134. attribute.data = (void *)&test_string;
  135. CHECK_EQUAL(
  136. sizeof(test_string.length) + test_string.length * sizeof(CipOctet),
  137. GetSizeOfAttribute(&attribute) );
  138. }
  139. TEST(CipCommon, GetSizeOfAttributeCipFtime) {
  140. CipAttributeStruct attribute;
  141. attribute.type = kCipFtime;
  142. CHECK_EQUAL(sizeof(CipDint), GetSizeOfAttribute(&attribute) );
  143. }
  144. TEST(CipCommon, GetSizeOfAttributeCipItime) {
  145. CipAttributeStruct attribute;
  146. attribute.type = kCipItime;
  147. CHECK_EQUAL(sizeof(CipInt), GetSizeOfAttribute(&attribute) );
  148. }
  149. TEST(CipCommon, GetSizeOfAttributeCipStringN) {
  150. CipAttributeStruct attribute;
  151. char demo_string[] = "Hello World!";
  152. CipStringN test_string =
  153. { .size = 1, .length = sizeof(demo_string),
  154. .string = (EipByte *) demo_string };
  155. attribute.type = kCipStringN;
  156. attribute.data = (void *) &test_string;
  157. CHECK_EQUAL(
  158. sizeof(test_string.size) + sizeof(test_string.length) + test_string.size * test_string.length *
  159. sizeof(CipOctet),
  160. GetSizeOfAttribute(
  161. &attribute) );
  162. }
  163. TEST(CipCommon, GetSizeOfAttributeCipTime) {
  164. CipAttributeStruct attribute;
  165. attribute.type = kCipTime;
  166. CHECK_EQUAL(sizeof(CipDint), GetSizeOfAttribute(&attribute) );
  167. }
  168. TEST(CipCommon, GetSizeOfAttributeCipEpath) {
  169. /* TODO: Fix me */
  170. CipAttributeStruct attribute;
  171. attribute.type = kCipItime;
  172. CHECK_EQUAL(sizeof(CipInt), GetSizeOfAttribute(&attribute) );
  173. }
  174. TEST(CipCommon, GetSizeOfAttributeCipEngUnit) {
  175. CipAttributeStruct attribute;
  176. attribute.type = kCipEngUnit;
  177. CHECK_EQUAL(sizeof(CipUint), GetSizeOfAttribute(&attribute) );
  178. }
  179. TEST(CipCommon, GetSizeOfAttributeCipUsintUsint) {
  180. CipAttributeStruct attribute;
  181. attribute.type = kCipUsintUsint;
  182. CHECK_EQUAL(2 * sizeof(CipUsint), GetSizeOfAttribute(&attribute) );
  183. }
  184. TEST(CipCommon, GetSizeOfAttributeCipUdintUdintUdintUdintUdintString) {
  185. CipTcpIpNetworkInterfaceConfiguration config;
  186. char domain_name[] = "www.github.com/EIPStackGroup/OpENer";
  187. config.domain_name.length = sizeof(domain_name);
  188. config.domain_name.string = (EipByte *)domain_name;
  189. CipAttributeStruct attribute;
  190. attribute.type = kCipUdintUdintUdintUdintUdintString;
  191. attribute.data = (void *)&config;
  192. CHECK_EQUAL(
  193. 5 * sizeof(CipUdint) + sizeof(CipUint) + sizeof(domain_name) *
  194. sizeof(EipByte),
  195. GetSizeOfAttribute(&attribute) );
  196. }
  197. TEST(CipCommon, GetSizeOfAttributeCip6Usint) {
  198. CipAttributeStruct attribute;
  199. attribute.type = kCip6Usint;
  200. CHECK_EQUAL(6 * sizeof(CipUsint), GetSizeOfAttribute(&attribute) );
  201. }
  202. TEST(CipCommon, GetSizeOfAttributeCipMemberList) {
  203. CipAttributeStruct attribute;
  204. attribute.type = kCipMemberList;
  205. CHECK_EQUAL(0, GetSizeOfAttribute(&attribute) );
  206. /* Currently not implemented */
  207. }
  208. TEST(CipCommon, GetSizeOfAttributeCipByteArray) {
  209. CipByte data_array[] = {1,2,3,4,5,6,7,8,9};
  210. CipByteArray array;
  211. array.data = (EipByte *)&data_array;
  212. array.length = sizeof(data_array);
  213. CipAttributeStruct attribute;
  214. attribute.type = kCipByteArray;
  215. attribute.data = (void *)&array;
  216. CHECK_EQUAL(sizeof(CipUint) + array.length * sizeof(CipByte),
  217. GetSizeOfAttribute(&attribute) );
  218. }
  219. TEST(CipCommon, GetSizeOfAttributeInternalUint6) {
  220. CipAttributeStruct attribute;
  221. attribute.type = kInternalUint6;
  222. CHECK_EQUAL(6 * sizeof(CipUint), GetSizeOfAttribute(&attribute) );
  223. }