diff options
Diffstat (limited to 'common/collection/collection_ut.c')
-rw-r--r-- | common/collection/collection_ut.c | 288 |
1 files changed, 275 insertions, 13 deletions
diff --git a/common/collection/collection_ut.c b/common/collection/collection_ut.c index 53fc4d70..c0adf348 100644 --- a/common/collection/collection_ut.c +++ b/common/collection/collection_ut.c @@ -553,26 +553,35 @@ int mixed_collection_test(void) int iterator_test(void) { struct collection_item *peer; + struct collection_item *initial; + struct collection_item *socket1; struct collection_item *socket2; + struct collection_item *socket3; struct collection_iterator *iterator = (struct collection_iterator *)(NULL); int error = EOK; struct collection_item *item = (struct collection_item *)(NULL); char binary_dump[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; int depth = 0; + int idepth = 0; printf("\n\n==== ITERATOR TEST ====\n\n"); - if ((error = col_create_collection(&peer, "peer", 0)) || - (error = col_add_str_property(peer, NULL, "hostname", "peerhost.mytest.com", 0)) || + if ((error = col_create_collection(&initial, "strater", 0)) || + (error = col_create_collection(&peer, "peer", 0)) || + (error = col_add_str_property(initial, NULL, "hostname", "peerhost.mytest.com", 0)) || /* Expect trailing zero to be truncated */ - (error = col_add_str_property(peer, NULL, "IPv4", "10.10.10.10", 12)) || - (error = col_add_str_property(peer, NULL, "IPv6", "bla:bla:bla:bla:bla:bla", 0))) { + (error = col_add_str_property(initial, NULL, "IPv4", "10.10.10.10", 12)) || + (error = col_add_str_property(initial, NULL, "IPv6", "bla:bla:bla:bla:bla:bla", 0)) || + (error = col_add_collection_to_collection(peer, NULL, NULL, initial, COL_ADD_MODE_FLAT))) { printf("Failed to add property. Error %d", error); col_destroy_collection(peer); + col_destroy_collection(initial); return error; } + col_destroy_collection(initial); + if ((error = col_create_collection(&socket1, "socket", 0)) || (error = col_add_int_property(socket1, NULL, "id", 1)) || (error = col_add_long_property(socket1, NULL, "packets", 100000000L)) || @@ -594,11 +603,20 @@ int iterator_test(void) return error; } - error = col_add_collection_to_collection(peer, NULL, "first", socket1, COL_ADD_MODE_EMBED); + if ((error = col_create_collection(&socket3, "socket", 0))) { + col_destroy_collection(peer); + col_destroy_collection(socket1); + col_destroy_collection(socket2); + printf("Failed to add property. Error %d\n", error); + return error; + } + + error = col_add_collection_to_collection(peer, NULL, "first", socket1, COL_ADD_MODE_REFERENCE); if (error) { col_destroy_collection(peer); col_destroy_collection(socket1); col_destroy_collection(socket2); + col_destroy_collection(socket3); printf("Failed to add collection to collection. Error %d\n", error); return error; } @@ -606,7 +624,26 @@ int iterator_test(void) error = col_add_collection_to_collection(peer, NULL, "second", socket2, COL_ADD_MODE_EMBED); if (error) { col_destroy_collection(peer); + col_destroy_collection(socket1); col_destroy_collection(socket2); + col_destroy_collection(socket3); + printf("Failed to add collection to collection. Error %d\n", error); + return error; + } + + error = col_add_collection_to_collection(peer, NULL, "third", socket3, COL_ADD_MODE_EMBED); + if (error) { + col_destroy_collection(peer); + col_destroy_collection(socket1); + col_destroy_collection(socket3); + printf("Failed to add collection to collection. Error %d\n", error); + return error; + } + + error = col_add_collection_to_collection(peer, NULL, "forth", socket1, COL_ADD_MODE_EMBED); + if (error) { + col_destroy_collection(peer); + col_destroy_collection(socket1); printf("Failed to add collection to collection. Error %d\n", error); return error; } @@ -619,34 +656,41 @@ int iterator_test(void) return error; } - printf("\n\nCollection:\n\n"); + printf("\n\nCollection (traverse default):\n\n"); col_debug_collection(peer, COL_TRAVERSE_DEFAULT); - /* This should also work becuase iterator holds to collection */ - col_destroy_collection(peer); + printf("\n\nCollection (traverse flat):\n\n"); + col_debug_collection(peer, COL_TRAVERSE_FLAT | COL_TRAVERSE_END); - printf("\n\nIteration:\n\n"); + printf("\n\nIteration (1):\n\n"); do { - depth = 0; - col_get_iterator_depth(iterator, &depth); + /* Loop through a collection */ error = col_iterate_collection(iterator, &item); if (error) { printf("Error (iterate): %d\n", error); col_unbind_iterator(iterator); + col_destroy_collection(peer); return error; } + depth = 0; + col_get_item_depth(iterator, &depth); + idepth = 0; + col_get_iterator_depth(iterator, &idepth); + /* Are we done ? */ if (item == (struct collection_item *)(NULL)) break; - printf("%*s Property (%s), type = %d, data size = %d\n", + printf("%*sProperty (%s), type = %d, data size = %d depth = %d idepth = %d\n", depth * 4, "", col_get_item_property(item, NULL), col_get_item_type(item), - col_get_item_length(item)); + col_get_item_length(item), + depth, + idepth); if ((strcmp(col_get_item_property(item, NULL), "id")==0) && (*((int *)(col_get_item_data(item))) == 1)) { @@ -655,6 +699,7 @@ int iterator_test(void) if (!error) { printf("We expected error but got seucces - bad.\n"); col_unbind_iterator(iterator); + col_destroy_collection(peer); return -1; } /* This should work! */ @@ -662,6 +707,7 @@ int iterator_test(void) if (error) { printf("We expected success but got error %d\n", error); col_unbind_iterator(iterator); + col_destroy_collection(peer); return error; } @@ -684,14 +730,230 @@ int iterator_test(void) (error = col_modify_double_item(item, "double", -1.1)) || (error = col_debug_item(item))) { printf("Failed to change property.\n"); + col_unbind_iterator(iterator); + col_destroy_collection(peer); return error; } } } while(1); + col_unbind_iterator(iterator); + + /* Bind iterator again in flat mode */ + error = col_bind_iterator(&iterator, peer, COL_TRAVERSE_FLAT); + if (error) { + printf("Error (bind): %d\n", error); + col_destroy_collection(peer); + return error; + } + + printf("\n\nIteration (2 - flat):\n\n"); + + do { + + /* Loop through a collection */ + error = col_iterate_collection(iterator, &item); + if (error) { + printf("Error (iterate): %d\n", error); + col_destroy_collection(peer); + col_unbind_iterator(iterator); + return error; + } + + /* Are we done ? */ + if (item == (struct collection_item *)(NULL)) break; + + depth = 0; + col_get_item_depth(iterator, &depth); + printf("%*s", depth * 4, ""); + col_debug_item(item); + + } + while(1); + + /* Do not forget to unbind iterator - otherwise there will be a leak */ + col_unbind_iterator(iterator); + + /* Bind iterator again in flat mode */ + error = col_bind_iterator(&iterator, peer, COL_TRAVERSE_FLAT | COL_TRAVERSE_END); + if (error) { + printf("Error (bind): %d\n", error); + col_destroy_collection(peer); + return error; + } + + printf("\n\nIteration (3 flat with end):\n\n"); + + do { + + /* Loop through a collection */ + error = col_iterate_collection(iterator, &item); + if (error) { + printf("Error (iterate): %d\n", error); + col_destroy_collection(peer); + col_unbind_iterator(iterator); + return error; + } + + /* Are we done ? */ + if (item == (struct collection_item *)(NULL)) break; + + depth = 0; + col_get_item_depth(iterator, &depth); + printf("%*s", depth * 4, ""); + col_debug_item(item); + + } + while(1); + /* Do not forget to unbind iterator - otherwise there will be a leak */ col_unbind_iterator(iterator); + + /* Bind iterator again in flat mode */ + error = col_bind_iterator(&iterator, peer, COL_TRAVERSE_DEFAULT | COL_TRAVERSE_END); + if (error) { + printf("Error (bind): %d\n", error); + col_destroy_collection(peer); + return error; + } + + printf("\n\nIteration (4 default with end):\n\n"); + + do { + + /* Loop through a collection */ + error = col_iterate_collection(iterator, &item); + if (error) { + printf("Error (iterate): %d\n", error); + col_destroy_collection(peer); + col_unbind_iterator(iterator); + return error; + } + + /* Are we done ? */ + if (item == (struct collection_item *)(NULL)) break; + + depth = 0; + col_get_item_depth(iterator, &depth); + printf("%*s", depth * 4, ""); + col_debug_item(item); + + } + while(1); + + /* Do not forget to unbind iterator - otherwise there will be a leak */ + col_unbind_iterator(iterator); + + /* Bind iterator again in flat mode */ + error = col_bind_iterator(&iterator, peer, COL_TRAVERSE_SHOWSUB | COL_TRAVERSE_END); + if (error) { + printf("Error (bind): %d\n", error); + col_destroy_collection(peer); + return error; + } + + + printf("\n\nIteration (5 show headers and references with end):\n\n"); + + do { + + /* Loop through a collection */ + error = col_iterate_collection(iterator, &item); + if (error) { + printf("Error (iterate): %d\n", error); + col_destroy_collection(peer); + col_unbind_iterator(iterator); + return error; + } + + /* Are we done ? */ + if (item == (struct collection_item *)(NULL)) break; + + depth = 0; + col_get_item_depth(iterator, &depth); + printf("%*s", depth * 4, ""); + col_debug_item(item); + + } + while(1); + + /* Do not forget to unbind iterator - otherwise there will be a leak */ + col_unbind_iterator(iterator); + + /* Bind iterator again in flat mode */ + error = col_bind_iterator(&iterator, peer, COL_TRAVERSE_SHOWSUB); + if (error) { + printf("Error (bind): %d\n", error); + col_destroy_collection(peer); + return error; + } + + + printf("\n\nIteration (6 show headers and references no END):\n\n"); + + do { + + /* Loop through a collection */ + error = col_iterate_collection(iterator, &item); + if (error) { + printf("Error (iterate): %d\n", error); + col_destroy_collection(peer); + col_unbind_iterator(iterator); + return error; + } + + /* Are we done ? */ + if (item == (struct collection_item *)(NULL)) break; + + depth = 0; + col_get_item_depth(iterator, &depth); + printf("%*s", depth * 4, ""); + col_debug_item(item); + + } + while(1); + + /* Do not forget to unbind iterator - otherwise there will be a leak */ + col_unbind_iterator(iterator); + + /* Bind iterator again in flat mode */ + error = col_bind_iterator(&iterator, peer, COL_TRAVERSE_ONLYSUB); + if (error) { + printf("Error (bind): %d\n", error); + col_destroy_collection(peer); + return error; + } + + /* This should also work becuase iterator holds to collection */ + col_destroy_collection(peer); + + printf("\n\nIteration (7 show headers only no END):\n\n"); + + do { + + /* Loop through a collection */ + error = col_iterate_collection(iterator, &item); + if (error) { + printf("Error (iterate): %d\n", error); + col_unbind_iterator(iterator); + return error; + } + + /* Are we done ? */ + if (item == (struct collection_item *)(NULL)) break; + + depth = 0; + col_get_item_depth(iterator, &depth); + printf("%*s", depth * 4, ""); + col_debug_item(item); + + } + while(1); + + /* Do not forget to unbind iterator - otherwise there will be a leak */ + col_unbind_iterator(iterator); + return EOK; } |