mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-01-12 09:18:00 +03:00
4196f4287b
since we work with python2 only, mentioning it in all shebangs make the commands from git work even when python3 is set as default. This also fixes one test where command being ran is 'virt-xml' through subprocess.Popen(). While at that, add '-tt' where possible in order to make everyone use same indentation characters. Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
185 lines
5.0 KiB
Python
Executable File
185 lines
5.0 KiB
Python
Executable File
#!/usr/bin/python2 -tt
|
|
# Copyright (C) 2013, 2014 Red Hat, Inc.
|
|
|
|
import atexit
|
|
import os
|
|
import sys
|
|
import unittest
|
|
|
|
import urlgrabber
|
|
|
|
from tests import INITRD_TEST_DISTROS
|
|
from tests import utils
|
|
|
|
from virtinst import Guest
|
|
from virtinst import urlfetcher
|
|
from virtinst.distroinstaller import _perform_initrd_injections
|
|
|
|
cleanup = []
|
|
_alldistros = {}
|
|
|
|
testconn = utils.open_testdefault()
|
|
guest = Guest(testconn)
|
|
guest.os.os_type = "hvm"
|
|
guest.os.arch = "x86_64"
|
|
meter = urlgrabber.progress.TextMeter(fo=sys.stdout)
|
|
|
|
DEVFEDORA_URL = "http://download.fedoraproject.org/pub/fedora/linux/development/%s/%s/os/"
|
|
OLD_FEDORA_URL = "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/%s/Fedora/%s/os/"
|
|
FEDORA_URL = "http://download.fedoraproject.org/pub/fedora/linux/releases/%s/Fedora/%s/os/"
|
|
|
|
|
|
def prompt():
|
|
sys.stdout.write("(press enter to continue)")
|
|
return sys.stdin.readline()
|
|
|
|
|
|
class Distro(object):
|
|
def __init__(self, name, url, ks2=False, virtio=True):
|
|
self.name = name
|
|
self.url = url
|
|
self.virtio = virtio
|
|
|
|
self.ks = "tests/inject-data/old-kickstart.ks"
|
|
if ks2:
|
|
self.ks = "tests/inject-data/new-kickstart.ks"
|
|
|
|
self.kernel = None
|
|
self.initrd = None
|
|
|
|
|
|
|
|
|
|
def _add(*args, **kwargs):
|
|
_d = Distro(*args, **kwargs)
|
|
_alldistros[_d.name] = _d
|
|
|
|
|
|
_add("centos-4.9", "http://vault.centos.org/4.9/os/x86_64",
|
|
ks2=True, virtio=False)
|
|
_add("centos-5-latest", "http://ftp.linux.ncsu.edu/pub/CentOS/5/os/x86_64/")
|
|
_add("centos-6-latest", "http://ftp.linux.ncsu.edu/pub/CentOS/6/os/x86_64/")
|
|
_add("fedora-14", OLD_FEDORA_URL % ("14", "x86_64"))
|
|
_add("fedora-15", OLD_FEDORA_URL % ("15", "x86_64"))
|
|
_add("fedora-16", OLD_FEDORA_URL % ("16", "x86_64"))
|
|
_add("fedora-17", OLD_FEDORA_URL % ("17", "x86_64"))
|
|
_add("fedora-18", FEDORA_URL % ("18", "x86_64"), ks2=True)
|
|
_add("fedora-19", FEDORA_URL % ("19", "x86_64"), ks2=True)
|
|
_add("fedora-20", DEVFEDORA_URL % ("20", "x86_64"), ks2=True)
|
|
|
|
|
|
def exit_cleanup():
|
|
for f in cleanup or []:
|
|
try:
|
|
os.unlink(f)
|
|
except:
|
|
pass
|
|
atexit.register(exit_cleanup)
|
|
|
|
|
|
def _fetch_distro(distro):
|
|
print "Fetching distro=%s" % distro.name
|
|
|
|
fetcher = urlfetcher.fetcherForURI(distro.url, "/tmp", meter)
|
|
try:
|
|
fetcher.prepareLocation()
|
|
store = urlfetcher.getDistroStore(guest, fetcher)
|
|
kernel, initrd, ignore = store.acquireKernel(guest)
|
|
cleanup.append(kernel)
|
|
cleanup.append(initrd)
|
|
distro.kernel = kernel
|
|
distro.initrd = initrd
|
|
finally:
|
|
fetcher.cleanupLocation()
|
|
|
|
|
|
def _test_distro(distro):
|
|
originitrd = distro.initrd
|
|
kernel = distro.kernel
|
|
newinitrd = originitrd + ".copy"
|
|
injectfile = distro.ks
|
|
|
|
os.system("cp -f %s %s" % (originitrd, newinitrd))
|
|
cleanup.append(newinitrd)
|
|
_perform_initrd_injections(newinitrd, [injectfile], ".")
|
|
|
|
nic = distro.virtio and "virtio" or "rtl8139"
|
|
append = "-append \"ks=file:/%s\"" % os.path.basename(injectfile)
|
|
print os.environ["DISPLAY"]
|
|
cmd = ("sudo qemu-kvm -enable-kvm -name %s "
|
|
"-cpu host -m 1500 -vnc "
|
|
"-net bridge,br=virbr0 -net nic,model=%s "
|
|
"-kernel %s -initrd %s %s" %
|
|
(distro.name, nic, kernel, newinitrd, append))
|
|
print "\n\n" + cmd
|
|
os.system(cmd)
|
|
|
|
|
|
_printinitrd = False
|
|
_printfetch = False
|
|
|
|
|
|
class FetchTests(unittest.TestCase):
|
|
def setUp(self):
|
|
global _printfetch
|
|
if _printfetch:
|
|
return
|
|
print """
|
|
|
|
|
|
|
|
This is an interactive test.
|
|
|
|
First step is we need to go and fetch a bunch of distro kernel/initrd
|
|
from public trees. This is going to take a while. Let it run then come
|
|
back later and we will be waiting to continue.
|
|
|
|
"""
|
|
prompt()
|
|
_printfetch = True
|
|
|
|
|
|
class InjectTests(unittest.TestCase):
|
|
def setUp(self):
|
|
global _printinitrd
|
|
if _printinitrd:
|
|
return
|
|
print """
|
|
|
|
|
|
|
|
Okay, we have all the media. We are going to perform the initrd injection
|
|
of some stock kickstarts, then manually launch a qemu instance to verify
|
|
it's working. How you know it's working depends on the distro (look at
|
|
the qemu window title):
|
|
|
|
RHEL4: Makes its way to the text installer, then chokes on our bogus URI
|
|
http://HEY-THIS-IS-OUR-BAD-KICKSTART-URL.com/
|
|
|
|
RHEL5, RHEL6, Fedora < 17: You'll get an error about a bogus bootproto
|
|
ITREADTHEKICKSTART. This means anaconda read our busted kickstart.
|
|
|
|
Fedora >= 17: Chokes on the bogus URI in the early console screen when
|
|
fetching the installer squashfs image.
|
|
|
|
"""
|
|
prompt()
|
|
_printinitrd = True
|
|
|
|
|
|
def _make_tests():
|
|
def _make_fetch_cb(_d):
|
|
return lambda s: _fetch_distro(_d)
|
|
def _make_check_cb(_d):
|
|
return lambda s: _test_distro(_d)
|
|
|
|
distros = INITRD_TEST_DISTROS or _alldistros.keys()
|
|
idx = 0
|
|
for d in distros:
|
|
dobj = _alldistros[d]
|
|
idx += 1
|
|
setattr(FetchTests, "testFetch%.3d" % idx, _make_fetch_cb(dobj))
|
|
setattr(InjectTests, "testInitrd%.3d" % idx, _make_check_cb(dobj))
|
|
|
|
_make_tests()
|