check_xml.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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. UA_NodeId_copycstring("i=2",&nodeId,UA_NULL);
  67. ck_assert_int_eq(Namespace_contains(ns,&nodeId),UA_FALSE);
  68. // finally
  69. Namespace_delete(ns);
  70. }
  71. END_TEST
  72. START_TEST(loadUserNamespaceWithSingleProcessVariableAndAliasesShallSucceed)
  73. {
  74. // given
  75. char xml[]=
  76. "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
  77. "<UANodeSet>"
  78. "<Aliases>"
  79. "<Alias Alias=\"Int32\">i=6</Alias>"
  80. "<Alias Alias=\"HasTypeDefinition\">i=40</Alias>"
  81. "</Aliases>"
  82. "<UAVariable NodeId=\"ns=1;i=4\" BrowseName=\"X1\" DataType=\"Int32\">"
  83. "<DisplayName>Integer Variable</DisplayName>"
  84. "<References>"
  85. "<Reference ReferenceType=\"HasTypeDefinition\">i=63</Reference>"
  86. "</References>"
  87. "</UAVariable>"
  88. "</UANodeSet>";
  89. Namespace *ns;
  90. UA_NodeId nodeId;
  91. UA_Int32 retval;
  92. // when
  93. retval = Namespace_loadFromString(&ns,1,"ROOT",xml);
  94. // then
  95. ck_assert_ptr_ne(ns,UA_NULL);
  96. ck_assert_int_eq(retval,UA_SUCCESS);
  97. UA_NodeId_copycstring("ns=1;i=4",&nodeId,UA_NULL);
  98. ck_assert_int_eq(Namespace_contains(ns,&nodeId),UA_TRUE);
  99. UA_NodeId_copycstring("ns=1;i=2",&nodeId,UA_NULL);
  100. ck_assert_int_eq(Namespace_contains(ns,&nodeId),UA_FALSE);
  101. UA_NodeId_copycstring("ns=2;i=4",&nodeId,UA_NULL);
  102. ck_assert_int_eq(Namespace_contains(ns,&nodeId),UA_FALSE);
  103. UA_NodeId_copycstring("i=4",&nodeId,UA_NULL);
  104. ck_assert_int_eq(Namespace_contains(ns,&nodeId),UA_FALSE);
  105. // finally
  106. Namespace_delete(ns);
  107. }
  108. END_TEST
  109. Suite* testSuite()
  110. {
  111. Suite *s = suite_create("XML Test");
  112. TCase *tc_core = tcase_create("Core");
  113. tcase_add_test(tc_core, parseNumericNodeIdWithoutNsIdShallYieldNs0NodeId);
  114. tcase_add_test(tc_core, parseNumericNodeIdWithNsShallYieldNodeIdWithNs);
  115. tcase_add_test(tc_core, loadUserNamespaceWithSingleProcessVariableShallSucceed);
  116. tcase_add_test(tc_core, loadUserNamespaceWithSingleProcessVariableAndAliasesShallSucceed);
  117. suite_add_tcase(s,tc_core);
  118. return s;
  119. }
  120. int main (void)
  121. {
  122. int number_failed = 0;
  123. Suite *s;
  124. SRunner *sr;
  125. s = testSuite();
  126. sr = srunner_create(s);
  127. srunner_set_fork_status(sr, CK_NOFORK);
  128. srunner_run_all(sr,CK_NORMAL);
  129. number_failed += srunner_ntests_failed(sr);
  130. srunner_free(sr);
  131. return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  132. }