306f7e69b0
This patch refactors logic for creating a temporary mount point, mounting an image, running arbitrary code on it, unmounting the image and removing the mount point. It immediately uses it in the buildinstall phase. Similar mounting is present in product_img phase as well, but due to different usage pattern it's not changed yet. Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import mock
|
|
import os
|
|
import sys
|
|
import unittest
|
|
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
|
|
|
from pungi.wrappers import iso
|
|
|
|
CORRECT_OUTPUT = '''dummy.iso: 31ff3e405e26ad01c63b62f6b11d30f6
|
|
Fragment sums: 6eb92e7bda221d7fe5f19b4d21468c9bf261d84c96d145d96c76444b9cbc
|
|
Fragment count: 20
|
|
Supported ISO: no
|
|
'''
|
|
|
|
INCORRECT_OUTPUT = '''This should never happen: File not found'''
|
|
|
|
|
|
class TestIsoUtils(unittest.TestCase):
|
|
@mock.patch('pungi.wrappers.iso.run')
|
|
def test_get_implanted_md5_correct(self, mock_run):
|
|
mock_run.return_value = (0, CORRECT_OUTPUT)
|
|
logger = mock.Mock()
|
|
self.assertEqual(iso.get_implanted_md5('dummy.iso', logger=logger),
|
|
'31ff3e405e26ad01c63b62f6b11d30f6')
|
|
self.assertEqual(mock_run.call_args_list,
|
|
[mock.call(['/usr/bin/checkisomd5', '--md5sumonly', 'dummy.iso'])])
|
|
self.assertEqual(logger.mock_calls, [])
|
|
|
|
@mock.patch('pungi.wrappers.iso.run')
|
|
def test_get_implanted_md5_incorrect(self, mock_run):
|
|
mock_run.return_value = (0, INCORRECT_OUTPUT)
|
|
logger = mock.Mock()
|
|
self.assertIsNone(iso.get_implanted_md5('dummy.iso', logger=logger))
|
|
self.assertEqual(mock_run.call_args_list,
|
|
[mock.call(['/usr/bin/checkisomd5', '--md5sumonly', 'dummy.iso'])])
|
|
self.assertGreater(len(logger.mock_calls), 0)
|
|
|
|
@mock.patch('pungi.util.run_unmount_cmd')
|
|
@mock.patch('pungi.wrappers.iso.run')
|
|
def test_mount_iso(self, mock_run, mock_unmount):
|
|
with iso.mount('dummy') as temp_dir:
|
|
self.assertTrue(os.path.isdir(temp_dir))
|
|
self.assertEqual(len(mock_run.call_args_list), 1)
|
|
self.assertEqual(len(mock_unmount.call_args_list), 1)
|
|
self.assertFalse(os.path.isdir(temp_dir))
|
|
|
|
@mock.patch('pungi.util.run_unmount_cmd')
|
|
@mock.patch('pungi.wrappers.iso.run')
|
|
def test_mount_iso_always_unmounts(self, mock_run, mock_unmount):
|
|
try:
|
|
with iso.mount('dummy') as temp_dir:
|
|
self.assertTrue(os.path.isdir(temp_dir))
|
|
raise RuntimeError()
|
|
except RuntimeError:
|
|
pass
|
|
self.assertEqual(len(mock_run.call_args_list), 1)
|
|
self.assertEqual(len(mock_unmount.call_args_list), 1)
|
|
self.assertFalse(os.path.isdir(temp_dir))
|