diff options
author | kaf24@localhost.localdomain <kaf24@localhost.localdomain> | 2007-01-30 14:51:05 +0000 |
---|---|---|
committer | kaf24@localhost.localdomain <kaf24@localhost.localdomain> | 2007-01-30 14:51:05 +0000 |
commit | a36b1fbb024105266961a225974d901650e6b7dc (patch) | |
tree | e7ddd859bb4fb4fa3ca0260bdc793dc8f0c359f9 /tools/xm-test/tests | |
parent | 64559068e4cf5a89a2ced8d9b888564499b3b7f5 (diff) | |
download | xen-a36b1fbb024105266961a225974d901650e6b7dc.tar.gz xen-a36b1fbb024105266961a225974d901650e6b7dc.tar.bz2 xen-a36b1fbb024105266961a225974d901650e6b7dc.zip |
Align vTPM support in the Xen-API, documentation and lib-xen
(after the recent changes).
Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
Diffstat (limited to 'tools/xm-test/tests')
-rw-r--r-- | tools/xm-test/tests/vtpm/09_vtpm-xapi.py | 121 |
1 files changed, 104 insertions, 17 deletions
diff --git a/tools/xm-test/tests/vtpm/09_vtpm-xapi.py b/tools/xm-test/tests/vtpm/09_vtpm-xapi.py index 89975d077f..4798dc13c6 100644 --- a/tools/xm-test/tests/vtpm/09_vtpm-xapi.py +++ b/tools/xm-test/tests/vtpm/09_vtpm-xapi.py @@ -4,14 +4,22 @@ # Author: Stefan Berger <stefanb@us.ibm.com> # Test to test the vtpm class through the Xen-API +# +# Tested methods: +# VTPM: get_uuid, get_backend, get_by_uuid, get_record +# create, destroy, get_VM +# VM: get_VTPMS from XmTestLib import xapi from XmTestLib.XenAPIDomain import XmTestAPIDomain from XmTestLib import * +from xen.xend import XendDomain from vtpm_utils import * import commands import os +VTPM_RECORD_KEYS = [ 'backend', 'VM', 'uuid' ] + try: # XmTestAPIDomain tries to establish a connection to XenD domain = XmTestAPIDomain() @@ -20,52 +28,131 @@ except Exception, e: vm_uuid = domain.get_uuid() vtpmcfg = {} -vtpmcfg['type'] = "paravirtualised" -vtpmcfg['backend'] = "Domain-0" -vtpmcfg['instance'] = 1 +vtpmcfg['backend'] = XendDomain.DOM0_UUID vtpmcfg['VM'] = vm_uuid session = xapi.connect() vtpm_uuid = session.xenapi.VTPM.create(vtpmcfg) -vtpm_id = session.xenapi.VTPM.get_instance(vtpm_uuid) vtpm_be = session.xenapi.VTPM.get_backend(vtpm_uuid) if vtpm_be != vtpmcfg['backend']: FAIL("vTPM's backend is in '%s', expected: '%s'" % (vtpm_be, vtpmcfg['backend'])) -driver = session.xenapi.VTPM.get_driver(vtpm_uuid) -if driver != vtpmcfg['type']: - FAIL("vTPM has driver type '%s', expected: '%s'" % - (driver, vtpmcfg['type'])) - vtpm_rec = session.xenapi.VTPM.get_record(vtpm_uuid) -if vtpm_rec['driver'] != vtpmcfg['type']: - FAIL("vTPM record shows driver type '%s', expected: '%s'" % - (vtpm_rec['driver'], vtpmcfg['type'])) +miss_keys = [] +for k in VTPM_RECORD_KEYS: + if k not in vtpm_rec.keys(): + miss_keys.append(k) +if len(miss_keys) > 0: + FAIL("vTPM record is missing key(s): %s" % miss_keys) + if vtpm_rec['uuid'] != vtpm_uuid: FAIL("vTPM record shows vtpm uuid '%s', expected: '%s'" % (vtpm_rec['uuid'], vtpm_uuid)) if vtpm_rec['VM'] != vm_uuid: FAIL("vTPM record shows VM uuid '%s', expected: '%s'" % (vtpm_rec['VM'], vm_uuid)) +if vtpm_rec['backend'] != vtpmcfg['backend']: + FAIL("vTPM record shows VM bakcned '%s', expected: '%s'" % + (vtpm_rev['backend'], vtpmcfg['backend'])) + +badkeys = [] +keys = vtpm_rec.keys() +for k in keys: + if k not in VTPM_RECORD_KEYS: + badkeys.append(k) +if len(badkeys) > 0: + FAIL("Unexpected attributes in result: %s" % badkeys) + +if vm_uuid != session.xenapi.VTPM.get_VM(vtpm_uuid): + FAIL("VM uuid from VTPM.get_VM different (%s) than expected (%s)." % + (vm_ref, vm_uuid)) + +uuid = session.xenapi.VTPM.get_uuid(vtpm_uuid) +if uuid != vtpm_uuid: + FAIL("vTPM from VTPM.get_uuid different (%s) than expected (%s)." % + (uuid, vtpm_uuid)) + +vtpm_ref = session.xenapi.VTPM.get_by_uuid(vtpm_uuid) +if vtpm_ref != vtpm_uuid: + FAIL("vTPM from VTPM.get_by_uuid different (%s) than expected (%s)." % + (vtpm_ref, vtpm_uuid)) + +vm_vtpms = session.xenapi.VM.get_VTPMs(vm_uuid) +if len(vm_vtpms) != 1: + FAIL("Number of vTPMs from get_VTPMs is (%d) not what was expected (%d)" % + (len(vm_vtpms), 1)) +if vtpm_uuid not in vm_vtpms: + FAIL("Other vTPM uuid (%s) returned from VM.get_VTPMs than expected (%s)" % + (vm_vtpms[0], vtpm_uuid)) -success = domain.start() +try: + console = domain.start() +except DomainError, e: + FAIL("Unable to create domain (%s)" % domName) -console = domain.getConsole() +try: + console.sendInput("input") +except ConsoleError, e: + saveLog(console.getHistory()) + FAIL(str(e)) try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) - FAIL("No result from dumping the PCRs") + FAIL("1. No result from dumping the PCRs") if re.search("No such file",run["output"]): - vtpm_cleanup(domName) FAIL("TPM frontend support not compiled into (domU?) kernel") +if not re.search("PCR-00:",run["output"]): + saveLog(console.getHistory()) + FAIL("1. Virtual TPM is not working correctly on /dev/vtpm on backend side: \n%s" % run["output"]) + +try: + rc = session.xenapi.VTPM.destroy(vtpm_uuid) + #Should never get here + FAIL("Could destroy vTPM while VM is running") +except: + pass + +rc = session.xenapi.VM.suspend(vm_uuid) +if rc: + FAIL("Could not suspend VM") + +try: + rc = session.xenapi.VTPM.destroy(vtpm_uuid) + #May not throw an exception in 'suspend' state +except: + pass + +rc = session.xenapi.VM.resume(vm_uuid, False) +if rc: + FAIL("Could not resume VM") + +try: + console = domain.getConsole() +except ConsoleError, e: + FAIL(str(e)) + +try: + run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") +except ConsoleError, e: + saveLog(console.getHistory()) + FAIL("2. No result from dumping the PCRs. vTPM has been removed?") + +if not re.search("PCR-00:",run["output"]): + saveLog(console.getHistory()) + FAIL("2. Virtual TPM is not working correctly on /dev/vtpm on backend side: \n%s" % run["output"]) + domain.stop() + +rc = session.xenapi.VTPM.destroy(vtpm_uuid) +if not rc: + FAIL("Could NOT destroy vTPM while domain is halted.") + domain.destroy() |