summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSzuWei Lin <szuweilin@google.com>2017-01-10 11:54:22 +0800
committerSzuWei Lin <szuweilin@google.com>2017-01-16 17:19:39 +0800
commitb63f3b74cc6f87a1106e2afd49e82cac3538ef53 (patch)
tree07c043517d2e001d48cbc80dea554bb416a52fb4 /tests
parentda8237d9cceccc3e650ad433689ee4c6ba93b80b (diff)
downloadlibufdt-b63f3b74cc6f87a1106e2afd49e82cac3538ef53.tar.gz
Add shell scripts to verify DTO
Add two shell scripts to verify DTO (device tree overlay). verify_dto_inc.sh uses syntax /include/ to simulate DTO. verify_dto_ovl.sh uses dtc to compile dts to dtb, and uses ufdt_overlay_test_app which implemented with libufdt to apply DTO. Also modified test code and test cases to use these shell scripts. Bug: 33954716 Test: run test scripts (see libufdt/tests/README) Change-Id: Iaa16d6d2b9a6cb767ed0cf25180b0e6ee290415d
Diffstat (limited to 'tests')
-rwxr-xr-xtests/common.sh18
-rwxr-xr-xtests/gen_test.sh91
-rwxr-xr-xtests/run_tests.sh5
-rw-r--r--tests/testdata/apply_fragment-base.dts (renamed from tests/testdata/apply_fragment.base_dts)1
-rw-r--r--tests/testdata/apply_fragment-overlay.dts (renamed from tests/testdata/apply_fragment.add_dts)2
-rw-r--r--tests/testdata/dtc_local_fixup.add_dts5
-rw-r--r--tests/testdata/libufdt_local_fixup.add_ov_dts11
-rw-r--r--tests/testdata/libufdt_local_fixup.base_dts8
-rw-r--r--tests/testdata/local_fixup-base.dts (renamed from tests/testdata/dtc_local_fixup.base_dts)3
-rw-r--r--tests/testdata/local_fixup-overlay.dts (renamed from tests/testdata/libufdt_local_fixup.add_dts)2
-rw-r--r--tests/testdata/local_fixup_with_offset-base.dts (renamed from tests/testdata/local_fixup_with_offset.base_dts)1
-rw-r--r--tests/testdata/local_fixup_with_offset-overlay.dts (renamed from tests/testdata/local_fixup_with_offset.add_dts)2
-rw-r--r--tests/testdata/no_local_fixup-base.dts (renamed from tests/testdata/no_local_fixup.base_dts)0
-rw-r--r--tests/testdata/no_local_fixup-overlay.dts (renamed from tests/testdata/no_local_fixup.add_dts)2
-rw-r--r--tests/testdata/overlay_2_layers-base.dts (renamed from tests/testdata/overlay_2_layers.base_dts)0
-rw-r--r--tests/testdata/overlay_2_layers-overlay.dts (renamed from tests/testdata/overlay_2_layers.add_dts)3
-rwxr-xr-xtests/verify_dto_inc.sh51
-rwxr-xr-xtests/verify_dto_ovl.sh48
18 files changed, 136 insertions, 117 deletions
diff --git a/tests/common.sh b/tests/common.sh
index 4c8ce78..7fcc4c4 100755
--- a/tests/common.sh
+++ b/tests/common.sh
@@ -13,20 +13,6 @@ command_exists () {
type "$1" &> /dev/null;
}
-dtb_to_dts () {
- dtc -O dts -s $1
- if [ $? -ne 0 ]; then
- die "dtb_to_dts $1 failed!"
- fi
-}
-
-dts_to_dtb () {
- dtc -O dtb -s -@ $1
- if [ $? -ne 0 ]; then
- die "dts_to_dtb $1 failed!"
- fi
-}
-
remove_local_fixups() {
sed '/__local_fixups__/ {s/^\s*__local_fixups__\s*//; :again;N; s/{[^{}]*};//; /^$/ !b again; d}' $1
}
@@ -36,6 +22,6 @@ remove_overlay_stuff() {
sed "/__symbols__/,/[}];/d" $1 | sed "/\(^[ \t]*phandle\)/d" | sed "/\(^[ \t]*linux,phandle\)/d" | sed '/^\s*$/d' | remove_local_fixups
}
-dt_diff () {
- diff -u <(dtb_to_dts "$1" | remove_overlay_stuff) <(dtb_to_dts "$2" | remove_overlay_stuff)
+dts_diff () {
+ diff -u <(cat "$1" | remove_overlay_stuff) <(cat "$2" | remove_overlay_stuff)
}
diff --git a/tests/gen_test.sh b/tests/gen_test.sh
index 74f7177..dcb6d2d 100755
--- a/tests/gen_test.sh
+++ b/tests/gen_test.sh
@@ -4,88 +4,39 @@
# the "base" and "add" device tree source (.dts) files in two
# different ways.
#
-# 1) /include/ the "add" at the end of the "base" file and
-# compile with dtc to make the "gold standard" .dtb
+# 1) Use /include/ and compile via dtc to make the "gold standard"
#
-# 2) Compile them separately (modifying the "add" file to
-# be an overlay file) with dtc, then join them with the
-# ov_test program
+# 2) Compile them separately dtc, and join them with the
+# ufdt_apply_overlay program
#
-# To do this, we need to generate a lot of files from the .base_dts
-# and .add_dts files:
-# .base_inc_dts - Has the /include/ "${FILENAME}.add_dts" at the end.
-# .base_inc_dtb - The dtc-generated "gold standard"
-# .add_ov_dts - Has the /plugin/ at the start
-# .base_dtb - Compiled version of just the base
-# .add_ov_dtbo - Compiled version of the overlay
-# .base_ov_dtb - overlay-test-joined version of the dtb
-#
-# Then, compare .base_inc_dtb and .base_ov_dtb with dtdiff
-# (or maybe diff?) and return 0 iff they are identical.
+# Then, compare 1) and 2) with dts_diff (diff merged nodes) and return 0
+# iff they are identical.
-# Include some functions from common.sh.
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
source ${SCRIPT_DIR}/common.sh
-# Constants
-IN_DATA_DIR="testdata"
-OUT_DATA_DIR="test-out"
-
-# Global variables
-FILENAME=$1
-
on_exit() {
- rm -rf "${OUT_DATA_DIR}"
-}
-
-# Generate test cases to OUT_DATA_DIR
-prepare_tests() {
- cp "${IN_DATA_DIR}/${FILENAME}.base_dts" "${OUT_DATA_DIR}/${FILENAME}.base_dts"
- cp "${IN_DATA_DIR}/${FILENAME}.add_dts" "${OUT_DATA_DIR}/${FILENAME}.add_dts"
-
- # Add the "include" to make .base_inc_dts
- cp "${IN_DATA_DIR}/${FILENAME}.base_dts" "${OUT_DATA_DIR}/${FILENAME}.base_inc_dts"
- echo "/include/ \"${FILENAME}.add_dts\"" >> "${OUT_DATA_DIR}/${FILENAME}.base_inc_dts"
-
- # Generate .base_inc_dtb
- dtc -@ -O dtb -s -b 0 -o "${OUT_DATA_DIR}/${FILENAME}.base_inc.dtb" \
- "${OUT_DATA_DIR}/${FILENAME}.base_inc_dts"
-
- # Add /dts-v1/ /plugin/; in front of .add_dts file. In order to trigger dtc's
- # fragment generation mechanism.
- if [ -a "${IN_DATA_DIR}/${FILENAME}.add_ov_dts" ]; then
- cp "${IN_DATA_DIR}/${FILENAME}.add_ov_dts" "${OUT_DATA_DIR}/${FILENAME}.add_ov_dts"
- else
- sed "1i/dts-v1/ /plugin/;" "${IN_DATA_DIR}/${FILENAME}.add_dts" > \
- "${OUT_DATA_DIR}/${FILENAME}.add_ov_dts"
- fi
+ rm -rf "$TEMP_DIR"
}
-# Compile test cases into dtb, and do the diff things.
-compile_and_diff() {
- # Compile the base to make .base_dtb
- dtc -O dtb -b 0 -qq -@ -o "${OUT_DATA_DIR}/${FILENAME}.base_dtb" \
- "${OUT_DATA_DIR}/${FILENAME}.base_dts"
-
- # Compile the overlay to make .add_ov_dtbo
- dtc -O dtb -b 0 -qq -@ -o "${OUT_DATA_DIR}/${FILENAME}.add_ov_dtbo" \
- "${OUT_DATA_DIR}/${FILENAME}.add_ov_dts"
-
- # Run ov_test to combine .base_dtb and .add_ov_dtbo
- # into .base_ov_dtb
- ufdt_apply_overlay "${OUT_DATA_DIR}/${FILENAME}.base_dtb" \
- "${OUT_DATA_DIR}/${FILENAME}.add_ov_dtbo" \
- "${OUT_DATA_DIR}/${FILENAME}.base_ov.dtb"
-
- # Run the diff
- dt_diff ${OUT_DATA_DIR}/${FILENAME}.base_inc.dtb ${OUT_DATA_DIR}/${FILENAME}.base_ov.dtb
-}
+# Constants
+IN_DATA_DIR="testdata"
+TEMP_DIR=`mktemp -d`
# The script will exit directly if any command fails.
set -e
trap on_exit EXIT
-mkdir -p "${OUT_DATA_DIR}" >& /dev/null
+# Global variables
+TESTCASE_NAME=$1
+BASE_DTS="$IN_DATA_DIR/${TESTCASE_NAME}-base.dts"
+OVERLAY_DTS="$IN_DATA_DIR/${TESTCASE_NAME}-overlay.dts"
+INC_MERGED_DTS="$TEMP_DIR/${TESTCASE_NAME}-inc-merged.dts"
+OVL_MERGED_DTS="$TEMP_DIR/${TESTCASE_NAME}-ovl-merged.dts"
-prepare_tests
-compile_and_diff
+#
+# Complie and diff
+#
+$SCRIPT_DIR/verify_dto_inc.sh "$BASE_DTS" "$OVERLAY_DTS" "$INC_MERGED_DTS"
+$SCRIPT_DIR/verify_dto_ovl.sh "$BASE_DTS" "$OVERLAY_DTS" "$OVL_MERGED_DTS"
+dts_diff "$INC_MERGED_DTS" "$OVL_MERGED_DTS"
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index 845f190..1e13528 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -47,12 +47,9 @@ main() {
"apply_fragment" \
"Run test about fdt_apply_fragment with phandle update"
run_test_case \
- "libufdt_local_fixup" \
+ "local_fixup" \
"Run test about fdt_overlay_do_local_fixups"
run_test_case \
- "dtc_local_fixup" \
- "Run test about local fixup format consistent with current dtc"
- run_test_case \
"local_fixup_with_offset" \
"Run test about dealing with local fixup with offset > 0"
run_test_case \
diff --git a/tests/testdata/apply_fragment.base_dts b/tests/testdata/apply_fragment-base.dts
index c116a9b..30880bb 100644
--- a/tests/testdata/apply_fragment.base_dts
+++ b/tests/testdata/apply_fragment-base.dts
@@ -1,4 +1,5 @@
/dts-v1/;
+
/ {
a: a {};
b: b {};
diff --git a/tests/testdata/apply_fragment.add_dts b/tests/testdata/apply_fragment-overlay.dts
index 7666089..f3e8073 100644
--- a/tests/testdata/apply_fragment.add_dts
+++ b/tests/testdata/apply_fragment-overlay.dts
@@ -1,2 +1,4 @@
+/dts-v1/ /plugin/;
+
&a { d: d{}; };
&b { e{}; };
diff --git a/tests/testdata/dtc_local_fixup.add_dts b/tests/testdata/dtc_local_fixup.add_dts
deleted file mode 100644
index b158cd7..0000000
--- a/tests/testdata/dtc_local_fixup.add_dts
+++ /dev/null
@@ -1,5 +0,0 @@
-&a {
- c: c{
- d{ interrupt_parent = <&c>; };
- };
-};
diff --git a/tests/testdata/libufdt_local_fixup.add_ov_dts b/tests/testdata/libufdt_local_fixup.add_ov_dts
deleted file mode 100644
index 2734141..0000000
--- a/tests/testdata/libufdt_local_fixup.add_ov_dts
+++ /dev/null
@@ -1,11 +0,0 @@
-/dts-v1/ /plugin/;
-/ {
- fragment@0 {
- target = <&a>;
- __overlay__ {
- c: c{
- d{ interrupt_parent = <&c>; };
- };
- };
- };
-};
diff --git a/tests/testdata/libufdt_local_fixup.base_dts b/tests/testdata/libufdt_local_fixup.base_dts
deleted file mode 100644
index 556e3dc..0000000
--- a/tests/testdata/libufdt_local_fixup.base_dts
+++ /dev/null
@@ -1,8 +0,0 @@
-/dts-v1/;
-/ {
- a: a {
- interrupt_parent = <&a>;
- };
-};
-
-
diff --git a/tests/testdata/dtc_local_fixup.base_dts b/tests/testdata/local_fixup-base.dts
index f5a1086..bc2d837 100644
--- a/tests/testdata/dtc_local_fixup.base_dts
+++ b/tests/testdata/local_fixup-base.dts
@@ -1,8 +1,7 @@
/dts-v1/;
+
/ {
a: a {
interrupt_parent = <&a>;
};
};
-
-
diff --git a/tests/testdata/libufdt_local_fixup.add_dts b/tests/testdata/local_fixup-overlay.dts
index b158cd7..719a1c8 100644
--- a/tests/testdata/libufdt_local_fixup.add_dts
+++ b/tests/testdata/local_fixup-overlay.dts
@@ -1,3 +1,5 @@
+/dts-v1/ /plugin/;
+
&a {
c: c{
d{ interrupt_parent = <&c>; };
diff --git a/tests/testdata/local_fixup_with_offset.base_dts b/tests/testdata/local_fixup_with_offset-base.dts
index f90145d..bc2d837 100644
--- a/tests/testdata/local_fixup_with_offset.base_dts
+++ b/tests/testdata/local_fixup_with_offset-base.dts
@@ -1,4 +1,5 @@
/dts-v1/;
+
/ {
a: a {
interrupt_parent = <&a>;
diff --git a/tests/testdata/local_fixup_with_offset.add_dts b/tests/testdata/local_fixup_with_offset-overlay.dts
index f45757e..58e6461 100644
--- a/tests/testdata/local_fixup_with_offset.add_dts
+++ b/tests/testdata/local_fixup_with_offset-overlay.dts
@@ -1,3 +1,5 @@
+/dts-v1/ /plugin/;
+
&a {
c: c{
d{ interrupt_parent = <0 1 &c 2 3>; };
diff --git a/tests/testdata/no_local_fixup.base_dts b/tests/testdata/no_local_fixup-base.dts
index 01bad36..01bad36 100644
--- a/tests/testdata/no_local_fixup.base_dts
+++ b/tests/testdata/no_local_fixup-base.dts
diff --git a/tests/testdata/no_local_fixup.add_dts b/tests/testdata/no_local_fixup-overlay.dts
index 2cdf6a4..4be517f 100644
--- a/tests/testdata/no_local_fixup.add_dts
+++ b/tests/testdata/no_local_fixup-overlay.dts
@@ -1,3 +1,5 @@
+/dts-v1/ /plugin/;
+
&a { c = "new-c";
d: d = "d";
};
diff --git a/tests/testdata/overlay_2_layers.base_dts b/tests/testdata/overlay_2_layers-base.dts
index 1d7b578..1d7b578 100644
--- a/tests/testdata/overlay_2_layers.base_dts
+++ b/tests/testdata/overlay_2_layers-base.dts
diff --git a/tests/testdata/overlay_2_layers.add_dts b/tests/testdata/overlay_2_layers-overlay.dts
index 952a462..2140d8e 100644
--- a/tests/testdata/overlay_2_layers.add_dts
+++ b/tests/testdata/overlay_2_layers-overlay.dts
@@ -1,7 +1,8 @@
+/dts-v1/ /plugin/;
+
&a {
g = "g";
d {
f = "f";
};
};
-
diff --git a/tests/verify_dto_inc.sh b/tests/verify_dto_inc.sh
new file mode 100755
index 0000000..4832593
--- /dev/null
+++ b/tests/verify_dto_inc.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+PROG_NAME=`basename $0`
+
+function usage() {
+ echo "Usage:"
+ echo " $PROG_NAME <Base DTS> <Overlay DTS> <Output DTS>"
+}
+
+function on_exit() {
+ rm -rf "$TEMP_DIR"
+}
+
+#
+# Start
+#
+
+if [[ $# -lt 3 ]]; then
+ usage
+ exit 1
+fi
+
+BASE_DTS=$1
+OVERLAY_DTS=$2
+OUT_DTS=$3
+
+TEMP_DIR=`mktemp -d`
+# The script will exit directly if any command fails.
+set -e
+trap on_exit EXIT
+
+# Finds '/dts-v1/ /plugin/;' and replace to '/* REMOVED */'
+OVERLAY_DTS_DIR=`dirname "$OVERLAY_DTS"`
+OVERLAY_DTS_NAME=`basename "$OVERLAY_DTS"`
+OVERLAY_DT_WO_HEADER_DTS="$TEMP_DIR/$OVERLAY_DTS_NAME"
+sed "s/^\\s*\\/dts-v1\\/\s*\\/plugin\\/\\s*;/\\/\\* REMOVED \\*\\//g" \
+ "$OVERLAY_DTS" > "$OVERLAY_DT_WO_HEADER_DTS"
+
+# Appends /include/ ...;
+BASE_DTS_DIR=`dirname "$BASE_DTS"`
+BASE_DTS_NAME=`basename "$BASE_DTS"`
+BASE_DT_WITH_INC_DTS="$TEMP_DIR/$BASE_DTS_NAME"
+cp "$BASE_DTS" "$BASE_DT_WITH_INC_DTS"
+echo "/include/ \"$OVERLAY_DT_WO_HEADER_DTS\"" >> "$BASE_DT_WITH_INC_DTS"
+
+# Simulate device tree overlay
+MERGED_DTB="$BASE_DT_WITH_INC_DTS.dtb"
+dtc -@ -s -i "$BASE_DTS_DIR" -i "$OVERLAY_DTS_DIR" -O dtb -o "$MERGED_DTB" "$BASE_DT_WITH_INC_DTS"
+
+# Dump
+dtc -s -O dts -o "$OUT_DTS" "$MERGED_DTB"
diff --git a/tests/verify_dto_ovl.sh b/tests/verify_dto_ovl.sh
new file mode 100755
index 0000000..8b4827a
--- /dev/null
+++ b/tests/verify_dto_ovl.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+PROG_NAME=`basename $0`
+
+function usage() {
+ echo "Usage:"
+ echo " $PROG_NAME <Base DTS> <Overlay DTS> <Output DTS>"
+}
+
+function on_exit() {
+ rm -rf "$TEMP_DIR"
+}
+
+#
+# Start
+#
+
+if [[ $# -lt 3 ]]; then
+ usage
+ exit 1
+fi
+
+BASE_DTS=$1
+OVERLAY_DTS=$2
+OUT_DTS=$3
+
+TEMP_DIR=`mktemp -d`
+# The script will exit directly if any command fails.
+set -e
+trap on_exit EXIT
+
+# Compile the *-base.dts to make *-base.dtb
+BASE_DTS_NAME=`basename "$BASE_DTS"`
+BASE_DTB="$TEMP_DIR/${BASE_DTS_NAME}-base.dtb"
+dtc -@ -s -qq -O dtb -o "$BASE_DTB" "$BASE_DTS"
+
+# Compile the *-overlay.dts to make *-overlay.dtb
+OVERLAY_DTS_NAME=`basename "$OVERLAY_DTS"`
+OVERLAY_DTB="$TEMP_DIR/${OVERLAY_DTS_NAME}-overlay.dtb"
+dtc -@ -s -qq -O dtb -o "$OVERLAY_DTB" "$OVERLAY_DTS"
+
+# Run ufdt_apply_overlay to combine *-base.dtb and *-overlay.dtb
+# into *-merged.dtb
+MERGED_DTB="$TEMP_DIR/${BASE_DTS_NAME}-merged.dtb"
+ufdt_apply_overlay "$BASE_DTB" "$OVERLAY_DTB" "$MERGED_DTB"
+
+# Dump
+dtc -s -O dts -o "$OUT_DTS" "$MERGED_DTB"