Преглед на файлове

add a unit test for browsenext

Julius Pfrommer преди 7 години
родител
ревизия
89a52b7cf9
променени са 2 файла, в които са добавени 56 реда и са изтрити 1 реда
  1. 1 1
      src/ua_session.c
  2. 55 0
      tests/check_services_view.c

+ 1 - 1
src/ua_session.c

@@ -25,7 +25,7 @@ UA_Session adminSession = {
     (UA_Double)UA_INT64_MAX, /* .timeout */
     UA_INT64_MAX, /* .validTill */
     NULL, /* .channel */
-    0, /* .availableContinuationPoints */
+    UA_MAXCONTINUATIONPOINTS, /* .availableContinuationPoints */
     {NULL}, /* .continuationPoints */
 #ifdef UA_ENABLE_SUBSCRIPTIONS
     0, /* .lastSubscriptionID */

+ 55 - 0
tests/check_services_view.c

@@ -47,6 +47,60 @@ static void teardown_server(void) {
     nl_translate_browse.deleteMembers(&nl_translate_browse);
 }
 
+static size_t
+browseWithMaxResults(UA_Server *server, UA_NodeId nodeId, UA_UInt32 maxResults) {
+    UA_BrowseDescription bd;
+    UA_BrowseDescription_init(&bd);
+    bd.nodeId = nodeId;
+    bd.resultMask = UA_BROWSERESULTMASK_ALL;
+    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
+    UA_BrowseResult br = UA_Server_browse(server, maxResults, &bd);
+    ck_assert_int_eq(br.statusCode, UA_STATUSCODE_GOOD);
+    ck_assert(br.referencesSize > 0);
+
+    size_t total = br.referencesSize;
+    UA_ByteString cp = br.continuationPoint;
+    br.continuationPoint = UA_BYTESTRING_NULL;
+    UA_BrowseResult_deleteMembers(&br);
+
+    while(cp.length > 0) {
+        br = UA_Server_browseNext(server, false, &cp);
+        ck_assert(br.referencesSize > 0);
+        UA_ByteString_deleteMembers(&cp);
+        cp = br.continuationPoint;
+        br.continuationPoint = UA_BYTESTRING_NULL;
+        total += br.referencesSize;
+        UA_BrowseResult_deleteMembers(&br);
+    }
+
+    return total;
+}
+
+START_TEST(Service_Browse_WithMaxResults) {
+    UA_Server *server = UA_Server_new(UA_ServerConfig_standard);
+
+    UA_BrowseDescription bd;
+    UA_BrowseDescription_init(&bd);
+    bd.resultMask = UA_BROWSERESULTMASK_ALL;
+    bd.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
+    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
+    UA_BrowseResult br = UA_Server_browse(server, 0, &bd);
+
+    ck_assert_int_eq(br.statusCode, UA_STATUSCODE_GOOD);
+    ck_assert(br.referencesSize > 0);
+
+    size_t total = br.referencesSize;
+    UA_BrowseResult_deleteMembers(&br);
+
+    for(UA_UInt32 i = 1; i <= total; i++) {
+        size_t sum_total =
+            browseWithMaxResults(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER), i);
+        ck_assert_int_eq(total, sum_total);
+    }
+    
+    UA_Server_delete(server);
+}
+END_TEST
 
 START_TEST(Service_Browse_WithBrowseName) {
     UA_Server *server = UA_Server_new(UA_ServerConfig_standard);
@@ -121,6 +175,7 @@ static Suite *testSuite_Service_TranslateBrowsePathsToNodeIds(void) {
     Suite *s = suite_create("Service_TranslateBrowsePathsToNodeIds");
     TCase *tc_browse = tcase_create("Browse Service");
     tcase_add_test(tc_browse, Service_Browse_WithBrowseName);
+    tcase_add_test(tc_browse, Service_Browse_WithMaxResults);
     suite_add_tcase(s, tc_browse);
 
     TCase *tc_translate = tcase_create("TranslateBrowsePathsToNodeIds");