Add safe ISO download and explicit run/open commands
This commit is contained in:
@@ -64,3 +64,51 @@ class CLITests(unittest.TestCase):
|
||||
self.assertEqual(result.returncode, 1, result.stderr)
|
||||
self.assertNotIn('Traceback', result.stderr)
|
||||
self.assertFalse((self.root / 'config/guest.toml').exists())
|
||||
|
||||
def test_plain_noninteractive_invocation_prints_help_without_creating_state(self):
|
||||
result = self.run_cli()
|
||||
self.assertEqual(result.returncode, 0, result.stderr)
|
||||
self.assertIn('Hydra OS', result.stdout)
|
||||
self.assertIn('run', result.stdout)
|
||||
self.assertFalse((self.root / 'state').exists())
|
||||
|
||||
def test_run_and_open_are_headless_and_existing_name_is_never_replaced(self):
|
||||
import os
|
||||
from unittest.mock import patch
|
||||
from test_media import iso_bytes
|
||||
from test_runtime import FAKE_IMG, FAKE_QEMU
|
||||
from hydra.runtime import Runtime
|
||||
iso = self.root / 'installer.iso'
|
||||
iso.write_bytes(iso_bytes())
|
||||
qemu = self.root / 'qemu'
|
||||
qemu.write_text(FAKE_QEMU)
|
||||
qemu.chmod(0o700)
|
||||
img = self.root / 'img'
|
||||
img.write_text(FAKE_IMG)
|
||||
img.chmod(0o700)
|
||||
runtime = Runtime(self.root / 'config', self.root / 'state', self.root / 'run')
|
||||
def cleanup():
|
||||
if runtime.status('guest')['status'] == 'running':
|
||||
runtime.stop('guest', force=True)
|
||||
self.addCleanup(cleanup)
|
||||
with patch.dict(os.environ, {'HYDRA_QEMU': str(qemu), 'HYDRA_QEMU_IMG': str(img),
|
||||
'DISPLAY': '', 'WAYLAND_DISPLAY': '', 'HYDRA_SESSION_MANIFEST': '/not/a/manifest'}):
|
||||
started = self.run_cli('run', str(iso), '--name', 'guest', '--memory', '256', '--cpus', '1', '--disk-size', '8M', '--no-view')
|
||||
self.assertEqual(started.returncode, 0, started.stderr)
|
||||
original = (self.root / 'config/guest.toml').read_bytes()
|
||||
pid = runtime.paths('guest').pid.read_bytes()
|
||||
duplicate = self.run_cli('run', str(iso), '--name', 'guest', '--no-view')
|
||||
self.assertEqual(duplicate.returncode, 1, duplicate.stderr)
|
||||
self.assertIn('hydra open guest', duplicate.stderr)
|
||||
iso.unlink()
|
||||
opened = self.run_cli('open', 'guest', '--no-view')
|
||||
self.assertEqual(opened.returncode, 0, opened.stderr)
|
||||
self.assertEqual((self.root / 'config/guest.toml').read_bytes(), original)
|
||||
self.assertEqual(runtime.paths('guest').pid.read_bytes(), pid)
|
||||
|
||||
def test_download_rejects_credential_urls_without_echoing_secrets(self):
|
||||
result = self.run_cli('download', 'https://user:supersecret@example.org/installer.iso?token=private')
|
||||
self.assertEqual(result.returncode, 1, result.stderr)
|
||||
self.assertNotIn('supersecret', result.stderr)
|
||||
self.assertNotIn('private', result.stderr)
|
||||
self.assertNotIn('Traceback', result.stderr)
|
||||
|
||||
Reference in New Issue
Block a user