You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ftpserver-commits@incubator.apache.org by ng...@apache.org on 2007/08/12 12:11:33 UTC
svn commit: r565040 - in /incubator/ftpserver/trunk:
core/src/java/org/apache/ftpserver/filesystem/
core/src/java/org/apache/ftpserver/listing/
core/src/test/org/apache/ftpserver/filesystem/
ftplet-api/src/java/org/apache/ftpserver/ftplet/
Author: ngn
Date: Sun Aug 12 05:11:32 2007
New Revision: 565040
URL: http://svn.apache.org/viewvc?view=rev&rev=565040
Log:
Make sure files are returned in alphabetical order (FTPSERVER-103)
Refactor tests further to make the reusable for other file system implementations
Added:
incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java (with props)
Modified:
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/filesystem/NativeFileObject.java
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listing/DirectoryLister.java
incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileObjectTestTemplate.java
incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileObjectTest.java
incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileSystemViewTest.java
incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FileObject.java
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/filesystem/NativeFileObject.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/filesystem/NativeFileObject.java?view=diff&rev=565040&r1=565039&r2=565040
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/filesystem/NativeFileObject.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/filesystem/NativeFileObject.java Sun Aug 12 05:11:32 2007
@@ -15,7 +15,7 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- */
+ */
package org.apache.ftpserver.filesystem;
@@ -26,6 +26,8 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
+import java.util.Arrays;
+import java.util.Comparator;
import java.util.StringTokenizer;
import org.apache.ftpserver.ftplet.FileObject;
@@ -33,204 +35,201 @@
import org.apache.ftpserver.usermanager.WriteRequest;
/**
- * This class wraps native file object.
+ * This class wraps native file object.
*/
-public
-class NativeFileObject implements FileObject {
+public class NativeFileObject implements FileObject {
// the file name with respect to the user root.
// The path separator character will be '/' and
// it will always begin with '/'.
private String fileName;
-
+
private File file;
-
+
private User user;
-
-
+
/**
* Constructor.
*/
protected NativeFileObject(String fileName, File file, User user) {
- if(fileName == null) {
+ if (fileName == null) {
throw new IllegalArgumentException("fileName can not be null");
- }
- if(file == null) {
+ }
+ if (file == null) {
throw new IllegalArgumentException("file can not be null");
- }
+ }
fileName = fileName.trim();
- if(fileName.length() == 0) {
+ if (fileName.length() == 0) {
throw new IllegalArgumentException("fileName can not be empty");
- } else if(fileName.charAt(0) != '/') {
- throw new IllegalArgumentException("fileName must be an absolut path");
+ } else if (fileName.charAt(0) != '/') {
+ throw new IllegalArgumentException(
+ "fileName must be an absolut path");
}
-
-
-
+
this.fileName = fileName;
this.file = file;
this.user = user;
}
-
+
/**
* Get full name.
*/
public String getFullName() {
-
+
// strip the last '/' if necessary
String fullName = fileName;
int filelen = fullName.length();
- if( (filelen != 1)&& (fullName.charAt(filelen - 1) == '/') ) {
+ if ((filelen != 1) && (fullName.charAt(filelen - 1) == '/')) {
fullName = fullName.substring(0, filelen - 1);
}
-
+
return fullName;
}
-
+
/**
* Get short name.
*/
public String getShortName() {
-
+
// root - the short name will be '/'
- if(fileName.equals("/")) {
+ if (fileName.equals("/")) {
return "/";
}
-
+
// strip the last '/'
String shortName = fileName;
int filelen = fileName.length();
- if(shortName.charAt(filelen - 1) == '/') {
+ if (shortName.charAt(filelen - 1) == '/') {
shortName = shortName.substring(0, filelen - 1);
}
-
+
// return from the last '/'
int slashIndex = shortName.lastIndexOf('/');
- if(slashIndex != -1) {
+ if (slashIndex != -1) {
shortName = shortName.substring(slashIndex + 1);
}
return shortName;
}
-
+
/**
* Is a hidden file?
*/
public boolean isHidden() {
return file.isHidden();
}
-
+
/**
* Is it a directory?
*/
public boolean isDirectory() {
return file.isDirectory();
}
-
+
/**
* Is it a file?
*/
public boolean isFile() {
return file.isFile();
}
-
+
/**
* Does this file exists?
*/
public boolean doesExist() {
return file.exists();
}
-
+
/**
* Get file size.
*/
public long getSize() {
return file.length();
}
-
+
/**
* Get file owner.
*/
public String getOwnerName() {
return "user";
}
-
+
/**
* Get group name
*/
public String getGroupName() {
return "group";
}
-
+
/**
* Get link count
*/
public int getLinkCount() {
return file.isDirectory() ? 3 : 1;
}
-
+
/**
* Get last modified time.
- */
+ */
public long getLastModified() {
return file.lastModified();
}
-
+
/**
* Check read permission.
*/
public boolean hasReadPermission() {
return file.canRead();
}
-
+
/**
* Check file write permission.
*/
public boolean hasWritePermission() {
- if(user.authorize(new WriteRequest(getFullName())) == null) {
+ if (user.authorize(new WriteRequest(getFullName())) == null) {
return false;
}
-
- if(file.exists()) {
+
+ if (file.exists()) {
return file.canWrite();
}
return true;
}
-
+
/**
* Has delete permission.
*/
public boolean hasDeletePermission() {
-
+
// root cannot be deleted
- if( "/".equals(fileName) ) {
+ if ("/".equals(fileName)) {
return false;
}
-
+
return hasWritePermission();
}
-
+
/**
* Delete file.
*/
public boolean delete() {
boolean retVal = false;
- if( hasDeletePermission() ) {
+ if (hasDeletePermission()) {
retVal = file.delete();
}
return retVal;
}
-
+
/**
* Move file object.
*/
public boolean move(FileObject dest) {
boolean retVal = false;
- if(dest.hasWritePermission() && hasReadPermission()) {
- File destFile = ((NativeFileObject)dest).file;
-
- if(destFile.exists()) {
+ if (dest.hasWritePermission() && hasReadPermission()) {
+ File destFile = ((NativeFileObject) dest).file;
+
+ if (destFile.exists()) {
// renameTo behaves differently on different platforms
- // this check verifies that if the destination already exists,
+ // this check verifies that if the destination already exists,
// we fail
retVal = false;
} else {
@@ -239,214 +238,221 @@
}
return retVal;
}
-
+
/**
* Create directory.
*/
public boolean mkdir() {
boolean retVal = false;
- if(hasWritePermission()) {
+ if (hasWritePermission()) {
retVal = file.mkdirs();
}
return retVal;
}
-
+
/**
* Get the physical file object.
*/
public File getPhysicalFile() {
return file;
}
-
+
/**
- * List files. If not a directory or does not exist, null
- * will be returned.
+ * List files. If not a directory or does not exist, null will be returned.
*/
public FileObject[] listFiles() {
-
- // is a directory
- if(!file.isDirectory()) {
- return null;
- }
-
+
+ // is a directory
+ if (!file.isDirectory()) {
+ return null;
+ }
+
// directory - return all the files
File[] files = file.listFiles();
- if(files == null) {
+ if (files == null) {
return null;
}
-
+
+ // make sure the files are returned in order
+ Arrays.sort(files, new Comparator() {
+ public int compare(Object o1, Object o2) {
+ File f1 = (File) o1;
+ File f2 = (File) o2;
+
+ return f1.getName().compareTo(f2.getName());
+ }
+ });
+
// get the virtual name of the base directory
String virtualFileStr = getFullName();
- if(virtualFileStr.charAt(virtualFileStr.length() - 1) != '/') {
+ if (virtualFileStr.charAt(virtualFileStr.length() - 1) != '/') {
virtualFileStr += '/';
}
-
+
// now return all the files under the directory
FileObject[] virtualFiles = new FileObject[files.length];
- for(int i=0; i<files.length; ++i) {
+ for (int i = 0; i < files.length; ++i) {
File fileObj = files[i];
String fileName = virtualFileStr + fileObj.getName();
virtualFiles[i] = new NativeFileObject(fileName, fileObj, user);
}
+
return virtualFiles;
}
-
+
/**
* Create output stream for writing.
*/
public OutputStream createOutputStream(long offset) throws IOException {
-
+
// permission check
- if(!hasWritePermission()) {
+ if (!hasWritePermission()) {
throw new IOException("No write permission : " + file.getName());
}
-
+
// create output stream
RandomAccessFile raf = new RandomAccessFile(file, "rw");
raf.setLength(offset);
raf.seek(offset);
return new FileOutputStream(raf.getFD());
}
-
+
/**
* Create input stream for reading.
*/
public InputStream createInputStream(long offset) throws IOException {
-
+
// permission check
- if(!hasReadPermission()) {
+ if (!hasReadPermission()) {
throw new IOException("No read permission : " + file.getName());
}
-
+
// move to the appropriate offset and create input stream
RandomAccessFile raf = new RandomAccessFile(file, "r");
raf.seek(offset);
return new FileInputStream(raf.getFD());
}
-
+
/**
* Normalize separate characher. Separate character should be '/' always.
*/
public final static String normalizeSeparateChar(String pathName) {
- pathName = pathName.replace(File.separatorChar, '/');
- pathName = pathName.replace('\\', '/');
- return pathName;
+ pathName = pathName.replace(File.separatorChar, '/');
+ pathName = pathName.replace('\\', '/');
+ return pathName;
}
-
+
/**
- * Get the physical canonical file name. It works like
+ * Get the physical canonical file name. It works like
* File.getCanonicalPath().
*
- * @param rootDir The root directory.
- *
- * @param currDir The current directory. It will always be with
- * respect to the root directory.
- *
- * @param fileName The input file name.
- *
- * @return The return string will always begin with the root directory.
- * It will never be null.
- */
- public final static String getPhysicalName(String rootDir,
- String currDir,
- String fileName) {
- return getPhysicalName(rootDir, currDir, fileName, false);
- }
-
- public final static String getPhysicalName(String rootDir,
- String currDir,
- String fileName, boolean caseInsensitive) {
-
+ * @param rootDir
+ * The root directory.
+ * @param currDir
+ * The current directory. It will always be with respect to the
+ * root directory.
+ * @param fileName
+ * The input file name.
+ * @return The return string will always begin with the root directory. It
+ * will never be null.
+ */
+ public final static String getPhysicalName(String rootDir, String currDir,
+ String fileName) {
+ return getPhysicalName(rootDir, currDir, fileName, false);
+ }
+
+ public final static String getPhysicalName(String rootDir, String currDir,
+ String fileName, boolean caseInsensitive) {
+
// get the starting directory
rootDir = rootDir.trim();
fileName = fileName.trim();
-
+
rootDir = normalizeSeparateChar(rootDir);
- if(rootDir.charAt(rootDir.length() - 1) != '/') {
+ if (rootDir.charAt(rootDir.length() - 1) != '/') {
rootDir += '/';
}
-
+
fileName = normalizeSeparateChar(fileName);
String resArg;
- if(fileName.charAt(0) != '/') {
- if(currDir == null) {
+ if (fileName.charAt(0) != '/') {
+ if (currDir == null) {
currDir = "/";
}
currDir = currDir.trim();
- if(currDir.length() == 0) {
+ if (currDir.length() == 0) {
currDir = "/";
}
-
+
currDir = normalizeSeparateChar(currDir);
-
- if(currDir.charAt(0) != '/') {
+
+ if (currDir.charAt(0) != '/') {
currDir = '/' + currDir;
}
- if(currDir.charAt(currDir.length() - 1) != '/') {
+ if (currDir.charAt(currDir.length() - 1) != '/') {
currDir += '/';
}
-
resArg = rootDir + currDir.substring(1);
- }
- else {
+ } else {
resArg = rootDir;
}
-
+
// strip last '/'
- if(resArg.charAt(resArg.length() -1) == '/') {
- resArg = resArg.substring(0, resArg.length()-1);
+ if (resArg.charAt(resArg.length() - 1) == '/') {
+ resArg = resArg.substring(0, resArg.length() - 1);
}
-
+
// replace ., ~ and ..
// in this loop resArg will never end with '/'
StringTokenizer st = new StringTokenizer(fileName, "/");
- while(st.hasMoreTokens()) {
+ while (st.hasMoreTokens()) {
String tok = st.nextToken().trim();
-
+
// . => current directory
- if(tok.equals(".")) {
+ if (tok.equals(".")) {
continue;
}
-
+
// .. => parent directory (if not root)
- if(tok.equals("..")) {
- if(resArg.startsWith(rootDir)) {
+ if (tok.equals("..")) {
+ if (resArg.startsWith(rootDir)) {
int slashIndex = resArg.lastIndexOf('/');
- if(slashIndex != -1) {
+ if (slashIndex != -1) {
resArg = resArg.substring(0, slashIndex);
}
}
continue;
}
-
+
// ~ => home directory (in this case the root directory)
if (tok.equals("~")) {
- resArg = rootDir.substring(0, rootDir.length()-1);
+ resArg = rootDir.substring(0, rootDir.length() - 1);
continue;
}
-
- if(caseInsensitive) {
- File[] matches = new File(resArg).listFiles(new NameEqualsFileFilter(tok, true));
-
- if(matches.length > 0) {
- tok = matches[0].getName();
- }
+
+ if (caseInsensitive) {
+ File[] matches = new File(resArg)
+ .listFiles(new NameEqualsFileFilter(tok, true));
+
+ if (matches.length > 0) {
+ tok = matches[0].getName();
+ }
}
-
+
resArg = resArg + '/' + tok;
}
-
+
// add last slash if necessary
- if( (resArg.length()) + 1 == rootDir.length() ) {
+ if ((resArg.length()) + 1 == rootDir.length()) {
resArg += '/';
}
-
+
// final check
- if ( !resArg.regionMatches(0, rootDir, 0, rootDir.length()) ) {
+ if (!resArg.regionMatches(0, rootDir, 0, rootDir.length())) {
resArg = rootDir;
}
-
+
return resArg;
}
}
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listing/DirectoryLister.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listing/DirectoryLister.java?view=diff&rev=565040&r1=565039&r2=565040
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listing/DirectoryLister.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listing/DirectoryLister.java Sun Aug 12 05:11:32 2007
@@ -79,7 +79,7 @@
}
/**
- * Get the file list.
+ * Get the file list. Files will be listed in alphabetlical order.
*/
private FileObject[] listFiles(FileSystemView fileSystemView, String file) {
FileObject[] files = null;
Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileObjectTestTemplate.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileObjectTestTemplate.java?view=diff&rev=565040&r1=565039&r2=565040
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileObjectTestTemplate.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileObjectTestTemplate.java Sun Aug 12 05:11:32 2007
@@ -14,6 +14,7 @@
protected static final String DIR1_PATH = "/dir1";
protected static final String DIR1_WITH_SLASH_PATH = "/dir1/";
protected static final String FILE1_PATH = "/file1";
+ protected static final String FILE3_PATH = "/file3";
protected static final User USER = new BaseUser() {
public AuthorizationRequest authorize(AuthorizationRequest request) {
@@ -21,20 +22,12 @@
}
};
- public FileObjectTestTemplate() {
- super();
- }
-
- public FileObjectTestTemplate(String name) {
- super(name);
- }
-
- protected abstract FileObject createFile(String fileName, User user);
+ protected abstract FileObject createFileObject(String fileName, User user);
public void testNullFileName() {
try{
- createFile(null, USER);
+ createFileObject(null, USER);
fail("Must throw IllegalArgumentException");
} catch(IllegalArgumentException e) {
// OK
@@ -43,7 +36,7 @@
public void testWhiteSpaceFileName() {
try{
- createFile(" \t", USER);
+ createFileObject(" \t", USER);
fail("Must throw IllegalArgumentException");
} catch(IllegalArgumentException e) {
// OK
@@ -52,7 +45,7 @@
public void testEmptyFileName() {
try{
- createFile("", USER);
+ createFileObject("", USER);
fail("Must throw IllegalArgumentException");
} catch(IllegalArgumentException e) {
// OK
@@ -61,7 +54,7 @@
public void testNonLeadingSlash() {
try{
- createFile("foo", USER);
+ createFileObject("foo", USER);
fail("Must throw IllegalArgumentException");
} catch(IllegalArgumentException e) {
// OK
@@ -69,25 +62,35 @@
}
public void testFullName() {
- FileObject fileObject = createFile(FILE2_PATH, USER);
+ FileObject fileObject = createFileObject(FILE2_PATH, USER);
assertEquals("/dir1/file2", fileObject.getFullName());
- fileObject = createFile("/dir1/", USER);
+ fileObject = createFileObject("/dir1/", USER);
assertEquals("/dir1", fileObject.getFullName());
- fileObject = createFile("/dir1", USER);
+ fileObject = createFileObject("/dir1", USER);
assertEquals("/dir1", fileObject.getFullName());
}
public void testShortName() {
- FileObject fileObject = createFile("/dir1/file2", USER);
+ FileObject fileObject = createFileObject("/dir1/file2", USER);
assertEquals("file2", fileObject.getShortName());
- fileObject = createFile("/dir1/", USER);
+ fileObject = createFileObject("/dir1/", USER);
assertEquals("dir1", fileObject.getShortName());
- fileObject = createFile("/dir1", USER);
+ fileObject = createFileObject("/dir1", USER);
assertEquals("dir1", fileObject.getShortName());
+ }
+
+ public void testListFilesInOrder() {
+ FileObject root = createFileObject("/", USER);
+
+ FileObject[] files = root.listFiles();
+ assertEquals(3, files.length);
+ assertEquals("dir1", files[0].getShortName());
+ assertEquals("file1", files[1].getShortName());
+ assertEquals("file3", files[2].getShortName());
}
}
Added: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java?view=auto&rev=565040
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java (added)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java Sun Aug 12 05:11:32 2007
@@ -0,0 +1,51 @@
+package org.apache.ftpserver.filesystem;
+
+import org.apache.ftpserver.usermanager.BaseUser;
+
+import junit.framework.TestCase;
+
+public abstract class FileSystemViewTemplate extends TestCase {
+
+ protected static final String DIR1_NAME = "dir1";
+
+ protected BaseUser user = new BaseUser();
+
+
+ public void testChangeDirectory() throws Exception {
+ NativeFileSystemView view = new NativeFileSystemView(user);
+ assertEquals("/", view.getCurrentDirectory().getFullName());
+
+ assertTrue(view.changeDirectory(DIR1_NAME));
+ assertEquals("/" + DIR1_NAME, view.getCurrentDirectory().getFullName());
+
+ assertTrue(view.changeDirectory("."));
+ assertEquals("/" + DIR1_NAME, view.getCurrentDirectory().getFullName());
+
+ assertTrue(view.changeDirectory(".."));
+ assertEquals("/", view.getCurrentDirectory().getFullName());
+
+ assertTrue(view.changeDirectory("./" + DIR1_NAME));
+ assertEquals("/" + DIR1_NAME, view.getCurrentDirectory().getFullName());
+
+ assertTrue(view.changeDirectory("~"));
+ assertEquals("/", view.getCurrentDirectory().getFullName());
+ }
+
+ public void testChangeDirectoryCaseInsensitive() throws Exception {
+ NativeFileSystemView view = new NativeFileSystemView(user, true);
+ assertEquals("/", view.getCurrentDirectory().getFullName());
+
+ assertTrue(view.changeDirectory("/DIR1"));
+ assertEquals("/dir1", view.getCurrentDirectory().getFullName());
+ assertTrue(view.getCurrentDirectory().doesExist());
+
+ assertTrue(view.changeDirectory("/dir1"));
+ assertEquals("/dir1", view.getCurrentDirectory().getFullName());
+ assertTrue(view.getCurrentDirectory().doesExist());
+
+ assertTrue(view.changeDirectory("/DiR1"));
+ assertEquals("/dir1", view.getCurrentDirectory().getFullName());
+ assertTrue(view.getCurrentDirectory().doesExist());
+ }
+
+}
\ No newline at end of file
Propchange: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileObjectTest.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileObjectTest.java?view=diff&rev=565040&r1=565039&r2=565040
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileObjectTest.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileObjectTest.java Sun Aug 12 05:11:32 2007
@@ -35,13 +35,16 @@
private static final File TEST_DIR1 = new File(ROOT_DIR, "dir1");
private static final File TEST_FILE1 = new File(ROOT_DIR, "file1");
private static final File TEST_FILE2_IN_DIR1 = new File(TEST_DIR1, "file2");
+ private static final File TEST_FILE3 = new File(ROOT_DIR, "file3");
private static final Map FILE_MAPPINGS = new HashMap();
static {
+ FILE_MAPPINGS.put("/", ROOT_DIR);
FILE_MAPPINGS.put(FILE2_PATH, TEST_FILE2_IN_DIR1);
FILE_MAPPINGS.put(DIR1_PATH, TEST_DIR1);
FILE_MAPPINGS.put(FILE1_PATH, TEST_FILE1);
+ FILE_MAPPINGS.put(FILE2_PATH, TEST_FILE3);
FILE_MAPPINGS.put(DIR1_WITH_SLASH_PATH, TEST_DIR1);
FILE_MAPPINGS.put(" \t", TEST_FILE2_IN_DIR1);
}
@@ -61,10 +64,11 @@
TEST_DIR1.mkdirs();
TEST_FILE1.createNewFile();
TEST_FILE2_IN_DIR1.createNewFile();
+ TEST_FILE3.createNewFile();
}
- protected FileObject createFile(String fileName, User user) {
+ protected FileObject createFileObject(String fileName, User user) {
return new NativeFileObject(fileName, (File)FILE_MAPPINGS.get(fileName), user);
}
Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileSystemViewTest.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileSystemViewTest.java?view=diff&rev=565040&r1=565039&r2=565040
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileSystemViewTest.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileSystemViewTest.java Sun Aug 12 05:11:32 2007
@@ -22,48 +22,22 @@
import java.io.File;
import java.io.IOException;
-import junit.framework.TestCase;
-
import org.apache.ftpserver.ftplet.FtpException;
-import org.apache.ftpserver.usermanager.BaseUser;
import org.apache.ftpserver.util.IoUtils;
-public class NativeFileSystemViewTest extends TestCase {
+public class NativeFileSystemViewTest extends FileSystemViewTemplate {
private static final File TEST_TMP_DIR = new File("test-tmp");
- protected static final File ROOT_DIR = new File(TEST_TMP_DIR, "ftproot");
-
- private static final File TEST_DIR1 = new File(ROOT_DIR, "dir1");
-
- private static final File TEST_FILE1 = new File(ROOT_DIR, "file1");
-
- private static final File TEST_FILE2_IN_DIR1 = new File(TEST_DIR1, "file2");
-
- private static final String ROOT_DIR_PATH = ROOT_DIR.getAbsolutePath()
- .replace('\\', '/');
+ private static final File ROOT_DIR = new File(TEST_TMP_DIR, "ftproot");
- private static final String FULL_PATH = ROOT_DIR_PATH + "/"
- + TEST_DIR1.getName() + "/" + TEST_FILE2_IN_DIR1.getName();
+ private static final File TEST_DIR1 = new File(ROOT_DIR, DIR1_NAME);
- private static final String FULL_PATH_NO_CURRDIR = ROOT_DIR_PATH + "/"
- + TEST_FILE2_IN_DIR1.getName();
-
- private BaseUser user;
-
- /*
- * (non-Javadoc)
- *
- * @see junit.framework.TestCase#setUp()
- */
protected void setUp() throws Exception {
initDirs();
TEST_DIR1.mkdirs();
- TEST_FILE1.createNewFile();
- TEST_FILE2_IN_DIR1.createNewFile();
- user = new BaseUser();
user.setHomeDirectory(ROOT_DIR.getAbsolutePath());
}
@@ -72,42 +46,7 @@
assertEquals("/", view.getCurrentDirectory().getFullName());
}
- public void testChangeDirectory() throws Exception {
- NativeFileSystemView view = new NativeFileSystemView(user);
- assertEquals("/", view.getCurrentDirectory().getFullName());
- assertTrue(view.changeDirectory(TEST_DIR1.getName()));
- assertEquals("/" + TEST_DIR1.getName(), view.getCurrentDirectory().getFullName());
-
- assertTrue(view.changeDirectory("."));
- assertEquals("/" + TEST_DIR1.getName(), view.getCurrentDirectory().getFullName());
-
- assertTrue(view.changeDirectory(".."));
- assertEquals("/", view.getCurrentDirectory().getFullName());
-
- assertTrue(view.changeDirectory("./" + TEST_DIR1.getName()));
- assertEquals("/" + TEST_DIR1.getName(), view.getCurrentDirectory().getFullName());
-
- assertTrue(view.changeDirectory("~"));
- assertEquals("/", view.getCurrentDirectory().getFullName());
- }
-
- public void testChangeDirectoryCaseInsensitive() throws Exception {
- NativeFileSystemView view = new NativeFileSystemView(user, true);
- assertEquals("/", view.getCurrentDirectory().getFullName());
-
- assertTrue(view.changeDirectory("/DIR1"));
- assertEquals("/dir1", view.getCurrentDirectory().getFullName());
- assertTrue(view.getCurrentDirectory().doesExist());
-
- assertTrue(view.changeDirectory("/dir1"));
- assertEquals("/dir1", view.getCurrentDirectory().getFullName());
- assertTrue(view.getCurrentDirectory().doesExist());
-
- assertTrue(view.changeDirectory("/DiR1"));
- assertEquals("/dir1", view.getCurrentDirectory().getFullName());
- assertTrue(view.getCurrentDirectory().doesExist());
- }
public void testConstructorWithNullUser() throws FtpException {
try{
Modified: incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FileObject.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FileObject.java?view=diff&rev=565040&r1=565039&r2=565040
==============================================================================
--- incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FileObject.java (original)
+++ incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FileObject.java Sun Aug 12 05:11:32 2007
@@ -117,6 +117,7 @@
/**
* List file objects. If not a directory or does not exist,
* null will be returned.
+ * Files must be returned in alphabetical order.
*/
FileObject[] listFiles();