Ge van Geldorp : msi/tests: Create only a single restore point.

Alexandre Julliard julliard at winehq.org
Fri Aug 28 10:18:51 CDT 2009


Module: wine
Branch: master
Commit: 167ef04727c177b29372a9abee194dada27bd194
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=167ef04727c177b29372a9abee194dada27bd194

Author: Ge van Geldorp <ggeldorp at vmware.com>
Date:   Fri Aug 28 12:31:25 2009 +0200

msi/tests: Create only a single restore point.

---

 dlls/msi/tests/package.c |   48 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c
index a7c0ed6..5fb5b53 100644
--- a/dlls/msi/tests/package.c
+++ b/dlls/msi/tests/package.c
@@ -26,6 +26,7 @@
 #include <msidefs.h>
 #include <msi.h>
 #include <msiquery.h>
+#include <srrestoreptapi.h>
 
 #include "wine/test.h"
 
@@ -36,10 +37,14 @@ static UINT (WINAPI *pMsiApplyMultiplePatchesA)(LPCSTR, LPCSTR, LPCSTR);
 
 static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*);
 
+static BOOL (WINAPI *pSRRemoveRestorePoint)(DWORD);
+static BOOL (WINAPI *pSRSetRestorePointA)(RESTOREPOINTINFOA*, STATEMGRSTATUS*);
+
 static void init_functionpointers(void)
 {
     HMODULE hmsi = GetModuleHandleA("msi.dll");
     HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
+    HMODULE hsrclient;
 
 #define GET_PROC(mod, func) \
     p ## func = (void*)GetProcAddress(mod, #func);
@@ -48,6 +53,9 @@ static void init_functionpointers(void)
 
     GET_PROC(hadvapi32, ConvertSidToStringSidA);
 
+    hsrclient = LoadLibraryA("srclient.dll");
+    GET_PROC(hsrclient, SRRemoveRestorePoint);
+    GET_PROC(hsrclient, SRSetRestorePointA);
 #undef GET_PROC
 }
 
@@ -774,6 +782,27 @@ done:
     return ret;
 }
 
+static BOOL notify_system_change(DWORD event_type, STATEMGRSTATUS *status)
+{
+    RESTOREPOINTINFOA spec;
+
+    spec.dwEventType = event_type;
+    spec.dwRestorePtType = APPLICATION_INSTALL;
+    spec.llSequenceNumber = status->llSequenceNumber;
+    lstrcpyA(spec.szDescription, "msitest restore point");
+
+    return pSRSetRestorePointA(&spec, status);
+}
+
+static void remove_restore_point(DWORD seq_number)
+{
+    DWORD res;
+
+    res = pSRRemoveRestorePoint(seq_number);
+    if (res != ERROR_SUCCESS)
+        trace("Failed to remove the restore point : %08x\n", res);
+}
+
 static void test_createpackage(void)
 {
     MSIHANDLE hPackage = 0;
@@ -11870,10 +11899,22 @@ static void test_MsiApplyPatch(void)
 
 START_TEST(package)
 {
+    STATEMGRSTATUS status;
+    BOOL ret = FALSE;
+
     init_functionpointers();
 
     GetCurrentDirectoryA(MAX_PATH, CURR_DIR);
 
+    /* Create a restore point ourselves so we circumvent the multitude of restore points
+     * that would have been created by all the installation and removal tests.
+     */
+    if (pSRSetRestorePointA)
+    {
+        memset(&status, 0, sizeof(status));
+        ret = notify_system_change(BEGIN_NESTED_SYSTEM_CHANGE, &status);
+    }
+
     test_createpackage();
     test_doaction();
     test_gettargetpath_bad();
@@ -11905,4 +11946,11 @@ START_TEST(package)
     test_MsiSetProperty();
     test_MsiApplyMultiplePatches();
     test_MsiApplyPatch();
+
+    if (pSRSetRestorePointA && ret)
+    {
+        ret = notify_system_change(END_NESTED_SYSTEM_CHANGE, &status);
+        if (ret)
+            remove_restore_point(status.llSequenceNumber);
+    }
 }




More information about the wine-cvs mailing list