qubes-installer-qubes-os/anaconda/tests/pyanaconda_tests/ks_version_test.py

79 lines
3.4 KiB
Python
Raw Normal View History

#!/usr/bin/python3
#
# Copyright (C) 2013 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from mock import Mock
import unittest
import os
class BaseTestCase(unittest.TestCase):
def setUp(self):
import sys
sys.modules["anaconda_log"] = Mock()
sys.modules["block"] = Mock()
from pyanaconda import kickstart
import pykickstart.version
self.handler = pykickstart.version.makeVersion(kickstart.superclass.version)
self._commandMap = kickstart.commandMap
self._dataMap = kickstart.dataMap
# Verify that each kickstart command in anaconda uses the correct version of
# that command as provided by pykickstart. That is, if there's an FC3 and an
# F10 version of a command, make sure anaconda >= F10 uses the F10 version.
class CommandVersionTestCase(BaseTestCase):
def commands_test(self):
"""Test that anaconda uses the right versions of kickstart commands"""
for (commandName, commandObj) in self._commandMap.items():
pykickstartClass = self.handler.commands[commandName].__class__
self.assertIsInstance(commandObj(), pykickstartClass)
# Do the same thing as CommandVersionTestCase, but for data objects.
class DataVersionTestCase(BaseTestCase):
def data_test(self):
"""Test that anaconda uses the right versions of kickstart data"""
for (dataName, dataObj) in self._dataMap.items():
# pykickstart does not expose data objects as a mapping the way
# it does command objects.
pykickstartClass = eval("self.handler.%s" % dataName)
self.assertIsInstance(dataObj(), pykickstartClass)
# Copy the commands tests but with the command map from dracut/parse-kickstart
class DracutCommandVersionTestCase(CommandVersionTestCase):
def setUp(self):
CommandVersionTestCase.setUp(self)
# top_srcdir should have been set by nosetests.sh. If it wasn't, the KeyError
# will fail the test.
parse_kickstart_path = os.path.join(os.environ['top_srcdir'], 'dracut', 'parse-kickstart')
import tempfile
with tempfile.NamedTemporaryFile() as parse_temp:
# Compile the file manually to a tempfile so that the import doesn't automatically
# crud up the source directory with parse-kickstartc
import py_compile
parse_temp = tempfile.NamedTemporaryFile()
py_compile.compile(parse_kickstart_path, parse_temp.name)
with open(parse_temp.name, "rb") as parse_temp_content:
# Use imp to pretend that hyphens are ok for module names
import imp
parse_module = imp.load_module('parse_kickstart', parse_temp_content,
parse_temp.name, ('', 'rb', imp.PY_COMPILED))
self._commandMap = parse_module.dracutCmds