Zhou Zheng Sheng has uploaded a new change for review.

Change subject: generate initramfs on demand in VM creation test
......................................................................

generate initramfs on demand in VM creation test

Fedora is shipped with initramfs, so use it directly. Some other distros
are shipped with initrd, so generate initramfs on demand.

Change-Id: I07a7a246cd66bd3f9bac30f56a4d63081d04ea29
Signed-off-by: Zhou Zheng Sheng <[email protected]>
---
M tests/functional/xmlrpcTests.py
M vdsm.spec.in
2 files changed, 62 insertions(+), 32 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/93/7693/1

diff --git a/tests/functional/xmlrpcTests.py b/tests/functional/xmlrpcTests.py
index cfda085..226478c 100644
--- a/tests/functional/xmlrpcTests.py
+++ b/tests/functional/xmlrpcTests.py
@@ -19,16 +19,55 @@
 #
 
 import os
+import tempfile
 import time
 
 from testrunner import VdsmTestCase as TestCaseBase
 from nose.plugins.skip import SkipTest
+from contextlib import contextmanager
 
 from vdsm.config import config
 from vdsm import vdscli
+from storage.misc import execCmd
+from vdsm.utils import CommandPath
 
 if not config.getboolean('vars', 'xmlrpc_enable'):
     raise SkipTest("XML-RPC Bindings are disabled")
+
+_mkinitrd = CommandPath("mkinird", "/usr/bin/mkinitrd")
+
+
+@contextmanager
+def kernelBootImages():
+    kernelVer = os.uname()[2]
+    kernelPath = "/boot/vmlinuz-" + kernelVer
+    initramfsPath = "/boot/initramfs-%s.img" % kernelVer
+
+    if not os.path.isfile(kernelPath):
+        raise SkipTest("Can not locate kernel image for release %s" %
+                       kernelVer)
+
+    if os.path.isfile(initramfsPath):
+        # There is an initramfs shipped with the distro, use it
+        try:
+            yield (kernelPath, initramfsPath)
+        finally:
+            pass
+    else:
+        # Generate an initramfs on demand, use it, delete it
+        initramfsPath = genInitramfs(kernelVer)
+        try:
+            yield (kernelPath, initramfsPath)
+        finally:
+            os.unlink(initramfsPath)
+
+
+def genInitramfs(kernelVer):
+    fd, path = tempfile.mkstemp()
+    cmd = [_mkinitrd.cmd, "-f", path, kernelVer]
+    rc, out, err = execCmd(cmd, sudo=False)
+    os.chmod(path, 0644)
+    return path
 
 
 class XMLRPCTest(TestCaseBase):
@@ -91,41 +130,31 @@
             self.assertVdsOK(r)
 
     def testStartSmallVM(self):
-        kernelVer = os.uname()[2]
-        kernelPath = "/boot/vmlinuz-" + kernelVer
-        initramfsPath = "/boot/initramfs-%s.img" % kernelVer
-
-        if not os.path.isfile(kernelPath):
-            raise SkipTest("Can not locate kernel image for release %s" %
-                           kernelVer)
-
-        if not os.path.isfile(initramfsPath):
-            raise SkipTest("Can not locate initramfs image for release %s" %
-                           kernelVer)
-
-        VMID = '77777777-ffff-3333-bbbb-222222222222'
-        conf = {'display': 'vnc',
-                'kernel': kernelPath,
-                'initrd': initramfsPath,
-                # The initramfs is generated by dracut. The following
-                # arguments will be interpreted by init scripts created by
-                # dracut.
-                'kernelArgs': 'rd.break=cmdline rd.shell rd.skipfsck',
-                'kvmEnable': 'true',
-                'memSize': '256',
-                'vmId': VMID,
-                'vmName': 'vdsm_testSmallVM',
-                'vmType': 'kvm'}
-
         def assertVMAndGuestUp():
             self.assertVmUp(VMID)
             self.assertGuestUp(VMID)
 
-        try:
-            self.assertVdsOK(self.s.create(conf))
-            # wait 65 seconds for VM to come up until timeout
-            self.retryAssert(assertVMAndGuestUp, 65, 1)
-        finally:
-            destroyResult = self.s.destroy(VMID)
+        VMID = '77777777-ffff-3333-bbbb-222222222222'
+
+        with kernelBootImages() as (kernelPath, initramfsPath):
+            conf = {'display': 'vnc',
+                    'kernel': kernelPath,
+                    'initrd': initramfsPath,
+                    # The initramfs is generated by dracut. The following
+                    # arguments will be interpreted by init scripts created by
+                    # dracut.
+                    'kernelArgs': 'rd.break=cmdline rd.shell rd.skipfsck',
+                    'kvmEnable': 'true',
+                    'memSize': '256',
+                    'vmId': VMID,
+                    'vmName': 'vdsm_testSmallVM',
+                    'vmType': 'kvm'}
+
+            try:
+                self.assertVdsOK(self.s.create(conf))
+                # wait 65 seconds for VM to come up until timeout
+                self.retryAssert(assertVMAndGuestUp, 65, 1)
+            finally:
+                destroyResult = self.s.destroy(VMID)
 
         self.assertVdsOK(destroyResult)
diff --git a/vdsm.spec.in b/vdsm.spec.in
index 0d1b195..6cd4e0c 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -165,6 +165,7 @@
 %package tests
 Summary:        VDSM Test Suite
 Requires:       vdsm = %{version}-%{release}
+Requires:       dracut
 BuildArch:      noarch
 
 %description tests


--
To view, visit http://gerrit.ovirt.org/7693
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I07a7a246cd66bd3f9bac30f56a4d63081d04ea29
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Zhou Zheng Sheng <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to