aboutsummaryrefslogtreecommitdiff
path: root/core/test/run-device.c
diff options
context:
space:
mode:
authorDaniel Axtens <dja@axtens.net>2015-02-27 16:06:32 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2015-03-05 11:27:54 +1100
commitfaca6acc2e5d1b5fe3e0c7c3077bb80189616c70 (patch)
tree94038dd3d1f042d65ed0f0922459404cf4f87abe /core/test/run-device.c
parent98a730689a494c554faa69dc0a0d32c713b1e3fd (diff)
downloadskiboot-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>
Diffstat (limited to 'core/test/run-device.c')
-rw-r--r--core/test/run-device.c65
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");