[KERNEL32_APITEST]
[reactos.git] / rostests / apitests / kernel32 / TunnelCache.c
index 6e92529..74e2e5a 100644 (file)
 #include <stdio.h>
 #include <ndk/rtlfuncs.h>
 
+static
+void
+Test_VeryLongTests(void)
+{
+    UCHAR i = 0;
+    HANDLE hFile;
+    CHAR TestDir[] = "XTestDirTunnelCache";
+    CHAR OldDir[MAX_PATH];
+    FILETIME FileTime, File1Time;
+
+    win_skip("Too long, see: ROSTESTS-177");
+    return;
+
+    /* Create a blank test directory */
+    if (GetCurrentDirectory(MAX_PATH, OldDir) == 0)
+    {
+        win_skip("No test directory available\n");
+        return;
+    }
+
+    /* Create a blank test directory */
+    for (; i < 10; ++i)
+    {
+        TestDir[0] = '0' + i;
+        if (CreateDirectory(TestDir, NULL))
+        {
+            if (SetCurrentDirectory(TestDir) == 0)
+            {
+                RemoveDirectory(TestDir);
+                win_skip("No test directory available\n");
+                return;
+            }
+       
+            break;
+        }
+    }
+
+    if (i == 10)
+    {
+        win_skip("No test directory available\n");
+        return;
+    }
+
+    hFile = CreateFile("file1",
+                       GENERIC_READ | GENERIC_WRITE,
+                       0, NULL,
+                       CREATE_NEW,
+                       FILE_ATTRIBUTE_NORMAL,
+                       NULL);
+    ok(hFile != INVALID_HANDLE_VALUE, "CreateFile() failed\n");
+    ok(GetFileTime(hFile, &FileTime, NULL, NULL) != FALSE, "GetFileTime() failed\n");
+    CloseHandle(hFile);
+
+    /* Wait a least 10ms (resolution of FAT) */
+    /* XXX: Increased to 1s for ReactOS... */
+    Sleep(1000);
+
+    hFile = CreateFile("file2",
+                       GENERIC_READ | GENERIC_WRITE,
+                       0, NULL,
+                       CREATE_NEW,
+                       FILE_ATTRIBUTE_NORMAL,
+                       NULL);
+    ok(hFile != INVALID_HANDLE_VALUE, "CreateFile() failed\n");
+    CloseHandle(hFile);
+
+    ok(MoveFile("file1", "file") != FALSE, "MoveFile() failed\n");
+    /* Sleep over cache expiry */
+    /* FIXME: Query correct value from registry if it exists:
+     * \HKLM\System\CurrentControlSet\Control\FileSystem\MaximumTunnelEntryAgeInSeconds */
+    Sleep(16000);
+    ok(MoveFile("file2", "file1") != FALSE, "MoveFile() failed\n");
+
+    hFile = CreateFile("file1",
+                       GENERIC_READ,
+                       0, NULL,
+                       OPEN_EXISTING,
+                       FILE_ATTRIBUTE_NORMAL,
+                       NULL);
+    ok(hFile != INVALID_HANDLE_VALUE, "CreateFile() failed\n");
+    ok(GetFileTime(hFile, &File1Time, NULL, NULL) != FALSE, "GetFileTime() failed\n");
+    CloseHandle(hFile);
+
+    ok(RtlCompareMemory(&FileTime, &File1Time, sizeof(FILETIME)) != sizeof(FILETIME), "Tunnel cache still in action?\n");
+
+    DeleteFile("file2");
+    DeleteFile("file1");
+    DeleteFile("file");
+
+    SetCurrentDirectory(OldDir);
+    RemoveDirectory(TestDir);
+}
+
 static
 void
 Test_LongTests(void)
@@ -185,4 +278,5 @@ START_TEST(TunnelCache)
 {
     Test_ShortTests();
     Test_LongTests();
+    Test_VeryLongTests();
 }