minios: Add an option to repack MiniOS for development

The new option regenerates the MiniOS image using the base MiniOS
kernel image and a new verified boot structure with updated kernel
commandline flags.

A `--force-build` option is also provided to enable building a
MiniOS development image in a single step.

BUG=b:206814209
TEST=./run_tests scripts/build_minios_unittest.py lib/minios_unittest.py

Change-Id: If28eef1c97d06535e98dbfd20139e6ebf0d2e06c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/3469722
Reviewed-by: Jae Hoon Kim <kimjae@chromium.org>
Reviewed-by: Yuanpeng Ni‎ <yuanpengni@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Tested-by: Henry Barnor <hbarnor@chromium.org>
Commit-Queue: Henry Barnor <hbarnor@chromium.org>
diff --git a/scripts/build_minios_unittest.py b/scripts/build_minios_unittest.py
index ebeed2f..9f08101 100644
--- a/scripts/build_minios_unittest.py
+++ b/scripts/build_minios_unittest.py
@@ -54,6 +54,8 @@
         constants.MINIOS_DATA_PRIVATE_KEY,
         constants.MINIOS_KEYBLOCK,
         None,
+        True,
+        False,
     )])
 
     self.assertEqual(self.insert_minios_mock.mock_calls, [mock.call(
@@ -82,6 +84,7 @@
         '--private-key', test_private_key,
         '--keyblock', test_keyblock,
         '--serial', test_serial,
+        '--force-build',
     ])
 
     self.assertEqual(self.create_minios_mock.mock_calls, [mock.call(
@@ -93,6 +96,73 @@
         test_private_key,
         test_keyblock,
         test_serial,
+        True,
+        False,
+    )])
+
+    self.assertEqual(self.insert_minios_mock.mock_calls, [mock.call(
+        test_image, self.create_minios_mock_return,
+    )])
+
+  def testModForDev(self):
+    """Test that default arguments of build_minios are formatted correct."""
+    test_board = 'test-board'
+    test_version = '0.0.0.0'
+    test_image = '/some/image/path'
+    build_minios.main([
+        # --board is a required argument.
+        '--board', test_board,
+        # --version is a required argument.
+        '--version', test_version,
+        # --image is a required argument.
+        '--image', test_image,
+        '--mod-for-dev',
+    ])
+
+    self.assertEqual(self.create_minios_mock.mock_calls, [mock.call(
+        test_board,
+        test_version,
+        self._tempdir,
+        constants.VBOOT_DEVKEYS_DIR,
+        constants.RECOVERY_PUBLIC_KEY,
+        constants.MINIOS_DATA_PRIVATE_KEY,
+        constants.MINIOS_KEYBLOCK,
+        None,
+        False,
+        True,
+    )])
+
+    self.assertEqual(self.insert_minios_mock.mock_calls, [mock.call(
+        test_image, self.create_minios_mock_return,
+    )])
+
+  def testModForDevWithForceBuild(self):
+    """Test that default arguments of build_minios are formatted correct."""
+    test_board = 'test-board'
+    test_version = '0.0.0.0'
+    test_image = '/some/image/path'
+    build_minios.main([
+        # --board is a required argument.
+        '--board', test_board,
+        # --version is a required argument.
+        '--version', test_version,
+        # --image is a required argument.
+        '--image', test_image,
+        '--mod-for-dev',
+        '--force-build',
+    ])
+
+    self.assertEqual(self.create_minios_mock.mock_calls, [mock.call(
+        test_board,
+        test_version,
+        self._tempdir,
+        constants.VBOOT_DEVKEYS_DIR,
+        constants.RECOVERY_PUBLIC_KEY,
+        constants.MINIOS_DATA_PRIVATE_KEY,
+        constants.MINIOS_KEYBLOCK,
+        None,
+        True,
+        True,
     )])
 
     self.assertEqual(self.insert_minios_mock.mock_calls, [mock.call(