100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair/* 200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Copyright 2008 the original author or authors. 300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * you may not use this file except in compliance with the License. 600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * You may obtain a copy of the License at 700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * http://www.apache.org/licenses/LICENSE-2.0 900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 1000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Unless required by applicable law or agreed to in writing, software 1100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * See the License for the specific language governing permissions and 1400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * limitations under the License. 1500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 1600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairpackage org.mockftpserver.fake.filesystem 1700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 1800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.util.IoUtil 1900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 2000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair/** 2100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Tests for subclasses of AbstractFakeFileSystem. Subclasses must define 2200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 2300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @version $Revision$ - $Date$ 2400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 2500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @author Chris Mair 2600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 2700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairabstract class AbstractFakeFileSystemTestCase extends AbstractFileSystemTestCase { 2800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 2900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair // ------------------------------------------------------------------------- 3000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair // Tests 3100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair // ------------------------------------------------------------------------- 3200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 3300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testDefaultDirectoryListingFormatterClass() { 3400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.directoryListingFormatter.class == expectedDirectoryListingFormatterClass 3500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 3600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 3700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testAdd_PathLocked() { 3800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def dirEntry = new DirectoryEntry(NEW_DIR) 3900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.add(dirEntry) 4000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def fileEntry = new FileEntry(NEW_FILE) 4100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.add(fileEntry) 4200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 4300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair // The path should be locked for both entries 4400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair shouldFail { dirEntry.setPath('abc') } 4500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair shouldFail { fileEntry.setPath('abc') } 4600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 4700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 4800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testAdd_Directory_CreateParentDirectoriesAutomatically() { 4900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair final NEW_SUBDIR = fileSystem.path(NEW_DIR, "sub") 5000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert !fileSystem.exists(NEW_DIR), "Before createDirectory" 5100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert !fileSystem.exists(NEW_SUBDIR), "Before createDirectory" 5200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 5300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.createParentDirectoriesAutomatically = true 5400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.add(new DirectoryEntry(NEW_SUBDIR)) 5500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.exists(NEW_DIR), "After createDirectory" 5600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.exists(NEW_SUBDIR), "$NEW_SUBDIR: After createDirectory" 5700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 5800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 5900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testAdd_File_CreateParentDirectoriesAutomatically() { 6000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair final NEW_FILE_IN_SUBDIR = fileSystem.path(NEW_DIR, "abc.txt") 6100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert !fileSystem.exists(NEW_DIR), "Before createDirectory" 6200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert !fileSystem.exists(NEW_FILE_IN_SUBDIR), "Before createDirectory" 6300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 6400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.createParentDirectoriesAutomatically = true 6500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.add(new FileEntry(NEW_FILE_IN_SUBDIR)) 6600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.exists(NEW_DIR), "After createDirectory" 6700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.exists(NEW_FILE_IN_SUBDIR), "$NEW_FILE_IN_SUBDIR: After createDirectory" 6800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 6900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 7000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testAdd_File_CreateParentDirectoriesAutomatically_False() { 7100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.createParentDirectoriesAutomatically = false 7200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair final NEW_FILE_IN_SUBDIR = fileSystem.path(NEW_DIR, "abc.txt") 7300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert !fileSystem.exists(NEW_DIR), "Before createDirectory" 7400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 7500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair shouldFail(FileSystemException) { fileSystem.add(new FileEntry(NEW_FILE_IN_SUBDIR)) } 7600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert !fileSystem.exists(NEW_DIR), "After createDirectory" 7700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 7800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 7900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testSetEntries() { 8000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.createParentDirectoriesAutomatically = false 8100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def entries = [new FileEntry(NEW_FILE), new DirectoryEntry(NEW_DIR)] 8200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.setEntries(entries) 8300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.exists(NEW_DIR) 8400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.exists(NEW_FILE) 8500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 8600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 8700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testToString() { 8800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair String toString = fileSystem.toString() 8900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair LOG.info("toString=" + toString) 9000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert toString.contains(EXISTING_DIR) 9100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert toString.contains(EXISTING_FILE) 9200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 9300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 9400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testFormatDirectoryListing() { 9500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def fileEntry = new FileEntry(path: 'abc') 9600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def formatter = [format: {f -> 9700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert f == fileEntry 9800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair return 'abc' 9900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair }] as DirectoryListingFormatter 10000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.directoryListingFormatter = formatter 10100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.formatDirectoryListing(fileEntry) == 'abc' 10200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 10300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 10400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testFormatDirectoryListing_NullDirectoryListingFormatter() { 10500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.directoryListingFormatter = null 10600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def fileEntry = new FileEntry('abc') 10700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair shouldFailWithMessageContaining('directoryListingFormatter') { assert fileSystem.formatDirectoryListing(fileEntry) } 10800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 10900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 11000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testFormatDirectoryListing_NullFileSystemEntry() { 11100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def formatter = [format: {f -> }] as DirectoryListingFormatter 11200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.directoryListingFormatter = formatter 11300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair shouldFailWithMessageContaining('fileSystemEntry') { assert fileSystem.formatDirectoryListing(null) } 11400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 11500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 11600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testGetEntry() { 11700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.getEntry(NO_SUCH_DIR) == null 11800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.getEntry(NO_SUCH_FILE) == null 11900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 12000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.getEntry(EXISTING_FILE).path == EXISTING_FILE 12100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.getEntry(EXISTING_DIR).path == EXISTING_DIR 12200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 12300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def permissions = new Permissions('-wxrwx---') 12400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def fileEntry = new FileEntry(path: NEW_FILE, lastModified: DATE, contents: 'abc', owner: 'owner', 12500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair group: 'group', permissions: permissions) 12600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.add(fileEntry) 12700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def entry = fileSystem.getEntry(NEW_FILE) 12800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair LOG.info(entry.toString()) 12900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert entry.path == NEW_FILE 13000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert !entry.directory 13100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert entry.size == 3 13200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert entry.owner == 'owner' 13300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert entry.group == 'group' 13400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert entry.permissions == permissions 13500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 13600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 13700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testNormalize_Null() { 13800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair shouldFailWithMessageContaining("path") { fileSystem.normalize(null) } 13900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 14000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 14100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testGetName_Null() { 14200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair shouldFailWithMessageContaining("path") { fileSystem.getName(null) } 14300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 14400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 14500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair //-------------------------------------------------------------------------- 14600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair // Abstract Methods 14700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair //-------------------------------------------------------------------------- 14800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 14900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected abstract Class getExpectedDirectoryListingFormatterClass() 15000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 15100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair //-------------------------------------------------------------------------- 15200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair // Internal Helper Methods 15300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair //-------------------------------------------------------------------------- 15400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 15500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 15600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Verify the contents of the file at the specified path read from its InputSteam 15700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 15800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @param fileSystem - the FileSystem instance 15900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @param expectedContents - the expected contents 16000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @throws IOException 16100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @see org.mockftpserver.fake.filesystem.AbstractFileSystemTestCase#verifyFileContents(FileSystem,String,String ) 16200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 16300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected void verifyFileContents(FileSystem fileSystem, String path, String expectedContents) throws IOException { 16400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def fileEntry = fileSystem.getEntry(path) 16500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair InputStream input = fileEntry.createInputStream() 16600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair byte[] bytes = IoUtil.readBytes(input) 16700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair LOG.info("bytes=[" + new String(bytes) + "]") 16800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertEquals("contents: actual=[" + new String(bytes) + "]", expectedContents.getBytes(), bytes) 16900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 17000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 17100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair}