fix: preserve guest network identities and refresh session profiles
This commit is contained in:
+41
-1
@@ -88,6 +88,46 @@ class RuntimeTests(unittest.TestCase):
|
||||
except VMError:
|
||||
pass
|
||||
|
||||
def test_mac_persisted_distinct_and_stable_across_restarts(self):
|
||||
self.runtime.add(Profile('other', network='bridge'))
|
||||
other = self.runtime.profile('other')
|
||||
guest = self.runtime.profile('guest')
|
||||
self.assertIsNotNone(guest.mac)
|
||||
self.assertNotEqual(guest.mac, other.mac)
|
||||
octet = int(guest.mac.split(':')[0], 16)
|
||||
self.assertEqual(octet & 3, 2) # locally administered, unicast
|
||||
def nic(profile, runtime):
|
||||
return next(arg for arg in build_qemu_argv(profile, runtime.paths(profile.name))
|
||||
if arg.startswith('virtio-net-pci,'))
|
||||
expected = nic(guest, self.runtime)
|
||||
self.runtime.start('guest')
|
||||
self.runtime.stop('guest', force=True)
|
||||
self.runtime.start('guest')
|
||||
self.runtime.stop('guest', force=True)
|
||||
self.assertEqual(nic(self.runtime.profile('guest'), self.runtime), expected)
|
||||
changed_runtime = Runtime(self.runtime.config, self.runtime.state, self.root / 'different-run')
|
||||
self.assertEqual(nic(changed_runtime.profile('guest'), changed_runtime), expected)
|
||||
self.runtime.media('guest', None)
|
||||
self.assertEqual(self.runtime.profile('guest').mac, guest.mac)
|
||||
|
||||
def test_legacy_profiles_gain_stable_owner_specific_argv_mac(self):
|
||||
file = self.runtime.config / 'legacy.toml'
|
||||
save_profile(file, Profile('legacy', network='bridge'))
|
||||
original = file.read_bytes()
|
||||
legacy = self.runtime.profile('legacy')
|
||||
self.assertIsNone(legacy.mac)
|
||||
paths = self.runtime.paths('legacy')
|
||||
def mac():
|
||||
return next(arg for arg in build_qemu_argv(legacy, paths) if arg.startswith('virtio-net-pci,'))
|
||||
with patch('os.getuid', return_value=1000):
|
||||
first = mac()
|
||||
self.assertEqual(mac(), first)
|
||||
self.assertNotEqual(first, next(arg for arg in build_qemu_argv(
|
||||
legacy, self.runtime.paths('other')) if arg.startswith('virtio-net-pci,')))
|
||||
with patch('os.getuid', return_value=1001):
|
||||
self.assertNotEqual(mac(), first)
|
||||
self.assertEqual(file.read_bytes(), original)
|
||||
|
||||
def test_disk_boot_omits_media_and_requests_display(self):
|
||||
profile = Profile('guest', width=1920, height=1080, refresh_millihz=144000,
|
||||
graphics='software')
|
||||
@@ -145,7 +185,7 @@ class RuntimeTests(unittest.TestCase):
|
||||
self.assertIn('disable-agent-file-xfer=on', spice)
|
||||
self.assertIn('run,,comma', spice)
|
||||
self.assertIn('virtio-blk-pci,drive=disk', argv)
|
||||
self.assertIn('virtio-net-pci,netdev=net', argv)
|
||||
self.assertTrue(any(arg.startswith('virtio-net-pci,netdev=net,mac=') for arg in argv))
|
||||
self.assertNotIn('-vnc', argv)
|
||||
self.assertNotIn('-virtfs', argv)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user