check_namespace.c 4.8 KB

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