feat: support installed guests and distribution display defaults
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from hydra.profiles import load_profile
|
||||
|
||||
|
||||
class CLITests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.tmp = tempfile.TemporaryDirectory(prefix='hc-')
|
||||
self.addCleanup(self.tmp.cleanup)
|
||||
self.root = Path(self.tmp.name)
|
||||
self.defaults = self.root / 'defaults.toml'
|
||||
self.base = [sys.executable, 'bin/hydra', '--config', str(self.root / 'config'),
|
||||
'--state', str(self.root / 'state'), '--runtime', str(self.root / 'run'),
|
||||
'--defaults', str(self.defaults)]
|
||||
|
||||
def run_cli(self, *args):
|
||||
return subprocess.run(self.base + list(args), capture_output=True, text=True, timeout=5)
|
||||
|
||||
def test_defaults_affect_new_profiles_only_and_explicit_options_win(self):
|
||||
self.defaults.write_text('network="bridge"\nbridge="hydrabr0"\nwidth=1920\nheight=1080\nrefresh_millihz=144000\n')
|
||||
added = self.run_cli('add', 'first', '--width', '1600', '--network', 'user', '--refresh-millihz', '0')
|
||||
self.assertEqual(added.returncode, 0, added.stderr)
|
||||
first = load_profile(self.root / 'config/first.toml')
|
||||
self.assertEqual((first.network, first.width, first.height, first.refresh_millihz), ('user', 1600, 1080, 0))
|
||||
added = self.run_cli('add', 'second')
|
||||
self.assertEqual(added.returncode, 0, added.stderr)
|
||||
second = load_profile(self.root / 'config/second.toml')
|
||||
self.assertEqual((second.network, second.width, second.height, second.refresh_millihz), ('bridge', 1920, 1080, 144000))
|
||||
self.defaults.write_text('width=1024\nnetwork="user"\n')
|
||||
self.assertEqual(load_profile(self.root / 'config/second.toml'), second)
|
||||
self.defaults.write_text('width="bad"\n')
|
||||
listed = self.run_cli('list')
|
||||
self.assertEqual(listed.returncode, 0, listed.stderr)
|
||||
self.assertEqual(len(json.loads(listed.stdout)), 2)
|
||||
self.assertEqual(self.run_cli('add', 'third').returncode, 1)
|
||||
self.assertFalse((self.root / 'config/third.toml').exists())
|
||||
|
||||
def test_missing_defaults_use_developer_preferences_and_media_cli(self):
|
||||
added = self.run_cli('add', 'guest')
|
||||
self.assertEqual(added.returncode, 0, added.stderr)
|
||||
profile = load_profile(self.root / 'config/guest.toml')
|
||||
self.assertEqual((profile.network, profile.width, profile.height, profile.refresh_millihz), ('user', 1280, 800, 0))
|
||||
iso = self.root / 'installer.iso'
|
||||
iso.touch()
|
||||
attached = self.run_cli('media', 'guest', '--iso', str(iso))
|
||||
self.assertEqual(attached.returncode, 0, attached.stderr)
|
||||
iso.unlink()
|
||||
listed = self.run_cli('list')
|
||||
self.assertEqual(listed.returncode, 0, listed.stderr)
|
||||
self.assertEqual(self.run_cli('status', 'guest').returncode, 0)
|
||||
detached = self.run_cli('media', 'guest', '--detach')
|
||||
self.assertEqual(detached.returncode, 0, detached.stderr)
|
||||
self.assertIsNone(load_profile(self.root / 'config/guest.toml').iso)
|
||||
|
||||
def test_unknown_or_invalid_distribution_defaults_are_rejected(self):
|
||||
for content in ('iso="/private.iso"\n', 'network="public"\n', 'refresh_millihz=true\n', '[display]\nwidth=1920\n'):
|
||||
self.defaults.write_text(content)
|
||||
result = self.run_cli('add', 'guest')
|
||||
self.assertEqual(result.returncode, 1, result.stderr)
|
||||
self.assertNotIn('Traceback', result.stderr)
|
||||
self.assertFalse((self.root / 'config/guest.toml').exists())
|
||||
Reference in New Issue
Block a user