of: unittest: Check tree matches original after reverting a changeset
authorRob Herring <robh@kernel.org>
Tue, 1 Aug 2023 17:46:29 +0000 (11:46 -0600)
committerRob Herring <robh@kernel.org>
Thu, 24 Aug 2023 01:04:17 +0000 (20:04 -0500)
Enhance the changeset unittest to ensure after a revert, the tree matches
the original tree before the changeset was applied. Specifically, check an
added node is removed, a removed property is added back, and an updated
property has its original value.

Signed-off-by: Rob Herring <robh@kernel.org>
drivers/of/unittest.c

index 33c20ed..064a410 100644 (file)
@@ -797,6 +797,7 @@ static void __init of_unittest_property_copy(void)
 static void __init of_unittest_changeset(void)
 {
 #ifdef CONFIG_OF_DYNAMIC
+       int ret;
        struct property *ppadd, padd = { .name = "prop-add", .length = 1, .value = "" };
        struct property *ppname_n1,  pname_n1  = { .name = "name", .length = 3, .value = "n1"  };
        struct property *ppname_n2,  pname_n2  = { .name = "name", .length = 3, .value = "n2"  };
@@ -807,6 +808,7 @@ static void __init of_unittest_changeset(void)
        static const char * const str_array[] = { "str1", "str2", "str3" };
        const u32 u32_array[] = { 1, 2, 3 };
        struct of_changeset chgset;
+       const char *propstr = NULL;
 
        n1 = __of_node_dup(NULL, "n1");
        unittest(n1, "testcase setup failure\n");
@@ -886,6 +888,17 @@ static void __init of_unittest_changeset(void)
 
        unittest(!of_changeset_revert(&chgset), "revert failed\n");
 
+       unittest(!of_find_node_by_path("/testcase-data/changeset/n2/n21"),
+                "'%pOF' still present after revert\n", n21);
+
+       ppremove = of_find_property(parent, "prop-remove", NULL);
+       unittest(ppremove, "failed to find removed prop after revert\n");
+
+       ret = of_property_read_string(parent, "prop-update", &propstr);
+       unittest(!ret, "failed to find updated prop after revert\n");
+       if (!ret)
+               unittest(strcmp(propstr, "hello") == 0, "original value not in updated property after revert");
+
        of_changeset_destroy(&chgset);
 
        of_node_put(n1);