Java tutorial
/******************************************************************************* * Copyright 2008(c) The OBiBa Consortium. All rights reserved. * * This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package org.obiba.opal.fs; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.List; import org.apache.commons.vfs2.FileObject; import org.apache.commons.vfs2.FileSystemException; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockftpserver.fake.FakeFtpServer; import org.mockftpserver.fake.UserAccount; import org.mockftpserver.fake.filesystem.DirectoryEntry; import org.mockftpserver.fake.filesystem.FileEntry; import org.mockftpserver.fake.filesystem.FileSystem; import org.mockftpserver.fake.filesystem.WindowsFakeFileSystem; import org.obiba.opal.fs.impl.DefaultOpalFileSystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.io.CharStreams; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assume.assumeTrue; public class OpalFileSystemTest { private static final Logger log = LoggerFactory.getLogger(OpalFileSystemTest.class); private OpalFileSystem fsLocal; private FileObject fsLocalRoot; private OpalFileSystem fsFtp; private FileObject fsFtpRoot; FakeFtpServer mockFtpServer; @Before public void setUp() throws FileSystemException { fsLocal = new DefaultOpalFileSystem("res:opal-file-system"); fsLocalRoot = fsLocal.getRoot(); // MockFtpServer blocks the execution of this test under the unix environment, so this test // will be run on Windows until we find a solution... if (runningOsIsWindows()) { mockFtpServer = new FakeFtpServer(); mockFtpServer.addUserAccount(new UserAccount("user", "password", "c:/")); FileSystem fileSystem = new WindowsFakeFileSystem(); fileSystem.add(new DirectoryEntry("c:/temp")); fileSystem.add(new FileEntry("c:/temp/file1.txt")); fileSystem.add(new FileEntry("c:/temp/file2.txt", "this is the file content")); mockFtpServer.setFileSystem(fileSystem); mockFtpServer.start(); fsFtp = new DefaultOpalFileSystem("ftp://user:password@localhost:21"); fsFtpRoot = fsFtp.getRoot(); } } @Test public void testLocalFile() throws FileSystemException { log.info("file: {}", fsLocal.getRoot().resolveFile("temp.pem")); fsLocal.getLocalFile(fsLocalRoot.resolveFile("temp.pem")); assertThat(fsLocal.isLocalFile(fsLocalRoot.resolveFile("temp.pem"))).isTrue(); } @Test public void testFtpFileNotLocalFile() throws FileSystemException { assumeTrue(runningOsIsWindows()); assertThat(fsFtp.isLocalFile(fsFtpRoot.resolveFile("/temp/file2.txt"))).isFalse(); } @Test public void getLocalFileFromFtp() throws IOException { assumeTrue(runningOsIsWindows()); assertThat(fsFtp.isLocalFile(fsFtpRoot.resolveFile("/temp/file2.txt"))).isFalse(); File localFile = fsFtp.getLocalFile(fsFtpRoot.resolveFile("/temp/file2.txt")); List<String> lines = CharStreams.readLines(new FileReader(localFile)); assertThat(lines.get(0)).isEqualTo("this is the file content"); } private boolean runningOsIsWindows() { String osName = System.getProperty("os.name"); return osName.toLowerCase().contains("windows"); } @SuppressWarnings("ReuseOfLocalVariable") @Test public void testGetObfuscatedPath() throws FileSystemException { FileObject file = fsLocalRoot.resolveFile("temp.pem"); String obfuscatedFilePath = fsLocal.getObfuscatedPath(file); assertThat(obfuscatedFilePath).isEqualTo("227379988e6f2c3e9eb87b1f7d7bd055"); file = fsLocalRoot.resolveFile("/test2/test21/temp2.pem"); obfuscatedFilePath = fsLocal.getObfuscatedPath(file); assertThat(obfuscatedFilePath).isEqualTo("269dd3644748e20182274c7a9de2ee6"); file = fsLocalRoot.resolveFile("/test2/test21/temp.pem"); obfuscatedFilePath = fsLocal.getObfuscatedPath(file); assertThat(obfuscatedFilePath).isEqualTo("30aa4ab41dbfeecb9e92d223bcaccb4"); file = fsLocalRoot.resolveFile("/test2/temp.pem"); obfuscatedFilePath = fsLocal.getObfuscatedPath(file); assertThat(obfuscatedFilePath).isEqualTo("508e41fae4e3de7a3045c2c9108f7fec"); file = fsLocalRoot.resolveFile("/reports/test2/test21/temp.pem"); obfuscatedFilePath = fsLocal.getObfuscatedPath(file); assertThat(obfuscatedFilePath).isEqualTo("f5f0f7be20e4b7eadca209fb071292b"); } @SuppressWarnings("ReuseOfLocalVariable") @Test public void testResolveFileFromObfuscatedPath_PathIsResolved() throws FileSystemException { FileObject file = fsLocal.resolveFileFromObfuscatedPath(fsLocalRoot, "227379988e6f2c3e9eb87b1f7d7bd055"); assertThat(file.getName().getPath()).isEqualTo("/temp.pem"); file = fsLocal.resolveFileFromObfuscatedPath(fsLocalRoot, "269dd3644748e20182274c7a9de2ee6"); assertThat(file.getName().getPath()).isEqualTo("/test2/test21/temp2.pem"); file = fsLocal.resolveFileFromObfuscatedPath(fsLocalRoot, "30aa4ab41dbfeecb9e92d223bcaccb4"); assertThat(file.getName().getPath()).isEqualTo("/test2/test21/temp.pem"); file = fsLocal.resolveFileFromObfuscatedPath(fsLocalRoot, "508e41fae4e3de7a3045c2c9108f7fec"); assertThat(file.getName().getPath()).isEqualTo("/test2/temp.pem"); } @Test public void testResolveFileFromObfuscatedPath_PathIsNotResolved() throws FileSystemException { FileObject file = fsLocal.resolveFileFromObfuscatedPath(fsLocalRoot, "xxxx"); assertThat(file).isNull(); } @After public void cleanUp() { if (mockFtpServer != null) { mockFtpServer.stop(); } } }