mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-29 16:10:24 +09:00
dtoc: add coverage test for unicode error
Add an additional test to dtoc in order improve the coverage, specifically to take into account the case of unicode error when scanning drivers. Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
This commit is contained in:
parent
3b191c56c8
commit
6c74d1b832
@ -154,8 +154,10 @@ class DtbPlatdata(object):
|
||||
U_BOOT_DRIVER_ALIAS(driver_alias, driver_name)
|
||||
value: Driver name declared with U_BOOT_DRIVER(driver_name)
|
||||
_links: List of links to be included in dm_populate_phandle_data()
|
||||
_drivers_additional: List of additional drivers to use during scanning
|
||||
"""
|
||||
def __init__(self, dtb_fname, include_disabled, warning_disabled):
|
||||
def __init__(self, dtb_fname, include_disabled, warning_disabled,
|
||||
drivers_additional=[]):
|
||||
self._fdt = None
|
||||
self._dtb_fname = dtb_fname
|
||||
self._valid_nodes = None
|
||||
@ -167,6 +169,7 @@ class DtbPlatdata(object):
|
||||
self._drivers = []
|
||||
self._driver_aliases = {}
|
||||
self._links = []
|
||||
self._drivers_additional = drivers_additional
|
||||
|
||||
def get_normalized_compat_name(self, node):
|
||||
"""Get a node's normalized compat name
|
||||
@ -343,6 +346,14 @@ class DtbPlatdata(object):
|
||||
continue
|
||||
self.scan_driver(dirpath + '/' + fn)
|
||||
|
||||
for fn in self._drivers_additional:
|
||||
if not isinstance(fn, str) or len(fn) == 0:
|
||||
continue
|
||||
if fn[0] == '/':
|
||||
self.scan_driver(fn)
|
||||
else:
|
||||
self.scan_driver(basedir + '/' + fn)
|
||||
|
||||
def scan_dtb(self):
|
||||
"""Scan the device tree to obtain a tree of nodes and properties
|
||||
|
||||
@ -668,7 +679,8 @@ class DtbPlatdata(object):
|
||||
|
||||
self.out(''.join(self.get_buf()))
|
||||
|
||||
def run_steps(args, dtb_file, include_disabled, output, warning_disabled=False):
|
||||
def run_steps(args, dtb_file, include_disabled, output, warning_disabled=False,
|
||||
drivers_additional=[]):
|
||||
"""Run all the steps of the dtoc tool
|
||||
|
||||
Args:
|
||||
@ -680,7 +692,7 @@ def run_steps(args, dtb_file, include_disabled, output, warning_disabled=False):
|
||||
if not args:
|
||||
raise ValueError('Please specify a command: struct, platdata')
|
||||
|
||||
plat = DtbPlatdata(dtb_file, include_disabled, warning_disabled)
|
||||
plat = DtbPlatdata(dtb_file, include_disabled, warning_disabled, drivers_additional)
|
||||
plat.scan_drivers()
|
||||
plat.scan_dtb()
|
||||
plat.scan_tree()
|
||||
|
1
tools/dtoc/dtoc_test_scan_drivers.cxx
Normal file
1
tools/dtoc/dtoc_test_scan_drivers.cxx
Normal file
@ -0,0 +1 @@
|
||||
U_BOOT_DRIVER_ALIAS(sandbox_gpio, sandbox_gpio_alias2)
|
@ -13,6 +13,7 @@ import collections
|
||||
import os
|
||||
import struct
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
from dtoc import dtb_platdata
|
||||
@ -863,3 +864,28 @@ U_BOOT_DEVICE(spl_test2) = {
|
||||
self.run_test(['invalid-cmd'], dtb_file, output)
|
||||
self.assertIn("Unknown command 'invalid-cmd': (use: struct, platdata)",
|
||||
str(e.exception))
|
||||
|
||||
def testScanDrivers(self):
|
||||
"""Test running dtoc with additional drivers to scan"""
|
||||
dtb_file = get_dtb_file('dtoc_test_simple.dts')
|
||||
output = tools.GetOutputFilename('output')
|
||||
with test_util.capture_sys_output() as (stdout, stderr):
|
||||
dtb_platdata.run_steps(['struct'], dtb_file, False, output, True,
|
||||
[None, '', 'tools/dtoc/dtoc_test_scan_drivers.cxx'])
|
||||
|
||||
def testUnicodeError(self):
|
||||
"""Test running dtoc with an invalid unicode file
|
||||
|
||||
To be able to perform this test without adding a weird text file which
|
||||
would produce issues when using checkpatch.pl or patman, generate the
|
||||
file at runtime and then process it.
|
||||
"""
|
||||
dtb_file = get_dtb_file('dtoc_test_simple.dts')
|
||||
output = tools.GetOutputFilename('output')
|
||||
driver_fn = '/tmp/' + next(tempfile._get_candidate_names())
|
||||
with open(driver_fn, 'wb+') as df:
|
||||
df.write(b'\x81')
|
||||
|
||||
with test_util.capture_sys_output() as (stdout, stderr):
|
||||
dtb_platdata.run_steps(['struct'], dtb_file, False, output, True,
|
||||
[driver_fn])
|
||||
|
Loading…
Reference in New Issue
Block a user