msi/tests: Create only a single restore point.
This commit is contained in:
parent
8777994882
commit
167ef04727
|
@ -26,6 +26,7 @@
|
||||||
#include <msidefs.h>
|
#include <msidefs.h>
|
||||||
#include <msi.h>
|
#include <msi.h>
|
||||||
#include <msiquery.h>
|
#include <msiquery.h>
|
||||||
|
#include <srrestoreptapi.h>
|
||||||
|
|
||||||
#include "wine/test.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 *pConvertSidToStringSidA)(PSID, LPSTR*);
|
||||||
|
|
||||||
|
static BOOL (WINAPI *pSRRemoveRestorePoint)(DWORD);
|
||||||
|
static BOOL (WINAPI *pSRSetRestorePointA)(RESTOREPOINTINFOA*, STATEMGRSTATUS*);
|
||||||
|
|
||||||
static void init_functionpointers(void)
|
static void init_functionpointers(void)
|
||||||
{
|
{
|
||||||
HMODULE hmsi = GetModuleHandleA("msi.dll");
|
HMODULE hmsi = GetModuleHandleA("msi.dll");
|
||||||
HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
|
HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
|
||||||
|
HMODULE hsrclient;
|
||||||
|
|
||||||
#define GET_PROC(mod, func) \
|
#define GET_PROC(mod, func) \
|
||||||
p ## func = (void*)GetProcAddress(mod, #func);
|
p ## func = (void*)GetProcAddress(mod, #func);
|
||||||
|
@ -48,6 +53,9 @@ static void init_functionpointers(void)
|
||||||
|
|
||||||
GET_PROC(hadvapi32, ConvertSidToStringSidA);
|
GET_PROC(hadvapi32, ConvertSidToStringSidA);
|
||||||
|
|
||||||
|
hsrclient = LoadLibraryA("srclient.dll");
|
||||||
|
GET_PROC(hsrclient, SRRemoveRestorePoint);
|
||||||
|
GET_PROC(hsrclient, SRSetRestorePointA);
|
||||||
#undef GET_PROC
|
#undef GET_PROC
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -774,6 +782,27 @@ done:
|
||||||
return ret;
|
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)
|
static void test_createpackage(void)
|
||||||
{
|
{
|
||||||
MSIHANDLE hPackage = 0;
|
MSIHANDLE hPackage = 0;
|
||||||
|
@ -11870,10 +11899,22 @@ static void test_MsiApplyPatch(void)
|
||||||
|
|
||||||
START_TEST(package)
|
START_TEST(package)
|
||||||
{
|
{
|
||||||
|
STATEMGRSTATUS status;
|
||||||
|
BOOL ret = FALSE;
|
||||||
|
|
||||||
init_functionpointers();
|
init_functionpointers();
|
||||||
|
|
||||||
GetCurrentDirectoryA(MAX_PATH, CURR_DIR);
|
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_createpackage();
|
||||||
test_doaction();
|
test_doaction();
|
||||||
test_gettargetpath_bad();
|
test_gettargetpath_bad();
|
||||||
|
@ -11905,4 +11946,11 @@ START_TEST(package)
|
||||||
test_MsiSetProperty();
|
test_MsiSetProperty();
|
||||||
test_MsiApplyMultiplePatches();
|
test_MsiApplyMultiplePatches();
|
||||||
test_MsiApplyPatch();
|
test_MsiApplyPatch();
|
||||||
|
|
||||||
|
if (pSRSetRestorePointA && ret)
|
||||||
|
{
|
||||||
|
ret = notify_system_change(END_NESTED_SYSTEM_CHANGE, &status);
|
||||||
|
if (ret)
|
||||||
|
remove_restore_point(status.llSequenceNumber);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue