check_namespace.c 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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, 99);
  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, 99);
  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, 99);
  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(findNodeInNamespaceWithSeveralEntries) {
  55. // given
  56. Namespace *ns;
  57. Namespace_new(&ns, 512, 99);
  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. UA_Node* n3; createNode(&n3,0,2257); Namespace_insert(ns,n3);
  61. UA_Node* n4; createNode(&n4,0,2200); Namespace_insert(ns,n4);
  62. UA_Node* n5; createNode(&n5,0,1); Namespace_insert(ns,n5);
  63. UA_Node* n6; createNode(&n6,0,12); Namespace_insert(ns,n6);
  64. const UA_Node* nr = UA_NULL;
  65. Namespace_Entry_Lock* nl = UA_NULL;
  66. UA_Int32 retval;
  67. // when
  68. retval = Namespace_get(ns,&(n3->nodeId),&nr,&nl);
  69. // then
  70. ck_assert_int_eq(retval, UA_SUCCESS);
  71. ck_assert_ptr_eq(nr,n3);
  72. // finally
  73. Namespace_delete(ns);
  74. }
  75. END_TEST
  76. START_TEST(findNodeInExpandedNamespace) {
  77. // given
  78. Namespace *ns;
  79. Namespace_new(&ns, 10, 99);
  80. UA_Node* n;
  81. for (UA_Int32 i=0; i<200; i++) {
  82. createNode(&n,0,i); Namespace_insert(ns,n);
  83. }
  84. const UA_Node* nr = UA_NULL;
  85. Namespace_Entry_Lock* nl = UA_NULL;
  86. UA_Int32 retval;
  87. // when
  88. createNode(&n,0,25);
  89. retval = Namespace_get(ns,&(n->nodeId),&nr,&nl);
  90. // then
  91. ck_assert_int_eq(retval, UA_SUCCESS);
  92. ck_assert_int_eq(nr->nodeId.identifier.numeric,n->nodeId.identifier.numeric);
  93. // finally
  94. UA_free(n);
  95. Namespace_delete(ns);
  96. }
  97. END_TEST
  98. START_TEST(failToFindNonExistantNodeInNamespaceWithSeveralEntries) {
  99. // given
  100. Namespace *ns;
  101. Namespace_new(&ns, 512, 99);
  102. UA_Node* n1; createNode(&n1,0,2253); Namespace_insert(ns,n1);
  103. UA_Node* n2; createNode(&n2,0,2255); Namespace_insert(ns,n2);
  104. UA_Node* n3; createNode(&n3,0,2257); Namespace_insert(ns,n3);
  105. UA_Node* n4; createNode(&n4,0,2200); Namespace_insert(ns,n4);
  106. UA_Node* n5; createNode(&n5,0,1); Namespace_insert(ns,n5);
  107. UA_Node* n6; createNode(&n6,0,12);
  108. const UA_Node* nr = UA_NULL;
  109. Namespace_Entry_Lock* nl = UA_NULL;
  110. UA_Int32 retval;
  111. // when
  112. retval = Namespace_get(ns,&(n6->nodeId),&nr,&nl);
  113. // then
  114. ck_assert_int_ne(retval, UA_SUCCESS);
  115. // finally
  116. UA_free(n6);
  117. Namespace_delete(ns);
  118. }
  119. END_TEST
  120. Suite * namespace_suite (void) {
  121. Suite *s = suite_create ("Namespace");
  122. TCase *tc_cd = tcase_create ("Create/Delete");
  123. tcase_add_test (tc_cd, test_Namespace);
  124. suite_add_tcase (s, tc_cd);
  125. TCase* tc_find = tcase_create ("Find");
  126. tcase_add_test (tc_find, findNodeInNamespaceWithSingleEntry);
  127. tcase_add_test (tc_find, findNodeInNamespaceWithTwoEntries);
  128. tcase_add_test (tc_find, findNodeInNamespaceWithSeveralEntries);
  129. tcase_add_test (tc_find, findNodeInExpandedNamespace);
  130. tcase_add_test (tc_find, failToFindNonExistantNodeInNamespaceWithSeveralEntries);
  131. suite_add_tcase (s, tc_find);
  132. return s;
  133. }
  134. int main (void) {
  135. int number_failed =0;
  136. Suite *s = namespace_suite ();
  137. SRunner *sr = srunner_create (s);
  138. // srunner_set_fork_status(sr,CK_NOFORK);
  139. srunner_run_all (sr, CK_NORMAL);
  140. number_failed += srunner_ntests_failed (sr);
  141. srunner_free (sr);
  142. return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  143. }