AUTHOR = 'ryanh@us.ibm.com (Ryan Harper)'
TIME = 'SHORT'
NAME = 'KVM Test with KVM module build'
TEST_TYPE = 'client'
TEST_CLASS = 'Kernel'
TEST_CATEGORY = 'Functional'
EXPERIMENTAL = 'True'
DOC = '''
Run kvm-test after first downloading, building and installing the KVM module.
'''

# CHANGEME  - point to kvm release tarball
#
#
# nightly kvm snapshot base URL
SNAPBASE = 'http://people.qumranet.com/avi/snapshots/'

#CHAGEME - point to your kvmtest test dir
TESTDIR = '/opt/kvmtest_tests'

# change this value to point to older snapshots , defaults to
# look for yesterday's snapshot
DAYSOLD=1

import test
import os, sys
from datetime import *
from utils import *



def install_kvm_external_modules(tarball=None, base=SNAPBASE, daysold=DAYSOLD):
    dldir = os.environ['AUTODIR']+'/tmp'
    srcdir = os.environ['AUTODIR']+'/tmp/kvm'
    print "kvm dldir->%s"%(dldir)
    print "kvm srcdir->%s"%(srcdir)

    # ex: http://people.qumranet.com/avi/snapshots/kvm-snapshot-20071021.tar.gz
    if tarball is None:
        d = (date.today() - timedelta(days=daysold)).strftime('%Y%m%d')
        tarball = base+'kvm-snapshot-%s.tar.gz' %(d)
        sys.stderr.write("tarball url: %s\n" %(tarball))

    tarball = unmap_url("/", tarball, dldir)
    extract_tarball_to_dir(tarball, srcdir)
    os.chdir(srcdir)

    print "detecting cpu vendor..."
    vendor = "intel"
    if os.system("grep vmx /proc/cpuinfo 1>/dev/null") != 0:
        vendor = "amd"
    print "detected cpu vendor as '%s'" %(vendor)

    print "building kvm..."
    system('./configure')
    system('make')
    system('make install')
    print "done building and installing kvm"

    # remove existing in kernel kvm modules
    print "unloading loaded kvm modules (if present) ..."
    if system("grep kvm_%s /proc/modules 1>/dev/null" %(vendor), 1) == 0:
        system("rmmod -f kvm_%s" %(vendor))
    if system("grep kvm /proc/modules 1>/dev/null", 1) == 0:
        system("rmmod -f kvm")

    # load new modules
    print "loading new kvm modules..."
    os.chdir(srcdir+'/kernel')
    system("insmod ./kvm.ko && sleep 1 && insmod ./kvm-%s.ko" %(vendor))


# build and install kvm external modules
install_kvm_external_modules()

# run kvmtest on all tests in testdir
job.run_test('kvmtest', testdir=TESTDIR)
