blob: 1f8d6fb1fa8c03fc73f9c34b872bfae48fb32db0 [file] [log] [blame]
#!/usr/bin/env python3.8
# Copyright 2020 The Fuchsia 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 verify_zbi_kernel_cmdline.py.
To manually run this test:
python3 verify_zbi_kernel_cmdline_test.py
"""
import os
import tempfile
import unittest
import unittest.mock as mock
import verify_zbi_kernel_cmdline
def verify_kernel_cmdline(golden, actual):
with tempfile.TemporaryDirectory() as test_folder:
golden_file = os.path.join(test_folder, 'golden')
stamp_file = os.path.join(test_folder, 'stamp')
with open(golden_file, 'w+') as f:
f.write(golden)
args = [
'--zbi-file', 'test.zbi', '--scrutiny', 'mock_scrutiny',
'--fuchsia-dir', '/fuchisa', '--kernel-cmdline-golden-file',
golden_file, '--stamp', stamp_file
]
with mock.patch('subprocess.check_output') as mock_output:
mock_output.return_value = actual
result = verify_zbi_kernel_cmdline.main(args)
mock_output.assert_called_once()
return result
class RunVerifyZbiKernelCmdlineTest(unittest.TestCase):
def test_verify_kernel_cmdline_sucess_normal_case(self):
self.assertEqual(
0,
verify_kernel_cmdline(
'key1=v1\nkey2=v2\nkey3=v3', b'"key1=v1 key2=v2 key3=v3"\n'))
def test_verify_kernel_cmdline_success_order_diff(self):
self.assertEqual(
0,
verify_kernel_cmdline(
'key1=v1\nkey2=v2\nkey3=v3', b'"key2=v2 key1=v1 key3=v3"\n'))
def test_verify_kernel_cmdline_success_no_value_option(self):
self.assertEqual(
0,
verify_kernel_cmdline('option1\noption2', b'"option1 option2"\n'))
def test_verify_kernel_cmdline_fail_golden_empty(self):
self.assertEqual(
-1, verify_kernel_cmdline('', b'"key2=v2 key1=v1 key3=v3"\n'))
def test_verify_kernel_cmdline_fail_missing_key2(self):
self.assertEqual(
-1, verify_kernel_cmdline('key1=v1\nkey2=v2', b'"key1=v1"\n'))
def test_verify_kernel_cmdline_fail_key1_mismatch(self):
self.assertEqual(
-1,
verify_kernel_cmdline('key1=v1\nkey2=v2', b'"key1=v2 key2=v2"\n'))
def test_verify_kernel_cmdline_fail_key2_mismatch(self):
self.assertEqual(
-1,
verify_kernel_cmdline('key1=v1\nkey2=v2', b'"key1=v1 key2=v1"\n'))
def test_verify_kernel_cmdline_fail_additional_key3(self):
self.assertEqual(
-1,
verify_kernel_cmdline(
'key1=v1\nkey2=v2', b'"key1=v1 key2=v2 key3=v3"\n'))
def test_verify_kernel_cmdline_fail_invalid_format(self):
self.assertEqual(
-1,
verify_kernel_cmdline('key1=v1\nkey2=v2', b'"invalid=format=1"'))
def test_verify_kernel_cmdline_fail_option1_missing(self):
self.assertEqual(
-1, verify_kernel_cmdline('option1\noption2', b'"option2"\n'))
def test_verify_kernel_cmdline_fail_additional_option3(self):
self.assertEqual(
-1,
verify_kernel_cmdline(
'option1\noption2', b'"option1 option2 option3"\n'))
def test_verify_kernel_cmdline_fail_missing_quotes(self):
self.assertEqual(
-1,
verify_kernel_cmdline('option1\noption2', b'option2 option3"\n'))
if __name__ == '__main__':
unittest.main()