1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Tests for Tunnel Cache
5 * PROGRAMMER: Pierre Schweitzer <pierre.schweitzer@reactos.org>
6 */
7
8 #include "precomp.h"
9
10 static
11 void
Test_VeryLongTests(void)12 Test_VeryLongTests(void)
13 {
14 UCHAR i = 0;
15 HANDLE hFile;
16 CHAR TestDir[] = "XTestDirTunnelCache";
17 CHAR OldDir[MAX_PATH];
18 FILETIME FileTime, File1Time;
19
20 win_skip("Too long, see: ROSTESTS-177\n");
21 return;
22
23 /* Create a blank test directory */
24 if (GetCurrentDirectory(MAX_PATH, OldDir) == 0)
25 {
26 win_skip("No test directory available\n");
27 return;
28 }
29
30 /* Create a blank test directory */
31 for (; i < 10; ++i)
32 {
33 TestDir[0] = '0' + i;
34 if (CreateDirectory(TestDir, NULL))
35 {
36 if (SetCurrentDirectory(TestDir) == 0)
37 {
38 RemoveDirectory(TestDir);
39 win_skip("No test directory available\n");
40 return;
41 }
42
43 break;
44 }
45 }
46
47 if (i == 10)
48 {
49 win_skip("No test directory available\n");
50 return;
51 }
52
53 hFile = CreateFile("file1",
54 GENERIC_READ | GENERIC_WRITE,
55 0, NULL,
56 CREATE_NEW,
57 FILE_ATTRIBUTE_NORMAL,
58 NULL);
59 ok(hFile != INVALID_HANDLE_VALUE, "CreateFile() failed\n");
60 ok(GetFileTime(hFile, &FileTime, NULL, NULL) != FALSE, "GetFileTime() failed\n");
61 CloseHandle(hFile);
62
63 /* Wait a least 10ms (resolution of FAT) */
64 /* XXX: Increased to 1s for ReactOS... */
65 Sleep(1000);
66
67 hFile = CreateFile("file2",
68 GENERIC_READ | GENERIC_WRITE,
69 0, NULL,
70 CREATE_NEW,
71 FILE_ATTRIBUTE_NORMAL,
72 NULL);
73 ok(hFile != INVALID_HANDLE_VALUE, "CreateFile() failed\n");
74 CloseHandle(hFile);
75
76 ok(MoveFile("file1", "file") != FALSE, "MoveFile() failed\n");
77 /* Sleep over cache expiry */
78 /* FIXME: Query correct value from registry if it exists:
79 * \HKLM\System\CurrentControlSet\Control\FileSystem\MaximumTunnelEntryAgeInSeconds */
80 Sleep(16000);
81 ok(MoveFile("file2", "file1") != FALSE, "MoveFile() failed\n");
82
83 hFile = CreateFile("file1",
84 GENERIC_READ,
85 0, NULL,
86 OPEN_EXISTING,
87 FILE_ATTRIBUTE_NORMAL,
88 NULL);
89 ok(hFile != INVALID_HANDLE_VALUE, "CreateFile() failed\n");
90 ok(GetFileTime(hFile, &File1Time, NULL, NULL) != FALSE, "GetFileTime() failed\n");
91 CloseHandle(hFile);
92
93 ok(RtlCompareMemory(&FileTime, &File1Time, sizeof(FILETIME)) != sizeof(FILETIME), "Tunnel cache still in action?\n");
94
95 DeleteFile("file2");
96 DeleteFile("file1");
97 DeleteFile("file");
98
99 SetCurrentDirectory(OldDir);
100 RemoveDirectory(TestDir);
101 }
102
103 static
104 void
Test_LongTests(void)105 Test_LongTests(void)
106 {
107 UCHAR i = 0;
108 HANDLE hFile;
109 CHAR TestDir[] = "XTestDirTunnelCache";
110 CHAR OldDir[MAX_PATH];
111 FILETIME FileTime, File1Time;
112
113 /* Create a blank test directory */
114 if (GetCurrentDirectory(MAX_PATH, OldDir) == 0)
115 {
116 win_skip("No test directory available\n");
117 return;
118 }
119
120 /* Create a blank test directory */
121 for (; i < 10; ++i)
122 {
123 TestDir[0] = '0' + i;
124 if (CreateDirectory(TestDir, NULL))
125 {
126 if (SetCurrentDirectory(TestDir) == 0)
127 {
128 RemoveDirectory(TestDir);
129 win_skip("No test directory available\n");
130 return;
131 }
132
133 break;
134 }
135 }
136
137 if (i == 10)
138 {
139 win_skip("No test directory available\n");
140 return;
141 }
142
143 hFile = CreateFile("file1",
144 GENERIC_READ | GENERIC_WRITE,
145 0, NULL,
146 CREATE_NEW,
147 FILE_ATTRIBUTE_NORMAL,
148 NULL);
149 ok(hFile != INVALID_HANDLE_VALUE, "CreateFile() failed\n");
150 ok(GetFileTime(hFile, &FileTime, NULL, NULL) != FALSE, "GetFileTime() failed\n");
151 CloseHandle(hFile);
152
153 /* Wait a least 10ms (resolution of FAT) */
154 /* XXX: Increased to 1s for ReactOS... */
155 Sleep(1000);
156
157 hFile = CreateFile("file2",
158 GENERIC_READ | GENERIC_WRITE,
159 0, NULL,
160 CREATE_NEW,
161 FILE_ATTRIBUTE_NORMAL,
162 NULL);
163 ok(hFile != INVALID_HANDLE_VALUE, "CreateFile() failed\n");
164 CloseHandle(hFile);
165
166 ok(MoveFile("file1", "file") != FALSE, "MoveFile() failed\n");
167 ok(MoveFile("file2", "file1") != FALSE, "MoveFile() failed\n");
168
169 hFile = CreateFile("file1",
170 GENERIC_READ,
171 0, NULL,
172 OPEN_EXISTING,
173 FILE_ATTRIBUTE_NORMAL,
174 NULL);
175 ok(hFile != INVALID_HANDLE_VALUE, "CreateFile() failed\n");
176 ok(GetFileTime(hFile, &File1Time, NULL, NULL) != FALSE, "GetFileTime() failed\n");
177 CloseHandle(hFile);
178
179 ros_skip_flaky
180 ok(RtlCompareMemory(&FileTime, &File1Time, sizeof(FILETIME)) == sizeof(FILETIME), "Tunnel cache failed\n");
181
182 DeleteFile("file2");
183 DeleteFile("file1");
184 DeleteFile("file");
185
186 SetCurrentDirectory(OldDir);
187 RemoveDirectory(TestDir);
188 }
189
190 static
191 void
Test_ShortTests(void)192 Test_ShortTests(void)
193 {
194 UCHAR i = 0;
195 CHAR ShortName[14];
196 HANDLE hFile, hFind;
197 WIN32_FIND_DATA FileInfo;
198 CHAR TestDir[] = "XTestDirTunnelCache";
199 CHAR OldDir[MAX_PATH];
200
201 /* Create a blank test directory */
202 if (GetCurrentDirectory(MAX_PATH, OldDir) == 0)
203 {
204 win_skip("No test directory available\n");
205 return;
206 }
207
208 /* Create a blank test directory */
209 for (; i < 10; ++i)
210 {
211 TestDir[0] = '0' + i;
212 if (CreateDirectory(TestDir, NULL))
213 {
214 if (SetCurrentDirectory(TestDir) == 0)
215 {
216 RemoveDirectory(TestDir);
217 win_skip("No test directory available\n");
218 return;
219 }
220
221 break;
222 }
223 }
224
225 if (i == 10)
226 {
227 win_skip("No test directory available\n");
228 return;
229 }
230
231 hFile = CreateFile("verylongfilename",
232 GENERIC_READ | GENERIC_WRITE,
233 0, NULL,
234 CREATE_NEW,
235 FILE_ATTRIBUTE_NORMAL,
236 NULL);
237 ok(hFile != INVALID_HANDLE_VALUE, "CreateFile() failed\n");
238 CloseHandle(hFile);
239
240 hFind = FindFirstFile("verylongfilename", &FileInfo);
241 ok(hFind != INVALID_HANDLE_VALUE, "FindFirstFile() failed\n");
242 FindClose(hFind);
243 RtlCopyMemory(ShortName, FileInfo.cAlternateFileName, sizeof(ShortName));
244
245 ok(MoveFile("verylongfilename", "verylongfilename2") != FALSE, "MoveFile() failed\n");
246 hFind = FindFirstFile("verylongfilename2", &FileInfo);
247 ok(hFind != INVALID_HANDLE_VALUE, "FindFirstFile() failed\n");
248 FindClose(hFind);
249 ok(strcmp(FileInfo.cAlternateFileName, ShortName) == 0, "strcmp() failed\n");
250
251 hFile = CreateFile("randomfilename",
252 GENERIC_READ | GENERIC_WRITE,
253 0, NULL,
254 CREATE_NEW,
255 FILE_ATTRIBUTE_NORMAL,
256 NULL);
257 ok(hFile != INVALID_HANDLE_VALUE, "CreateFile() failed\n");
258 CloseHandle(hFile);
259
260 ok(MoveFileEx("randomfilename", "verylongfilename2", MOVEFILE_REPLACE_EXISTING) != FALSE, "MoveFile() failed\n");
261 hFind = FindFirstFile("verylongfilename2", &FileInfo);
262 ok(hFind != INVALID_HANDLE_VALUE, "FindFirstFile() failed\n");
263 FindClose(hFind);
264 ok(strcmp(FileInfo.cAlternateFileName, ShortName) == 0, "strcmp() failed\n");
265
266 DeleteFile("randomfilename");
267 DeleteFile("verylongfilename");
268 DeleteFile("verylongfilename2");
269
270 SetCurrentDirectory(OldDir);
271 RemoveDirectory(TestDir);
272 }
273
START_TEST(TunnelCache)274 START_TEST(TunnelCache)
275 {
276 Test_ShortTests();
277 Test_LongTests();
278 Test_VeryLongTests();
279 }
280