fix: preserve guest network identities and refresh session profiles
This commit is contained in:
@@ -55,6 +55,11 @@ class SessionTests(unittest.TestCase):
|
||||
self.assertEqual(tree.findall('./mouse/context/mousebind/action'), [])
|
||||
self.assertEqual(tree.findtext('./libinput/device/tap'), 'yes')
|
||||
|
||||
def test_empty_session_has_one_workspace_without_empty_names(self):
|
||||
tree = ET.fromstring(session.build_labwc_config([], ['foot']))
|
||||
self.assertEqual(tree.find('./desktops').get('number'), '1')
|
||||
self.assertIsNone(tree.find('./desktops/names'))
|
||||
|
||||
def test_viewer_argv_is_private_safe_and_manual_usb_only(self):
|
||||
paths = self.manager.paths('alpha')
|
||||
argv = session.build_viewer_argv(paths, '/tool path/viewer')
|
||||
@@ -173,6 +178,45 @@ else:
|
||||
self.assertEqual(main(['_session-helper', 'recover', str(manifest)]), 1)
|
||||
self.assertIn('manifest', error.getvalue().lower())
|
||||
|
||||
def test_empty_launch_refresh_rebuilds_profile_snapshot(self):
|
||||
manager = Runtime(self.root / 'empty-config', self.root / 'empty-state', self.root / 'empty-run')
|
||||
capture = self.root / 'refresh-capture.json'
|
||||
compositor = self.root / 'refresh-labwc'
|
||||
compositor.write_text('#!' + os.sys.executable + '\n' + r'''import json, os, subprocess, sys
|
||||
from pathlib import Path
|
||||
if '--version' in sys.argv:
|
||||
print('labwc 0.20.2')
|
||||
sys.exit(0)
|
||||
config = Path(sys.argv[sys.argv.index('-C') + 1])
|
||||
manifest = config.parent / 'session.json'
|
||||
data = json.loads(manifest.read_text())
|
||||
capture = Path(os.environ['CAPTURE'])
|
||||
seen = json.loads(capture.read_text()) if capture.exists() else []
|
||||
seen.append({'names': data['names'], 'xml': (config / 'rc.xml').read_text()})
|
||||
capture.write_text(json.dumps(seen))
|
||||
if len(seen) == 1:
|
||||
launcher = os.environ['HYDRA_SOURCE_LAUNCHER']
|
||||
for name in ('first', 'second'):
|
||||
subprocess.run([sys.executable, launcher, '--config', data['config'], '--state', data['state'],
|
||||
'--runtime', data['runtime'], 'add', name], check=True)
|
||||
subprocess.run([sys.executable, launcher, '_session-helper', 'recover', str(manifest)],
|
||||
input=':refresh\n', text=True, check=True)
|
||||
sys.exit(67)
|
||||
sys.exit(0)
|
||||
''')
|
||||
compositor.chmod(0o700)
|
||||
with patch.dict(os.environ, {'HYDRA_LABWC': str(compositor), 'HYDRA_TERMINAL': str(compositor),
|
||||
'HYDRA_BRIGHTNESS': str(compositor), 'CAPTURE': str(capture),
|
||||
'HYDRA_SOURCE_LAUNCHER': str(Path('bin/hydra').resolve())}), contextlib.redirect_stdout(io.StringIO()):
|
||||
self.assertEqual(session.launch_session(manager), 0)
|
||||
seen = json.loads(capture.read_text())
|
||||
self.assertEqual([entry['names'] for entry in seen], [[], ['first', 'second']])
|
||||
tree = ET.fromstring(seen[1]['xml'])
|
||||
self.assertEqual(tree.find('desktops').get('number'), '2')
|
||||
self.assertEqual([rule.get('title') for rule in tree.findall('./windowRules/windowRule')],
|
||||
['HydraOS: first', 'HydraOS: second'])
|
||||
self.assertFalse(manager.paths('first').disk.exists())
|
||||
|
||||
def test_no_running_vms_opens_recovery_without_start_or_stop(self):
|
||||
terminal = self.root / 'terminal'
|
||||
capture = self.root / 'recovery-argv.json'
|
||||
|
||||
Reference in New Issue
Block a user