|
1 // Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of the License "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // f32test\server\t_misc.cpp |
|
15 // |
|
16 // |
|
17 |
|
18 #include <f32file.h> |
|
19 #include <e32test.h> |
|
20 #include "t_server.h" |
|
21 |
|
22 #ifdef __VC32__ |
|
23 // Solve compilation problem caused by non-English locale |
|
24 #pragma setlocale("english") |
|
25 #endif |
|
26 |
|
27 GLDEF_D RTest test(_L("T_MISC")); |
|
28 |
|
29 LOCAL_C void Test1() |
|
30 // |
|
31 // Open, write to and read from a file |
|
32 // |
|
33 { |
|
34 |
|
35 test.Next(_L("Open, write to and read from a file")); |
|
36 TInt r=TheFs.SetSessionPath(gSessionPath); |
|
37 test(r==KErrNone); |
|
38 RFile file; |
|
39 r=file.Create(TheFs,_L("Hello.Wld"),EFileWrite); |
|
40 test(r==KErrNone); |
|
41 r=file.Write(_L8("Hello World"),11); |
|
42 test(r==KErrNone); |
|
43 file.Close(); |
|
44 |
|
45 r=file.Open(TheFs,_L("Hello.Wld"),EFileRead); |
|
46 test(r==KErrNone); |
|
47 TBuf8<256> buf; |
|
48 r=file.Read(buf); |
|
49 test(r==KErrNone); |
|
50 test(buf==_L8("Hello World")); |
|
51 file.Close(); |
|
52 } |
|
53 |
|
54 LOCAL_C void Test2() |
|
55 // |
|
56 // Open and read from a file |
|
57 // |
|
58 { |
|
59 |
|
60 test.Next(_L("Open and read from a file")); |
|
61 TInt r=TheFs.SetSessionPath(gSessionPath); |
|
62 test(r==KErrNone); |
|
63 RFile file; |
|
64 r=file.Open(TheFs,_L("Hello.Wld"),EFileRead); |
|
65 test(r==KErrNone); |
|
66 TBuf8<256> buf; |
|
67 r=file.Read(buf); |
|
68 test(r==KErrNone); |
|
69 test(buf==_L8("Hello World")); |
|
70 file.Close(); |
|
71 r=TheFs.Delete(_L("HELLO.WLD")); |
|
72 test(r==KErrNone); |
|
73 } |
|
74 |
|
75 LOCAL_C void Test3() |
|
76 // |
|
77 // Create nested directories |
|
78 // |
|
79 { |
|
80 |
|
81 test.Next(_L("Create nested directories")); |
|
82 TInt r=TheFs.SetSessionPath(gSessionPath); |
|
83 test(r==KErrNone); |
|
84 TheFs.ResourceCountMarkStart(); |
|
85 // |
|
86 r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\A.B")); |
|
87 test(r==KErrNone || r==KErrAlreadyExists); |
|
88 r=TheFs.MkDir(_L("\\F32-TST\\RIGHT\\")); |
|
89 test(r==KErrNone || r==KErrAlreadyExists); |
|
90 // |
|
91 r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\ONE\\")); |
|
92 test(r==KErrNone || r==KErrAlreadyExists); |
|
93 r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\TWO\\")); |
|
94 test(r==KErrNone || r==KErrAlreadyExists); |
|
95 r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\THREE\\")); |
|
96 test(r==KErrNone || r==KErrAlreadyExists); |
|
97 r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\TWO\\BOTTOM\\")); |
|
98 test(r==KErrNone || r==KErrAlreadyExists); |
|
99 // |
|
100 r=TheFs.MkDirAll(_L("\\F32-TST\\RIGHT\\TOP\\MID\\BOT\\")); |
|
101 test(r==KErrNone || r==KErrAlreadyExists); |
|
102 } |
|
103 |
|
104 LOCAL_C void Test4() |
|
105 // |
|
106 // Test returned error values |
|
107 // |
|
108 { |
|
109 |
|
110 test.Next(_L("Test returned error values")); |
|
111 TInt r=TheFs.SetSessionPath(gSessionPath); |
|
112 test(r==KErrNone); |
|
113 TheFs.ResourceCountMarkStart(); |
|
114 // |
|
115 r=TheFs.MkDir(_L("\\")); |
|
116 test(r==KErrAlreadyExists); |
|
117 r=TheFs.MkDir(_L("\\LEFT")); |
|
118 test(r==KErrAlreadyExists); |
|
119 r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\")); |
|
120 test(r==KErrAlreadyExists); |
|
121 r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\..\\NEWDIR\\")); |
|
122 test(r==KErrBadName); |
|
123 r=TheFs.MkDir(_L("\\F32-TST\\NEWDIR\\SUBDIR\\")); |
|
124 test(r==KErrPathNotFound); |
|
125 // |
|
126 r=TheFs.RmDir(_L("\\")); |
|
127 test(r==KErrInUse); |
|
128 r=TheFs.RmDir(_L("\\PROG")); |
|
129 test(r==KErrInUse); |
|
130 r=TheFs.RmDir(_L("\\F32-TST\\")); |
|
131 test(r==KErrInUse); |
|
132 |
|
133 |
|
134 RDir dir; |
|
135 r=dir.Open(TheFs,_L("V:\\asdf"),KEntryAttNormal); |
|
136 test(r==KErrNone || r==KErrNotReady || r==KErrNotFound); |
|
137 if (r==KErrNone) |
|
138 dir.Close(); |
|
139 r=dir.Open(TheFs,_L("L:\\asdf"),KEntryAttNormal); |
|
140 test(r==KErrNone || r==KErrNotReady || r==KErrNotFound); |
|
141 dir.Close(); |
|
142 // |
|
143 TEntry entry; |
|
144 r=TheFs.Entry(_L("z:\\NOTEXiSTS\\file.txt"),entry); |
|
145 test(r==KErrPathNotFound); |
|
146 r=TheFs.Entry(_L("z:\\NOTEXiSTS\\"),entry); |
|
147 test(r==KErrNotFound); |
|
148 r=TheFs.Entry(_L("z:\\SYSTEM\\"),entry); |
|
149 test(r==KErrNone); |
|
150 r=TheFs.Entry(PlatSec::ConfigSetting(PlatSec::EPlatSecEnforceSysBin)?_L("z:\\SYS\\BIN\\ESHELL.EXE"):_L("z:\\SYSTEM\\BIN\\ESHELL.EXE"),entry); |
|
151 test(r==KErrNone); |
|
152 |
|
153 r=dir.Open(TheFs,_L("\\*"),NULL); |
|
154 test(r==KErrNone); |
|
155 TEntry dirEntry; |
|
156 r=dir.Read(dirEntry); |
|
157 test(r==KErrNone || r==KErrEof); |
|
158 if (r==KErrNone) |
|
159 test.Printf(_L("%S\n"),&dirEntry.iName); |
|
160 dir.Close(); |
|
161 |
|
162 r=dir.Open(TheFs,_L("A:\\*"),NULL); |
|
163 test(r==KErrNotReady || r==KErrNone); |
|
164 dir.Close(); |
|
165 } |
|
166 |
|
167 LOCAL_C void Test5() |
|
168 // |
|
169 // Read files directly from the rom |
|
170 // |
|
171 |
|
172 { |
|
173 test.Next(_L("Read Files directly from the rom")); |
|
174 |
|
175 TInt pos=0; |
|
176 TInt r; |
|
177 _LIT(KTFileCpp, "Z:\\test\\T_FILE.CPP"); |
|
178 _LIT(KTFsrvCpp, "Z:\\test\\T_FSRV.CPP"); |
|
179 |
|
180 if ( TheFs.IsFileInRom(KTFileCpp) != NULL && TheFs.IsFileInRom(KTFsrvCpp) != NULL ) |
|
181 { |
|
182 RFile f; |
|
183 r=f.Open(TheFs,KTFileCpp,EFileRead); |
|
184 test(r==KErrNone); |
|
185 r=f.Seek(ESeekAddress,pos); |
|
186 TText8* ptrPos=*(TText8**)&pos; |
|
187 test(r==KErrNone); |
|
188 TBuf8<1024> readBuf; |
|
189 r=f.Read(readBuf); |
|
190 test(r==KErrNone); |
|
191 test(readBuf.Length()==readBuf.MaxLength()); |
|
192 TPtrC8 memBuf(ptrPos,readBuf.Length()); |
|
193 test(memBuf==readBuf); |
|
194 |
|
195 ptrPos+=9913; |
|
196 pos=9913; |
|
197 r=f.Seek(ESeekStart,pos); |
|
198 test(r==KErrNone); |
|
199 readBuf.SetLength(0); |
|
200 r=f.Read(readBuf); |
|
201 test(r==KErrNone); |
|
202 test(readBuf.Length()==readBuf.MaxLength()); |
|
203 memBuf.Set(ptrPos,readBuf.Length()); |
|
204 test(memBuf==readBuf); |
|
205 |
|
206 RFile f2; |
|
207 pos=10; |
|
208 r=f2.Open(TheFs,KTFsrvCpp,EFileRead); |
|
209 |
|
210 test(r==KErrNone); |
|
211 r=f2.Seek(ESeekAddress,pos); |
|
212 ptrPos=*(TText8**)&pos; |
|
213 test(r==KErrNone); |
|
214 readBuf.SetLength(0); |
|
215 pos=10; |
|
216 r=f2.Seek(ESeekStart,pos); |
|
217 test(r==KErrNone); |
|
218 r=f2.Read(readBuf); |
|
219 test(r==KErrNone); |
|
220 test(readBuf.Length()==readBuf.MaxLength()); |
|
221 memBuf.Set(ptrPos,readBuf.Length()); |
|
222 test(memBuf==readBuf); |
|
223 |
|
224 ptrPos+=2445; |
|
225 pos=10+2445; |
|
226 r=f2.Seek(ESeekStart,pos); |
|
227 test(r==KErrNone); |
|
228 readBuf.SetLength(0); |
|
229 r=f2.Read(readBuf); |
|
230 test(r==KErrNone); |
|
231 test(readBuf.Length()==readBuf.MaxLength()); |
|
232 memBuf.Set(ptrPos,readBuf.Length()); |
|
233 test(memBuf==readBuf); |
|
234 |
|
235 pos=0; |
|
236 r=f.Seek(ESeekAddress,pos); |
|
237 ptrPos=*(TText8**)&pos; |
|
238 test(r==KErrNone); |
|
239 readBuf.SetLength(0); |
|
240 pos=0; |
|
241 r=f.Seek(ESeekStart,pos); |
|
242 test(r==KErrNone); |
|
243 r=f.Read(readBuf); |
|
244 test(r==KErrNone); |
|
245 test(readBuf.Length()==readBuf.MaxLength()); |
|
246 memBuf.Set(ptrPos,readBuf.Length()); |
|
247 test(memBuf==readBuf); |
|
248 |
|
249 ptrPos+=5245; |
|
250 pos=5245; |
|
251 r=f.Seek(ESeekStart,pos); |
|
252 test(r==KErrNone); |
|
253 readBuf.SetLength(0); |
|
254 r=f.Read(readBuf); |
|
255 test(r==KErrNone); |
|
256 test(readBuf.Length()==readBuf.MaxLength()); |
|
257 memBuf.Set(ptrPos,readBuf.Length()); |
|
258 test(memBuf==readBuf); |
|
259 |
|
260 f.Close(); |
|
261 f2.Close(); |
|
262 } |
|
263 } |
|
264 |
|
265 LOCAL_C void Test6() |
|
266 // |
|
267 // Test rom return values |
|
268 // |
|
269 { |
|
270 test.Next(_L("Test rom return values")); |
|
271 |
|
272 RFile f; |
|
273 TInt r=f.Replace(TheFs,_L("Z:\\Test\\T_Fsrv.Cpp"),EFileRead); |
|
274 test(r==KErrAccessDenied); |
|
275 r=f.Create(TheFs,_L("Z:\\Test\\newT_Fsrv.Cpp"),EFileRead); |
|
276 test(r==KErrAccessDenied); |
|
277 r=f.Open(TheFs,_L("Z:\\Test\\T_Fsrv.Cpp"),EFileRead); |
|
278 test(r==KErrNone); |
|
279 f.Close(); |
|
280 r=f.Open(TheFs,_L("Z:\\Test\\T_Fsrv.Cpp"),EFileRead|EFileWrite); |
|
281 test(r==KErrAccessDenied); |
|
282 } |
|
283 |
|
284 LOCAL_C void Test7() |
|
285 // |
|
286 // Test cache |
|
287 // |
|
288 { |
|
289 |
|
290 test.Next(_L("Test cache updated when writing to a file")); |
|
291 TUidType uid1(TUid::Uid(1),TUid::Uid(2),TUid::Uid(3)); |
|
292 TBuf8<32> contents1=_L8("asdf asdf asdf"); |
|
293 TBuf<32> file1=_L("\\TMISC\\CACHE.FILE"); |
|
294 MakeFile(file1,uid1,contents1); |
|
295 |
|
296 TEntry entry; |
|
297 TInt r=TheFs.Entry(file1,entry); |
|
298 test(r==KErrNone); |
|
299 test(entry.iType==uid1); |
|
300 |
|
301 TUidType uid2(TUid::Uid(4),TUid::Uid(5),TUid::Uid(6)); |
|
302 TCheckedUid checkedUid(uid2); |
|
303 TPtrC8 uidData((TUint8*)&checkedUid,sizeof(TCheckedUid)); |
|
304 RFile f; |
|
305 r=f.Open(TheFs,file1,EFileRead|EFileWrite); |
|
306 test(r==KErrNone); |
|
307 r=f.Write(uidData); |
|
308 test(r==KErrNone); |
|
309 r = f.Flush(); |
|
310 test(r==KErrNone); |
|
311 |
|
312 r=TheFs.Entry(file1,entry); |
|
313 test(r==KErrNone); |
|
314 test(entry.iType==uid2); |
|
315 |
|
316 f.Close(); |
|
317 r=TheFs.Entry(file1,entry); |
|
318 test(r==KErrNone); |
|
319 test(entry.iType==uid2); |
|
320 } |
|
321 |
|
322 LOCAL_C void Test8() |
|
323 // |
|
324 // Test IsValidName |
|
325 // |
|
326 { |
|
327 test.Next(_L("Test RFs::IsValidName(TDesC)")); |
|
328 |
|
329 // tests calling IsValidName() with invalid name as first call to session |
|
330 // see defect EXT-57KH9K |
|
331 _LIT(KInvalidName, "test\\i1.jpg"); |
|
332 RFs fs; |
|
333 test(KErrNone==fs.Connect()); |
|
334 test(fs.IsValidName(KInvalidName)==EFalse); |
|
335 fs.Close(); |
|
336 |
|
337 test(TheFs.IsValidName(_L("*"))==EFalse); |
|
338 test(TheFs.IsValidName(_L("?"))==EFalse); |
|
339 test(TheFs.IsValidName(_L(">"))==EFalse); |
|
340 test(TheFs.IsValidName(_L("<"))==EFalse); |
|
341 test(TheFs.IsValidName(_L(":"))==EFalse); |
|
342 test(TheFs.IsValidName(_L("\""))==EFalse); |
|
343 test(TheFs.IsValidName(_L("/"))==EFalse); |
|
344 test(TheFs.IsValidName(_L("|"))==EFalse); |
|
345 test(TheFs.IsValidName(_L("\\"))==EFalse); |
|
346 |
|
347 test(TheFs.IsValidName(_L("xx*yy"))==EFalse); |
|
348 test(TheFs.IsValidName(_L("xx?yy"))==EFalse); |
|
349 test(TheFs.IsValidName(_L("xx>yy"))==EFalse); |
|
350 test(TheFs.IsValidName(_L("xx<yy"))==EFalse); |
|
351 test(TheFs.IsValidName(_L("xx:yy"))==EFalse); |
|
352 test(TheFs.IsValidName(_L("xx\"yy"))==EFalse); |
|
353 test(TheFs.IsValidName(_L("xx/yy"))==EFalse); |
|
354 test(TheFs.IsValidName(_L("xx|yy"))==EFalse); |
|
355 |
|
356 test(TheFs.IsValidName(_L("C:\\*\\group\\release.txt"))==EFalse); |
|
357 test(TheFs.IsValidName(_L("C:\\?\\group\\release.txt"))==EFalse); |
|
358 test(TheFs.IsValidName(_L("C:\\>\\group\\release.txt"))==EFalse); |
|
359 test(TheFs.IsValidName(_L("C:\\<\\group\\release.txt"))==EFalse); |
|
360 test(TheFs.IsValidName(_L("C:\\:\\group\\release.txt"))==EFalse); |
|
361 test(TheFs.IsValidName(_L("C:\\\"\\group\\release.txt"))==EFalse); |
|
362 test(TheFs.IsValidName(_L("C:\\/\\group\\release.txt"))==EFalse); |
|
363 test(TheFs.IsValidName(_L("C:\\|\\group\\release.txt"))==EFalse); |
|
364 |
|
365 test(TheFs.IsValidName(_L(""))==EFalse); // must be a name or extension present |
|
366 test(TheFs.IsValidName(_L(".ext"))); |
|
367 test(TheFs.IsValidName(_L("C:\\asdf.blarg\\"))==EFalse); |
|
368 test(TheFs.IsValidName(_L("\\"))==EFalse); |
|
369 |
|
370 test(TheFs.IsValidName(_L("as(){}@~#;!\xA3$%^&()df.blarg"))); // Valid names |
|
371 test(TheFs.IsValidName(_L("C:\\asdf.blarg\\asdf.blarg"))); // Valid names |
|
372 test(TheFs.IsValidName(_L("\'"))); // Valid names |
|
373 |
|
374 test.Next(_L("Test RFs::IsValidName(TDesC, TDes) overload")); |
|
375 |
|
376 TText testChar; |
|
377 test(TheFs.IsValidName(_L("*"),testChar)==EFalse); |
|
378 test(testChar=='*'); |
|
379 test(TheFs.IsValidName(_L("?"),testChar)==EFalse); |
|
380 test(testChar=='?'); |
|
381 test(TheFs.IsValidName(_L(">"),testChar)==EFalse); |
|
382 test(testChar=='>'); |
|
383 test(TheFs.IsValidName(_L("<"),testChar)==EFalse); |
|
384 test(testChar=='<'); |
|
385 test(TheFs.IsValidName(_L(":"),testChar)==EFalse); |
|
386 test(testChar==':'); |
|
387 test(TheFs.IsValidName(_L("\""),testChar)==EFalse); |
|
388 test(testChar=='\"'); // Tests that " is illegal |
|
389 test(TheFs.IsValidName(_L("/"),testChar)==EFalse); |
|
390 test(testChar=='/'); |
|
391 test(TheFs.IsValidName(_L("|"),testChar)==EFalse); |
|
392 test(testChar=='|'); |
|
393 test(TheFs.IsValidName(_L("\\"),testChar)==EFalse); |
|
394 test(testChar==' '); |
|
395 |
|
396 test(TheFs.IsValidName(_L("xx*yy"),testChar)==EFalse); |
|
397 test(testChar=='*'); |
|
398 test(TheFs.IsValidName(_L("xx?yy"),testChar)==EFalse); |
|
399 test(testChar=='?'); |
|
400 test(TheFs.IsValidName(_L("xx>yy"),testChar)==EFalse); |
|
401 test(testChar=='>'); |
|
402 test(TheFs.IsValidName(_L("xx<yy"),testChar)==EFalse); |
|
403 test(testChar=='<'); |
|
404 test(TheFs.IsValidName(_L("xx:yy"),testChar)==EFalse); |
|
405 test(testChar==':'); |
|
406 test(TheFs.IsValidName(_L("xx\"yy"),testChar)==EFalse); |
|
407 test(testChar=='\"'); // Tests that " is illegal |
|
408 test(TheFs.IsValidName(_L("xx/yy"),testChar)==EFalse); |
|
409 test(testChar=='/'); |
|
410 test(TheFs.IsValidName(_L("xx|yy"),testChar)==EFalse); |
|
411 test(testChar=='|'); |
|
412 |
|
413 test(TheFs.IsValidName(_L("C:\\*\\group\\release.txt"),testChar)==EFalse); |
|
414 test(testChar=='*'); |
|
415 test(TheFs.IsValidName(_L("C:\\?\\group\\release.txt"),testChar)==EFalse); |
|
416 test(testChar=='?'); |
|
417 test(TheFs.IsValidName(_L("C:\\..\\group\\release.txt"),testChar)==EFalse); |
|
418 test(testChar=='.'); // Only one "." returned however many are in filename |
|
419 test(TheFs.IsValidName(_L("C:\\.\\group\\release.txt"),testChar)==EFalse); |
|
420 test(testChar=='.'); |
|
421 test(TheFs.IsValidName(_L("C:\\>\\group\\release.txt"),testChar)==EFalse); |
|
422 test(testChar=='>'); |
|
423 test(TheFs.IsValidName(_L("C:\\<\\group\\release.txt"),testChar)==EFalse); |
|
424 test(testChar=='<'); |
|
425 test(TheFs.IsValidName(_L("C:\\HelloWorld\\:\\group\\release.txt"),testChar)==EFalse); |
|
426 test(testChar==':'); |
|
427 |
|
428 |
|
429 test(TheFs.IsValidName(_L("C::\\group\\release.txt"),testChar)==EFalse); |
|
430 test(testChar==':'); |
|
431 test(TheFs.IsValidName(_L(">\\group\\release.txt"),testChar)==EFalse); |
|
432 test(testChar=='>'); |
|
433 test(TheFs.IsValidName(_L("C|group\\release.txt"),testChar)==EFalse); |
|
434 test(testChar=='|'); |
|
435 test(TheFs.IsValidName(_L("C\\|\\group\\release.txt"),testChar)==EFalse); |
|
436 test(testChar=='|'); |
|
437 |
|
438 test(TheFs.IsValidName(_L("\\>"),testChar)==EFalse); |
|
439 test(testChar=='>'); |
|
440 test(TheFs.IsValidName(_L("C:\\|group\\release.txt"),testChar)==EFalse); |
|
441 test(testChar=='|'); |
|
442 |
|
443 test(TheFs.IsValidName(_L("C:\\\"\\group\\release.txt"),testChar)==EFalse); |
|
444 test(testChar=='\"'); |
|
445 test(TheFs.IsValidName(_L("C:\\/\\group\\release.txt"),testChar)==EFalse); |
|
446 test(testChar=='/'); |
|
447 test(TheFs.IsValidName(_L("C:\\|\\group\\release.txt"),testChar)==EFalse); |
|
448 test(testChar=='|'); |
|
449 test(TheFs.IsValidName(_L("C:\\ \\group\\release.txt"),testChar)==EFalse); // must be a name or extension present |
|
450 test(testChar==' '); |
|
451 |
|
452 // Test that \ is not allowed in filenames |
|
453 TFileName filename; |
|
454 filename=_L("C:\\HelloWorld\\\\\\group\\release.txt"); |
|
455 TPtr pChar(&testChar,sizeof(TText),sizeof(TText)); |
|
456 test(TheFs.IsValidName(filename,testChar)==EFalse); |
|
457 test(pChar.Find(_L("\\"))!=KErrNotFound); |
|
458 filename=_L("C:\\\\\\group\\release.txt"); |
|
459 test(TheFs.IsValidName(filename,testChar)==EFalse); |
|
460 test(pChar.Find(_L("\\"))!=KErrNotFound); |
|
461 filename=_L("C:\\Hello World\\group\\release.txt"); |
|
462 filename[8]=KPathDelimiter; // Makes C:\\Hello World\\group\\release.txt |
|
463 test(TheFs.IsValidName(filename,testChar)); |
|
464 filename=_L("C:\\HelloWorld\\::\\group\\release.txt"); |
|
465 test(TheFs.IsValidName(filename,testChar)==EFalse); |
|
466 test(pChar.Find(_L(":"))!=KErrNotFound); |
|
467 |
|
468 filename=_L("C:\\>>\\group\\release.txt"); |
|
469 test(TheFs.IsValidName(filename,testChar)==EFalse); |
|
470 test(pChar.Find(_L(">"))!=KErrNotFound); |
|
471 |
|
472 test(TheFs.IsValidName(_L(""),testChar)==EFalse); // Must be a name |
|
473 test(testChar==' '); |
|
474 test(TheFs.IsValidName(_L(".ext"),testChar)); |
|
475 test(TheFs.IsValidName(_L("C:\\asdf.blarg\\"),testChar)==EFalse); |
|
476 test(testChar==' '); // Must be a name else testChar is set to blank |
|
477 test(TheFs.IsValidName(_L("C:\\asdf.blarg"),testChar)); |
|
478 |
|
479 test(TheFs.IsValidName(_L("C:\\asdf..blarg\\"),testChar)==EFalse); |
|
480 test(testChar==' '); // Must be a name else testChar is set to blank |
|
481 test(TheFs.IsValidName(_L("C:\\asdf..blarg"),testChar)); |
|
482 |
|
483 test(TheFs.IsValidName(_L("\\"),testChar)==EFalse); |
|
484 test(testChar==' '); |
|
485 |
|
486 // Test multiple evil characters - parsing occurs from right to left |
|
487 // except that wildcarded characters take priority and are picked out first |
|
488 test(TheFs.IsValidName(_L("abc>def|ghi?jkl:mno<pqr*stu"),testChar)==EFalse); |
|
489 test(testChar=='*'); |
|
490 test(TheFs.IsValidName(_L("abc>def|ghi<jkl:mno?pqr"),testChar)==EFalse); |
|
491 test(testChar=='?'); |
|
492 test(TheFs.IsValidName(_L("abc>def|ghi<jkl:mno"),testChar)==EFalse); |
|
493 test(testChar==':'); |
|
494 test(TheFs.IsValidName(_L("abc>def|ghi<jkl"),testChar)==EFalse); |
|
495 test(testChar=='<'); |
|
496 test(TheFs.IsValidName(_L("abc>def|ghi"),testChar)==EFalse); |
|
497 test(testChar=='|'); |
|
498 test(TheFs.IsValidName(_L("abc>def"),testChar)==EFalse); |
|
499 test(testChar=='>'); |
|
500 |
|
501 test(!TheFs.IsValidName(_L("C:\\v123456.."),testChar)); // Valid name |
|
502 test(TheFs.IsValidName(_L("abc"),testChar)); // Valid name |
|
503 test(TheFs.IsValidName(_L("as(){}@~#;!\xA3$%^&()df.blarg"),testChar)); // Valid name |
|
504 test(TheFs.IsValidName(_L("C:\\asdf.blarg\\asdf.blarg"),testChar)); // Valid name |
|
505 test(TheFs.IsValidName(_L("\'"),testChar)); // Valid name |
|
506 |
|
507 //PDEF133084: The wild character in the extension was not being detected. |
|
508 _LIT( KTestString, "E:\\My Videos\\Downloads\\1\\1\\Name.3gp?" ); |
|
509 TBuf<50> path; |
|
510 path = KTestString; |
|
511 TBool validName( EFalse ); |
|
512 TText badChar; |
|
513 TInt badCharLoc( KErrNotFound ); |
|
514 |
|
515 while ( ! validName ) |
|
516 { |
|
517 validName = TheFs.IsValidName( path, badChar ); |
|
518 |
|
519 if ( ! validName ) |
|
520 { |
|
521 badCharLoc = path.LocateReverse( badChar ); |
|
522 |
|
523 if ( KErrNotFound != badCharLoc ) |
|
524 { |
|
525 path[badCharLoc] = '_'; |
|
526 } |
|
527 } |
|
528 } |
|
529 } |
|
530 |
|
531 LOCAL_C void Test9() |
|
532 // |
|
533 // Test IsFileInRom |
|
534 // |
|
535 { |
|
536 |
|
537 test.Next(_L("Test RFs::IsFileInRom")); |
|
538 |
|
539 CFileMan* fMan=CFileMan::NewL(TheFs); |
|
540 TInt r=fMan->Copy(_L("Z:\\TEST\\T_FILE.CPP"),_L("C:\\T_FILE.CPP")); |
|
541 test(r==KErrNone || r==KErrAccessDenied); |
|
542 delete fMan; |
|
543 TUint8* addr=TheFs.IsFileInRom(_L("C:\\ESHELL.EXE")); |
|
544 test(addr==NULL); |
|
545 addr=TheFs.IsFileInRom(_L("Z:\\TEST\\T_FILE.CPP")); |
|
546 if (addr!=NULL) |
|
547 { |
|
548 test(addr!=NULL); |
|
549 TPtrC8 startOfFile(addr,12); |
|
550 test(startOfFile==_L8("// Copyright")); |
|
551 } |
|
552 else |
|
553 { |
|
554 test (addr==NULL); |
|
555 } |
|
556 } |
|
557 |
|
558 LOCAL_C void Test10() |
|
559 // |
|
560 // Test drive names |
|
561 // |
|
562 { |
|
563 |
|
564 test.Next(_L("Test Drive Names")); |
|
565 TFileName driveName; |
|
566 TInt i; |
|
567 for(i=0;i<KMaxDrives;i++) |
|
568 { |
|
569 TInt r=TheFs.GetDriveName(i,driveName); |
|
570 test(r==KErrNone); |
|
571 if (driveName.Length()) |
|
572 test.Printf(_L("Default name of %c: == %S\n"),'A'+i,&driveName); |
|
573 } |
|
574 |
|
575 TBuf<64> drive0=_L("Dilbert"); |
|
576 TBuf<64> drive4=_L("Dogbert"); |
|
577 TBuf<64> drive17=_L("Flibble"); |
|
578 TBuf<64> drive25=_L("RAMDRIVE"); |
|
579 TInt r=TheFs.SetDriveName(0,drive0); |
|
580 test(r==KErrNone); |
|
581 r=TheFs.SetDriveName(4,drive4); |
|
582 test(r==KErrNone); |
|
583 r=TheFs.SetDriveName(17,drive17); |
|
584 test(r==KErrNone); |
|
585 r=TheFs.SetDriveName(25,drive25); |
|
586 test(r==KErrNone); |
|
587 |
|
588 r=TheFs.GetDriveName(0,driveName); |
|
589 test(r==KErrNone); |
|
590 test(driveName==drive0); |
|
591 r=TheFs.GetDriveName(4,driveName); |
|
592 test(r==KErrNone); |
|
593 test(driveName==drive4); |
|
594 r=TheFs.GetDriveName(17,driveName); |
|
595 test(r==KErrNone); |
|
596 test(driveName==drive17); |
|
597 r=TheFs.GetDriveName(25,driveName); |
|
598 test(r==KErrNone); |
|
599 test(driveName==drive25); |
|
600 |
|
601 drive0=_L("askdjflsdfourewoqiuroiuaksjdvx,cvsdhwjhjhalsjhfshfkjhslj"); |
|
602 r=TheFs.SetDriveName(0,drive0); |
|
603 test(r==KErrNone); |
|
604 r=TheFs.GetDriveName(0,driveName); |
|
605 test(r==KErrNone); |
|
606 test(driveName==drive0); |
|
607 |
|
608 // Test with illegal characters in drive name |
|
609 drive0=_L("Dil>bert"); |
|
610 drive4=_L("Dog?bert"); |
|
611 drive17=_L("Fli*bble"); |
|
612 drive25=_L("RAMD//RIVE"); |
|
613 |
|
614 r=TheFs.SetDriveName(0,drive0); |
|
615 test(r==KErrBadName); |
|
616 r=TheFs.SetDriveName(4,drive4); |
|
617 test(r==KErrBadName); |
|
618 r=TheFs.SetDriveName(17,drive17); |
|
619 test(r==KErrBadName); |
|
620 r=TheFs.SetDriveName(25,drive25); |
|
621 test(r==KErrBadName); |
|
622 |
|
623 // Test that it is OK to set the name to no characters |
|
624 |
|
625 drive0=_L(""); |
|
626 drive4=_L(""); |
|
627 drive17=_L(""); |
|
628 drive25=_L(""); |
|
629 |
|
630 r=TheFs.SetDriveName(0,drive0); |
|
631 test(r==KErrNone); |
|
632 r=TheFs.SetDriveName(4,drive4); |
|
633 test(r==KErrNone); |
|
634 r=TheFs.SetDriveName(17,drive17); |
|
635 test(r==KErrNone); |
|
636 r=TheFs.SetDriveName(25,drive25); |
|
637 test(r==KErrNone); |
|
638 |
|
639 r=TheFs.GetDriveName(0,driveName); |
|
640 test(r==KErrNone); |
|
641 test(driveName==drive0); |
|
642 r=TheFs.GetDriveName(4,driveName); |
|
643 test(r==KErrNone); |
|
644 test(driveName==drive4); |
|
645 r=TheFs.GetDriveName(17,driveName); |
|
646 test(r==KErrNone); |
|
647 test(driveName==drive17); |
|
648 r=TheFs.GetDriveName(25,driveName); |
|
649 test(r==KErrNone); |
|
650 test(driveName==drive25); |
|
651 |
|
652 |
|
653 } |
|
654 |
|
655 LOCAL_C void Test11() |
|
656 // |
|
657 // Miscellaneous tests |
|
658 // |
|
659 { |
|
660 |
|
661 test.Next(_L("Miscellaneous tests")); |
|
662 TVolumeInfo vol; |
|
663 TInt r=TheFs.Volume(vol); |
|
664 test.Printf(_L("VolumeName = %S\n"),&vol.iName); |
|
665 test(r==KErrNone); |
|
666 r=TheFs.RmDir(_L("\\asdfasdf.\\")); |
|
667 test(r==KErrBadName); |
|
668 r=TheFs.MkDir(_L("\\asdfasdf.\\")); |
|
669 test(r==KErrBadName); |
|
670 } |
|
671 |
|
672 LOCAL_C void Test12() |
|
673 // |
|
674 // Test SetNotifyUser and GetNotifyUser |
|
675 // |
|
676 { |
|
677 |
|
678 test.Next(_L("Test Set and GetNotifyUser")); |
|
679 TBool notifyState=TheFs.GetNotifyUser(); |
|
680 test(notifyState); |
|
681 notifyState=EFalse; |
|
682 TheFs.SetNotifyUser(notifyState); |
|
683 notifyState=TheFs.GetNotifyUser(); |
|
684 test(notifyState==EFalse); |
|
685 notifyState=ETrue; |
|
686 TheFs.SetNotifyUser(notifyState); |
|
687 notifyState=TheFs.GetNotifyUser(); |
|
688 test(notifyState); |
|
689 } |
|
690 |
|
691 LOCAL_C void Test13() |
|
692 // |
|
693 // Test return values from RFs::Volume on cf-cards |
|
694 // |
|
695 { |
|
696 |
|
697 test.Next(_L("Test RFs::Volume")); |
|
698 TVolumeInfo vol; |
|
699 TInt r=TheFs.Volume(vol,EDriveB); |
|
700 test(r==KErrNotReady || r==KErrNone || KErrPathNotFound); |
|
701 test.Printf(_L("RFs::Volume EDriveB returned %d\n"),r); |
|
702 |
|
703 r=TheFs.Volume(vol,EDriveC); |
|
704 test(r==KErrNotReady || r==KErrNone || KErrPathNotFound); |
|
705 test.Printf(_L("RFs::Volume EDriveC returned %d\n"),r); |
|
706 |
|
707 r=TheFs.Volume(vol,EDriveD); |
|
708 test(r==KErrNotReady || r==KErrNone || KErrPathNotFound); |
|
709 test.Printf(_L("RFs::Volume EDriveD returned %d\n"),r); |
|
710 |
|
711 r=TheFs.Volume(vol,EDriveE); |
|
712 test(r==KErrNotReady || r==KErrNone || KErrPathNotFound); |
|
713 test.Printf(_L("RFs::Volume EDriveE returned %d\n"),r); |
|
714 |
|
715 r=TheFs.Volume(vol,EDriveF); |
|
716 test(r==KErrNotReady || r==KErrNone || KErrPathNotFound); |
|
717 test.Printf(_L("RFs::Volume EDriveF returned %d\n"),r); |
|
718 } |
|
719 |
|
720 |
|
721 void DoTest14(TInt aDrvNum); |
|
722 TInt CreateStuffedFile(RFs& aFs, const TDesC& aFileName, TUint aFileSize); |
|
723 TInt CreateEmptyFile(RFs& aFs, const TDesC& aFileName, TUint aFileSize); |
|
724 TBool CheckFileContents(RFs& aFs, const TDesC& aFileName); |
|
725 TBool CheckBufferContents(const TDesC8& aBuffer, TUint aPrintBaseAddr=0); |
|
726 |
|
727 /** |
|
728 Testing unallocated data initialization vulnerability in RFile |
|
729 This test is performed on RAM drives and non-removable media that supports DeleteNotify (KMediaAttDeleteNotify flag) |
|
730 e.g. XSR NAND |
|
731 */ |
|
732 LOCAL_C void Test14() |
|
733 { |
|
734 TInt nRes; |
|
735 |
|
736 test.Next(_L("Testing unallocated data initialization vulnerability in RFile")); |
|
737 |
|
738 TDriveList driveList; |
|
739 TDriveInfo driveInfo; |
|
740 |
|
741 //-- 1. get drives list |
|
742 nRes=TheFs.DriveList(driveList); |
|
743 test(nRes == KErrNone); |
|
744 |
|
745 //-- 2. walk through all drives, performing the test only on suitable ones |
|
746 for (TInt drvNum=0; drvNum<KMaxDrives; ++drvNum) |
|
747 { |
|
748 if(!driveList[drvNum]) |
|
749 continue; //-- skip unexisting drive |
|
750 |
|
751 //-- get drive info |
|
752 test(TheFs.Drive(driveInfo, drvNum) == KErrNone); |
|
753 |
|
754 //-- select a suitable drive for the testing. It shall be RAM drive, of FLASH but not removable |
|
755 //-- and not read only, if it is FLASH, it shall support "Delete Notify" facility |
|
756 switch(driveInfo.iType) |
|
757 { |
|
758 //-- RAM drive, OK |
|
759 case EMediaRam: |
|
760 break; |
|
761 |
|
762 //-- FLASH drive, OK |
|
763 case EMediaFlash: |
|
764 case EMediaNANDFlash: |
|
765 if(driveInfo.iMediaAtt & KMediaAttDeleteNotify) |
|
766 break; //-- this type of media shall support DeleteNotify flag, otherwise this test is inconsistent |
|
767 else continue; |
|
768 |
|
769 //break; //unreacable |
|
770 |
|
771 default: |
|
772 continue; |
|
773 }//switch(driveInfo.iType) |
|
774 |
|
775 if (driveInfo.iDriveAtt & KDriveAttSubsted) |
|
776 { |
|
777 // skip subst drives. |
|
778 continue; |
|
779 } |
|
780 |
|
781 TBool readOnly = driveInfo.iMediaAtt & KMediaAttWriteProtected; |
|
782 if(readOnly) |
|
783 continue; //-- nothing to do, can't create any file etc. |
|
784 |
|
785 //-- skip test on the emulator's C: drive, doesn't make any sense because |
|
786 //-- in this case we deal with WIN32 API and filesystem. |
|
787 #ifdef __WINS__ |
|
788 if(drvNum == 2) |
|
789 { |
|
790 test.Printf(_L("Skipping test on emulator's C: drive\n")); |
|
791 continue; |
|
792 } |
|
793 #endif |
|
794 |
|
795 DoTest14(drvNum); |
|
796 |
|
797 }// for (TInt drvNum=0; ... |
|
798 |
|
799 } |
|
800 |
|
801 //-------------------------------------------------------- |
|
802 |
|
803 /** |
|
804 Actually perform the test on a drive aDrvNum. |
|
805 @param aDrvNum drive number |
|
806 */ |
|
807 void DoTest14(TInt aDrvNum) |
|
808 { |
|
809 |
|
810 TFileName fileName; |
|
811 fileName.Format(_L("Testing drive %c:"), 'A'+aDrvNum); |
|
812 test.Next(fileName); |
|
813 |
|
814 const TInt KFileSize = 0x1000; //-- size of the files t be created |
|
815 TInt nRes; |
|
816 |
|
817 fileName.Format(_L("%c:\\TestFile.bin"), aDrvNum+'A'); |
|
818 TheFs.Delete(fileName); //-- just in case |
|
819 |
|
820 //============================== |
|
821 //== Scenario 1. |
|
822 //== Create an empty file; AllocateSingleClusterL, ExtendClusterListL will be involved. |
|
823 //== Check that the file doesn't contain any meaningful information |
|
824 //============================== |
|
825 test.Printf(_L("Testing scenario 1\n")); |
|
826 |
|
827 //-- 1. create an empty file |
|
828 nRes = CreateEmptyFile(TheFs, fileName, KFileSize); |
|
829 test(nRes == KErrNone); |
|
830 |
|
831 //-- 1.1 check that this file doesn't contain illegitimate information. |
|
832 nRes = CheckFileContents(TheFs, fileName); |
|
833 test(nRes == KErrNone); |
|
834 |
|
835 //-- 1.2 delete the empty file |
|
836 nRes = TheFs.Delete(fileName); |
|
837 test(nRes == KErrNone); |
|
838 |
|
839 //============================== |
|
840 //== Scenario 2. |
|
841 //== Create file, filling it with some pattern. |
|
842 //== Delete this file, FreeClusterListL() will be involved. |
|
843 //== Create an empty file supposedly of the place of just deleted one |
|
844 //== Check that the file doesn't contain any meaningful information |
|
845 //============================== |
|
846 test.Printf(_L("Testing scenario 2\n")); |
|
847 |
|
848 //-- 2. create file filled with some data pattern |
|
849 nRes = CreateStuffedFile(TheFs, fileName, KFileSize); |
|
850 test(nRes == KErrNone); |
|
851 |
|
852 //-- 2.1 delete this file |
|
853 TheFs.Delete(fileName); |
|
854 |
|
855 //-- 2.1 create an empty file on the place of just deleted one (hopefully) |
|
856 nRes = CreateEmptyFile(TheFs, fileName, KFileSize); |
|
857 test(nRes == KErrNone); |
|
858 |
|
859 //-- 2.2 check that this file doesn't contain illegitimate information. |
|
860 nRes = CheckFileContents(TheFs, fileName); |
|
861 test(nRes == KErrNone); |
|
862 |
|
863 //-- 2.3 delete this file |
|
864 TheFs.Delete(fileName); |
|
865 |
|
866 } |
|
867 |
|
868 LOCAL_C void Test15() |
|
869 // |
|
870 // Test IsValidName |
|
871 // |
|
872 { |
|
873 test.Next(_L("Test RFs::IsValidName(TDesC& ,RFs::TNameValidParam& )")); |
|
874 TBool useDefaultSessionPath = EFalse; |
|
875 //tests under this loop are run twice |
|
876 //first, when the sessionPath is not used. |
|
877 //second, when the sessionPath is used. |
|
878 for(TInt i = 0; i<2; i++) |
|
879 { |
|
880 RFs::TNameValidParam param(useDefaultSessionPath); |
|
881 test(TheFs.IsValidName(_L("*"),param)==EFalse); |
|
882 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
883 test(param.InvalidCharPos() == 1); |
|
884 |
|
885 test(TheFs.IsValidName(_L("?"),param)==EFalse); |
|
886 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
887 test(param.InvalidCharPos() == 1); |
|
888 |
|
889 test(TheFs.IsValidName(_L(">"),param)==EFalse); |
|
890 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
891 test(param.InvalidCharPos() == 1); |
|
892 |
|
893 test(TheFs.IsValidName(_L("<"),param)==EFalse); |
|
894 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
895 test(param.InvalidCharPos() == 1); |
|
896 |
|
897 test(TheFs.IsValidName(_L(":"),param)==EFalse); |
|
898 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
899 test(param.InvalidCharPos() == 1); |
|
900 |
|
901 test(TheFs.IsValidName(_L("\""),param)==EFalse); |
|
902 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
903 test(param.InvalidCharPos() == 1); |
|
904 |
|
905 test(TheFs.IsValidName(_L("/"),param)==EFalse); |
|
906 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
907 test(param.InvalidCharPos() == 1); |
|
908 |
|
909 test(TheFs.IsValidName(_L("|"),param)==EFalse); |
|
910 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
911 test(param.InvalidCharPos() == 1); |
|
912 |
|
913 test(TheFs.IsValidName(_L("xx*yy"),param)==EFalse); |
|
914 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
915 test(param.InvalidCharPos() == 3); |
|
916 |
|
917 test(TheFs.IsValidName(_L("xx?yy"),param)==EFalse); |
|
918 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
919 test(param.InvalidCharPos() == 3); |
|
920 |
|
921 test(TheFs.IsValidName(_L("xx>yy"),param)==EFalse); |
|
922 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
923 test(param.InvalidCharPos() == 3); |
|
924 |
|
925 test(TheFs.IsValidName(_L("xx<yy"),param)==EFalse); |
|
926 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
927 test(param.InvalidCharPos() == 3); |
|
928 |
|
929 test(TheFs.IsValidName(_L("xx:yy"),param)==EFalse); |
|
930 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
931 test(param.InvalidCharPos() == 3); |
|
932 |
|
933 test(TheFs.IsValidName(_L("xx\"yy"),param)==EFalse); |
|
934 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
935 test(param.InvalidCharPos() == 3); |
|
936 |
|
937 test(TheFs.IsValidName(_L("xx/yy"),param)==EFalse); |
|
938 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
939 test(param.InvalidCharPos() == 3); |
|
940 |
|
941 test(TheFs.IsValidName(_L("xx|yy"),param)==EFalse); |
|
942 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
943 test(param.InvalidCharPos() == 3); |
|
944 |
|
945 test(TheFs.IsValidName(_L("C:\\*\\group\\release.txt"),param)==EFalse); |
|
946 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
947 test(param.InvalidCharPos() == 4); |
|
948 |
|
949 test(TheFs.IsValidName(_L("C:\\?\\group\\release.txt"),param)==EFalse); |
|
950 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
951 test(param.InvalidCharPos() == 4); |
|
952 |
|
953 test(TheFs.IsValidName(_L("C:\\..\\group\\release.txt"),param)==EFalse); |
|
954 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
955 test(param.InvalidCharPos() == 4); |
|
956 |
|
957 test(TheFs.IsValidName(_L("C:\\.\\group\\release.txt"),param)==EFalse); |
|
958 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
959 test(param.InvalidCharPos() == 4); |
|
960 |
|
961 test(TheFs.IsValidName(_L("C:\\>\\group\\release.txt"),param)==EFalse); |
|
962 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
963 test(param.InvalidCharPos() == 4); |
|
964 |
|
965 test(TheFs.IsValidName(_L("C:\\<\\group\\release.txt"),param)==EFalse); |
|
966 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
967 test(param.InvalidCharPos() == 4); |
|
968 |
|
969 test(TheFs.IsValidName(_L("C:\\HelloWorld\\:\\group\\release.txt"),param)==EFalse); |
|
970 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
971 test(param.InvalidCharPos() == 15); |
|
972 |
|
973 test(TheFs.IsValidName(_L("C::\\group\\release.txt"),param)==EFalse); |
|
974 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
975 test(param.InvalidCharPos() == 3); |
|
976 |
|
977 test(TheFs.IsValidName(_L(">\\group\\release.txt"),param)==EFalse); |
|
978 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
979 test(param.InvalidCharPos() == 1); |
|
980 |
|
981 test(TheFs.IsValidName(_L("C|group\\release.txt"),param)==EFalse); |
|
982 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
983 test(param.InvalidCharPos() == 2); |
|
984 |
|
985 test(TheFs.IsValidName(_L("C\\|\\group\\release.txt"),param)==EFalse); |
|
986 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
987 test(param.InvalidCharPos() == 3); |
|
988 |
|
989 test(TheFs.IsValidName(_L("\\>"),param)==EFalse); |
|
990 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
991 test(param.InvalidCharPos() == 2); |
|
992 |
|
993 test(TheFs.IsValidName(_L("C:\\|group\\release.txt"),param)==EFalse); |
|
994 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
995 test(param.InvalidCharPos() == 4); |
|
996 |
|
997 test(TheFs.IsValidName(_L("C:\\\"\\group\\release.txt"),param)==EFalse); |
|
998 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
999 test(param.InvalidCharPos() == 4); |
|
1000 |
|
1001 test(TheFs.IsValidName(_L("C:\\/\\group\\release.txt"),param)==EFalse); |
|
1002 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1003 test(param.InvalidCharPos() == 4); |
|
1004 |
|
1005 test(TheFs.IsValidName(_L("C:\\|\\group\\release.txt"),param)==EFalse); |
|
1006 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1007 test(param.InvalidCharPos() == 4); |
|
1008 |
|
1009 test(TheFs.IsValidName(_L("C:\\ \\group\\release.txt"),param)==EFalse);//intermediate directory names cannot be blank |
|
1010 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadName); |
|
1011 |
|
1012 // Test that \ is not allowed in filenames |
|
1013 TFileName filename; |
|
1014 filename=_L("C:\\HelloWorld\\\\\\group\\release.txt"); |
|
1015 |
|
1016 test(TheFs.IsValidName(filename,param)==EFalse); |
|
1017 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1018 test(param.InvalidCharPos() == 22); |
|
1019 |
|
1020 filename=_L("C:\\\\\\group\\release.txt"); |
|
1021 test(TheFs.IsValidName(filename,param)==EFalse); |
|
1022 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1023 test(param.InvalidCharPos() == 11); |
|
1024 |
|
1025 filename=_L("C:\\Hello World\\group\\release.txt"); |
|
1026 filename[8]=KPathDelimiter; |
|
1027 test(TheFs.IsValidName(filename,param)); |
|
1028 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1029 |
|
1030 filename=_L("C:\\HelloWorld\\::\\group\\release.txt"); |
|
1031 test(TheFs.IsValidName(filename,param)==EFalse); |
|
1032 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1033 test(param.InvalidCharPos() == 16); |
|
1034 |
|
1035 filename=_L("C:\\>>\\group\\release.txt"); |
|
1036 test(TheFs.IsValidName(filename,param)==EFalse); |
|
1037 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1038 test(param.InvalidCharPos() == 5); |
|
1039 |
|
1040 test(TheFs.IsValidName(_L(""),param)==EFalse); // Must be a name |
|
1041 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadName); |
|
1042 |
|
1043 test(TheFs.IsValidName(_L(".ext"),param)); |
|
1044 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1045 |
|
1046 test(TheFs.IsValidName(_L("C:\\asdf.blarg"),param)); |
|
1047 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1048 |
|
1049 test(TheFs.IsValidName(_L("C:\\asdf..blarg"),param)); |
|
1050 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1051 |
|
1052 // Test multiple evil characters - parsing occurs from right to left |
|
1053 // except that wildcarded characters take priority and are picked out first |
|
1054 |
|
1055 test(TheFs.IsValidName(_L("abc>def|ghi?jkl:mno<pqr*stu"),param)==EFalse); |
|
1056 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1057 test(param.InvalidCharPos() == 24); |
|
1058 |
|
1059 test(TheFs.IsValidName(_L("abc>def|ghi<jkl:mno?pqr"),param)==EFalse); |
|
1060 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1061 test(param.InvalidCharPos() == 20); |
|
1062 |
|
1063 test(TheFs.IsValidName(_L("abc>def|ghi<jkl:mno"),param)==EFalse); |
|
1064 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1065 test(param.InvalidCharPos() == 16); |
|
1066 |
|
1067 test(TheFs.IsValidName(_L("abc>def|ghi<jkl:mno"),param)==EFalse); |
|
1068 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1069 test(param.InvalidCharPos() == 16); |
|
1070 |
|
1071 test(TheFs.IsValidName(_L("abc>def|ghi<jkl"),param)==EFalse); |
|
1072 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1073 test(param.InvalidCharPos() == 12); |
|
1074 |
|
1075 test(TheFs.IsValidName(_L("abc>def|ghi<jkl"),param)==EFalse); |
|
1076 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1077 test(param.InvalidCharPos() == 12); |
|
1078 |
|
1079 test(TheFs.IsValidName(_L("abc>def|ghi"),param)==EFalse); |
|
1080 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1081 test(param.InvalidCharPos() == 8); |
|
1082 |
|
1083 test(TheFs.IsValidName(_L("abc>def|ghi"),param)==EFalse); |
|
1084 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1085 test(param.InvalidCharPos() == 8); |
|
1086 |
|
1087 test(TheFs.IsValidName(_L("abc>def"),param)==EFalse); |
|
1088 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1089 test(param.InvalidCharPos() == 4); |
|
1090 |
|
1091 test(TheFs.IsValidName(_L("abc>def"),param)==EFalse); |
|
1092 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1093 test(param.InvalidCharPos() == 4); |
|
1094 |
|
1095 test(!TheFs.IsValidName(_L("C:\\v123456.."),param)); |
|
1096 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1097 test(param.InvalidCharPos() == 11); |
|
1098 |
|
1099 test(!TheFs.IsValidName(_L("C:\\v123456.."),param)); |
|
1100 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter); |
|
1101 test(param.InvalidCharPos() == 11); |
|
1102 |
|
1103 test(TheFs.IsValidName(_L("abc"),param)); // Valid name |
|
1104 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1105 |
|
1106 test(TheFs.IsValidName(_L("abc"),param)); // Valid name |
|
1107 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1108 |
|
1109 test(TheFs.IsValidName(_L("as(){}@~#;!\xA3$%^&()df.blarg"),param)); // Valid name |
|
1110 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1111 |
|
1112 test(TheFs.IsValidName(_L("as(){}@~#;!\xA3$%^&()df.blarg"),param)); // Valid name |
|
1113 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1114 |
|
1115 test(TheFs.IsValidName(_L("C:\\asdf.blarg\\asdf.blarg"),param)); // Valid name |
|
1116 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1117 |
|
1118 test(TheFs.IsValidName(_L("C:\\asdf.blarg\\asdf.blarg"),param)); // Valid name |
|
1119 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1120 |
|
1121 test(TheFs.IsValidName(_L("\'"),param)); // Valid name |
|
1122 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1123 |
|
1124 test(TheFs.IsValidName(_L("\'"),param)); // Valid name |
|
1125 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1126 |
|
1127 //testing directory names |
|
1128 test(TheFs.IsValidName(_L("\\"),param)); |
|
1129 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); // Valid Name |
|
1130 |
|
1131 test(TheFs.IsValidName(_L("C:\\asdf.blarg\\"),param)); |
|
1132 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); // Valid Name |
|
1133 |
|
1134 |
|
1135 test(TheFs.IsValidName(_L("C:\\asdf..blarg\\"),param)); |
|
1136 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); // Valid Name |
|
1137 |
|
1138 test(TheFs.IsValidName(_L("file1.txt\\\\"),param) == EFalse); |
|
1139 test(param.ErrorCode() == RFs::TNameValidParam::ErrBadName); |
|
1140 |
|
1141 // test name which exceeds KMaxFileName only on prepending the session path |
|
1142 _LIT(KNameLength250, "AAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAA"); |
|
1143 if(useDefaultSessionPath) |
|
1144 { |
|
1145 test(TheFs.IsValidName(KNameLength250, param)==EFalse); |
|
1146 test(param.ErrorCode() == RFs::TNameValidParam::ErrNameTooLong); |
|
1147 break; |
|
1148 } |
|
1149 else |
|
1150 { |
|
1151 test(TheFs.IsValidName(KNameLength250, param)); |
|
1152 test(param.ErrorCode() == RFs::TNameValidParam::ErrNone); |
|
1153 } |
|
1154 useDefaultSessionPath = ETrue; |
|
1155 } |
|
1156 } |
|
1157 |
|
1158 |
|
1159 |
|
1160 void TestGetMediaSerialNumber() |
|
1161 { |
|
1162 test.Next(_L("Test RFs::GetMediaSerialNumber")); |
|
1163 TInt theDrive; |
|
1164 TInt r = TheFs.CharToDrive(gDriveToTest,theDrive); |
|
1165 test(r == KErrNone); |
|
1166 TMediaSerialNumber serNum; |
|
1167 r = TheFs.GetMediaSerialNumber(serNum, theDrive); |
|
1168 if (r) test.Printf(_L("RFs::GetMediaSerialNumber returned error %d"), r); |
|
1169 test(r == KErrNotSupported || r == KErrNotReady || r == KErrNone); |
|
1170 if (r == KErrNotSupported) |
|
1171 { |
|
1172 test.Printf(_L("MediaSerialNumber: Not Supported\n")); |
|
1173 } |
|
1174 else |
|
1175 { |
|
1176 test.Printf(_L("MediaSerialNumber: length=%d\n"), serNum.Length()); |
|
1177 TBuf<20> str; |
|
1178 _LIT(KNumberString, "%02X"); |
|
1179 _LIT(KNewLine, "\n"); |
|
1180 TInt i; |
|
1181 for (i = 0; i < serNum.Length(); i++) |
|
1182 { |
|
1183 str.AppendFormat(KNumberString, serNum[i]); |
|
1184 if (i%8 == 7) |
|
1185 { |
|
1186 str.Append(KNewLine); |
|
1187 test.Printf(_L("%S"), &str); |
|
1188 str.SetLength(0); |
|
1189 } |
|
1190 } |
|
1191 if (i%8 != 7) |
|
1192 { |
|
1193 test.Printf(KNewLine); |
|
1194 } |
|
1195 } |
|
1196 } |
|
1197 |
|
1198 |
|
1199 //-------------------------------------------------------- |
|
1200 |
|
1201 /** |
|
1202 Create an empty file of specified size. |
|
1203 @param aFs ref. to the FS |
|
1204 @param aFileName name of the file |
|
1205 @param aFileSize size of the file to be created |
|
1206 @return KErrNone on success, system-wide error code otherwise |
|
1207 */ |
|
1208 TInt CreateEmptyFile(RFs& aFs, const TDesC& aFileName, TUint aFileSize) |
|
1209 { |
|
1210 RFile file; |
|
1211 TInt nRes; |
|
1212 |
|
1213 nRes = file.Create(aFs, aFileName, EFileRead|EFileWrite); |
|
1214 if(nRes != KErrNone) |
|
1215 return nRes; |
|
1216 |
|
1217 nRes = file.SetSize(aFileSize); |
|
1218 if(nRes != KErrNone) |
|
1219 return nRes; |
|
1220 |
|
1221 file.Close(); |
|
1222 |
|
1223 return KErrNone; |
|
1224 } |
|
1225 |
|
1226 //-------------------------------------------------------- |
|
1227 |
|
1228 /** |
|
1229 Create a file of specified size filled with some data pattern. |
|
1230 @param aFs ref. to the FS |
|
1231 @param aFileName name of the file |
|
1232 @param aFileSize size of the file to be created |
|
1233 @return KErrNone on success, system-wide error code otherwise |
|
1234 */ |
|
1235 TInt CreateStuffedFile(RFs& aFs, const TDesC& aFileName, TUint aFileSize) |
|
1236 { |
|
1237 TInt nRes; |
|
1238 RFile file; |
|
1239 |
|
1240 //-- create a buffer with some data |
|
1241 const TUint KBufLength = 0x100; |
|
1242 TBuf8<KBufLength> buffer; |
|
1243 buffer.SetLength(KBufLength); |
|
1244 |
|
1245 TUint i; |
|
1246 |
|
1247 for(i = 0; i < KBufLength; i++) |
|
1248 buffer[i] = static_cast<TUint8> (i) ; |
|
1249 |
|
1250 //-- create a file |
|
1251 nRes = file.Create(aFs, aFileName, EFileRead|EFileWrite); |
|
1252 if(nRes != KErrNone) |
|
1253 return nRes; |
|
1254 |
|
1255 const TUint n1 = aFileSize / KBufLength; |
|
1256 const TUint n2 = aFileSize % KBufLength; |
|
1257 |
|
1258 //-- fill the file with the data from buffer |
|
1259 for(i=0; i<n1; ++i) |
|
1260 { |
|
1261 nRes = file.Write(buffer); |
|
1262 if(nRes != KErrNone) |
|
1263 return nRes; |
|
1264 } |
|
1265 |
|
1266 if(n2) |
|
1267 { |
|
1268 nRes = file.Write(buffer, n2); //-- write the rest of the data |
|
1269 if(nRes != KErrNone) |
|
1270 return nRes; |
|
1271 } |
|
1272 |
|
1273 file.Close(); |
|
1274 |
|
1275 return KErrNone; |
|
1276 } |
|
1277 |
|
1278 //-------------------------------------------------------- |
|
1279 |
|
1280 /** |
|
1281 Check if the specified file contains illegitimate information i.e. something different from 0x00, 0xff, 0x03, 0xcc |
|
1282 |
|
1283 @param aFs ref. to the FS |
|
1284 @param aFileName name of the file |
|
1285 @return KErrNone on success, KErrCorrupt otherwise |
|
1286 */ |
|
1287 TInt CheckFileContents(RFs& aFs, const TDesC& aFileName) |
|
1288 { |
|
1289 TInt nRes = KErrNone; |
|
1290 RFile file; |
|
1291 |
|
1292 const TInt KBufLength = 0x100; |
|
1293 TBuf8<KBufLength> buffer; |
|
1294 buffer.SetLength(0); |
|
1295 |
|
1296 //-- open the file |
|
1297 nRes = file.Open(aFs, aFileName, EFileRead); |
|
1298 test(nRes == KErrNone); |
|
1299 |
|
1300 //-- check file contents |
|
1301 TUint nFilePos=0; |
|
1302 for(;;) |
|
1303 { |
|
1304 //-- read data from the file into the buffer |
|
1305 nRes = file.Read(buffer); |
|
1306 test(nRes == KErrNone); |
|
1307 |
|
1308 if(buffer.Length() == 0) |
|
1309 { |
|
1310 nRes = KErrNone; //-- read all the file, no illegitimate information found |
|
1311 break; //EOF |
|
1312 } |
|
1313 |
|
1314 //-- check if the buffer contains only allowed data (RAM page initialisation data, etc. e.g. 0x00, 0xff, 0x03, 0xcc) |
|
1315 if(!CheckBufferContents(buffer, nFilePos)) |
|
1316 { |
|
1317 test.Printf(_L("\nCheckFileContents failed ! The file contains illegitimate information!\n")); |
|
1318 nRes = KErrCorrupt; //-- indicate that the read buffer contains illegitimate information |
|
1319 break; //-- comment this out if you need a full dump of the file |
|
1320 } |
|
1321 |
|
1322 nFilePos+=buffer.Length(); |
|
1323 } |
|
1324 |
|
1325 file.Close(); |
|
1326 return nRes; |
|
1327 } |
|
1328 |
|
1329 //-------------------------------------------------------- |
|
1330 |
|
1331 /** |
|
1332 Check if the buffer contains illegitimate information i.e. something different from 0x00, 0xff, 0x03, 0xcc |
|
1333 |
|
1334 @param aBuffer buffer descriptor to check |
|
1335 @param aPrintBaseAddr dump base address, used for dumping buffer only |
|
1336 @return ETrue on success |
|
1337 */ |
|
1338 TBool CheckBufferContents(const TDesC8& aBuffer, TUint aPrintBaseAddr/*=0*/) |
|
1339 { |
|
1340 TBool bRes = ETrue; |
|
1341 |
|
1342 //-- check if the buffer filled with allowable data (RAM page initialisation data or something similar) |
|
1343 //-- but not something meaningful. |
|
1344 //-- allowable bytes: 0x00, 0x03, 0xff, 0xcc |
|
1345 for(TInt i=0; i<aBuffer.Size(); ++i) |
|
1346 { |
|
1347 TUint8 byte = aBuffer[i]; |
|
1348 if(byte != 0x00 && byte != 0x03 && byte != 0xff && byte != 0xcc ) |
|
1349 { |
|
1350 bRes = EFalse; |
|
1351 break; |
|
1352 } |
|
1353 } |
|
1354 |
|
1355 //-- dump the buffer if it contains anything different than allowed data |
|
1356 if (!bRes) |
|
1357 { |
|
1358 for (TInt n=0; n<aBuffer.Size(); ) |
|
1359 { |
|
1360 TBuf16<3> byteBuffer; |
|
1361 TBuf16<256> lineBuffer; |
|
1362 lineBuffer.Format(_L("%08X: "), aPrintBaseAddr+n); |
|
1363 for (TInt m=0; m<16 && n<aBuffer.Size(); m++, n++) |
|
1364 { |
|
1365 byteBuffer.Format(_L("%02X "), aBuffer[n]); |
|
1366 lineBuffer.Append(byteBuffer); |
|
1367 } |
|
1368 test.Printf(lineBuffer); |
|
1369 } |
|
1370 } |
|
1371 |
|
1372 return bRes; |
|
1373 } |
|
1374 |
|
1375 |
|
1376 GLDEF_C void CallTestsL() |
|
1377 // |
|
1378 // Call tests that may leave |
|
1379 // |
|
1380 { |
|
1381 |
|
1382 Test1(); |
|
1383 Test2(); |
|
1384 Test3(); |
|
1385 Test4(); |
|
1386 Test5(); |
|
1387 Test6(); |
|
1388 Test7(); |
|
1389 Test8(); |
|
1390 Test9(); |
|
1391 Test10(); |
|
1392 Test11(); |
|
1393 Test12(); |
|
1394 Test13(); |
|
1395 Test14(); |
|
1396 Test15(); |
|
1397 TestGetMediaSerialNumber(); |
|
1398 } |