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