blob: 1d78f90e26a0d7253ac2ec6f49a7fa9f6a16d35d [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
import os
import unittest
import unittest.mock
from bitstreams_workspace import BitstreamCache
class TestBitstreamCache(unittest.TestCase):
def test_get_from_cache(self):
BITSTREAM_ORIG = 'lowrisc_systems_chip_earlgrey_cw310_0.1.bit.orig'
BITSTREAM_SPLICE = 'lowrisc_systems_chip_earlgrey_cw310_0.1.bit.splice'
MOCKED_OS_WALK_RETURN = [
# os.walk() yields tuples of the form (root, dir, files).
('cache/abcd', [],
[BITSTREAM_ORIG, BITSTREAM_SPLICE, 'rom.mmi', 'otp.mmi']),
]
os.walk = unittest.mock.MagicMock(name='os.walk',
return_value=MOCKED_OS_WALK_RETURN)
cache = BitstreamCache('/',
'/tmp/cache/opentitan-bitstreams',
'latest.txt',
offline=True)
cache.InitRepository = unittest.mock.MagicMock(name='method')
cached_files = cache.GetFromCache('abcd')
# This is more of an implementation detail, but it verifies that we hit
# the the mocked `os.walk` function as expected.
os.walk.assert_called_once_with('cache/abcd')
self.assertEqual(
dict(cached_files), {
'orig': set([os.path.join('cache', 'abcd', BITSTREAM_ORIG)]),
'splice': set(
[os.path.join('cache', 'abcd', BITSTREAM_SPLICE)]),
'mmi': {
os.path.join('cache', 'abcd', 'rom.mmi'),
os.path.join('cache', 'abcd', 'otp.mmi'),
},
})
os.walk.assert_called_once_with('cache/abcd')
def test_write_build_file(self):
BITSTREAM_ORIG = 'lowrisc_systems_chip_earlgrey_cw310_0.1.bit.orig'
BITSTREAM_SPLICE = 'lowrisc_systems_chip_earlgrey_cw310_0.1.bit.splice'
MOCKED_OS_WALK_RETURN = [
# os.walk() yields tuples of the form (root, dir, files).
('cache/abcd', [],
[BITSTREAM_ORIG, BITSTREAM_SPLICE, 'rom.mmi', 'otp.mmi']),
]
os.walk = unittest.mock.MagicMock(name='os.walk',
return_value=MOCKED_OS_WALK_RETURN)
BitstreamCache._GetDateTimeStr = unittest.mock.MagicMock(
name='BitstreamCache._GetDateTimeStr',
return_value='2022-07-14T15:02:54.463801')
cache = BitstreamCache('/',
'/tmp/cache/opentitan-bitstreams',
'latest.txt',
offline=True)
cache.InitRepository = unittest.mock.MagicMock(name='method')
bazel_string = cache._ConstructBazelString('BUILD.mock', 'abcd')
self.maxDiff = None
self.assertEqual(
bazel_string, '''# This file was autogenerated. Do not edit!
# Built at 2022-07-14T15:02:54.463801.
# Configured for bitstream: abcd
package(default_visibility = ["//visibility:public"])
exports_files(glob(["cache/**"]))
filegroup(
name = "bitstream_test_rom",
srcs = ["cache/abcd/lowrisc_systems_chip_earlgrey_cw310_0.1.bit.orig"],
)
filegroup(
name = "bitstream_mask_rom",
srcs = ["cache/abcd/lowrisc_systems_chip_earlgrey_cw310_0.1.bit.splice"],
)
filegroup(
name = "otp_mmi",
srcs = ["cache/abcd/otp.mmi"],
)
filegroup(
name = "rom_mmi",
srcs = ["cache/abcd/rom.mmi"],
)
''')
# This is more of an implementation detail, but it verifies that we hit
# the the mocked `os.walk` function as expected.
os.walk.assert_called_once_with('cache/abcd')
if __name__ == '__main__':
unittest.main()