diff --git a/.github/scripts/run_offline_qualified.py b/.github/scripts/run_offline_qualified.py index 48173d59..4d4e45b9 100644 --- a/.github/scripts/run_offline_qualified.py +++ b/.github/scripts/run_offline_qualified.py @@ -20,6 +20,7 @@ PYTHON_FILES = ( "tests/test_kernel_reboot.py", "tests/test_reboot_health_refresh.py", "tests/test_host_update_controls.py", + "tests/test_host_update_packaging.py", "tests/test_lxc_update_jobs.py", "tests/test_post_install_i18n.py", "tests/test_remaining_cli_i18n.py", diff --git a/AppImage/scripts/build_appimage.sh b/AppImage/scripts/build_appimage.sh index c39cd14d..3ccf3d66 100755 --- a/AppImage/scripts/build_appimage.sh +++ b/AppImage/scripts/build_appimage.sh @@ -151,6 +151,8 @@ cp "$SCRIPT_DIR/lxc_update_finalization.py" "$APP_DIR/usr/bin/" cp "$SCRIPT_DIR/lxc_update_jobs.py" "$APP_DIR/usr/bin/" cp "$SCRIPT_DIR/host_update_jobs.py" "$APP_DIR/usr/bin/" cp "$SCRIPT_DIR/kernel_reboot.py" "$APP_DIR/usr/bin/" +cp "$SCRIPT_DIR/host_update_controls.py" "$APP_DIR/usr/bin/" +cp "$SCRIPT_DIR/proxmenux_version_status.py" "$APP_DIR/usr/bin/" cp "$SCRIPT_DIR/lxc_check_job.py" "$APP_DIR/usr/bin/" cp "$SCRIPT_DIR/native_app_discovery.py" "$APP_DIR/usr/bin/" cp "$SCRIPT_DIR/local_app_icons.py" "$APP_DIR/usr/bin/" diff --git a/tests/test_host_update_packaging.py b/tests/test_host_update_packaging.py new file mode 100644 index 00000000..dc32a671 --- /dev/null +++ b/tests/test_host_update_packaging.py @@ -0,0 +1,27 @@ +"""Execute the actual backend-copy recipe, then import the packaged helpers.""" +import os +from pathlib import Path +import subprocess +import sys +import tempfile +import unittest + +ROOT=Path(__file__).resolve().parents[1] + +class Packaging(unittest.TestCase): + def test_actual_appimage_copy_recipe_contains_importable_host_controls(self): + script=(ROOT/'AppImage/scripts/build_appimage.sh').read_text() + recipe='\n'.join(line for line in script.splitlines() if line.startswith('cp "$SCRIPT_DIR/') and '.py"' in line) + self.assertTrue(recipe) + with tempfile.TemporaryDirectory() as temporary: + folder=Path(temporary);(folder/'usr/bin').mkdir(parents=True) + result=subprocess.run(['bash','-eu','-c',recipe],env=dict(os.environ,SCRIPT_DIR=str(ROOT/'AppImage/scripts'),APP_DIR=str(folder)),capture_output=True,text=True,timeout=10) + self.assertEqual(result.returncode,0,result.stderr) + for name in ('host_update_controls.py','proxmenux_version_status.py','kernel_reboot.py','host_update_jobs.py'): + self.assertTrue((folder/'usr/bin'/name).is_file(),name+' omitted from AppImage') + self.assertEqual((folder/'usr/bin'/name).read_bytes(),(ROOT/'AppImage/scripts'/name).read_bytes()) + code='import sys;sys.path.insert(0,sys.argv[1]);import host_update_controls,proxmenux_version_status' + result=subprocess.run([sys.executable,'-I','-B','-c',code,str(folder/'usr/bin')],capture_output=True,text=True,timeout=5) + self.assertEqual(result.returncode,0,result.stderr) + +if __name__=='__main__':unittest.main(verbosity=2)