Zebediah Figura : wintrust/tests: Add more tests for CryptCATOpen() file modes.

Alexandre Julliard julliard at winehq.org
Tue Sep 8 15:36:15 CDT 2020


Module: wine
Branch: master
Commit: e07539d1ce1bdb0077d26eb3fbf40ffa1f12a842
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=e07539d1ce1bdb0077d26eb3fbf40ffa1f12a842

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Mon Sep  7 23:13:27 2020 -0500

wintrust/tests: Add more tests for CryptCATOpen() file modes.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wintrust/tests/crypt.c | 76 ++++++++++++++++++++++++++++++++-------------
 1 file changed, 54 insertions(+), 22 deletions(-)

diff --git a/dlls/wintrust/tests/crypt.c b/dlls/wintrust/tests/crypt.c
index 5a4344bc93..dfa411548f 100644
--- a/dlls/wintrust/tests/crypt.c
+++ b/dlls/wintrust/tests/crypt.c
@@ -401,33 +401,65 @@ static void test_calchash(void)
 
 static void test_CryptCATOpen(void)
 {
-    HANDLE hcat;
-    char empty[MAX_PATH];
-    WCHAR emptyW[MAX_PATH];
-    HANDLE file;
+    WCHAR filename[MAX_PATH], temp_path[MAX_PATH];
+    HANDLE cat;
+    DWORD flags;
     BOOL ret;
+    FILE *file;
+    char buffer[10];
 
-    SetLastError(0xdeadbeef);
-    hcat = pCryptCATOpen(NULL, 0, 0, 0, 0);
-    ok(hcat == INVALID_HANDLE_VALUE, "CryptCATOpen succeeded\n");
-    ok(GetLastError() == ERROR_INVALID_PARAMETER,
-       "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError());
-
-    if (!GetTempFileNameA(CURR_DIR, "cat", 0, empty)) return;
+    GetTempPathW(ARRAY_SIZE(temp_path), temp_path);
+    GetTempFileNameW(temp_path, L"cat", 0, filename);
 
-    file = CreateFileA(empty, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
-    ok(file != INVALID_HANDLE_VALUE, "CreateFileA failed %u\n", GetLastError());
-    CloseHandle(file);
-    MultiByteToWideChar(CP_ACP, 0, empty, -1, emptyW, MAX_PATH);
+    SetLastError(0xdeadbeef);
+    cat = pCryptCATOpen(NULL, 0, 0, 0, 0);
+    ok(cat == INVALID_HANDLE_VALUE, "expected failure\n");
+    ok(GetLastError() == ERROR_INVALID_PARAMETER, "got error %u\n", GetLastError());
 
-    hcat = pCryptCATOpen(emptyW, 0, 0, 0, 0);
-    todo_wine
-    ok(hcat != INVALID_HANDLE_VALUE, "Expected a correct handle\n");
+    for (flags = 0; flags < 8; ++flags)
+    {
+        SetLastError(0xdeadbeef);
+        cat = pCryptCATOpen(filename, flags, 0, 0, 0);
+        if (flags == CRYPTCAT_OPEN_EXISTING)
+        {
+            ok(cat == INVALID_HANDLE_VALUE, "flags %#x: expected failure\n", flags);
+            ok(GetLastError() == ERROR_FILE_NOT_FOUND, "flags %#x: got error %u\n", flags, GetLastError());
+            ret = DeleteFileW(filename);
+            ok(!ret, "flags %#x: expected failure\n", flags);
+        }
+        else
+        {
+            todo_wine ok(cat != INVALID_HANDLE_VALUE, "flags %#x: expected success\n", flags);
+            todo_wine ok(!GetLastError(), "flags %#x: got error %u\n", flags, GetLastError());
+            ret = pCryptCATClose(cat);
+            todo_wine ok(ret, "flags %#x: failed to close file\n", flags);
+            ret = DeleteFileW(filename);
+            todo_wine_if (flags & (CRYPTCAT_OPEN_ALWAYS | CRYPTCAT_OPEN_CREATENEW))
+                ok(ret, "flags %#x: failed to delete file, error %u\n", flags, GetLastError());
+        }
+
+        file = _wfopen(filename, L"w");
+        fputs("test text", file);
+        fclose(file);
 
-    ret = pCryptCATClose(hcat);
-    todo_wine
-    ok(ret, "CryptCATClose failed\n");
-    DeleteFileA(empty);
+        SetLastError(0xdeadbeef);
+        cat = pCryptCATOpen(filename, flags, 0, 0, 0);
+        todo_wine ok(cat != INVALID_HANDLE_VALUE, "flags %#x: expected success\n", flags);
+        todo_wine ok(!GetLastError(), "flags %#x: got error %u\n", flags, GetLastError());
+        ret = pCryptCATClose(cat);
+        todo_wine ok(ret, "flags %#x: failed to close file\n", flags);
+
+        file = _wfopen(filename, L"r");
+        ret = fread(buffer, 1, sizeof(buffer), file);
+        if (flags & CRYPTCAT_OPEN_CREATENEW)
+            todo_wine ok(!ret, "flags %#x: got %s\n", flags, debugstr_an(buffer, ret));
+        else
+            ok(ret == 9 && !strncmp(buffer, "test text", ret), "flags %#x: got %s\n", flags, debugstr_an(buffer, ret));
+        fclose(file);
+
+        ret = DeleteFileW(filename);
+        ok(ret, "flags %#x: failed to delete file, error %u\n", flags, GetLastError());
+    }
 }
 
 static DWORD error_area;




More information about the wine-cvs mailing list