diff options
author | dimitri staessens <[email protected]> | 2017-01-31 19:55:59 +0100 |
---|---|---|
committer | dimitri staessens <[email protected]> | 2017-01-31 20:36:18 +0100 |
commit | 988355d5bb62405f3bd3fbaade1f26ba4b2c274e (patch) | |
tree | 7406c71252aef416061e255d41352b105afbeac5 /src/lib/tests | |
parent | 45a8dd4ccb3874c411dac287cf7ce862f051aa14 (diff) | |
download | ouroboros-988355d5bb62405f3bd3fbaade1f26ba4b2c274e.tar.gz ouroboros-988355d5bb62405f3bd3fbaade1f26ba4b2c274e.zip |
lib: Add packing and unpacking RIB
The rib_pack function allows packing a subtree of the RIB for
dissemination. The options PACK_HASH_ROOT and PACK_HASH_ALL will add
the hashes for the root object of the packed subtree or every object
to the packed message respectively. Checking of the hashes is
currently only performed at the top level object, verifying the
complete operation.
The rib_unpack function unpacks a packed message and inserts its
contents in the RIB. The option UNPACK_CREATE flags that the unpack
operation is allowed to create new objects, else it will only update
existing objects. More advanced options could be added in the future.
The packed message structure uses Google Protocol Buffers, as defined
in ro.proto.
It adds tests for these functions to the rib_test.
Diffstat (limited to 'src/lib/tests')
-rw-r--r-- | src/lib/tests/rib_test.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/lib/tests/rib_test.c b/src/lib/tests/rib_test.c index bad01083..efc35d63 100644 --- a/src/lib/tests/rib_test.c +++ b/src/lib/tests/rib_test.c @@ -49,6 +49,9 @@ int rib_test(int argc, char ** kids; ssize_t ch; + uint8_t * buf; + ssize_t buf_len; + struct timespec t = {0, 100 * BILLION}; (void) argc; @@ -198,6 +201,42 @@ int rib_test(int argc, free(addr_name); + buf_len = rib_pack("/static_info", &buf, PACK_HASH_ALL); + if (buf_len < 0) { + printf("Failed pack.\n"); + rib_fini(); + return -1; + } + + if (rib_del("/static_info")) { + printf("Failed to delete.\n"); + rib_fini(); + return -1; + } + + if (rib_unpack(buf, buf_len, UNPACK_CREATE)) { + printf("Failed to unpack.\n"); + rib_fini(); + return -1; + } + + if (!rib_has("/static_info")) { + printf("Failed to find unpacked element.\n"); + rib_fini(); + return -1; + } + + ch = rib_children("/static_info", &kids); + if (ch != 2) { + printf("Wrong number of children returned.\n"); + rib_fini(); + return -1; + } + + while (ch > 0) + free(kids[--ch]); + free(kids); + set = ro_set_create(); if (set == NULL) { printf("Failed to create ro_set.\n"); |