check_namespace.c 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "ua_types.h"
  4. #include "ua_namespace.h"
  5. #include "check.h"
  6. int zeroCnt = 0;
  7. int visitCnt = 0;
  8. void checkZeroVisitor(const UA_Node* node) {
  9. visitCnt++;
  10. if (node == UA_NULL) zeroCnt++;
  11. }
  12. START_TEST(test_Namespace) {
  13. Namespace *ns = UA_NULL;
  14. Namespace_new(&ns, 512, 0);
  15. Namespace_delete(ns);
  16. }
  17. END_TEST
  18. UA_Int32 createNode(UA_Node** p, UA_Int16 nsid, UA_Int32 id) {
  19. UA_Node_new(p);
  20. (*p)->nodeId.encodingByte = UA_NODEIDTYPE_FOURBYTE;
  21. (*p)->nodeId.namespace = nsid;
  22. (*p)->nodeId.identifier.numeric = id;
  23. return UA_SUCCESS;
  24. }
  25. START_TEST(findNodeInNamespaceWithSingleEntry) {
  26. // given
  27. Namespace *ns;
  28. Namespace_new(&ns, 512, 0);
  29. UA_Node* n1; createNode(&n1,0,2253); Namespace_insert(ns,n1);
  30. const UA_Node* nr = UA_NULL;
  31. Namespace_Entry_Lock* nl = UA_NULL;
  32. UA_Int32 retval;
  33. // when
  34. retval = Namespace_get(ns,&(n1->nodeId),&nr,&nl);
  35. // then
  36. ck_assert_int_eq(retval, UA_SUCCESS);
  37. ck_assert_ptr_eq(nr,n1);
  38. // finally
  39. Namespace_delete(ns);
  40. }
  41. END_TEST
  42. START_TEST(findNodeInNamespaceWithTwoEntries) {
  43. // given
  44. Namespace *ns;
  45. Namespace_new(&ns, 512, 0);
  46. UA_Node* n1; createNode(&n1,0,2253); Namespace_insert(ns,n1);
  47. UA_Node* n2; createNode(&n2,0,2255); Namespace_insert(ns,n2);
  48. const UA_Node* nr = UA_NULL;
  49. Namespace_Entry_Lock* nl = UA_NULL;
  50. UA_Int32 retval;
  51. // when
  52. retval = Namespace_get(ns,&(n2->nodeId),&nr,&nl);
  53. // then
  54. ck_assert_int_eq(retval, UA_SUCCESS);
  55. ck_assert_ptr_eq(nr,n2);
  56. // finally
  57. Namespace_delete(ns);
  58. }
  59. END_TEST
  60. START_TEST(failToFindNodeInOtherNamespace) {
  61. // given
  62. Namespace *ns;
  63. Namespace_new(&ns, 512, 0);
  64. UA_Node* n1; createNode(&n1,0,2253); Namespace_insert(ns,n1);
  65. UA_Node* n2; createNode(&n2,0,2255); Namespace_insert(ns,n2);
  66. const UA_Node* nr = UA_NULL;
  67. Namespace_Entry_Lock* nl = UA_NULL;
  68. UA_Int32 retval;
  69. // when
  70. UA_Node* n; createNode(&n,1,2255);
  71. retval = Namespace_get(ns,&(n->nodeId),&nr,&nl);
  72. // then
  73. ck_assert_int_ne(retval, UA_SUCCESS);
  74. // finally
  75. UA_free(n);
  76. Namespace_delete(ns);
  77. }
  78. END_TEST
  79. START_TEST(findNodeInNamespaceWithSeveralEntries) {
  80. // given
  81. Namespace *ns;
  82. Namespace_new(&ns, 512, 0);
  83. UA_Node* n1; createNode(&n1,0,2253); Namespace_insert(ns,n1);
  84. UA_Node* n2; createNode(&n2,0,2255); Namespace_insert(ns,n2);
  85. UA_Node* n3; createNode(&n3,0,2257); Namespace_insert(ns,n3);
  86. UA_Node* n4; createNode(&n4,0,2200); Namespace_insert(ns,n4);
  87. UA_Node* n5; createNode(&n5,0,1); Namespace_insert(ns,n5);
  88. UA_Node* n6; createNode(&n6,0,12); Namespace_insert(ns,n6);
  89. const UA_Node* nr = UA_NULL;
  90. Namespace_Entry_Lock* nl = UA_NULL;
  91. UA_Int32 retval;
  92. // when
  93. retval = Namespace_get(ns,&(n3->nodeId),&nr,&nl);
  94. // then
  95. ck_assert_int_eq(retval, UA_SUCCESS);
  96. ck_assert_ptr_eq(nr,n3);
  97. // finally
  98. Namespace_delete(ns);
  99. }
  100. END_TEST
  101. START_TEST(iterateOverNamespaceShallNotVisitEmptyNodes) {
  102. // given
  103. Namespace *ns;
  104. Namespace_new(&ns, 512, 0);
  105. UA_Node* n1; createNode(&n1,0,2253); Namespace_insert(ns,n1);
  106. UA_Node* n2; createNode(&n2,0,2255); Namespace_insert(ns,n2);
  107. UA_Node* n3; createNode(&n3,0,2257); Namespace_insert(ns,n3);
  108. UA_Node* n4; createNode(&n4,0,2200); Namespace_insert(ns,n4);
  109. UA_Node* n5; createNode(&n5,0,1); Namespace_insert(ns,n5);
  110. UA_Node* n6; createNode(&n6,0,12); Namespace_insert(ns,n6);
  111. UA_Int32 retval;
  112. // when
  113. zeroCnt = 0;
  114. visitCnt = 0;
  115. retval = Namespace_iterate(ns,checkZeroVisitor);
  116. // then
  117. ck_assert_int_eq(retval, UA_SUCCESS);
  118. ck_assert_int_eq(zeroCnt, 0);
  119. ck_assert_int_eq(visitCnt, 6);
  120. // finally
  121. Namespace_delete(ns);
  122. }
  123. END_TEST
  124. START_TEST(findNodeInExpandedNamespace) {
  125. // given
  126. Namespace *ns;
  127. Namespace_new(&ns, 10, 0);
  128. UA_Node* n;
  129. for (UA_Int32 i=0; i<200; i++) {
  130. createNode(&n,0,i); Namespace_insert(ns,n);
  131. }
  132. const UA_Node* nr = UA_NULL;
  133. Namespace_Entry_Lock* nl = UA_NULL;
  134. UA_Int32 retval;
  135. // when
  136. createNode(&n,0,25);
  137. retval = Namespace_get(ns,&(n->nodeId),&nr,&nl);
  138. // then
  139. ck_assert_int_eq(retval, UA_SUCCESS);
  140. ck_assert_int_eq(nr->nodeId.identifier.numeric,n->nodeId.identifier.numeric);
  141. // finally
  142. UA_free(n);
  143. Namespace_delete(ns);
  144. }
  145. END_TEST
  146. START_TEST(iterateOverExpandedNamespaceShallNotVisitEmptyNodes) {
  147. // given
  148. Namespace *ns;
  149. Namespace_new(&ns, 10, 0);
  150. UA_Node* n;
  151. for (UA_Int32 i=0; i<200; i++) {
  152. createNode(&n,0,i); Namespace_insert(ns,n);
  153. }
  154. // when
  155. UA_Int32 retval;
  156. zeroCnt = 0;
  157. visitCnt = 0;
  158. retval = Namespace_iterate(ns,checkZeroVisitor);
  159. // then
  160. ck_assert_int_eq(retval, UA_SUCCESS);
  161. ck_assert_int_eq(zeroCnt, 0);
  162. ck_assert_int_eq(visitCnt, 200);
  163. // finally
  164. Namespace_delete(ns);
  165. }
  166. END_TEST
  167. START_TEST(failToFindNonExistantNodeInNamespaceWithSeveralEntries) {
  168. // given
  169. Namespace *ns;
  170. Namespace_new(&ns, 512, 0);
  171. UA_Node* n1; createNode(&n1,0,2253); Namespace_insert(ns,n1);
  172. UA_Node* n2; createNode(&n2,0,2255); Namespace_insert(ns,n2);
  173. UA_Node* n3; createNode(&n3,0,2257); Namespace_insert(ns,n3);
  174. UA_Node* n4; createNode(&n4,0,2200); Namespace_insert(ns,n4);
  175. UA_Node* n5; createNode(&n5,0,1); Namespace_insert(ns,n5);
  176. UA_Node* n6; createNode(&n6,0,12);
  177. const UA_Node* nr = UA_NULL;
  178. Namespace_Entry_Lock* nl = UA_NULL;
  179. UA_Int32 retval;
  180. // when
  181. retval = Namespace_get(ns,&(n6->nodeId),&nr,&nl);
  182. // then
  183. ck_assert_int_ne(retval, UA_SUCCESS);
  184. // finally
  185. UA_free(n6);
  186. Namespace_delete(ns);
  187. }
  188. END_TEST
  189. Suite * namespace_suite (void) {
  190. Suite *s = suite_create ("Namespace");
  191. TCase *tc_cd = tcase_create ("Create/Delete");
  192. tcase_add_test (tc_cd, test_Namespace);
  193. suite_add_tcase (s, tc_cd);
  194. TCase* tc_find = tcase_create ("Find");
  195. tcase_add_test (tc_find, findNodeInNamespaceWithSingleEntry);
  196. tcase_add_test (tc_find, findNodeInNamespaceWithTwoEntries);
  197. tcase_add_test (tc_find, findNodeInNamespaceWithSeveralEntries);
  198. tcase_add_test (tc_find, findNodeInExpandedNamespace);
  199. tcase_add_test (tc_find, failToFindNonExistantNodeInNamespaceWithSeveralEntries);
  200. tcase_add_test (tc_find, failToFindNodeInOtherNamespace);
  201. suite_add_tcase (s, tc_find);
  202. TCase* tc_iterate = tcase_create ("Iterate");
  203. tcase_add_test (tc_find, iterateOverNamespaceShallNotVisitEmptyNodes);
  204. tcase_add_test (tc_find, iterateOverExpandedNamespaceShallNotVisitEmptyNodes);
  205. suite_add_tcase (s, tc_iterate);
  206. return s;
  207. }
  208. int main (void) {
  209. int number_failed =0;
  210. Suite *s = namespace_suite ();
  211. SRunner *sr = srunner_create (s);
  212. // srunner_set_fork_status(sr,CK_NOFORK);
  213. srunner_run_all (sr, CK_NORMAL);
  214. number_failed += srunner_ntests_failed (sr);
  215. srunner_free (sr);
  216. return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  217. }