Mike McCormack : msi: Add a test case for MsiGetFileHash.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jul 24 06:55:09 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: a652e285171eb03d2d8b0d82f0747edadc625f4e
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=a652e285171eb03d2d8b0d82f0747edadc625f4e
Author: Mike McCormack <mike at codeweavers.com>
Date: Mon Jul 24 18:21:29 2006 +0900
msi: Add a test case for MsiGetFileHash.
---
dlls/msi/tests/msi.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/dlls/msi/tests/msi.c b/dlls/msi/tests/msi.c
index 4334675..d6ddf02 100644
--- a/dlls/msi/tests/msi.c
+++ b/dlls/msi/tests/msi.c
@@ -25,6 +25,11 @@ #include <msiquery.h>
#include "wine/test.h"
+typedef struct test_MSIFILEHASHINFO {
+ ULONG dwFileHashInfoSize;
+ ULONG dwData[4];
+} test_MSIFILEHASHINFO, *test_PMSIFILEHASHINFO;
+
typedef INSTALLSTATE (WINAPI *fnMsiUseFeatureExA)(LPCSTR, LPCSTR ,DWORD, DWORD );
fnMsiUseFeatureExA pMsiUseFeatureExA;
typedef UINT (WINAPI *fnMsiOpenPackageExA)(LPCSTR, DWORD, MSIHANDLE*);
@@ -33,6 +38,8 @@ typedef UINT (WINAPI *fnMsiOpenPackageEx
fnMsiOpenPackageExW pMsiOpenPackageExW;
typedef INSTALLSTATE (WINAPI *fnMsiGetComponentPathA)(LPCSTR, LPCSTR, LPSTR, DWORD*);
fnMsiGetComponentPathA pMsiGetComponentPathA;
+typedef UINT (WINAPI *fnMsiGetFileHashA)(LPCSTR, DWORD, test_PMSIFILEHASHINFO);
+fnMsiGetFileHashA pMsiGetFileHashA;
static void test_usefeature(void)
{
@@ -125,6 +132,60 @@ static void test_getcomponentpath(void)
ok( r == INSTALLSTATE_UNKNOWN, "wrong return value\n");
}
+static void test_filehash(void)
+{
+ const char name[] = "msitest.bin";
+ const char data[] = {'a','b','c'};
+ HANDLE handle;
+ UINT r;
+ test_MSIFILEHASHINFO hash;
+ DWORD count = 0;
+
+ if (!pMsiGetFileHashA)
+ return;
+
+ DeleteFile(name);
+
+ memset(&hash, 0, sizeof hash);
+ r = pMsiGetFileHashA(name, 0, &hash);
+ ok( r == ERROR_INVALID_PARAMETER, "wrong error %d\n", r);
+
+ r = pMsiGetFileHashA(name, 0, NULL);
+ ok( r == ERROR_INVALID_PARAMETER, "wrong error %d\n", r);
+
+ memset(&hash, 0, sizeof hash);
+ hash.dwFileHashInfoSize = sizeof hash;
+ r = pMsiGetFileHashA(name, 0, &hash);
+ ok( r == ERROR_FILE_NOT_FOUND, "wrong error %d\n", r);
+
+ handle = CreateFile(name, GENERIC_READ|GENERIC_WRITE, 0, NULL,
+ CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL);
+ ok(handle != INVALID_HANDLE_VALUE, "failed to create file\n");
+
+ WriteFile(handle, data, sizeof data, &count, NULL);
+ CloseHandle(handle);
+
+ memset(&hash, 0, sizeof hash);
+ r = pMsiGetFileHashA(name, 0, &hash);
+ ok( r == ERROR_INVALID_PARAMETER, "wrong error %d\n", r);
+
+ memset(&hash, 0, sizeof hash);
+ hash.dwFileHashInfoSize = sizeof hash;
+ r = pMsiGetFileHashA(name, 1, &hash);
+ ok( r == ERROR_INVALID_PARAMETER, "wrong error %d\n", r);
+
+ r = pMsiGetFileHashA(name, 0, &hash);
+ ok( r == ERROR_SUCCESS, "wrong error %d\n", r);
+
+ ok(hash.dwFileHashInfoSize == sizeof hash, "hash size changed\n");
+ ok(hash.dwData[0] == 0x98500190 &&
+ hash.dwData[1] == 0xb04fd23c &&
+ hash.dwData[2] == 0x7d3f96d6 &&
+ hash.dwData[3] == 0x727fe128, "hash of abc incorrect\n");
+
+ DeleteFile(name);
+}
+
START_TEST(msi)
{
HMODULE hmod = GetModuleHandle("msi.dll");
@@ -136,8 +197,11 @@ START_TEST(msi)
GetProcAddress(hmod, "MsiOpenPackageExW");
pMsiGetComponentPathA = (fnMsiGetComponentPathA)
GetProcAddress(hmod, "MsiGetComponentPathA" );
+ pMsiGetFileHashA = (fnMsiGetFileHashA)
+ GetProcAddress(hmod, "MsiGetFileHashA" );
test_usefeature();
test_null();
test_getcomponentpath();
+ test_filehash();
}
More information about the wine-cvs
mailing list