blob: 4f21f5a39ab05f88eb97280684fdd250b96d32ed [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit test for fmap module."""
import struct
import unittest
import fmap
# Expected decoded fmap structure from bin/example.bin
_EXAMPLE_BIN_FMAP = {
"ver_major": 1,
"ver_minor": 0,
"name": "example",
"nareas": 4,
"base": 0,
"signature": "__FMAP__",
"areas": [
{
"FLAGS": ("FMAP_AREA_STATIC",),
"size": 128,
"flags": 1,
"name": "bootblock",
"offset": 0,
},
{
"FLAGS": ("FMAP_AREA_COMPRESSED", "FMAP_AREA_STATIC"),
"size": 128,
"flags": 3,
"name": "normal",
"offset": 128,
},
{
"FLAGS": ("FMAP_AREA_COMPRESSED", "FMAP_AREA_STATIC"),
"size": 256,
"flags": 3,
"name": "fallback",
"offset": 256,
},
{"FLAGS": (), "size": 512, "flags": 0, "name": "data", "offset": 512},
],
"size": 1024,
}
class FmapTest(unittest.TestCase):
"""Unit test for fmap module."""
# All failures to diff the entire struct.
maxDiff = None
def setUp(self):
with open("bin/example.bin", "rb") as f:
self.example_blob = f.read()
def testDecode(self):
decoded = fmap.fmap_decode(self.example_blob)
self.assertEqual(_EXAMPLE_BIN_FMAP, decoded)
def testDecodeWithOffset(self):
decoded = fmap.fmap_decode(self.example_blob, 512)
self.assertEqual(_EXAMPLE_BIN_FMAP, decoded)
def testDecodeWithName(self):
decoded = fmap.fmap_decode(self.example_blob, fmap_name="example")
self.assertEqual(_EXAMPLE_BIN_FMAP, decoded)
decoded = fmap.fmap_decode(self.example_blob, 512, "example")
self.assertEqual(_EXAMPLE_BIN_FMAP, decoded)
def testDecodeWithWrongName(self):
with self.assertRaises(struct.error):
fmap.fmap_decode(self.example_blob, fmap_name="banana")
with self.assertRaises(struct.error):
fmap.fmap_decode(self.example_blob, 512, "banana")
def testDecodeWithWrongOffset(self):
with self.assertRaises(struct.error):
fmap.fmap_decode(self.example_blob, 42)
def testEncode(self):
encoded = fmap.fmap_encode(_EXAMPLE_BIN_FMAP)
# example.bin contains other binary data besides the fmap
self.assertIn(encoded, self.example_blob)
if __name__ == "__main__":
unittest.main()