/* * Hibernate Search, full-text search for your domain model * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.test.util.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.hibernate.search.util.impl.FileHelper; import org.hibernate.search.util.logging.impl.Log; import org.hibernate.search.util.logging.impl.LoggerFactory; import org.junit.After; import org.junit.BeforeClass; import org.junit.Test; /** * @author Emmanuel Bernard * @author Hardy Ferentschik */ public class FileHelperTest { private static final Log log = LoggerFactory.make( Log.class ); private static File root; /** * Source directory */ private String srcDir = "filehelpersrc"; /** * Destination directory */ private String destDir = "filehelperdest"; @BeforeClass public static void prepareRootDirectory() { String buildDir = System.getProperty( "build.dir" ); if ( buildDir == null ) { buildDir = "."; } root = new File( buildDir, "filehelper" ); log.infof( "Using %s as test directory.", root.getAbsolutePath() ); } private File createFile(File dir, String name) throws IOException { File file = new File( dir, name ); file.createNewFile(); writeDummyDataToFile( file ); return file; } private void writeDummyDataToFile(File file) throws IOException { FileOutputStream os = new FileOutputStream( file, true ); os.write( 1 ); os.write( 2 ); os.write( 3 ); os.flush(); os.close(); } @After public void tearDown() throws Exception { File dir = new File( root, srcDir ); FileHelper.delete( dir ); dir = new File( root, destDir ); FileHelper.delete( dir ); FileHelper.delete( root ); } @Test public void testSynchronize() throws Exception { // create a src directory structure File src = new File( root, srcDir ); src.mkdirs(); String name = "a"; createFile( src, name ); name = "b"; createFile( src, name ); File subDir = new File( src, "subdir" ); subDir.mkdirs(); name = "c"; createFile( subDir, name ); // create destination and sync File dest = new File( root, destDir ); assertFalse( "Directories should be out of sync", FileHelper.areInSync( src, dest ) ); FileHelper.synchronize( src, dest, true ); assertTrue( "Directories should be in sync", FileHelper.areInSync( src, dest ) ); File destTestFile1 = new File( dest, "b" ); assertTrue( destTestFile1.exists() ); File destTestFile2 = new File( new File( dest, "subdir" ), "c" ); assertTrue( destTestFile2.exists() ); // create a new file in destination which does not exist in src. Should be deleted after next sync File destTestFile3 = createFile( dest, "foo" ); // create a file in the src directory and write some data to it File srcTestFile = new File( src, "c" ); writeDummyDataToFile( srcTestFile ); File destTestFile = new File( dest, "c" ); assertNotSame( srcTestFile.lastModified(), destTestFile.lastModified() ); assertFalse( "Directories should be out of sync", FileHelper.areInSync( src, dest ) ); FileHelper.synchronize( src, dest, true ); assertTrue( "Directories should be in sync", FileHelper.areInSync( src, dest ) ); assertEquals( srcTestFile.lastModified(), destTestFile.lastModified() ); assertEquals( srcTestFile.length(), destTestFile.length() ); assertTrue( destTestFile1.exists() ); assertTrue( destTestFile2.exists() ); assertTrue( !destTestFile3.exists() ); // delete src test file srcTestFile.delete(); FileHelper.synchronize( src, dest, true ); assertTrue( !destTestFile.exists() ); assertTrue( "Directories should be in sync", FileHelper.areInSync( src, dest ) ); } }