mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
tests: test_urls: Use installer, not _Distro directly
This commit is contained in:
@@ -7,15 +7,13 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import time
|
|
||||||
import traceback
|
import traceback
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from tests import utils
|
from tests import utils
|
||||||
|
|
||||||
|
from virtinst import Installer
|
||||||
from virtinst import Guest
|
from virtinst import Guest
|
||||||
from virtinst import urldetect
|
|
||||||
from virtinst import urlfetcher
|
|
||||||
from virtinst import util
|
from virtinst import util
|
||||||
|
|
||||||
|
|
||||||
@@ -67,77 +65,53 @@ xenguest.os.os_type = "xen"
|
|||||||
meter = util.make_meter(quiet=not utils.clistate.debug)
|
meter = util.make_meter(quiet=not utils.clistate.debug)
|
||||||
|
|
||||||
|
|
||||||
def _storeForDistro(fetcher, guest):
|
|
||||||
"""
|
|
||||||
Helper to lookup the Distro store object, basically detecting the
|
|
||||||
URL. Handle occasional proxy errors
|
|
||||||
"""
|
|
||||||
for ignore in range(0, 10):
|
|
||||||
try:
|
|
||||||
return urldetect.getDistroStore(guest, fetcher)
|
|
||||||
except Exception as e:
|
|
||||||
if "502" in str(e):
|
|
||||||
logging.debug("Caught proxy error: %s", str(e))
|
|
||||||
time.sleep(.5)
|
|
||||||
continue
|
|
||||||
raise
|
|
||||||
raise # pylint: disable=misplaced-bare-raise
|
|
||||||
|
|
||||||
|
|
||||||
def _sanitize_osdict_name(detectdistro):
|
def _sanitize_osdict_name(detectdistro):
|
||||||
if detectdistro in ["none", "None", None]:
|
if detectdistro in ["none", "None", None]:
|
||||||
return None
|
return None
|
||||||
return detectdistro
|
return detectdistro
|
||||||
|
|
||||||
|
|
||||||
def _testURL(fetcher, testdata):
|
def _testGuest(testdata, guest):
|
||||||
"""
|
|
||||||
Test that our URL detection logic works for grabbing kernels
|
|
||||||
"""
|
|
||||||
distname = testdata.name
|
distname = testdata.name
|
||||||
arch = testdata.arch
|
arch = testdata.arch
|
||||||
detectdistro = _sanitize_osdict_name(testdata.detectdistro)
|
url = testdata.url
|
||||||
|
checkdistro = testdata.detectdistro
|
||||||
|
|
||||||
hvmguest.os.arch = arch
|
guest.os.arch = arch
|
||||||
xenguest.os.arch = arch
|
|
||||||
if testdata.testshortcircuit:
|
if testdata.testshortcircuit:
|
||||||
hvmguest.set_os_name(detectdistro)
|
guest.set_os_name(checkdistro)
|
||||||
xenguest.set_os_name(detectdistro)
|
|
||||||
|
|
||||||
|
installer = Installer(guest.conn, location=url)
|
||||||
try:
|
try:
|
||||||
hvmstore = _storeForDistro(fetcher, hvmguest)
|
detected_distro = installer.detect_distro(guest)
|
||||||
xenstore = None
|
|
||||||
if testdata.testxen:
|
|
||||||
xenstore = _storeForDistro(fetcher, xenguest)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
raise AssertionError("\nFailed to detect URLDistro class:\n"
|
raise AssertionError("\nFailed in installer detect_distro():\n"
|
||||||
"name = %s\n"
|
"name = %s\n"
|
||||||
"url = %s\n\n%s" %
|
"url = %s\n\n%s" %
|
||||||
(distname, fetcher.location, "".join(traceback.format_exc())))
|
(distname, url, "".join(traceback.format_exc())))
|
||||||
|
|
||||||
for s in [hvmstore, xenstore]:
|
# Make sure the stores are reporting correct distro name/variant
|
||||||
if not s:
|
if checkdistro != detected_distro:
|
||||||
continue
|
raise AssertionError(
|
||||||
|
"Detected OS did not match expected values:\n"
|
||||||
|
"found = %s\n"
|
||||||
|
"expect = %s\n\n"
|
||||||
|
"testname = %s\n"
|
||||||
|
"url = %s\n" %
|
||||||
|
(detected_distro, checkdistro, distname, url))
|
||||||
|
|
||||||
# Make sure the stores are reporting correct distro name/variant
|
if guest is xenguest:
|
||||||
if detectdistro != s.get_osdict_info():
|
return
|
||||||
raise AssertionError(
|
|
||||||
"Detected OS did not match expected values:\n"
|
|
||||||
"found = %s\n"
|
|
||||||
"expect = %s\n\n"
|
|
||||||
"testname = %s\n"
|
|
||||||
"url = %s\n" %
|
|
||||||
(s.get_osdict_info(), detectdistro,
|
|
||||||
distname, fetcher.location))
|
|
||||||
|
|
||||||
# Fetch regular kernel
|
# Fetch regular kernel
|
||||||
kernel, initrd = hvmstore.check_kernel_paths()
|
store = installer._treemedia._cached_store
|
||||||
|
kernel, initrd = store.check_kernel_paths()
|
||||||
dummy = initrd
|
dummy = initrd
|
||||||
if testdata.kernelregex and not re.match(testdata.kernelregex, kernel):
|
if testdata.kernelregex and not re.match(testdata.kernelregex, kernel):
|
||||||
raise AssertionError("kernel=%s but testdata.kernelregex='%s'" %
|
raise AssertionError("kernel=%s but testdata.kernelregex='%s'" %
|
||||||
(kernel, testdata.kernelregex))
|
(kernel, testdata.kernelregex))
|
||||||
|
|
||||||
kernelargs = hvmstore.get_kernel_url_arg()
|
kernelargs = store.get_kernel_url_arg()
|
||||||
if testdata.kernelarg == "None":
|
if testdata.kernelarg == "None":
|
||||||
if bool(kernelargs):
|
if bool(kernelargs):
|
||||||
raise AssertionError("kernelargs='%s' but testdata.kernelarg='%s'"
|
raise AssertionError("kernelargs='%s' but testdata.kernelarg='%s'"
|
||||||
@@ -147,14 +121,15 @@ def _testURL(fetcher, testdata):
|
|||||||
raise AssertionError("kernelargs='%s' but testdata.kernelarg='%s'"
|
raise AssertionError("kernelargs='%s' but testdata.kernelarg='%s'"
|
||||||
% (kernelargs, testdata.kernelarg))
|
% (kernelargs, testdata.kernelarg))
|
||||||
|
|
||||||
# Fetch xen kernel
|
|
||||||
if xenstore:
|
|
||||||
xenstore.check_kernel_paths()
|
|
||||||
|
|
||||||
|
def _testURL(testdata):
|
||||||
def _fetchWrapper(url, cb):
|
"""
|
||||||
fetcher = urlfetcher.fetcherForURI(url, "/tmp", meter)
|
Test that our URL detection logic works for grabbing kernels
|
||||||
return cb(fetcher)
|
"""
|
||||||
|
testdata.detectdistro = _sanitize_osdict_name(testdata.detectdistro)
|
||||||
|
_testGuest(testdata, hvmguest)
|
||||||
|
if testdata.testxen:
|
||||||
|
_testGuest(testdata, xenguest)
|
||||||
|
|
||||||
|
|
||||||
def _testURLWrapper(testdata):
|
def _testURLWrapper(testdata):
|
||||||
@@ -163,20 +138,17 @@ def _testURLWrapper(testdata):
|
|||||||
sys.stdout.write("\nTesting %-25s " % testdata.name)
|
sys.stdout.write("\nTesting %-25s " % testdata.name)
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
|
||||||
def cb(fetcher):
|
return _testURL(testdata)
|
||||||
return _testURL(fetcher, testdata)
|
|
||||||
return _fetchWrapper(testdata.url, cb)
|
|
||||||
|
|
||||||
|
|
||||||
# Register tests to be picked up by unittest
|
# Register tests to be picked up by unittest
|
||||||
class URLTests(unittest.TestCase):
|
class URLTests(unittest.TestCase):
|
||||||
def test001BadURL(self):
|
def test001BadURL(self):
|
||||||
badurl = "http://aksdkakskdfa-idontexist.com/foo/tree"
|
badurl = "http://aksdkakskdfa-idontexist.com/foo/tree"
|
||||||
def cb(fetcher):
|
|
||||||
return _storeForDistro(fetcher, hvmguest)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
_fetchWrapper(badurl, cb)
|
installer = Installer(hvmguest.conn, location=badurl)
|
||||||
|
installer.detect_distro(hvmguest)
|
||||||
raise AssertionError("Expected URL failure")
|
raise AssertionError("Expected URL failure")
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
self.assertTrue("maybe you mistyped" in str(e))
|
self.assertTrue("maybe you mistyped" in str(e))
|
||||||
|
|||||||
Reference in New Issue
Block a user