blob: 440c9d5882b4b351c6422599f7ab462f6f558a85 [file] [log] [blame]
/*
* Copyright 2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mockftpserver.fake.filesystem
import org.mockftpserver.core.util.IoUtil
/**
* Tests for subclasses of AbstractFakeFileSystem. Subclasses must define
*
* @version $Revision$ - $Date$
*
* @author Chris Mair
*/
abstract class AbstractFakeFileSystemTestCase extends AbstractFileSystemTestCase {
// -------------------------------------------------------------------------
// Tests
// -------------------------------------------------------------------------
void testDefaultDirectoryListingFormatterClass() {
assert fileSystem.directoryListingFormatter.class == expectedDirectoryListingFormatterClass
}
void testAdd_PathLocked() {
def dirEntry = new DirectoryEntry(NEW_DIR)
fileSystem.add(dirEntry)
def fileEntry = new FileEntry(NEW_FILE)
fileSystem.add(fileEntry)
// The path should be locked for both entries
shouldFail { dirEntry.setPath('abc') }
shouldFail { fileEntry.setPath('abc') }
}
void testAdd_Directory_CreateParentDirectoriesAutomatically() {
final NEW_SUBDIR = fileSystem.path(NEW_DIR, "sub")
assert !fileSystem.exists(NEW_DIR), "Before createDirectory"
assert !fileSystem.exists(NEW_SUBDIR), "Before createDirectory"
fileSystem.createParentDirectoriesAutomatically = true
fileSystem.add(new DirectoryEntry(NEW_SUBDIR))
assert fileSystem.exists(NEW_DIR), "After createDirectory"
assert fileSystem.exists(NEW_SUBDIR), "$NEW_SUBDIR: After createDirectory"
}
void testAdd_File_CreateParentDirectoriesAutomatically() {
final NEW_FILE_IN_SUBDIR = fileSystem.path(NEW_DIR, "abc.txt")
assert !fileSystem.exists(NEW_DIR), "Before createDirectory"
assert !fileSystem.exists(NEW_FILE_IN_SUBDIR), "Before createDirectory"
fileSystem.createParentDirectoriesAutomatically = true
fileSystem.add(new FileEntry(NEW_FILE_IN_SUBDIR))
assert fileSystem.exists(NEW_DIR), "After createDirectory"
assert fileSystem.exists(NEW_FILE_IN_SUBDIR), "$NEW_FILE_IN_SUBDIR: After createDirectory"
}
void testAdd_File_CreateParentDirectoriesAutomatically_False() {
fileSystem.createParentDirectoriesAutomatically = false
final NEW_FILE_IN_SUBDIR = fileSystem.path(NEW_DIR, "abc.txt")
assert !fileSystem.exists(NEW_DIR), "Before createDirectory"
shouldFail(FileSystemException) { fileSystem.add(new FileEntry(NEW_FILE_IN_SUBDIR)) }
assert !fileSystem.exists(NEW_DIR), "After createDirectory"
}
void testSetEntries() {
fileSystem.createParentDirectoriesAutomatically = false
def entries = [new FileEntry(NEW_FILE), new DirectoryEntry(NEW_DIR)]
fileSystem.setEntries(entries)
assert fileSystem.exists(NEW_DIR)
assert fileSystem.exists(NEW_FILE)
}
void testToString() {
String toString = fileSystem.toString()
LOG.info("toString=" + toString)
assert toString.contains(EXISTING_DIR)
assert toString.contains(EXISTING_FILE)
}
void testFormatDirectoryListing() {
def fileEntry = new FileEntry(path: 'abc')
def formatter = [format: {f ->
assert f == fileEntry
return 'abc'
}] as DirectoryListingFormatter
fileSystem.directoryListingFormatter = formatter
assert fileSystem.formatDirectoryListing(fileEntry) == 'abc'
}
void testFormatDirectoryListing_NullDirectoryListingFormatter() {
fileSystem.directoryListingFormatter = null
def fileEntry = new FileEntry('abc')
shouldFailWithMessageContaining('directoryListingFormatter') { assert fileSystem.formatDirectoryListing(fileEntry) }
}
void testFormatDirectoryListing_NullFileSystemEntry() {
def formatter = [format: {f -> }] as DirectoryListingFormatter
fileSystem.directoryListingFormatter = formatter
shouldFailWithMessageContaining('fileSystemEntry') { assert fileSystem.formatDirectoryListing(null) }
}
void testGetEntry() {
assert fileSystem.getEntry(NO_SUCH_DIR) == null
assert fileSystem.getEntry(NO_SUCH_FILE) == null
assert fileSystem.getEntry(EXISTING_FILE).path == EXISTING_FILE
assert fileSystem.getEntry(EXISTING_DIR).path == EXISTING_DIR
def permissions = new Permissions('-wxrwx---')
def fileEntry = new FileEntry(path: NEW_FILE, lastModified: DATE, contents: 'abc', owner: 'owner',
group: 'group', permissions: permissions)
fileSystem.add(fileEntry)
def entry = fileSystem.getEntry(NEW_FILE)
LOG.info(entry.toString())
assert entry.path == NEW_FILE
assert !entry.directory
assert entry.size == 3
assert entry.owner == 'owner'
assert entry.group == 'group'
assert entry.permissions == permissions
}
void testNormalize_Null() {
shouldFailWithMessageContaining("path") { fileSystem.normalize(null) }
}
void testGetName_Null() {
shouldFailWithMessageContaining("path") { fileSystem.getName(null) }
}
//--------------------------------------------------------------------------
// Abstract Methods
//--------------------------------------------------------------------------
protected abstract Class getExpectedDirectoryListingFormatterClass()
//--------------------------------------------------------------------------
// Internal Helper Methods
//--------------------------------------------------------------------------
/**
* Verify the contents of the file at the specified path read from its InputSteam
*
* @param fileSystem - the FileSystem instance
* @param expectedContents - the expected contents
* @throws IOException
* @see org.mockftpserver.fake.filesystem.AbstractFileSystemTestCase#verifyFileContents(FileSystem,String,String )
*/
protected void verifyFileContents(FileSystem fileSystem, String path, String expectedContents) throws IOException {
def fileEntry = fileSystem.getEntry(path)
InputStream input = fileEntry.createInputStream()
byte[] bytes = IoUtil.readBytes(input)
LOG.info("bytes=[" + new String(bytes) + "]")
assertEquals("contents: actual=[" + new String(bytes) + "]", expectedContents.getBytes(), bytes)
}
}