1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# Copyright (c) 2016 Google, Inc 3*4882a593Smuzhiyun# Written by Simon Glass <sjg@chromium.org> 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun# 7*4882a593Smuzhiyun# Test for the fdt modules 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunimport os 10*4882a593Smuzhiyunimport sys 11*4882a593Smuzhiyunimport tempfile 12*4882a593Smuzhiyunimport unittest 13*4882a593Smuzhiyun 14*4882a593Smuzhiyunimport fdt 15*4882a593Smuzhiyunfrom fdt import FdtScan 16*4882a593Smuzhiyunimport fdt_util 17*4882a593Smuzhiyunimport tools 18*4882a593Smuzhiyun 19*4882a593Smuzhiyunclass TestFdt(unittest.TestCase): 20*4882a593Smuzhiyun @classmethod 21*4882a593Smuzhiyun def setUpClass(self): 22*4882a593Smuzhiyun self._binman_dir = os.path.dirname(os.path.realpath(sys.argv[0])) 23*4882a593Smuzhiyun self._indir = tempfile.mkdtemp(prefix='binmant.') 24*4882a593Smuzhiyun tools.PrepareOutputDir(self._indir, True) 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun def TestFile(self, fname): 27*4882a593Smuzhiyun return os.path.join(self._binman_dir, 'test', fname) 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun def GetCompiled(self, fname): 30*4882a593Smuzhiyun return fdt_util.EnsureCompiled(self.TestFile(fname)) 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun def _DeleteProp(self, dt): 33*4882a593Smuzhiyun node = dt.GetNode('/microcode/update@0') 34*4882a593Smuzhiyun node.DeleteProp('data') 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun def testFdtNormal(self): 37*4882a593Smuzhiyun fname = self.GetCompiled('34_x86_ucode.dts') 38*4882a593Smuzhiyun dt = FdtScan(fname) 39*4882a593Smuzhiyun self._DeleteProp(dt) 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun def testFdtNormalProp(self): 42*4882a593Smuzhiyun fname = self.GetCompiled('45_prop_test.dts') 43*4882a593Smuzhiyun dt = FdtScan(fname) 44*4882a593Smuzhiyun node = dt.GetNode('/binman/intel-me') 45*4882a593Smuzhiyun self.assertEquals('intel-me', node.name) 46*4882a593Smuzhiyun val = fdt_util.GetString(node, 'filename') 47*4882a593Smuzhiyun self.assertEquals(str, type(val)) 48*4882a593Smuzhiyun self.assertEquals('me.bin', val) 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun prop = node.props['intval'] 51*4882a593Smuzhiyun self.assertEquals(fdt.TYPE_INT, prop.type) 52*4882a593Smuzhiyun self.assertEquals(3, fdt_util.GetInt(node, 'intval')) 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun prop = node.props['intarray'] 55*4882a593Smuzhiyun self.assertEquals(fdt.TYPE_INT, prop.type) 56*4882a593Smuzhiyun self.assertEquals(list, type(prop.value)) 57*4882a593Smuzhiyun self.assertEquals(2, len(prop.value)) 58*4882a593Smuzhiyun self.assertEquals([5, 6], 59*4882a593Smuzhiyun [fdt_util.fdt32_to_cpu(val) for val in prop.value]) 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun prop = node.props['byteval'] 62*4882a593Smuzhiyun self.assertEquals(fdt.TYPE_BYTE, prop.type) 63*4882a593Smuzhiyun self.assertEquals(chr(8), prop.value) 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun prop = node.props['bytearray'] 66*4882a593Smuzhiyun self.assertEquals(fdt.TYPE_BYTE, prop.type) 67*4882a593Smuzhiyun self.assertEquals(list, type(prop.value)) 68*4882a593Smuzhiyun self.assertEquals(str, type(prop.value[0])) 69*4882a593Smuzhiyun self.assertEquals(3, len(prop.value)) 70*4882a593Smuzhiyun self.assertEquals([chr(1), '#', '4'], prop.value) 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun prop = node.props['longbytearray'] 73*4882a593Smuzhiyun self.assertEquals(fdt.TYPE_INT, prop.type) 74*4882a593Smuzhiyun self.assertEquals(0x090a0b0c, fdt_util.GetInt(node, 'longbytearray')) 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun prop = node.props['stringval'] 77*4882a593Smuzhiyun self.assertEquals(fdt.TYPE_STRING, prop.type) 78*4882a593Smuzhiyun self.assertEquals('message2', fdt_util.GetString(node, 'stringval')) 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun prop = node.props['stringarray'] 81*4882a593Smuzhiyun self.assertEquals(fdt.TYPE_STRING, prop.type) 82*4882a593Smuzhiyun self.assertEquals(list, type(prop.value)) 83*4882a593Smuzhiyun self.assertEquals(3, len(prop.value)) 84*4882a593Smuzhiyun self.assertEquals(['another', 'multi-word', 'message'], prop.value) 85