From c749c6848693849442877b5a6d994d00465fd221 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 22 May 2017 17:53:47 +0200 Subject: [PATCH] test script for vmtools --- tests/extra/manual-vmtools-test.py | 140 +++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100755 tests/extra/manual-vmtools-test.py diff --git a/tests/extra/manual-vmtools-test.py b/tests/extra/manual-vmtools-test.py new file mode 100755 index 00000000..6b6c6964 --- /dev/null +++ b/tests/extra/manual-vmtools-test.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python3 + +import os +import sys +import logging +import textwrap +import tempfile +import inspect +from argparse import ArgumentParser + +localmodule = os.path.realpath( + os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..', '..')) +print('localmodule: ' + localmodule) +if localmodule not in sys.path: + sys.path.insert(0, localmodule) + +from fdroidserver.vmtools import get_build_vm + + +def main(args): + + if args.provider != None: + if args.provider not in ('libvirt', 'virtualbox'): + logging.critical('provider: %s not supported.', args.provider) + sys.exit(1) + + with tempfile.TemporaryDirectory() as tmpdir: + + # define a simple vagrant vm 'x' + x_dir = os.path.join(tmpdir, 'x') + os.makedirs(x_dir) + with open(os.path.join(x_dir, 'Vagrantfile'), 'w') as f: + f.write(textwrap.dedent("""\ + Vagrant.configure("2") do |config| + config.vm.box = "debian/jessie64" + config.vm.synced_folder ".", "/vagrant", disabled: true + config.ssh.insert_key = false + end + """)) + # define another simple vagrant vm 'y' which uses 'x' as a base box + y_dir = os.path.join(tmpdir, 'y') + os.makedirs(y_dir) + with open(os.path.join(y_dir, 'Vagrantfile'), 'w') as f: + f.write(textwrap.dedent("""\ + Vagrant.configure("2") do |config| + config.vm.box = "x" + config.vm.synced_folder ".", "/vagrant", disabled: true + end + """)) + + # vagrant file for packaging 'x' box + vgrntf=textwrap.dedent("""\ + Vagrant.configure("2") do |config| + + config.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_version: "4", nfs_udp: false + + config.vm.provider :libvirt do |libvirt| + libvirt.driver = "kvm" + libvirt.connect_via_ssh = false + libvirt.username = "root" + libvirt.storage_pool_name = "default" + end + end + """) + + # create a box: x + if not args.skip_create_x: + x = get_build_vm(x_dir, provider=args.provider) + x.destroy() + x.up(provision=True) + x.halt() + x.package(output='x.box', vagrantfile=vgrntf, keep_box_file=False) + x.box_remove('x') + x.box_add('x', 'x.box') + + # use previously created box to spin up a new vm + if not args.skip_create_y: + y = get_build_vm(y_dir, provider=args.provider) + y.destroy() + y.up() + + # create and restore a snapshot + if not args.skip_snapshot_y: + y = get_build_vm(y_dir, provider=args.provider) + + if y.snapshot_exists('clean'): + y.destroy() + y.up() + + y.suspend() + y.snapshot_create('clean') + y.up() + + logging.info('snapshot \'clean\' exsists: %r', y.snapshot_exists('clean')) + + # test if snapshot exists + se = y.snapshot_exists('clean') + logging.info('snapshot \'clean\' available: %r', se) + + # revert snapshot + y.suspend() + logging.info('asdf %s', y.snapshot_revert('clean')) + y.resume() + + # cleanup + if not args.skip_clean: + x = get_build_vm(x_dir, provider=args.provider) + y = get_build_vm(y_dir, provider=args.provider) + y.destroy() + x.destroy() + x.box_remove('x') + +if __name__ == '__main__': + logging.basicConfig(format='%(message)s', level=logging.DEBUG) + + parser = ArgumentParser(description="""\ +This is intended for manually testing vmtools.py + +NOTE: Should this test-run fail it might leave traces of vagrant VMs or boxes + on your system. Those vagrant VMs are named 'x' and 'y'. + """) + parser.add_argument('--provider', help="Force this script use supplied " + "provider instead using our auto provider lookup. " + "Supported values: 'libvirt', 'virtualbox'") + parser.add_argument('--skip-create-x', action="store_true", default=False, + help="Skips: Creating 'x' vm, packaging it into a " + "a box and adding it to vagrant.") + parser.add_argument('--skip-create-y', action="store_true", default=False, + help="Skips: Creating 'y' vm. Depends on having " + "box 'x' added to vagrant.") + parser.add_argument('--skip-snapshot-y', action="store_true", default=False, + help="Skips: Taking a snapshot and restoring a " + "a snapshot of 'y' vm. Requires 'y' mv to be " + "present.") + parser.add_argument('--skip-clean', action="store_true", default=False, + help="Skips: Cleaning up mv images and vagrant " + "metadata on the system.") + args = parser.parse_args() + + main(args)