KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > methodhead > res > FileManagerTest


1 /*
2  * Copyright (C) 2006 Methodhead Software LLC. All rights reserved.
3  *
4  * This file is part of TransferCM.
5  *
6  * TransferCM is free software; you can redistribute it and/or modify it under the
7  * terms of the GNU General Public License as published by the Free Software
8  * Foundation; either version 2 of the License, or (at your option) any later
9  * version.
10  *
11  * TransferCM is distributed in the hope that it will be useful, but WITHOUT ANY
12  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14  * details.
15  *
16  * You should have received a copy of the GNU General Public License along with
17  * TransferCM; if not, write to the Free Software Foundation, Inc., 51 Franklin St,
18  * Fifth Floor, Boston, MA 02110-1301 USA
19  */

20
21 package com.methodhead.res;
22
23 import java.util.*;
24 import java.sql.*;
25 import java.io.*;
26 import junit.framework.*;
27 import org.apache.log4j.*;
28 import org.apache.commons.io.*;
29 import com.methodhead.persistable.*;
30 import com.methodhead.test.*;
31
32 public class FileManagerTest extends TestCase {
33
34   private File testDir_ = null;
35   private File testDir1_ = null;
36   private File testDir2_ = null;
37   private File testDir3_ = null;
38   private File testFile1_ = null;
39   private File testFile2_ = null;
40   private File testFile3_ = null;
41   private File testFile4_ = null;
42
43   private FileManager fileManager = null;
44   private File file = null;
45   private Directory directory = null;
46   private File[] files = null;
47   private String JavaDoc[] fileNames = null;
48   private Directory[] directories = null;
49   private List list = null;
50
51   static {
52     TestUtils.initLogger();
53     TestUtils.initDb();
54   }
55
56   public FileManagerTest( String JavaDoc name ) {
57     super( name );
58   }
59
60   private void setUpFileManager() throws IOException {
61
62     //
63
// delete testdir if it exists
64
//
65
testDir_ = new File( "build/testdir" );
66     if ( testDir_.exists() )
67       FileUtils.deleteDirectory( testDir_ );
68
69     //
70
// create testdir
71
//
72
testDir_.mkdir();
73
74     //
75
// build/
76
// testdir/
77
// testdir1/ (Dir1)
78
// testfile1.txt
79
// testfile2.txt
80
// testdir2/ (Dir2)
81
// testdir3/
82
// testfile3.txt
83
// testfile4.txt
84
//
85
testDir1_ = new File( "build/testdir/testdir1" );
86     testDir1_.mkdir();
87
88     testFile1_ = new File( "build/testdir/testdir1/testfile1.txt" );
89     testFile1_.createNewFile();
90
91     testFile2_ = new File( "build/testdir/testdir1/testfile2.txt" );
92     testFile2_.createNewFile();
93
94     testDir2_ = new File( "build/testdir/testdir2" );
95     testDir2_.mkdir();
96
97     testDir3_ = new File( "build/testdir/testdir2/testdir3" );
98     testDir3_.mkdir();
99
100     testFile3_ = new File( "build/testdir/testdir2/testdir3/testfile3.txt" );
101     testFile3_.createNewFile();
102
103     testFile4_ = new File( "build/testdir/testdir2/testfile4.txt" );
104     testFile4_.createNewFile();
105
106     fileManager = new FileManager();
107     fileManager.addDirectory( "Dir1", testDir1_ );
108     fileManager.addDirectory( "Dir2", testDir2_ );
109   }
110
111   protected void setUp() {
112     //setLogLevel( Level.DEBUG );
113
try {
114     }
115     catch ( Exception JavaDoc e ) {
116       fail( e.getMessage() );
117     }
118   }
119
120   protected void tearDown() {
121   }
122
123   public void testFileForPath() {
124     try {
125       setUpFileManager();
126
127       //
128
// should throw an exception if dir is invalid
129
//
130
try {
131         fileManager.getFileForPath( "Dir1/../../passwd" );
132         fail( "No exception thrown." );
133       }
134       catch ( ResException e ) {
135         // success
136
}
137
138       assertEquals( testDir1_, fileManager.getFileForPath( "Dir1" ) );
139       assertEquals( testDir3_, fileManager.getFileForPath( "Dir2/testdir3" ) );
140       assertNull( fileManager.getFileForPath( "BadDir" ) );
141       assertNull( fileManager.getFileForPath( "Dir2/baddir" ) );
142     }
143     catch ( Exception JavaDoc e ) {
144       e.printStackTrace();
145       fail();
146     }
147   }
148
149   public void testAddDirectory() {
150     try {
151       setUpFileManager();
152
153       //
154
// should throw an exception if dir is invalid
155
//
156
fileManager = new FileManager();
157
158       try {
159         fileManager.addDirectory( "TestDir", new File( "testdir/foo" ) );
160         fail( "No exception thrown." );
161       }
162       catch ( ResException e ) {
163         // success
164
}
165
166       try {
167         fileManager.addDirectory( "TestDir", testFile1_ );
168         fail( "No exception thrown." );
169       }
170       catch ( ResException e ) {
171         // success
172
}
173
174       //
175
// add a single valid dir
176
//
177
testDir1_.mkdir();
178       fileManager.addDirectory( "TestDir", testDir1_ );
179       assertEquals( 1, fileManager.directories_.keySet().size() );
180
181       directory = ( Directory )fileManager.directories_.get( "TestDir" );
182       assertNotNull( directory );
183       assertEquals( "TestDir", directory.getName() );
184       assertEquals( directory.getFile(), testDir1_ );
185
186       //
187
// add a directory with the same name
188
//
189
try {
190         fileManager.addDirectory( "TestDir", testDir2_ );
191         fail( "No exception thrown." );
192       }
193       catch ( ResException e ) {
194         // success
195
}
196
197       //
198
// add a directory with an empty name
199
//
200
fileManager.addDirectory( "", testDir2_ );
201       assertEquals( 2, fileManager.directories_.keySet().size() );
202
203       directory = ( Directory )fileManager.directories_.get( "" );
204       assertNotNull( directory );
205       assertEquals( "", directory.getName() );
206       assertEquals( directory.getFile(), testDir2_ );
207     }
208     catch ( Exception JavaDoc e ) {
209       e.printStackTrace();
210       fail();
211     }
212   }
213
214   public void testGetFile() {
215     try {
216       setUpFileManager();
217
218       //
219
// get a file in a root directory
220
//
221
file = fileManager.getFile( "Dir1", "testfile1.txt" );
222       assertEquals( testFile1_, file );
223
224       //
225
// get a file in a subdirectory
226
//
227
file = fileManager.getFile( "Dir2/testdir3", "testfile3.txt" );
228       assertEquals( testFile3_, file );
229
230       //
231
// get a directory
232
//
233
file = fileManager.getFile( "Dir2", "testdir3" );
234       assertEquals( testDir3_, file );
235
236       //
237
// get a non-existant file
238
//
239
file = fileManager.getFile( "Dir2/testdir3", "testfile4.txt" );
240       assertNull( file );
241
242       //
243
// get some files that aren't there
244
//
245
assertNull( fileManager.getFile( "BadDir", "testfile1.txt" ) );
246       assertNull( fileManager.getFile( "Dir1/BadDir", "testfile1.txt" ) );
247       assertNull( fileManager.getFile( "Dir1", "badfile.txt" ) );
248     }
249     catch ( Exception JavaDoc e ) {
250       e.printStackTrace();
251       fail();
252     }
253   }
254
255   public void testGetNewFile() {
256     try {
257       setUpFileManager();
258
259       //
260
// attempt to get an existing file as a new file
261
//
262
try {
263         file = fileManager.getNewFile( "Dir1", "testfile1.txt" );
264         fail( "No exception thrown" );
265       }
266       catch ( ResException e ) {}
267
268       //
269
// get a file in a top-level directory
270
//
271
file = fileManager.getNewFile( "Dir1", "testfile5.txt" );
272       assertNotNull( file );
273       assertTrue( !file.exists() );
274
275       //
276
// get a file in a subdirectory
277
//
278
file = fileManager.getNewFile( "Dir2/testdir3", "testfile6.txt" );
279       assertNotNull( file );
280       assertTrue( !file.exists() );
281     }
282     catch ( Exception JavaDoc e ) {
283       e.printStackTrace();
284       fail();
285     }
286   }
287
288   public void testGetFiles() {
289     try {
290       setUpFileManager();
291
292       //
293
// get files from a root dir
294
//
295
files = fileManager.getFiles( "Dir1" );
296       assertNotNull( files );
297       assertEquals( 2, files.length );
298       assertEquals( testFile1_, files[ 0 ] );
299       assertEquals( testFile2_, files[ 1 ] );
300
301       //
302
// get files from a subdirectory dir
303
//
304
files = fileManager.getFiles( "Dir2/testdir3" );
305       assertNotNull( files );
306       assertEquals( 1, files.length );
307       assertEquals( testFile3_, files[ 0 ] );
308
309       //
310
// get files from a non-existant dir
311
//
312
assertNull( fileManager.getFiles( "Dir2/testdir4" ) );
313       assertNull( fileManager.getFiles( "Dir3" ) );
314     }
315     catch ( Exception JavaDoc e ) {
316       e.printStackTrace();
317       fail();
318     }
319   }
320
321   public void testGetDirectories() {
322     try {
323       setUpFileManager();
324
325       //
326
// get directories
327
//
328
directories = fileManager.getDirectories();
329       assertEquals( 2, directories.length );
330
331       directory = directories[ 0 ];
332       assertNotNull( directory );
333       assertEquals( "Dir1", directory.getName() );
334       assertEquals( testDir1_, directory.getFile() );
335
336       directory = directories[ 1 ];
337       assertNotNull( directory );
338       assertEquals( "Dir2", directory.getName() );
339       assertEquals( testDir2_, directory.getFile() );
340     }
341     catch ( Exception JavaDoc e ) {
342       e.printStackTrace();
343       fail();
344     }
345   }
346
347   public void testIsDestSubdir() {
348     try {
349       setUpFileManager();
350
351       //
352
// set up a file manager
353
//
354
assertTrue( fileManager.isDestSubdir( "Dir1", new String JavaDoc[] { "subdir1" }, "Dir1/subdir1" ) );
355       assertTrue( fileManager.isDestSubdir( "Dir1", new String JavaDoc[] { "subdir1" }, "Dir1/subdir1/subdir2" ) );
356       assertTrue( !fileManager.isDestSubdir( "Dir1", new String JavaDoc[] { "subdir1" }, "Dir2/subdir1" ) );
357       assertTrue( !fileManager.isDestSubdir( "Dir1", new String JavaDoc[] { "subdir1" }, "Dir3" ) );
358     }
359     catch ( Exception JavaDoc e ) {
360       e.printStackTrace();
361       fail();
362     }
363   }
364
365   public void testCanOverwrite() {
366     try {
367       setUpFileManager();
368
369       //
370
// set up a file manager
371
//
372
assertTrue( fileManager.canOverwrite( null, true ) );
373       assertTrue( fileManager.canOverwrite( null, false ) );
374       assertTrue( !fileManager.canOverwrite( testDir1_, true ) );
375       assertTrue( !fileManager.canOverwrite( testDir1_, false ) );
376       assertTrue( fileManager.canOverwrite( testFile1_, false ) );
377       assertTrue( !fileManager.canOverwrite( testFile1_, true ) );
378
379       assertTrue( fileManager.canOverwrite( testFile1_, null ) );
380       assertTrue( fileManager.canOverwrite( testDir1_, null ) );
381       assertTrue( fileManager.canOverwrite( testFile1_, testFile2_ ) );
382       assertTrue( !fileManager.canOverwrite( testFile1_, testDir1_ ) );
383       assertTrue( !fileManager.canOverwrite( testDir1_, testDir2_ ) );
384       assertTrue( !fileManager.canOverwrite( testDir1_, testFile1_ ) );
385     }
386     catch ( Exception JavaDoc e ) {
387       e.printStackTrace();
388       fail();
389     }
390   }
391
392   public void testValidateMove() {
393     try {
394       setUpFileManager();
395
396       //
397
// create some duplicate files
398
//
399
File dupDir = new File( "build/testdir/testdir1/testdir3" );
400       dupDir.mkdir();
401
402       File dupFile2 = new File( "build/testdir/testdir1/testfile3.txt" );
403       dupFile2.mkdir();
404
405       //
406
// moving a single file
407
//
408
assertNull( fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt" }, "Dir2", "testfile1.txt" ) );
409       assertEquals( FileManager.VALIDATE_INVALIDDESTPATH, fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt" }, "Dir3", "testfile1.txt" ) );
410       assertEquals( FileManager.VALIDATE_INVALIDDESTPATH, fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt" }, "Dir3/../../etc", "testfile1.txt" ) );
411       assertEquals( FileManager.VALIDATE_INVALIDDESTPATH, fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt" }, "", "testfile1.txt" ) );
412       assertEquals( FileManager.VALIDATE_INVALIDDESTPATH, fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt" }, "Dir2/baddir", "testfile1.txt" ) );
413       assertEquals( FileManager.VALIDATE_SUBDIROFSELF, fileManager.validateMove( "Dir2", new String JavaDoc[] { "testdir3" }, "Dir2/testdir3", "testdir3" ) );
414       assertEquals( FileManager.VALIDATE_INVALIDDESTNAME, fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt" }, "Dir2", "" ) );
415       assertEquals( FileManager.VALIDATE_CANTOVERWRITE, fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt" }, "Dir2", "testdir3" ) );
416
417       //
418
// moving a set of files
419
//
420
assertNull( fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt", "testfile2.txt" }, "Dir2", "" ) );
421       assertEquals( FileManager.VALIDATE_INVALIDDESTPATH, fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt", "testfile2.txt" }, "Dir3", "" ) );
422       assertEquals( FileManager.VALIDATE_INVALIDDESTPATH, fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt", "testfile2.txt" }, "Dir3/../../etc", "testfile1.txt" ) );
423       assertEquals( FileManager.VALIDATE_INVALIDDESTPATH, fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt", "testfile2.txt" }, "", "testfile1.txt" ) );
424       assertEquals( FileManager.VALIDATE_INVALIDDESTPATH, fileManager.validateMove( "Dir1", new String JavaDoc[] { "testfile1.txt", "testfile2.txt" }, "Dir2/baddir", "testfile1.txt" ) );
425       assertEquals( FileManager.VALIDATE_SUBDIROFSELF, fileManager.validateMove( "Dir2", new String JavaDoc[] { "testdir3", "testfile4.txt" }, "Dir2/testdir3", "testdir3" ) );
426       assertEquals( FileManager.VALIDATE_CANTOVERWRITE, fileManager.validateMove( "Dir1", new String JavaDoc[] { "testdir3", "testfile1.txt" }, "Dir2", "" ) );
427     }
428     catch ( Exception JavaDoc e ) {
429       e.printStackTrace();
430       fail();
431     }
432   }
433
434   public void testValidateCreate() {
435     try {
436       setUpFileManager();
437
438       //
439
// overwriting a file
440
//
441
assertNull( fileManager.validateCreate( "Dir1", "testfile1.txt", false ) );
442       assertEquals( FileManager.VALIDATE_CANTOVERWRITE, fileManager.validateCreate( "Dir1", "testfile1.txt", true ) );
443
444       //
445
// overwriting a directory
446
//
447
assertEquals( FileManager.VALIDATE_CANTOVERWRITE, fileManager.validateCreate( "Dir2", "testdir3", false ) );
448       assertEquals( FileManager.VALIDATE_CANTOVERWRITE, fileManager.validateCreate( "Dir2", "testdir3", true ) );
449     }
450     catch ( Exception JavaDoc e ) {
451       e.printStackTrace();
452       fail();
453     }
454   }
455
456   public void testFindOverwriteFiles() {
457     try {
458       setUpFileManager();
459
460       //
461
// create some duplicate files
462
//
463
File dupFile = new File( "build/testdir/testdir1/testfile4.txt" );
464       dupFile.createNewFile();
465
466       //
467
// no files will be overwritten
468
//
469
assertNull( fileManager.findOverwriteFiles( "Dir1", new String JavaDoc[] { "testfile1.txt" }, "Dir2", "testfile1.txt" ) );
470
471       //
472
// one file will be overwritten
473
//
474
fileNames = fileManager.findOverwriteFiles( "Dir1", new String JavaDoc[] { "testfile1.txt" }, "Dir2", "testfile4.txt" );
475       assertNotNull( fileNames );
476       assertEquals( 1, fileNames.length );
477       assertEquals( "testfile4.txt", fileNames[ 0 ] );
478
479       //
480
// one file in a set will be overwritten
481
//
482
fileNames = fileManager.findOverwriteFiles( "Dir1", new String JavaDoc[] { "testfile1.txt", "testfile4.txt" }, "Dir2", "" );
483       assertNotNull( fileNames );
484       assertEquals( 1, fileNames.length );
485       assertEquals( "testfile4.txt", fileNames[ 0 ] );
486     }
487     catch ( Exception JavaDoc e ) {
488       e.printStackTrace();
489       fail();
490     }
491   }
492
493   public void testMoveSingle() {
494     try {
495       setUpFileManager();
496
497       //
498
// move a single file
499
//
500
fileManager.move( "Dir1", new String JavaDoc[] { "testfile1.txt" }, "Dir2", "newtestfile1.txt" );
501       assertTrue( !testFile1_.exists() );
502
503       file = new File( "build/testdir/testdir2/newtestfile1.txt" );
504       assertTrue( file.exists() );
505       assertTrue( file.isFile() );
506     }
507     catch ( Exception JavaDoc e ) {
508       e.printStackTrace();
509       fail();
510     }
511   }
512
513   public void testMoveSet() {
514     try {
515       setUpFileManager();
516
517       //
518
// move a set of files
519
//
520
fileManager.move( "Dir1", new String JavaDoc[] { "testfile1.txt", "testfile2.txt" }, "Dir2", "newtestfile1.txt" );
521       assertTrue( !testFile1_.exists() );
522       assertTrue( !testFile2_.exists() );
523
524       file = new File( "build/testdir/testdir2/testfile1.txt" );
525       assertTrue( file.exists() );
526       assertTrue( file.isFile() );
527
528       file = new File( "build/testdir/testdir2/testfile2.txt" );
529       assertTrue( file.exists() );
530       assertTrue( file.isFile() );
531     }
532     catch ( Exception JavaDoc e ) {
533       e.printStackTrace();
534       fail();
535     }
536   }
537
538   public void testCopyFile() {
539     try {
540       setUpFileManager();
541
542       //
543
// copy a file
544
//
545
file = new File( "build/testdir/testdir1/newtestfile1.txt" );
546       FileManager.copyFile( testFile1_, file );
547       assertTrue( testFile1_.exists() );
548       assertTrue( file.exists() );
549       assertTrue( file.isFile() );
550
551       //
552
// copy a directory
553
//
554
file = new File( "build/testdir/testdir2/newtestdir3" );
555       FileManager.copyFile( testDir3_, file );
556       assertTrue( testDir3_.exists() );
557       assertTrue( testDir3_.isDirectory() );
558       assertTrue( file.exists() );
559       assertTrue( file.isDirectory() );
560
561       file = new File( "build/testdir/testdir2/newtestdir3/testfile3.txt" );
562       assertTrue( file.exists() );
563       assertTrue( file.isFile() );
564     }
565     catch ( Exception JavaDoc e ) {
566       e.printStackTrace();
567       fail();
568     }
569   }
570
571   public void testCopy() {
572     try {
573       setUpFileManager();
574
575       //
576
// copy a single file
577
//
578
fileManager.copy( "Dir1", new String JavaDoc[] { "testfile1.txt" }, "Dir2", "newtestfile1.txt" );
579       assertTrue( testFile1_.exists() );
580
581       file = new File( "build/testdir/testdir2/newtestfile1.txt" );
582       assertTrue( file.exists() );
583       assertTrue( file.isFile() );
584
585       //
586
// copy a single directory
587
//
588
fileManager.copy( "Dir2", new String JavaDoc[] { "testdir3" }, "Dir1", "newtestdir3" );
589       assertTrue( testDir3_.exists() );
590
591       file = new File( "build/testdir/testdir1/newtestdir3" );
592       assertTrue( file.exists() );
593       assertTrue( file.isDirectory() );
594
595       file = new File( "build/testdir/testdir1/newtestdir3/testfile3.txt" );
596       assertTrue( file.exists() );
597       assertTrue( file.isFile() );
598     }
599     catch ( Exception JavaDoc e ) {
600       e.printStackTrace();
601       fail();
602     }
603   }
604
605   public void testDelete() {
606     try {
607
608       //
609
// attempt to delete a non-existant file
610
//
611
setUpFileManager();
612
613       try {
614         fileManager.delete( "Dir1", new String JavaDoc[] { "badfile.txt" } );
615         fail( "No exception thrown." );
616       }
617       catch ( Exception JavaDoc e ) {}
618
619       try {
620         fileManager.delete( "Dir3", new String JavaDoc[] { "badfile.txt" } );
621         fail( "No exception thrown." );
622       }
623       catch ( Exception JavaDoc e ) {}
624
625       //
626
// attempt to delete a top-level directory
627
//
628
try {
629         fileManager.delete( "Dir1", new String JavaDoc[] { "" } );
630         fail( "No exception thrown." );
631       }
632       catch ( Exception JavaDoc e ) {}
633
634       //
635
// delete a single file
636
//
637
setUpFileManager();
638
639       fileManager.delete( "Dir1", new String JavaDoc[] { "testfile1.txt" } );
640       assertTrue( !testFile1_.exists() );
641
642       //
643
// delete a single directory
644
//
645
setUpFileManager();
646
647       fileManager.delete( "Dir2", new String JavaDoc[] { "testdir3" } );
648       assertTrue( !testDir3_.exists() );
649       assertTrue( !testFile3_.exists() );
650
651       //
652
// delete a set of files
653
//
654
setUpFileManager();
655
656       fileManager.delete( "Dir2", new String JavaDoc[] { "testdir3", "testfile4.txt" } );
657       assertTrue( !testDir3_.exists() );
658       assertTrue( !testFile3_.exists() );
659       assertTrue( !testFile4_.exists() );
660     }
661     catch ( Exception JavaDoc e ) {
662       e.printStackTrace();
663       fail();
664     }
665   }
666
667   public void testCreate() {
668     try {
669
670       //
671
// create an empty file
672
//
673
setUpFileManager();
674       fileManager.create( "Dir1", "testfile5.txt", false );
675
676       file = new File( testDir1_, "testfile5.txt" );
677       assertTrue( file.exists() );
678       assertTrue( file.isFile() );
679
680       //
681
// create a directory
682
//
683
fileManager.create( "Dir1", "testdir4", true );
684
685       file = new File( testDir1_, "testdir4" );
686       assertTrue( file.exists() );
687       assertTrue( file.isDirectory() );
688
689       //
690
// create a file from an input stream
691
//
692
fileManager.create( "Dir1", "testfile5.txt", new ByteArrayInputStream( "This is a test".getBytes() ) );
693       file = new File( testDir1_, "testfile5.txt" );
694       assertTrue( file.exists() );
695       assertTrue( file.isFile() );
696       assertEquals( "This is a test", FileUtils.readFileToString( file, "ISO-8859-1" ) );
697     }
698     catch ( Exception JavaDoc e ) {
699       e.printStackTrace();
700       fail();
701     }
702   }
703 }
704
Popular Tags