msi: Add tests for MsiSourceListAddMediaDisk.
This commit is contained in:
parent
8b540d2670
commit
1fced5cc1d
|
@ -266,7 +266,7 @@
|
|||
270 stub MsiEnumPatchesExW
|
||||
271 stub MsiSourceListEnumMediaDisksA
|
||||
272 stub MsiSourceListEnumMediaDisksW
|
||||
273 stub MsiSourceListAddMediaDiskA
|
||||
273 stdcall MsiSourceListAddMediaDiskA(str str long long long str str)
|
||||
274 stdcall MsiSourceListAddMediaDiskW(wstr wstr long long long wstr wstr)
|
||||
275 stub MsiSourceListClearMediaDiskA
|
||||
276 stub MsiSourceListClearMediaDiskW
|
||||
|
|
|
@ -939,7 +939,36 @@ done:
|
|||
}
|
||||
|
||||
/******************************************************************
|
||||
* MsiSourceListAddMediaDisk(MSI.@)
|
||||
* MsiSourceListAddMediaDiskA (MSI.@)
|
||||
*/
|
||||
UINT WINAPI MsiSourceListAddMediaDiskA(LPCSTR szProduct, LPCSTR szUserSid,
|
||||
MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwDiskId,
|
||||
LPCSTR szVolumeLabel, LPCSTR szDiskPrompt)
|
||||
{
|
||||
UINT r;
|
||||
LPWSTR product = NULL;
|
||||
LPWSTR usersid = NULL;
|
||||
LPWSTR volume = NULL;
|
||||
LPWSTR prompt = NULL;
|
||||
|
||||
if (szProduct) product = strdupAtoW(szProduct);
|
||||
if (szUserSid) usersid = strdupAtoW(szUserSid);
|
||||
if (szVolumeLabel) volume = strdupAtoW(szVolumeLabel);
|
||||
if (szDiskPrompt) prompt = strdupAtoW(szDiskPrompt);
|
||||
|
||||
r = MsiSourceListAddMediaDiskW(product, usersid, dwContext, dwOptions,
|
||||
dwDiskId, volume, prompt);
|
||||
|
||||
msi_free(product);
|
||||
msi_free(usersid);
|
||||
msi_free(volume);
|
||||
msi_free(prompt);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/******************************************************************
|
||||
* MsiSourceListAddMediaDiskW (MSI.@)
|
||||
*/
|
||||
UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR szProduct, LPCWSTR szUserSid,
|
||||
MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwDiskId,
|
||||
|
@ -975,7 +1004,7 @@ UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR szProduct, LPCWSTR szUserSid,
|
|||
if (dwContext == MSIINSTALLCONTEXT_USERUNMANAGED)
|
||||
FIXME("Unknown context MSIINSTALLCONTEXT_USERUNMANAGED\n");
|
||||
|
||||
rc = OpenSourceKey(szProduct, &sourcekey, MSICODE_PRODUCT, dwContext, TRUE);
|
||||
rc = OpenSourceKey(szProduct, &sourcekey, MSICODE_PRODUCT, dwContext, FALSE);
|
||||
if (rc != ERROR_SUCCESS)
|
||||
return ERROR_UNKNOWN_PRODUCT;
|
||||
|
||||
|
|
|
@ -2139,7 +2139,7 @@ static void test_Installer_InstallProduct(void)
|
|||
/* Package name */
|
||||
memset(szString, 0, sizeof(szString));
|
||||
hr = Installer_ProductInfo(szProductCode, WINE_INSTALLPROPERTY_PACKAGENAMEW, szString);
|
||||
todo_wine ok(hr == S_OK, "Installer_ProductInfo failed, hresult 0x%08x\n", hr);
|
||||
ok(hr == S_OK, "Installer_ProductInfo failed, hresult 0x%08x\n", hr);
|
||||
todo_wine ok_w2("Installer_ProductInfo returned %s but expected %s\n", szString, szMsifile);
|
||||
|
||||
/* Product name */
|
||||
|
@ -2248,11 +2248,6 @@ static void test_Installer_InstallProduct(void)
|
|||
res = RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\Products\\05FA3C1F65B896A40AC00077F34EF203");
|
||||
todo_wine ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
res = delete_registry_key(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\"
|
||||
"CurrentVersion\\Installer\\Managed\\S-1-5-4\\"
|
||||
"Installer\\Products\\05FA3C1F65B896A40AC00077F34EF203");
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
/* Delete installation files we installed */
|
||||
delete_test_files();
|
||||
}
|
||||
|
|
|
@ -1940,6 +1940,329 @@ static void test_MsiSourceListSetInfo(void)
|
|||
RegCloseKey(prodkey);
|
||||
}
|
||||
|
||||
static void test_MsiSourceListAddMediaDisk(void)
|
||||
{
|
||||
CHAR prodcode[MAX_PATH];
|
||||
CHAR prod_squashed[MAX_PATH];
|
||||
CHAR keypath[MAX_PATH*2];
|
||||
HKEY prodkey, userkey;
|
||||
HKEY media, source;
|
||||
LPSTR usersid;
|
||||
LONG res;
|
||||
UINT r;
|
||||
|
||||
create_test_guid(prodcode, prod_squashed);
|
||||
get_user_sid(&usersid);
|
||||
|
||||
/* GetLastError is not set by the function */
|
||||
|
||||
/* NULL szProductCodeOrPatchCode */
|
||||
r = MsiSourceListAddMediaDiskA(NULL, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
ok(r == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
||||
|
||||
/* empty szProductCodeOrPatchCode */
|
||||
r = MsiSourceListAddMediaDiskA("", usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
||||
}
|
||||
|
||||
/* garbage szProductCodeOrPatchCode */
|
||||
r = MsiSourceListAddMediaDiskA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
||||
}
|
||||
|
||||
/* guid without brackets */
|
||||
r = MsiSourceListAddMediaDiskA("51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA",
|
||||
usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
||||
}
|
||||
|
||||
/* guid with brackets */
|
||||
r = MsiSourceListAddMediaDiskA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}",
|
||||
usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
ok(r == ERROR_UNKNOWN_PRODUCT,
|
||||
"Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r);
|
||||
|
||||
/* dwOptions has MSISOURCETYPE_NETWORK */
|
||||
r = MsiSourceListAddMediaDiskA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}",
|
||||
usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT | MSISOURCETYPE_NETWORK,
|
||||
1, "label", "prompt");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
||||
}
|
||||
|
||||
/* dwOptions has MSISOURCETYPE_URL */
|
||||
r = MsiSourceListAddMediaDiskA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}",
|
||||
usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT | MSISOURCETYPE_URL,
|
||||
1, "label", "prompt");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
||||
}
|
||||
|
||||
/* dwOptions has MSISOURCETYPE_MEDIA */
|
||||
r = MsiSourceListAddMediaDiskA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}",
|
||||
usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT | MSISOURCETYPE_MEDIA,
|
||||
1, "label", "prompt");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
||||
}
|
||||
|
||||
/* MSIINSTALLCONTEXT_USERUNMANAGED */
|
||||
|
||||
lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\");
|
||||
lstrcatA(keypath, prod_squashed);
|
||||
|
||||
res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &userkey);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
/* user product key exists */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_BAD_CONFIGURATION,
|
||||
"Expected ERROR_BAD_CONFIGURATION, got %d\n", r);
|
||||
}
|
||||
|
||||
res = RegCreateKeyA(userkey, "SourceList", &source);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
/* SourceList key exists */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
|
||||
/* Media subkey is created by MsiSourceListAddMediaDisk */
|
||||
res = RegOpenKeyA(source, "Media", &media);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
CHECK_REG_STR(media, "1", "label;prompt");
|
||||
|
||||
/* dwDiskId is random */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 42, "label42", "prompt42");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
|
||||
CHECK_REG_STR(media, "1", "label;prompt");
|
||||
CHECK_REG_STR(media, "42", "label42;prompt42");
|
||||
|
||||
/* dwDiskId is 0 */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 0, "label0", "prompt0");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
|
||||
CHECK_REG_STR(media, "0", "label0;prompt0");
|
||||
CHECK_REG_STR(media, "1", "label;prompt");
|
||||
CHECK_REG_STR(media, "42", "label42;prompt42");
|
||||
|
||||
/* dwDiskId is < 0 */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, -1, "label-1", "prompt-1");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
|
||||
CHECK_REG_STR(media, "-1", "label-1;prompt-1");
|
||||
CHECK_REG_STR(media, "0", "label0;prompt0");
|
||||
CHECK_REG_STR(media, "1", "label;prompt");
|
||||
CHECK_REG_STR(media, "42", "label42;prompt42");
|
||||
|
||||
/* update dwDiskId 1 */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, "newlabel", "newprompt");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
|
||||
CHECK_REG_STR(media, "-1", "label-1;prompt-1");
|
||||
CHECK_REG_STR(media, "0", "label0;prompt0");
|
||||
CHECK_REG_STR(media, "1", "newlabel;newprompt");
|
||||
CHECK_REG_STR(media, "42", "label42;prompt42");
|
||||
|
||||
/* update dwDiskId 1, szPrompt is NULL */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, "etiqueta", NULL);
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
|
||||
CHECK_REG_STR(media, "-1", "label-1;prompt-1");
|
||||
CHECK_REG_STR(media, "0", "label0;prompt0");
|
||||
CHECK_REG_STR(media, "1", "etiqueta;");
|
||||
CHECK_REG_STR(media, "42", "label42;prompt42");
|
||||
|
||||
/* update dwDiskId 1, szPrompt is empty */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, "etikett", "");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
||||
}
|
||||
|
||||
/* update dwDiskId 1, szVolumeLable is NULL */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, NULL, "provocar");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
|
||||
CHECK_REG_STR(media, "-1", "label-1;prompt-1");
|
||||
CHECK_REG_STR(media, "0", "label0;prompt0");
|
||||
CHECK_REG_STR(media, "1", ";provocar");
|
||||
CHECK_REG_STR(media, "42", "label42;prompt42");
|
||||
|
||||
/* update dwDiskId 1, szVolumeLable is empty */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, "", "provoquer");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
||||
}
|
||||
|
||||
/* szUserSid is NULL */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, NULL,
|
||||
MSIINSTALLCONTEXT_USERUNMANAGED,
|
||||
MSICODE_PRODUCT, 1, NULL, "provoquer");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
|
||||
CHECK_REG_STR(media, "-1", "label-1;prompt-1");
|
||||
CHECK_REG_STR(media, "0", "label0;prompt0");
|
||||
CHECK_REG_STR(media, "1", ";provoquer");
|
||||
CHECK_REG_STR(media, "42", "label42;prompt42");
|
||||
|
||||
RegDeleteValueA(media, "-1");
|
||||
RegDeleteValueA(media, "0");
|
||||
RegDeleteValueA(media, "1");
|
||||
RegDeleteValueA(media, "42");
|
||||
RegDeleteKeyA(media, "");
|
||||
RegCloseKey(media);
|
||||
RegDeleteKeyA(source, "");
|
||||
RegCloseKey(source);
|
||||
RegDeleteKeyA(userkey, "");
|
||||
RegCloseKey(userkey);
|
||||
|
||||
/* MSIINSTALLCONTEXT_USERMANAGED */
|
||||
|
||||
lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\");
|
||||
lstrcatA(keypath, usersid);
|
||||
lstrcatA(keypath, "\\Installer\\Products\\");
|
||||
lstrcatA(keypath, prod_squashed);
|
||||
|
||||
res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userkey);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
/* user product key exists */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERMANAGED,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_BAD_CONFIGURATION,
|
||||
"Expected ERROR_BAD_CONFIGURATION, got %d\n", r);
|
||||
}
|
||||
|
||||
res = RegCreateKeyA(userkey, "SourceList", &source);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
/* SourceList key exists */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_USERMANAGED,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
|
||||
/* Media subkey is created by MsiSourceListAddMediaDisk */
|
||||
res = RegOpenKeyA(source, "Media", &media);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
CHECK_REG_STR(media, "1", "label;prompt");
|
||||
|
||||
RegDeleteValueA(media, "1");
|
||||
RegDeleteKeyA(media, "");
|
||||
RegCloseKey(media);
|
||||
RegDeleteKeyA(source, "");
|
||||
RegCloseKey(source);
|
||||
RegDeleteKeyA(userkey, "");
|
||||
RegCloseKey(userkey);
|
||||
|
||||
/* MSIINSTALLCONTEXT_MACHINE */
|
||||
|
||||
lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\");
|
||||
lstrcatA(keypath, prod_squashed);
|
||||
|
||||
res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
/* machine product key exists */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, NULL,
|
||||
MSIINSTALLCONTEXT_MACHINE,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_BAD_CONFIGURATION,
|
||||
"Expected ERROR_BAD_CONFIGURATION, got %d\n", r);
|
||||
}
|
||||
|
||||
res = RegCreateKeyA(prodkey, "SourceList", &source);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
/* SourceList key exists */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, NULL,
|
||||
MSIINSTALLCONTEXT_MACHINE,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
|
||||
/* Media subkey is created by MsiSourceListAddMediaDisk */
|
||||
res = RegOpenKeyA(source, "Media", &media);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
CHECK_REG_STR(media, "1", "label;prompt");
|
||||
|
||||
/* szUserSid is non-NULL */
|
||||
r = MsiSourceListAddMediaDiskA(prodcode, usersid,
|
||||
MSIINSTALLCONTEXT_MACHINE,
|
||||
MSICODE_PRODUCT, 1, "label", "prompt");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
||||
}
|
||||
|
||||
RegDeleteValueA(media, "1");
|
||||
RegDeleteKeyA(media, "");
|
||||
RegCloseKey(media);
|
||||
RegDeleteKeyA(source, "");
|
||||
RegCloseKey(source);
|
||||
RegDeleteKeyA(prodkey, "");
|
||||
RegCloseKey(prodkey);
|
||||
}
|
||||
|
||||
START_TEST(source)
|
||||
{
|
||||
init_functionpointers();
|
||||
|
@ -1948,4 +2271,5 @@ START_TEST(source)
|
|||
test_MsiSourceListAddSourceEx();
|
||||
test_MsiSourceListEnumSources();
|
||||
test_MsiSourceListSetInfo();
|
||||
test_MsiSourceListAddMediaDisk();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue