diff options
author | Daniel Axtens <dja@axtens.net> | 2015-02-27 16:06:32 +1100 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2015-03-05 11:27:54 +1100 |
commit | faca6acc2e5d1b5fe3e0c7c3077bb80189616c70 (patch) | |
tree | 94038dd3d1f042d65ed0f0922459404cf4f87abe | |
parent | 98a730689a494c554faa69dc0a0d32c713b1e3fd (diff) | |
download | skiboot-faca6acc2e5d1b5fe3e0c7c3077bb80189616c70.zip skiboot-faca6acc2e5d1b5fe3e0c7c3077bb80189616c70.tar.gz skiboot-faca6acc2e5d1b5fe3e0c7c3077bb80189616c70.tar.bz2 |
core/test: Test that device paths/names function as expected.
Test dt_get_path/dt_find_by_name/dt_find_by_path all respond as expected.
Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r-- | core/test/run-device.c | 65 |
1 files changed, 61 insertions, 4 deletions
diff --git a/core/test/run-device.c b/core/test/run-device.c index fa9e951..e2ce340 100644 --- a/core/test/run-device.c +++ b/core/test/run-device.c @@ -33,33 +33,90 @@ static inline bool fake_is_rodata(const void *p) #include "../../ccan/list/list.c" /* For list_check */ #include <assert.h> +static void check_path(const struct dt_node *node, const char * expected_path) +{ + char * path; + path = dt_get_path(node); + if (strcmp(path, expected_path) != 0) { + printf("check_path: expected %s, got %s\n", expected_path, path); + } + assert(strcmp(path, expected_path) == 0); + free(path); +} + int main(void) { - struct dt_node *root, *c1, *c2, *gc1, *gc2, *gc3, *ggc1, *i; + struct dt_node *root, *c1, *c2, *gc1, *gc2, *gc3, *ggc1; + struct dt_node *addrs, *addr1, *addr2; + struct dt_node *i; const struct dt_property *p; struct dt_property *p2; unsigned int n; root = dt_new_root("root"); assert(!list_top(&root->properties, struct dt_property, list)); + check_path(root, "/root"); + c1 = dt_new(root, "c1"); assert(!list_top(&c1->properties, struct dt_property, list)); + check_path(c1, "root/c1"); + assert(dt_find_by_name(root, "c1") == c1); + assert(dt_find_by_path(root, "/c1") == c1); + c2 = dt_new(root, "c2"); assert(!list_top(&c2->properties, struct dt_property, list)); + check_path(c2, "root/c2"); + assert(dt_find_by_name(root, "c2") == c2); + assert(dt_find_by_path(root, "/c2") == c2); + gc1 = dt_new(c1, "gc1"); assert(!list_top(&gc1->properties, struct dt_property, list)); + check_path(gc1, "root/c1/gc1"); + assert(dt_find_by_name(root, "gc1") == gc1); + assert(dt_find_by_path(root, "/c1/gc1") == gc1); + gc2 = dt_new(c1, "gc2"); assert(!list_top(&gc2->properties, struct dt_property, list)); + check_path(gc2, "root/c1/gc2"); + assert(dt_find_by_name(root, "gc2") == gc2); + assert(dt_find_by_path(root, "/c1/gc2") == gc2); + gc3 = dt_new(c1, "gc3"); assert(!list_top(&gc3->properties, struct dt_property, list)); + check_path(gc3, "root/c1/gc3"); + assert(dt_find_by_name(root, "gc3") == gc3); + assert(dt_find_by_path(root, "/c1/gc3") == gc3); + ggc1 = dt_new(gc1, "ggc1"); assert(!list_top(&ggc1->properties, struct dt_property, list)); - + check_path(ggc1, "root/c1/gc1/ggc1"); + assert(dt_find_by_name(root, "ggc1") == ggc1); + assert(dt_find_by_path(root, "/c1/gc1/ggc1") == ggc1); + + addrs = dt_new(root, "addrs"); + assert(!list_top(&addrs->properties, struct dt_property, list)); + check_path(addrs, "root/addrs"); + assert(dt_find_by_name(root, "addrs") == addrs); + assert(dt_find_by_path(root, "/addrs") == addrs); + + addr1 = dt_new_addr(addrs, "addr", 0x1337); + assert(!list_top(&addr1->properties, struct dt_property, list)); + check_path(addr1, "root/addrs/addr@1337"); + assert(dt_find_by_name(root, "addr@1337") == addr1); + assert(dt_find_by_path(root, "/addrs/addr@1337") == addr1); + + addr2 = dt_new_2addr(addrs, "2addr", 0xdead, 0xbeef); + assert(!list_top(&addr2->properties, struct dt_property, list)); + check_path(addr2, "root/addrs/2addr@dead,beef"); + assert(dt_find_by_name(root, "2addr@dead,beef") == addr2); + assert(dt_find_by_path(root, "/addrs/2addr@dead,beef") == addr2); + + /* Test walking the tree, checking and setting values */ for (n = 0, i = dt_first(root); i; i = dt_next(root, i), n++) { assert(!list_top(&i->properties, struct dt_property, list)); dt_add_property_cells(i, "visited", 1); } - assert(n == 6); + assert(n == 9); for (n = 0, i = dt_first(root); i; i = dt_next(root, i), n++) { p = list_top(&i->properties, struct dt_property, list); @@ -67,7 +124,7 @@ int main(void) assert(p->len == sizeof(u32)); assert(fdt32_to_cpu(*(u32 *)p->prop) == 1); } - assert(n == 6); + assert(n == 9); dt_add_property_cells(c1, "some-property", 1, 2, 3); p = dt_find_property(c1, "some-property"); |