check_xml.c 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /****************************************************************************
  2. Name : check_xml.c
  3. Author : uleon @ open62541
  4. Version : 0.1
  5. Copyright : Your copyright notice
  6. Description : test cases to check different aspects of the
  7. xml-processing
  8. *****************************************************************************/
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include "ua_xml.h"
  12. #include "check.h"
  13. START_TEST(parseNumericNodeIdWithoutNsIdShallYieldNs0NodeId)
  14. {
  15. // given
  16. char txt[] = "i=2";
  17. UA_NodeId nodeId = { (UA_Byte) 0, (UA_UInt16) 0, { 0 } };
  18. // when
  19. UA_Int32 retval = UA_NodeId_copycstring(txt,&nodeId,UA_NULL);
  20. // then
  21. ck_assert_int_eq(retval,UA_SUCCESS);
  22. ck_assert_int_eq(nodeId.encodingByte,UA_NODEIDTYPE_FOURBYTE);
  23. ck_assert_int_eq(nodeId.namespace,0);
  24. ck_assert_int_eq(nodeId.identifier.numeric,2);
  25. // finally
  26. }
  27. END_TEST
  28. START_TEST(parseNumericNodeIdWithNsShallYieldNodeIdWithNs)
  29. {
  30. // given
  31. char txt[] = "ns=1;i=2";
  32. UA_NodeId nodeId = { (UA_Byte) 0, (UA_UInt16) 0, { 0 } };
  33. // when
  34. UA_Int32 retval = UA_NodeId_copycstring(txt,&nodeId,UA_NULL);
  35. // then
  36. ck_assert_int_eq(retval,UA_SUCCESS);
  37. ck_assert_int_eq(nodeId.encodingByte,UA_NODEIDTYPE_FOURBYTE);
  38. ck_assert_int_eq(nodeId.namespace,1);
  39. ck_assert_int_eq(nodeId.identifier.numeric,2);
  40. // finally
  41. }
  42. END_TEST
  43. START_TEST(loadUserNamespaceWithSingleProcessVariableShallSucceed)
  44. {
  45. // given
  46. char xml[]=
  47. "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
  48. "<UANodeSet>"
  49. "<UAVariable NodeId=\"ns=1;i=2\" BrowseName=\"X1\" DataType=\"i=6\">"
  50. "<DisplayName>Integer Variable</DisplayName>"
  51. "<References>"
  52. "<Reference ReferenceType=\"i=40\">i=63</Reference>"
  53. "</References>"
  54. "</UAVariable>"
  55. "</UANodeSet>";
  56. Namespace *ns;
  57. UA_NodeId nodeId;
  58. UA_Int32 retval;
  59. // when
  60. retval = Namespace_loadFromString(&ns,1,"ROOT",xml);
  61. // then
  62. ck_assert_int_eq(retval,UA_SUCCESS);
  63. ck_assert_ptr_ne(ns,UA_NULL);
  64. UA_NodeId_copycstring("ns=1;i=2",&nodeId,UA_NULL);
  65. ck_assert_int_eq(Namespace_contains(ns,&nodeId),UA_TRUE);
  66. const UA_Node* nr = UA_NULL;
  67. Namespace_Entry_Lock* nl = UA_NULL;
  68. retval = Namespace_get(ns,&nodeId,&nr,&nl);
  69. ck_assert_int_eq(retval,UA_SUCCESS);
  70. ck_assert_ptr_ne(nr,UA_NULL);
  71. ck_assert_int_eq(nr->references[0]->referenceTypeId.identifier.numeric,40);
  72. ck_assert_int_eq(nr->references[0]->targetId.nodeId.identifier.numeric,63);
  73. UA_NodeId_copycstring("i=2",&nodeId,UA_NULL);
  74. ck_assert_int_eq(Namespace_contains(ns,&nodeId),UA_FALSE);
  75. // finally
  76. Namespace_delete(ns);
  77. }
  78. END_TEST
  79. START_TEST(loadUserNamespaceWithSingleProcessVariableAndAliasesShallSucceed)
  80. {
  81. // given
  82. char xml[]=
  83. "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
  84. "<UANodeSet>"
  85. "<Aliases>"
  86. "<Alias Alias=\"Int32\">i=6</Alias>"
  87. "<Alias Alias=\"HasTypeDefinition\">i=40</Alias>"
  88. "</Aliases>"
  89. "<UAVariable NodeId=\"ns=1;i=4\" BrowseName=\"X1\" DataType=\"Int32\">"
  90. "<DisplayName>Integer Variable</DisplayName>"
  91. "<References>"
  92. "<Reference ReferenceType=\"HasTypeDefinition\">i=63</Reference>"
  93. "</References>"
  94. "</UAVariable>"
  95. "</UANodeSet>";
  96. Namespace *ns;
  97. UA_NodeId nodeId;
  98. UA_Int32 retval;
  99. // when
  100. retval = Namespace_loadFromString(&ns,1,"ROOT",xml);
  101. // then
  102. ck_assert_ptr_ne(ns,UA_NULL);
  103. ck_assert_int_eq(retval,UA_SUCCESS);
  104. UA_NodeId_copycstring("ns=1;i=4",&nodeId,UA_NULL);
  105. ck_assert_int_eq(Namespace_contains(ns,&nodeId),UA_TRUE);
  106. const UA_Node* nr = UA_NULL;
  107. Namespace_Entry_Lock* nl = UA_NULL;
  108. retval = Namespace_get(ns,&nodeId,&nr,&nl);
  109. ck_assert_int_eq(retval,UA_SUCCESS);
  110. ck_assert_ptr_ne(nr,UA_NULL);
  111. ck_assert_int_eq(nr->references[0]->referenceTypeId.identifier.numeric,40);
  112. ck_assert_int_eq(nr->references[0]->targetId.nodeId.identifier.numeric,63);
  113. UA_NodeId_copycstring("ns=1;i=2",&nodeId,UA_NULL);
  114. ck_assert_int_eq(Namespace_contains(ns,&nodeId),UA_FALSE);
  115. UA_NodeId_copycstring("ns=2;i=4",&nodeId,UA_NULL);
  116. ck_assert_int_eq(Namespace_contains(ns,&nodeId),UA_FALSE);
  117. UA_NodeId_copycstring("i=4",&nodeId,UA_NULL);
  118. ck_assert_int_eq(Namespace_contains(ns,&nodeId),UA_FALSE);
  119. // finally
  120. Namespace_delete(ns);
  121. }
  122. END_TEST
  123. Suite* testSuite()
  124. {
  125. Suite *s = suite_create("XML Test");
  126. TCase *tc_core = tcase_create("Core");
  127. tcase_add_test(tc_core, parseNumericNodeIdWithoutNsIdShallYieldNs0NodeId);
  128. tcase_add_test(tc_core, parseNumericNodeIdWithNsShallYieldNodeIdWithNs);
  129. tcase_add_test(tc_core, loadUserNamespaceWithSingleProcessVariableShallSucceed);
  130. tcase_add_test(tc_core, loadUserNamespaceWithSingleProcessVariableAndAliasesShallSucceed);
  131. suite_add_tcase(s,tc_core);
  132. return s;
  133. }
  134. int main (void)
  135. {
  136. int number_failed = 0;
  137. Suite *s;
  138. SRunner *sr;
  139. s = testSuite();
  140. sr = srunner_create(s);
  141. srunner_set_fork_status(sr, CK_NOFORK);
  142. srunner_run_all(sr,CK_NORMAL);
  143. number_failed += srunner_ntests_failed(sr);
  144. srunner_free(sr);
  145. return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  146. }