Index: /trunk/src/VBox/Storage/testcase/tstVDIo.cpp
===================================================================
--- /trunk/src/VBox/Storage/testcase/tstVDIo.cpp	(revision 36134)
+++ /trunk/src/VBox/Storage/testcase/tstVDIo.cpp	(revision 36135)
@@ -289,4 +289,5 @@
 static DECLCALLBACK(int) vdScriptHandlerCompareDisks(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs);
 static DECLCALLBACK(int) vdScriptHandlerDumpDiskInfo(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs);
+static DECLCALLBACK(int) vdScriptHandlerPrintMsg(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs);
 
 /* create action */
@@ -404,4 +405,11 @@
     /* pcszName    chId enmType                          fFlags */
     {"disk",       'd', VDSCRIPTARGTYPE_STRING,          VDSCRIPTARGDESC_FLAG_MANDATORY},
+};
+
+/* Print message */
+const VDSCRIPTARGDESC g_aArgPrintMsg[] =
+{
+    /* pcszName    chId enmType                          fFlags */
+    {"msg",        'm', VDSCRIPTARGTYPE_STRING,          VDSCRIPTARGDESC_FLAG_MANDATORY},
 };
 
@@ -423,4 +431,5 @@
     {"comparedisks", g_aArgCompareDisks,  RT_ELEMENTS(g_aArgCompareDisks), vdScriptHandlerCompareDisks},
     {"dumpdiskinfo", g_aArgDumpDiskInfo,  RT_ELEMENTS(g_aArgDumpDiskInfo), vdScriptHandlerDumpDiskInfo},
+    {"print",        g_aArgPrintMsg,      RT_ELEMENTS(g_aArgPrintMsg),     vdScriptHandlerPrintMsg}
 };
 
@@ -1442,4 +1451,10 @@
 }
 
+static DECLCALLBACK(int) vdScriptHandlerPrintMsg(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs)
+{
+    RTPrintf("%s\n", paScriptArgs[0].u.pcszString);
+    return VINF_SUCCESS;
+}
+
 static DECLCALLBACK(int) tstVDIoFileOpen(void *pvUser, const char *pszLocation,
                                          uint32_t fOpen,
@@ -1541,4 +1556,14 @@
     PVDTESTGLOB pGlob = (PVDTESTGLOB)pvUser;
     bool fFound = false;
+
+    /*
+     * Some backends use ./ for paths, strip it.
+     * @todo: Implement proper directory support for the
+     * memory filesystem.
+     */
+    if (   strlen(pcszFilename) >= 2
+        && *pcszFilename == '.'
+        && pcszFilename[1] == '/')
+        pcszFilename += 2;
 
     /* Check if the file exists. */
Index: /trunk/src/VBox/Storage/testcase/tstVDIo.vd
===================================================================
--- /trunk/src/VBox/Storage/testcase/tstVDIo.vd	(revision 36135)
+++ /trunk/src/VBox/Storage/testcase/tstVDIo.vd	(revision 36135)
@@ -0,0 +1,67 @@
+# $Id$
+#
+# Storage: Simple I/O testing for most backends.
+#
+
+#
+# Copyright (C) 2011 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# Init I/O RNG for generating random data for writes
+iorngcreate size=10M mode=manual seed=1234567890
+
+# VMDK disk
+print msg=Testing_VMDK
+createdisk name=test verify=yes
+create disk=test mode=base name=tstShared.vmdk type=dynamic backend=VMDK size=200M
+io disk=test async=yes max-reqs=32 mode=seq blocksize=64k off=0-200M size=200M writes=100
+io disk=test async=yes max-reqs=32 mode=seq blocksize=64k off=0-200M size=200M writes=0
+create disk=test mode=diff name=tstShared2.vmdk type=dynamic backend=VMDK size=20M
+io disk=test async=yes max-reqs=32 mode=rnd blocksize=64k off=0-200M size=200M writes=50
+create disk=test mode=diff name=tstShared3.vmdk type=dynamic backend=VMDK size=20M
+io disk=test async=yes max-reqs=32 mode=rnd blocksize=64k off=0-200M size=200M writes=50
+close disk=test mode=single delete=yes
+close disk=test mode=single delete=yes
+close disk=test mode=single delete=yes
+destroydisk name=test
+
+# VDI disk
+print msg=Testing_VDI
+createdisk name=test verify=yes
+create disk=test mode=base name=tstShared.vdi type=dynamic backend=VDI size=200M
+io disk=test async=yes max-reqs=32 mode=seq blocksize=64k off=0-200M size=200M writes=100
+io disk=test async=yes max-reqs=32 mode=seq blocksize=64k off=0-200M size=200M writes=0
+create disk=test mode=diff name=tstShared2.vdi type=dynamic backend=VDI size=20M
+io disk=test async=yes max-reqs=32 mode=rnd blocksize=64k off=0-200M size=200M writes=50
+create disk=test mode=diff name=tstShared3.vdi type=dynamic backend=VDI size=20M
+io disk=test async=yes max-reqs=32 mode=rnd blocksize=64k off=0-200M size=200M writes=50
+close disk=test mode=single delete=yes
+close disk=test mode=single delete=yes
+close disk=test mode=single delete=yes
+destroydisk name=test
+
+# VHD disk
+print msg=Testing_VHD
+createdisk name=test verify=yes
+create disk=test mode=base name=tstShared.vhd type=dynamic backend=VHD size=200M
+io disk=test async=yes max-reqs=32 mode=seq blocksize=64k off=0-200M size=200M writes=100
+io disk=test async=yes max-reqs=32 mode=seq blocksize=64k off=0-200M size=200M writes=0
+create disk=test mode=diff name=tstShared2.vhd type=dynamic backend=VHD size=20M
+io disk=test async=yes max-reqs=32 mode=rnd blocksize=64k off=0-200M size=200M writes=50
+create disk=test mode=diff name=tstShared3.vhd type=dynamic backend=VHD size=20M
+io disk=test async=yes max-reqs=32 mode=rnd blocksize=64k off=0-200M size=200M writes=50
+close disk=test mode=single delete=yes
+close disk=test mode=single delete=yes
+close disk=test mode=single delete=yes
+destroydisk name=test
+
+iorngdestroy
+
