On Mon, Jan 04, 2010 at 10:52:13PM +0800, Amos Kong wrote: > On Mon, Jan 04, 2010 at 05:30:21PM +0800, Yolkfull Chow wrote: > > Add image_copy subtest for convenient KVM functional testing. > > > > The target image will be copied into the linked directory if link 'images' > > is created, and copied to the directory specified in config file otherwise. > > > > Signed-off-by: Yolkfull Chow <yzhou@xxxxxxxxxx> > > --- > > client/tests/kvm/kvm_utils.py | 64 ++++++++++++++++++++++++++++++++ > > client/tests/kvm/tests/image_copy.py | 42 +++++++++++++++++++++ > > client/tests/kvm/tests_base.cfg.sample | 6 +++ > > 3 files changed, 112 insertions(+), 0 deletions(-) > > create mode 100644 client/tests/kvm/tests/image_copy.py > > > > diff --git a/client/tests/kvm/kvm_utils.py b/client/tests/kvm/kvm_utils.py > > index 2bbbe22..1e11441 100644 > > --- a/client/tests/kvm/kvm_utils.py > > +++ b/client/tests/kvm/kvm_utils.py > > @@ -924,3 +924,67 @@ def create_report(report_dir, results_dir): > > reporter = os.path.join(report_dir, 'html_report.py') > > html_file = os.path.join(results_dir, 'results.html') > > os.system('%s -r %s -f %s -R' % (reporter, results_dir, html_file)) > > + > > + > > +def is_dir_mounted(source, dest, type, perm): > > + """ > > + Check whether `source' is mounted on `dest' with right permission. > > + > > + @source: mount source > > + @dest: mount point > > + @type: file system type > > @perm: mount permission > > > + """ > > + match_string = "%s %s %s %s" % (source, dest, type, perm) > > + try: > > + f = open("/etc/mtab", "r") > > + except IOError: > > + pass > > When calling open(), if raise an IOError exception, 'f' was not assigned. > Then we could not call 'f.read()' or 'f.close()' Ah..yes, thanks for pointing this out. > > We need 'return False', not 'pass' > > > + mounted = f.read() > > + f.close() > > + if match_string in mounted: > > + return True > > + return False > > + > > + > > +def umount(mount_point): > > + """ > > + Umount `mount_point'. > > + > > + @mount_point: mount point > > + """ > > + cmd = "umount %s" % mount_point > > + s, o = commands.getstatusoutput(cmd) > > + if s != 0: > > + logging.error("Fail to umount: %s" % o) > > + return False > > + return True > > + > > + > > +def mount(src, mount_point, type, perm = "rw"): > > + """ > > + Mount the src into mount_point of the host. > > + > > + @src: mount source > > + @mount_point: mount point > > + @type: file system type > > + @perm: mount permission > > + """ > > + if is_dir_mounted(src, mount_point, type, perm): > > + return True > > + > > + umount(mount_point) > > + > > + cmd = "mount -t %s %s %s -o %s" % (type, src, mount_point, perm) > > + logging.debug("Issue mount command: %s" % cmd) > > + s, o = commands.getstatusoutput(cmd) > > + if s != 0: > > + logging.error("Fail to mount: %s " % o) > > + return False > > + > > + if is_dir_mounted(src, mount_point, type, perm): > > + logging.info("Successfully mounted %s" % src) > > + return True > > + else: > > + logging.error("Mount verification failed; currently mounted: %s" % > > + file('/etc/mtab').read()) > > + return False > > diff --git a/client/tests/kvm/tests/image_copy.py b/client/tests/kvm/tests/image_copy.py > > new file mode 100644 > > index 0000000..800fb90 > > --- /dev/null > > +++ b/client/tests/kvm/tests/image_copy.py > > @@ -0,0 +1,42 @@ > > +import os, logging, commands > > +from autotest_lib.client.common_lib import error > > +import kvm_utils > > + > > +def run_image_copy(test, params, env): > > + """ > > + Copy guest images from NFS server. > > + 1) Mount the NFS directory > > + 2) Check the existence of source image > > + 3) If existence copy the image from NFS > > + > > + @param test: kvm test object > > + @param params: Dictionary with the test parameters > > + @param env: Dictionary with test environment. > > + """ > > + mount_dest_dir = params.get("dst_dir",'/mnt/images') > > + if not os.path.exists(mount_dest_dir): > > + os.mkdir(mount_dest_dir) > > + > > + src_dir = params.get('nfs_images_dir') > > + image_dir = os.path.join(os.environ['AUTODIR'],'tests/kvm/images') > > + if not os.path.exists(image_dir): > > + image_dir = os.path.dirname(params.get("image_name")) > > + > > + image = os.path.split(params['image_name'])[1]+'.'+params['image_format'] > > + > > + src_path = os.path.join(mount_dest_dir, image) > > + dst_path = os.path.join(image_dir, image) > > + > > + if not kvm_utils.mount(src_dir, mount_dest_dir, "nfs", "ro"): > > + raise error.TestError("Fail to mount the %s to %s" % > > + (src_dir, mount_dest_dir)) > > + > > + # Check the existence of source image > > + if not os.path.exists(src_path): > > + raise error.TestError("Could not found %s in src directory" % src_path) > > + > > + logging.info("Copying image '%s'..." % image) > > + cmd = "cp %s %s" % (src_path, dst_path) > > + s, o = commands.getstatusoutput(cmd) > > + if s != 0: > > + raise error.TestFail("Failed to copy image %s: %s" % (cmd, o)) > > diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample > > index b8f25f4..bdeac19 100644 > > --- a/client/tests/kvm/tests_base.cfg.sample > > +++ b/client/tests/kvm/tests_base.cfg.sample > > @@ -61,6 +61,12 @@ variants: > > floppy = "images/floppy.img" > > extra_params += " -boot d" > > > > + - image_copy: > > + type = image_copy > > + vms = '' > > + # Here specify the NFS directory that contains all images > > + nfs_images_dir = > > + > > - setup: install unattended_install > > type = steps > > fail_if_stuck_for = 300 > > -- > > 1.6.6 > > > > _______________________________________________ > > Autotest mailing list > > Autotest@xxxxxxxxxxxxxxx > > http://test.kernel.org/cgi-bin/mailman/listinfo/autotest > > -- > Amos Kong > Quality Engineer > Raycom Office(Beijing), Red Hat Inc. > Phone: +86-10-62608183 > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html