298 lines
10 KiB
Python
298 lines
10 KiB
Python
|
#!/usr/bin/python
|
||
|
|
||
|
import mock
|
||
|
|
||
|
class RescueTest(mock.TestCase):
|
||
|
|
||
|
def setUp(self):
|
||
|
self.setupModules(
|
||
|
['_isys', 'block', 'parted', 'storage', 'pyanaconda.storage.formats',
|
||
|
'logging', 'add_drive_text', 'ConfigParser',
|
||
|
'pyanaconda.storage.storage_log', 'pyanaconda.anaconda_log', 'snack'
|
||
|
])
|
||
|
|
||
|
self.fs = mock.DiskIO()
|
||
|
|
||
|
import pyanaconda
|
||
|
pyanaconda.anaconda_log = mock.Mock()
|
||
|
import snack
|
||
|
snack.SnackScreen = mock.Mock()
|
||
|
|
||
|
import pyanaconda.rescue
|
||
|
pyanaconda.rescue.open = self.fs.open
|
||
|
|
||
|
def tearDown(self):
|
||
|
self.tearDownModules()
|
||
|
|
||
|
#
|
||
|
# RescueInterface class tests
|
||
|
#
|
||
|
|
||
|
def rescueinterface_waitwindow_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
RET = 'foo1'
|
||
|
pyanaconda.rescue.WaitWindow = mock.Mock(return_value=RET)
|
||
|
TITLE = 'title'
|
||
|
TEXT = 'text'
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ret = ri.waitWindow(TITLE, TEXT)
|
||
|
self.assertEqual(ret, RET)
|
||
|
|
||
|
def rescueinterface_progresswindow_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
RET = 'foo2'
|
||
|
pyanaconda.rescue.ProgressWindow = mock.Mock(return_value=RET)
|
||
|
TITLE = 'title'
|
||
|
TEXT = 'text'
|
||
|
TOTAL = 100
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ret = ri.progressWindow(TITLE, TEXT, TOTAL)
|
||
|
self.assertEqual(ret, RET)
|
||
|
|
||
|
def rescueinterface_detailedmessagewindow_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
RET = 'foo3'
|
||
|
pyanaconda.rescue.RescueInterface.messageWindow = mock.Mock(return_value=RET)
|
||
|
TITLE = 'title'
|
||
|
TEXT = 'text'
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ret = ri.detailedMessageWindow(TITLE, TEXT)
|
||
|
self.assertEqual(ret, RET)
|
||
|
|
||
|
def rescueinterface_messagewindow_1_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
pyanaconda.rescue.ButtonChoiceWindow = mock.Mock()
|
||
|
TITLE = 'title'
|
||
|
TEXT = 'text'
|
||
|
TYPE = 'ok'
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ri.detailedMessageWindow(TITLE, TEXT, TYPE)
|
||
|
self.assertTrue(pyanaconda.rescue.ButtonChoiceWindow.called)
|
||
|
|
||
|
def rescueinterface_messagewindow_2_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
RET='yes'
|
||
|
pyanaconda.rescue.ButtonChoiceWindow = mock.Mock(return_value=RET)
|
||
|
TITLE = 'title'
|
||
|
TEXT = 'text'
|
||
|
TYPE = 'yesno'
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ret = ri.messageWindow(TITLE, TEXT, TYPE)
|
||
|
self.assertEqual(ret, 1)
|
||
|
|
||
|
def rescueinterface_messagewindow_3_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
RET = 'barfoo'
|
||
|
pyanaconda.rescue.ButtonChoiceWindow = mock.Mock(return_value=RET)
|
||
|
TITLE = 'title'
|
||
|
TEXT = 'text'
|
||
|
TYPE = 'custom'
|
||
|
CUSTOM_BUTT = ['foo_bar', 'bar_foo']
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ret = ri.messageWindow(TITLE, TEXT, TYPE, custom_buttons=CUSTOM_BUTT)
|
||
|
self.assertEqual(ret, 1)
|
||
|
|
||
|
def rescueinterface_messagewindow_4_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
RET = 'foo4'
|
||
|
pyanaconda.rescue.OkCancelWindow = mock.Mock(return_value=RET)
|
||
|
TITLE = 'title'
|
||
|
TEXT = 'text'
|
||
|
TYPE = 'otherfoo'
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ret = ri.messageWindow(TITLE, TEXT, TYPE)
|
||
|
self.assertEqual(ret, RET)
|
||
|
|
||
|
def rescueinterface_enablenetwork_1_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
anaconda = mock.Mock()
|
||
|
anaconda.network.netdevices = {}
|
||
|
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ret = ri.enableNetwork(anaconda)
|
||
|
self.assertFalse(ret)
|
||
|
|
||
|
def rescueinterface_passphraseentrywindow_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
RET = ('secret', False)
|
||
|
pyanaconda.rescue.PassphraseEntryWindow = mock.Mock()
|
||
|
pyanaconda.rescue.PassphraseEntryWindow().run.return_value = RET
|
||
|
DEVICE = 'dev'
|
||
|
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ret = ri.passphraseEntryWindow(DEVICE)
|
||
|
self.assertEqual(ret, RET)
|
||
|
self.assertTrue(pyanaconda.rescue.PassphraseEntryWindow().pop.called)
|
||
|
|
||
|
def rescueinterface_resetinitializediskquestion_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ri._initLabelAnswers = {'foo': 'bar'}
|
||
|
ri.resetInitializeDiskQuestion()
|
||
|
|
||
|
def rescueinterface_resetreinitinconsistentlvmquestion_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ri._inconsistentLVMAnswers = {'foo': 'bar'}
|
||
|
ri.resetReinitInconsistentLVMQuestion()
|
||
|
self.assertEqual(ri._inconsistentLVMAnswers, {})
|
||
|
|
||
|
def rescueinterface_questioninitializedisk_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ret = ri.questionInitializeDisk('/', '', 0)
|
||
|
self.assertFalse(ret)
|
||
|
|
||
|
def rescueinterface_questionreinitinconsistentlvm_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ret = ri.questionReinitInconsistentLVM()
|
||
|
self.assertFalse(ret)
|
||
|
|
||
|
def rescueinterface_questioninitializedasd_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
ri = pyanaconda.rescue.RescueInterface()
|
||
|
ret = ri.questionInitializeDASD('', '')
|
||
|
self.assertEqual(ret, 1)
|
||
|
|
||
|
#
|
||
|
# module function tests
|
||
|
#
|
||
|
|
||
|
def makefstab_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
INSTPATH = '/tmp'
|
||
|
FSTAB = 'rootfs / rootfs rw 0 0'
|
||
|
pyanaconda.rescue.os = mock.Mock()
|
||
|
pyanaconda.rescue.os.access.return_value = True
|
||
|
self.fs.open('/proc/mounts', 'w').write(FSTAB)
|
||
|
self.fs.open('%s/etc/fstab' % INSTPATH, 'w')
|
||
|
|
||
|
ret = pyanaconda.rescue.makeFStab(INSTPATH)
|
||
|
self.assertEqual(self.fs['%s/etc/fstab' % INSTPATH], FSTAB)
|
||
|
|
||
|
def makeresolvconf_1_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
INSTPATH = '/tmp'
|
||
|
RESOLV = "nameserver 10.0.0.1"
|
||
|
pyanaconda.rescue.os = mock.Mock()
|
||
|
pyanaconda.rescue.os.access.return_value = False
|
||
|
pyanaconda.rescue.shutil = mock.Mock()
|
||
|
|
||
|
pyanaconda.rescue.makeResolvConf(INSTPATH)
|
||
|
self.assertFalse(pyanaconda.rescue.shutil.copyfile.called)
|
||
|
|
||
|
def makeresolvconf_2_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
INSTPATH = '/tmp'
|
||
|
RESOLV = "nameserver 10.0.0.1"
|
||
|
pyanaconda.rescue.os = mock.Mock()
|
||
|
pyanaconda.rescue.os.access.return_value = True
|
||
|
pyanaconda.rescue.shutil = mock.Mock()
|
||
|
self.fs.open('%s/etc/resolv.conf' % INSTPATH, 'w').write(RESOLV)
|
||
|
|
||
|
pyanaconda.rescue.makeResolvConf(INSTPATH)
|
||
|
self.assertFalse(pyanaconda.rescue.shutil.copyfile.called)
|
||
|
|
||
|
def makeresolvconf_3_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
INSTPATH = '/tmp'
|
||
|
RESOLV = "nameserver 10.0.0.1"
|
||
|
pyanaconda.rescue.os = mock.Mock()
|
||
|
pyanaconda.rescue.os.access.return_value = True
|
||
|
pyanaconda.rescue.shutil = mock.Mock()
|
||
|
self.fs.open('%s/etc/resolv.conf' % INSTPATH, 'w').write('')
|
||
|
self.fs.open('/etc/resolv.conf', 'w').write('')
|
||
|
|
||
|
pyanaconda.rescue.makeResolvConf(INSTPATH)
|
||
|
self.assertFalse(pyanaconda.rescue.shutil.copyfile.called)
|
||
|
self.assertEqual(self.fs['%s/etc/resolv.conf' % INSTPATH], '')
|
||
|
|
||
|
def makeresolvconf_4_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
INSTPATH = '/tmp'
|
||
|
RESOLV = "nameserver 10.0.0.1"
|
||
|
pyanaconda.rescue.os = mock.Mock()
|
||
|
pyanaconda.rescue.os.access.return_value = True
|
||
|
pyanaconda.rescue.shutil = mock.Mock()
|
||
|
self.fs.open('%s/etc/resolv.conf' % INSTPATH, 'w').write('')
|
||
|
self.fs.open('/etc/resolv.conf', 'w').write(RESOLV)
|
||
|
|
||
|
pyanaconda.rescue.makeResolvConf(INSTPATH)
|
||
|
self.assertTrue(pyanaconda.rescue.shutil.copyfile.called)
|
||
|
self.assertEqual(self.fs['%s/etc/resolv.conf' % INSTPATH],
|
||
|
'nameserver 10.0.0.1')
|
||
|
|
||
|
def startnetworking_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
NETWORK = mock.Mock()
|
||
|
pyanaconda.rescue.os = mock.Mock()
|
||
|
pyanaconda.rescue.startNetworking(NETWORK, '')
|
||
|
self.assertEqual(pyanaconda.rescue.os.system.call_args,
|
||
|
(('/usr/sbin/ifconfig lo 127.0.0.1',), {}))
|
||
|
self.assertTrue(NETWORK.bringUp.called)
|
||
|
|
||
|
def runshell_1_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
import sys
|
||
|
TMPFILE = '/tmp/abc'
|
||
|
MSG = "foo bar"
|
||
|
pyanaconda.rescue.os = mock.Mock()
|
||
|
pyanaconda.rescue.os.path.exists.return_value = True
|
||
|
pyanaconda.rescue.subprocess = mock.Mock()
|
||
|
proc = mock.Mock()
|
||
|
proc.returncode = 0
|
||
|
pyanaconda.rescue.subprocess.Popen.return_value = proc
|
||
|
|
||
|
stdout = sys.stdout
|
||
|
sys.stdout = self.fs.open(TMPFILE, 'w')
|
||
|
pyanaconda.rescue.runShell(msg=MSG)
|
||
|
sys.stdout.close()
|
||
|
sys.stdout = stdout
|
||
|
|
||
|
self.assertTrue(MSG in self.fs[TMPFILE])
|
||
|
self.assertEqual(pyanaconda.rescue.subprocess.Popen.call_args,
|
||
|
((['/usr/bin/firstaidkit-qs'],), {}))
|
||
|
|
||
|
def runshell_2_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
import sys
|
||
|
TMPFILE = '/tmp/abc'
|
||
|
MSG = "foo bar"
|
||
|
|
||
|
def fake_f(filename, _=""):
|
||
|
return filename == "/bin/bash"
|
||
|
|
||
|
pyanaconda.rescue.os = mock.Mock()
|
||
|
pyanaconda.rescue.os.path.exists = fake_f
|
||
|
pyanaconda.rescue.iutil = mock.Mock()
|
||
|
proc = mock.Mock()
|
||
|
proc.returncode = 0
|
||
|
pyanaconda.rescue.subprocess.Popen.return_value = proc
|
||
|
|
||
|
stdout = sys.stdout
|
||
|
sys.stdout = self.fs.open(TMPFILE, 'w')
|
||
|
pyanaconda.rescue.runShell(msg=MSG)
|
||
|
sys.stdout.close()
|
||
|
sys.stdout = stdout
|
||
|
|
||
|
self.assertTrue(MSG in self.fs[TMPFILE])
|
||
|
self.assertTrue(pyanaconda.rescue.iutil.execConsole.called)
|
||
|
|
||
|
def runshell_3_test(self):
|
||
|
import pyanaconda.rescue
|
||
|
import sys
|
||
|
TMPFILE = '/tmp/abc'
|
||
|
SCREEN = mock.Mock()
|
||
|
pyanaconda.rescue.os = mock.Mock()
|
||
|
pyanaconda.rescue.os.path.exists.return_value = True
|
||
|
pyanaconda.rescue.subprocess = mock.Mock()
|
||
|
proc = mock.Mock()
|
||
|
proc.returncode = 0
|
||
|
pyanaconda.rescue.subprocess.Popen.return_value = proc
|
||
|
|
||
|
pyanaconda.rescue.runShell(screen=SCREEN)
|
||
|
|
||
|
self.assertTrue(SCREEN.suspend.called)
|
||
|
self.assertTrue(SCREEN.finish.called)
|