mirror of
https://github.com/dgibson/dtc.git
synced 2025-10-14 00:37:41 -04:00
tests: Add check_path test
Add a test that checks for existence or not of a node. It is useful for testing the various cases when generating symbols and fixups for dynamic device tree objects. Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
20f29d8d41
commit
9637e3f772
4 changed files with 88 additions and 1 deletions
1
tests/.gitignore
vendored
1
tests/.gitignore
vendored
|
@ -8,6 +8,7 @@ tmp.*
|
||||||
/asm_tree_dump
|
/asm_tree_dump
|
||||||
/boot-cpuid
|
/boot-cpuid
|
||||||
/char_literal
|
/char_literal
|
||||||
|
/check_path
|
||||||
/del_node
|
/del_node
|
||||||
/del_property
|
/del_property
|
||||||
/dtbs_equal_ordered
|
/dtbs_equal_ordered
|
||||||
|
|
|
@ -25,7 +25,8 @@ LIB_TESTS_L = get_mem_rsv \
|
||||||
integer-expressions \
|
integer-expressions \
|
||||||
property_iterate \
|
property_iterate \
|
||||||
subnode_iterate \
|
subnode_iterate \
|
||||||
overlay overlay_bad_fixup
|
overlay overlay_bad_fixup \
|
||||||
|
check_path
|
||||||
LIB_TESTS = $(LIB_TESTS_L:%=$(TESTS_PREFIX)%)
|
LIB_TESTS = $(LIB_TESTS_L:%=$(TESTS_PREFIX)%)
|
||||||
|
|
||||||
LIBTREE_TESTS_L = truncated_property
|
LIBTREE_TESTS_L = truncated_property
|
||||||
|
|
82
tests/check_path.c
Normal file
82
tests/check_path.c
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
* libfdt - Flat Device Tree manipulation
|
||||||
|
* Testcase for node existence
|
||||||
|
* Copyright (C) 2016 Konsulko Inc.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2.1 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <libfdt.h>
|
||||||
|
|
||||||
|
#include "tests.h"
|
||||||
|
|
||||||
|
#define CHECK(code) \
|
||||||
|
{ \
|
||||||
|
if (code) \
|
||||||
|
FAIL(#code ": %s", fdt_strerror(code)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 4k ought to be enough for anybody */
|
||||||
|
#define FDT_COPY_SIZE (4 * 1024)
|
||||||
|
|
||||||
|
static void *open_dt(char *path)
|
||||||
|
{
|
||||||
|
void *dt, *copy;
|
||||||
|
|
||||||
|
dt = load_blob(path);
|
||||||
|
copy = xmalloc(FDT_COPY_SIZE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Resize our DTs to 4k so that we have room to operate on
|
||||||
|
*/
|
||||||
|
CHECK(fdt_open_into(dt, copy, FDT_COPY_SIZE));
|
||||||
|
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
void *fdt_base;
|
||||||
|
int fail_config, exists, check_exists;
|
||||||
|
|
||||||
|
test_init(argc, argv);
|
||||||
|
fail_config = 0;
|
||||||
|
|
||||||
|
if (argc != 4)
|
||||||
|
fail_config = 1;
|
||||||
|
|
||||||
|
if (!fail_config) {
|
||||||
|
if (!strcmp(argv[2], "exists"))
|
||||||
|
check_exists = 1;
|
||||||
|
else if (!strcmp(argv[2], "not-exists"))
|
||||||
|
check_exists = 0;
|
||||||
|
else
|
||||||
|
fail_config = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fail_config)
|
||||||
|
CONFIG("Usage: %s <base dtb> <[exists|not-exists]> <node-path>", argv[0]);
|
||||||
|
|
||||||
|
fdt_base = open_dt(argv[1]);
|
||||||
|
|
||||||
|
exists = fdt_path_offset(fdt_base, argv[3]) >= 0;
|
||||||
|
|
||||||
|
if (exists == check_exists)
|
||||||
|
PASS();
|
||||||
|
else
|
||||||
|
FAIL();
|
||||||
|
}
|
|
@ -508,6 +508,9 @@ dtc_tests () {
|
||||||
run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label5.dts
|
run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label5.dts
|
||||||
run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label6.dts
|
run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label6.dts
|
||||||
|
|
||||||
|
run_test check_path test_tree1.dtb exists "/subnode@1"
|
||||||
|
run_test check_path test_tree1.dtb not-exists "/subnode@10"
|
||||||
|
|
||||||
# Check warning options
|
# Check warning options
|
||||||
run_sh_test dtc-checkfails.sh address_cells_is_cell interrupt_cells_is_cell -n size_cells_is_cell -- -Wno_size_cells_is_cell -I dts -O dtb bad-ncells.dts
|
run_sh_test dtc-checkfails.sh address_cells_is_cell interrupt_cells_is_cell -n size_cells_is_cell -- -Wno_size_cells_is_cell -I dts -O dtb bad-ncells.dts
|
||||||
run_sh_test dtc-fails.sh -n test-warn-output.test.dtb -I dts -O dtb bad-ncells.dts
|
run_sh_test dtc-fails.sh -n test-warn-output.test.dtb -I dts -O dtb bad-ncells.dts
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue