Hans Leidekker : wininet: Add some URL cache tests and make them pass.

Alexandre Julliard julliard at winehq.org
Fri Sep 25 10:25:14 CDT 2009


Module: wine
Branch: master
Commit: 09f1ace55574f6e8cbaa4cbfd4d46d2d4f1a6130
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=09f1ace55574f6e8cbaa4cbfd4d46d2d4f1a6130

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Fri Sep 25 12:01:35 2009 +0200

wininet: Add some URL cache tests and make them pass.

---

 dlls/wininet/tests/urlcache.c |   45 ++++++++++++++++++++++++++++++++++++++--
 dlls/wininet/urlcache.c       |   22 ++++++++++++++++++++
 2 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/dlls/wininet/tests/urlcache.c b/dlls/wininet/tests/urlcache.c
index 4ab090b..65e433c 100644
--- a/dlls/wininet/tests/urlcache.c
+++ b/dlls/wininet/tests/urlcache.c
@@ -30,11 +30,13 @@
 #include "wine/test.h"
 
 #define TEST_URL    "http://urlcachetest.winehq.org/index.html"
+#define TEST_URL1   "Visited: user at http://urlcachetest.winehq.org/index.html"
 
 static BOOL (WINAPI *pDeleteUrlCacheEntryA)(LPCSTR);
 static BOOL (WINAPI *pUnlockUrlCacheEntryFileA)(LPCSTR,DWORD);
 
 static char filenameA[MAX_PATH + 1];
+static char filenameA1[MAX_PATH + 1];
 
 static void check_cache_entry_infoA(const char *returnedfrom, LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo)
 {
@@ -100,7 +102,15 @@ static void test_GetUrlCacheEntryInfoExA(void)
     SetLastError(0xdeadbeef);
     ret = GetUrlCacheEntryInfoEx(NULL, NULL, NULL, NULL, NULL, NULL, 0);
     ok(!ret, "GetUrlCacheEntryInfoEx with NULL URL and NULL args should have failed\n");
-    ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetUrlCacheEntryInfoEx with NULL URL and NULL args should have set last error to ERROR_INVALID_PARAMETER instead of %d\n", GetLastError());
+    ok(GetLastError() == ERROR_INVALID_PARAMETER,
+       "GetUrlCacheEntryInfoEx with NULL URL and NULL args should have set last error to ERROR_INVALID_PARAMETER instead of %d\n", GetLastError());
+
+    cbCacheEntryInfo = sizeof(INTERNET_CACHE_ENTRY_INFO);
+    SetLastError(0xdeadbeef);
+    ret = GetUrlCacheEntryInfoEx("", NULL, &cbCacheEntryInfo, NULL, NULL, NULL, 0);
+    ok(!ret, "GetUrlCacheEntryInfoEx with zero-length buffer should fail\n");
+    ok(GetLastError() == ERROR_FILE_NOT_FOUND,
+       "GetUrlCacheEntryInfoEx should have set last error to ERROR_FILE_NOT_FOUND instead of %d\n", GetLastError());
 
     ret = GetUrlCacheEntryInfoEx(TEST_URL, NULL, NULL, NULL, NULL, NULL, 0);
     ok(ret, "GetUrlCacheEntryInfoEx with NULL args failed with error %d\n", GetLastError());
@@ -109,9 +119,17 @@ static void test_GetUrlCacheEntryInfoExA(void)
     SetLastError(0xdeadbeef);
     ret = GetUrlCacheEntryInfoEx(TEST_URL, NULL, &cbCacheEntryInfo, NULL, NULL, NULL, 0);
     ok(!ret, "GetUrlCacheEntryInfoEx with zero-length buffer should fail\n");
-    ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetUrlCacheEntryInfoEx should have set last error to ERROR_INSUFFICIENT_BUFFER instead of %d\n", GetLastError());
+    ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+       "GetUrlCacheEntryInfoEx should have set last error to ERROR_INSUFFICIENT_BUFFER instead of %d\n", GetLastError());
 
     lpCacheEntryInfo = HeapAlloc(GetProcessHeap(), 0, cbCacheEntryInfo);
+
+    SetLastError(0xdeadbeef);
+    ret = GetUrlCacheEntryInfoEx(TEST_URL, lpCacheEntryInfo, &cbCacheEntryInfo, NULL, NULL, NULL, 0x200);
+    ok(!ret, "GetUrlCacheEntryInfoEx succeeded\n");
+    ok(GetLastError() == ERROR_FILE_NOT_FOUND,
+       "GetUrlCacheEntryInfoEx should have set last error to ERROR_FILE_NOT_FOUND instead of %d\n", GetLastError());
+
     ret = GetUrlCacheEntryInfoEx(TEST_URL, lpCacheEntryInfo, &cbCacheEntryInfo, NULL, NULL, NULL, 0);
     ok(ret, "GetUrlCacheEntryInfoEx failed with error %d\n", GetLastError());
 
@@ -166,6 +184,11 @@ static void test_urlcacheA(void)
     ret = CreateUrlCacheEntry(TEST_URL, 0, "html", filenameA, 0);
     ok(ret, "CreateUrlCacheEntry failed with error %d\n", GetLastError());
 
+    ret = CreateUrlCacheEntry(TEST_URL, 0, "html", filenameA1, 0);
+    ok(ret, "CreateUrlCacheEntry failed with error %d\n", GetLastError());
+
+    ok(lstrcmpiA(filenameA, filenameA1), "expected a different file name\n");
+
     hFile = CreateFileA(filenameA, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,
                         NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
     ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA failed with error %d\n", GetLastError());
@@ -175,6 +198,12 @@ static void test_urlcacheA(void)
 
     CloseHandle(hFile);
 
+    ret = CommitUrlCacheEntry(TEST_URL1, NULL, filetime_zero, filetime_zero, NORMAL_CACHE_ENTRY|URLHISTORY_CACHE_ENTRY, NULL, 0, NULL, NULL);
+    ok(ret, "CommitUrlCacheEntry failed with error %d\n", GetLastError());
+
+    ret = CommitUrlCacheEntry(TEST_URL1, NULL, filetime_zero, filetime_zero, NORMAL_CACHE_ENTRY|URLHISTORY_CACHE_ENTRY, NULL, 0, NULL, NULL);
+    ok(ret, "CommitUrlCacheEntry failed with error %d\n", GetLastError());
+
     ret = CommitUrlCacheEntry(TEST_URL, filenameA, filetime_zero, filetime_zero, NORMAL_CACHE_ENTRY, NULL, 0, "html", NULL);
     ok(ret, "CommitUrlCacheEntry failed with error %d\n", GetLastError());
 
@@ -182,7 +211,8 @@ static void test_urlcacheA(void)
     SetLastError(0xdeadbeef);
     ret = RetrieveUrlCacheEntryFile(TEST_URL, NULL, &cbCacheEntryInfo, 0);
     ok(!ret, "RetrieveUrlCacheEntryFile should have failed\n");
-    ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "RetrieveUrlCacheEntryFile should have set last error to ERROR_INSUFFICIENT_BUFFER instead of %d\n", GetLastError());
+    ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+       "RetrieveUrlCacheEntryFile should have set last error to ERROR_INSUFFICIENT_BUFFER instead of %d\n", GetLastError());
 
     lpCacheEntryInfo = HeapAlloc(GetProcessHeap(), 0, cbCacheEntryInfo);
     ret = RetrieveUrlCacheEntryFile(TEST_URL, lpCacheEntryInfo, &cbCacheEntryInfo, 0);
@@ -192,6 +222,13 @@ static void test_urlcacheA(void)
 
     HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo);
 
+    cbCacheEntryInfo = 0;
+    SetLastError(0xdeadbeef);
+    ret = RetrieveUrlCacheEntryFile(TEST_URL1, NULL, &cbCacheEntryInfo, 0);
+    ok(!ret, "RetrieveUrlCacheEntryFile should have failed\n");
+    ok(GetLastError() == ERROR_INVALID_DATA,
+       "RetrieveUrlCacheEntryFile should have set last error to ERROR_INVALID_DATA instead of %d\n", GetLastError());
+
     if (pUnlockUrlCacheEntryFileA)
     {
         ret = pUnlockUrlCacheEntryFileA(TEST_URL, 0);
@@ -208,6 +245,8 @@ static void test_urlcacheA(void)
     {
         ret = pDeleteUrlCacheEntryA(TEST_URL);
         ok(ret, "DeleteUrlCacheEntryA failed with error %d\n", GetLastError());
+        ret = pDeleteUrlCacheEntryA(TEST_URL1);
+        ok(ret, "DeleteUrlCacheEntryA failed with error %d\n", GetLastError());
     }
 
     SetLastError(0xdeadbeef);
diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c
index 45527dd..37d7b25 100644
--- a/dlls/wininet/urlcache.c
+++ b/dlls/wininet/urlcache.c
@@ -1479,7 +1479,11 @@ BOOL WINAPI GetUrlCacheEntryInfoExA(
         return FALSE;
     }
     if (dwFlags != 0)
+    {
         FIXME("Undocumented flag(s): %x\n", dwFlags);
+        SetLastError(ERROR_FILE_NOT_FOUND);
+        return FALSE;
+    }
     return GetUrlCacheEntryInfoA(lpszUrl, lpCacheEntryInfo, lpdwCacheEntryInfoBufSize);
 }
 
@@ -1679,7 +1683,11 @@ BOOL WINAPI GetUrlCacheEntryInfoExW(
         return FALSE;
     }
     if (dwFlags != 0)
+    {
         FIXME("Undocumented flag(s): %x\n", dwFlags);
+        SetLastError(ERROR_FILE_NOT_FOUND);
+        return FALSE;
+    }
     return GetUrlCacheEntryInfoW(lpszUrl, lpCacheEntryInfo, lpdwCacheEntryInfoBufSize);
 }
 
@@ -1866,6 +1874,13 @@ BOOL WINAPI RetrieveUrlCacheEntryFileA(
     }
 
     pUrlEntry = (URL_CACHEFILE_ENTRY *)pEntry;
+    if (!pUrlEntry->dwOffsetLocalName)
+    {
+        URLCacheContainer_UnlockIndex(pContainer, pHeader);
+        SetLastError(ERROR_INVALID_DATA);
+        return FALSE;
+    }
+
     TRACE("Found URL: %s\n", (LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl);
     TRACE("Header info: %s\n", (LPBYTE)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo);
 
@@ -1955,6 +1970,13 @@ BOOL WINAPI RetrieveUrlCacheEntryFileW(
     }
 
     pUrlEntry = (URL_CACHEFILE_ENTRY *)pEntry;
+    if (!pUrlEntry->dwOffsetLocalName)
+    {
+        URLCacheContainer_UnlockIndex(pContainer, pHeader);
+        SetLastError(ERROR_INVALID_DATA);
+        return FALSE;
+    }
+
     TRACE("Found URL: %s\n", (LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl);
     TRACE("Header info: %s\n", (LPBYTE)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo);
 




More information about the wine-cvs mailing list