test: Add test for source command

This adds a basic test for FIT image handling by the source command.
It's a python test becase we need to run mkimage.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
diff --git a/test/py/tests/source.its b/test/py/tests/source.its
new file mode 100644
index 0000000..3c62f77
--- /dev/null
+++ b/test/py/tests/source.its
@@ -0,0 +1,43 @@
+/dts-v1/;
+
+/ {
+    description = "FIT image to test the source command";
+    #address-cells = <1>;
+
+    images {
+        default = "script-1";
+
+        script-1 {
+            data = "echo 1";
+            type = "script";
+            arch = "sandbox";
+            compression = "none";
+        };
+
+        script-2 {
+            data = "echo 2";
+            type = "script";
+            arch = "sandbox";
+            compression = "none";
+        };
+
+        not-a-script {
+            data = "echo 3";
+            type = "kernel";
+            arch = "sandbox";
+            compression = "none";
+        };
+    };
+
+    configurations {
+        default = "conf-2";
+
+        conf-1 {
+            script = "script-1";
+        };
+
+        conf-2 {
+            script = "script-2";
+        };
+    };
+};
diff --git a/test/py/tests/test_source.py b/test/py/tests/test_source.py
new file mode 100644
index 0000000..e5ffdfe
--- /dev/null
+++ b/test/py/tests/test_source.py
@@ -0,0 +1,28 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (C) 2022 Sean Anderson <sean.anderson@seco.com>
+
+import os
+import pytest
+import u_boot_utils as util
+
+@pytest.mark.boardspec('sandbox')
+@pytest.mark.buildconfigspec('cmd_echo')
+@pytest.mark.buildconfigspec('cmd_source')
+@pytest.mark.buildconfigspec('fit')
+def test_source(u_boot_console):
+    # Compile our test script image
+    cons = u_boot_console
+    mkimage = os.path.join(cons.config.build_dir, 'tools/mkimage')
+    its = os.path.join(cons.config.source_dir, 'test/py/tests/source.its')
+    fit = os.path.join(cons.config.build_dir, 'source.itb')
+    util.run_and_log(cons, (mkimage, '-f', its, fit))
+    cons.run_command(f'host load hostfs - $loadaddr {fit}')
+
+    assert '1' in cons.run_command('source')
+    assert '1' in cons.run_command('source :script-1')
+    assert '2' in cons.run_command('source :script-2')
+    assert 'Fail' in cons.run_command('source :not-a-script || echo Fail')
+
+    cons.run_command('fdt addr $loadaddr')
+    cons.run_command('fdt rm /images default')
+    assert 'Fail' in cons.run_command('source || echo Fail')