Browse Source

tests: More thorough tests of libfdt overlay application without dtc

At the moment we have some rudimentary tests of the fdt_overlay_apply()
function which don't rely on overlay generation support in dtc.  This is
done by avoiding any external references in the sample overlay, in
particularly using the 'target-path' syntax instead of 'target' to avoid
needing external references in the fragment targets.  Thus this test case
doesn't exercise libfdt's processing of the __fixups__ node at all.

We do test that somewhat in combination with dtc's overlay support.
However, in the interests of being able to quickly determine which side a
bug is on, it would be nice to exercise this without requiring the dtc
support.

This adds testcases to do so, by making some examples with manually
constructed __symbols__ and __fixups__ nodes.  In addition we rename some
of the test data files and add some extra check_path tests to make it a bit
clearer what's going on here.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
main
David Gibson 8 years ago
parent
commit
6ea8cd944f
  1. 25
      tests/overlay_base_manual_symbols.dts
  2. 112
      tests/overlay_overlay_manual_fixups.dts
  3. 0
      tests/overlay_overlay_no_fixups.dts
  4. 26
      tests/run_tests.sh

25
tests/overlay_base_manual_symbols.dts

@ -0,0 +1,25 @@
/*
* Copyright (c) 2016 NextThing Co
* Copyright (c) 2016 Free Electrons
*
* SPDX-License-Identifier: GPL-2.0+
*/

/dts-v1/;

/ {
test: test-node {
phandle = <&test>; /* Force phandle generation */
test-int-property = <42>;
test-str-property = "foo";

subtest: sub-test-node {
sub-test-property;
};
};
__symbols__ {
test = &test;
};
};


112
tests/overlay_overlay_manual_fixups.dts

@ -0,0 +1,112 @@
/*
* Copyright (c) 2016 NextThing Co
* Copyright (c) 2016 Free Electrons
* Copyright (c) 2016 Konsulko Inc.
*
* SPDX-License-Identifier: GPL-2.0+
*/

/dts-v1/;

/* Note no /plugin/ tag - we're manually generating the metadata for
testing purposes */

/ {
/* Test that we can change an int by another */
fragment@0 {
target = <0xffffffff /*&test*/>;

__overlay__ {
test-int-property = <43>;
};
};

/* Test that we can replace a string by a longer one */
fragment@1 {
target = <0xffffffff /*&test*/>;

__overlay__ {
test-str-property = "foobar";
};
};

/* Test that we add a new property */
fragment@2 {
target = <0xffffffff /*&test*/>;

__overlay__ {
test-str-property-2 = "foobar2";
};
};

/* Test that we add a new node (by phandle) */
fragment@3 {
target = <0xffffffff /*&test*/>;

__overlay__ {
new-node {
new-property;
};
};
};

fragment@5 {
target = <0xffffffff /*&test*/>;

__overlay__ {
local: new-local-node {
new-property;
};
};
};

fragment@6 {
target = <0xffffffff /*&test*/>;

__overlay__ {
test-phandle = <0xffffffff /*&test*/>, <&local>;
};
};

fragment@7 {
target = <0xffffffff /*&test*/>;

__overlay__ {
test-several-phandle = <&local>, <&local>;
};
};

fragment@8 {
target = <0xffffffff /*&test*/>;

__overlay__ {
sub-test-node {
new-sub-test-property;
};
};
};

__local_fixups__ {
fragment@6 {
__overlay__ {
test-phandle = <4>;
};
};
fragment@7 {
__overlay__ {
test-several-phandle = <0 4>;
};
};
};
__fixups__ {
test = "/fragment@0:target:0",
"/fragment@1:target:0",
"/fragment@2:target:0",
"/fragment@3:target:0",
"/fragment@5:target:0",
"/fragment@6:target:0",
"/fragment@6/__overlay__:test-phandle:0",
"/fragment@7:target:0",
"/fragment@8:target:0";
};
};

0
tests/overlay_overlay_nodtc.dts → tests/overlay_overlay_no_fixups.dts

26
tests/run_tests.sh

@ -171,9 +171,31 @@ BAD_FIXUP_TREES="bad_index \


# Test to exercise libfdt overlay application without dtc's overlay support # Test to exercise libfdt overlay application without dtc's overlay support
libfdt_overlay_tests () { libfdt_overlay_tests () {
# First test a doctored overlay which requires only local fixups
run_dtc_test -I dts -O dtb -o overlay_base_no_symbols.test.dtb overlay_base.dts run_dtc_test -I dts -O dtb -o overlay_base_no_symbols.test.dtb overlay_base.dts
run_dtc_test -I dts -O dtb -o overlay_overlay_no_symbols.test.dtb overlay_overlay_nodtc.dts run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__symbols__"
run_test overlay overlay_base_no_symbols.test.dtb overlay_overlay_no_symbols.test.dtb run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__fixups__"
run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__local_fixups__"

run_dtc_test -I dts -O dtb -o overlay_overlay_no_fixups.test.dtb overlay_overlay_no_fixups.dts
run_test check_path overlay_overlay_no_fixups.test.dtb not-exists "/__symbols__"
run_test check_path overlay_overlay_no_fixups.test.dtb not-exists "/__fixups__"
run_test check_path overlay_overlay_no_fixups.test.dtb exists "/__local_fixups__"

run_test overlay overlay_base_no_symbols.test.dtb overlay_overlay_no_fixups.test.dtb

# Then test with manually constructed fixups
run_dtc_test -I dts -O dtb -o overlay_base_manual_symbols.test.dtb overlay_base_manual_symbols.dts
run_test check_path overlay_base_manual_symbols.test.dtb exists "/__symbols__"
run_test check_path overlay_base_manual_symbols.test.dtb not-exists "/__fixups__"
run_test check_path overlay_base_manual_symbols.test.dtb not-exists "/__local_fixups__"

run_dtc_test -I dts -O dtb -o overlay_overlay_manual_fixups.test.dtb overlay_overlay_manual_fixups.dts
run_test check_path overlay_overlay_manual_fixups.test.dtb not-exists "/__symbols__"
run_test check_path overlay_overlay_manual_fixups.test.dtb exists "/__fixups__"
run_test check_path overlay_overlay_manual_fixups.test.dtb exists "/__local_fixups__"

run_test overlay overlay_base_manual_symbols.test.dtb overlay_overlay_manual_fixups.test.dtb


# Bad fixup tests # Bad fixup tests
for test in $BAD_FIXUP_TREES; do for test in $BAD_FIXUP_TREES; do

Loading…
Cancel
Save