[libvirt] [test-API PATCH] Added screenshot test

Martin Kletzander mkletzan at redhat.com
Mon Apr 2 18:18:59 UTC 2012


This patch adds a test that obtains a screenshot of a domain and saves
it in a file.
---
 repos/domain/screenshot.py |   57 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 57 insertions(+), 0 deletions(-)
 create mode 100644 repos/domain/screenshot.py

diff --git a/repos/domain/screenshot.py b/repos/domain/screenshot.py
new file mode 100644
index 0000000..9986cab
--- /dev/null
+++ b/repos/domain/screenshot.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+"""This test is used for creating a screenshot of a domain and saving
+   it in a file. The Screenshot format is hypervisor specific.
+
+   mandatory arguments: guestname
+                        screen
+                        filename
+"""
+
+import os
+import mimetypes
+
+import libvirt
+
+def check_params(params):
+    """Verify input parameters"""
+    for key in ('guestname', 'screen', 'filename'):
+        if key not in params:
+            raise KeyError('Missing key %s required for screenshot test' % key)
+
+    params['screen'] = int(params['screen'])
+    params['filename'] = os.path.abspath(params['filename'])
+
+def saver(stream, data, file_):
+    return file_.write(data)
+
+def screenshot(params):
+    """This method takes a screenshot of a running machine and saves
+    it in a filename"""
+    ret = 1
+    try:
+        logger = params['logger']
+
+        check_params(params)
+
+        conn = libvirt.open(params['uri'])
+        dom = conn.lookupByName(params['guestname'])
+
+        st = conn.newStream(0)
+        mime = dom.screenshot(st, params['screen'], 0)
+
+        ext = mimetypes.guess_extension(mime) or '.ppm'
+        filename = params['filename'] + ext
+        f = file(filename, 'w')
+
+        logger.debug('Saving screenshot into %s' % filename)
+        st.recvAll(saver, f)
+        logger.debug('Mimetype of the file is %s' % mime)
+
+        ret = st.finish()
+
+    finally:
+        # Some error occurred, cleanup
+        if 'conn' in locals() and conn.isAlive():
+            conn.close()
+
+    return ret
-- 
1.7.8.5




More information about the libvir-list mailing list