This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-vfs.git
commit 0369902c8d3a121edf9d99d4adb59bc76ba3e3e9 Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Sun Feb 7 18:49:03 2021 -0500 Partial but changed application of PR https://github.com/apache/commons-vfs/pull/82 FTP tests can be configured with a custom FTP server command factory. These tests pass but have no main changes. Therefore, better tests are needed. --- .../vfs2/provider/ftp/FtpProviderMdtmTestCase.java | 31 +++++++++++ .../provider/ftp/FtpProviderNoMdtmTestCase.java | 65 ++++++++++++++++++++++ 2 files changed, 96 insertions(+) diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmTestCase.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmTestCase.java new file mode 100644 index 0000000..dbdba5f --- /dev/null +++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmTestCase.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.commons.vfs2.provider.ftp; + +import org.apache.commons.vfs2.LastModifiedTests; + +import junit.framework.Test; + +public class FtpProviderMdtmTestCase extends FtpProviderTestCase { + + /** + * MDTM is supported by default for underlying Apache MINA FTP server. + */ + public static Test suite() throws Exception { + return suite(new FtpProviderTestCase(), LastModifiedTests.class); + } +} diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderNoMdtmTestCase.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderNoMdtmTestCase.java new file mode 100644 index 0000000..1efb2d4 --- /dev/null +++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderNoMdtmTestCase.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.commons.vfs2.provider.ftp; + +import java.io.IOException; + +import org.apache.commons.vfs2.LastModifiedTests; +import org.apache.ftpserver.command.Command; +import org.apache.ftpserver.command.CommandFactory; +import org.apache.ftpserver.command.CommandFactoryFactory; +import org.apache.ftpserver.ftplet.FtpException; +import org.apache.ftpserver.ftplet.FtpReply; +import org.apache.ftpserver.ftplet.FtpRequest; +import org.apache.ftpserver.impl.FtpIoSession; +import org.apache.ftpserver.impl.FtpReplyTranslator; +import org.apache.ftpserver.impl.FtpServerContext; +import org.apache.ftpserver.impl.LocalizedFtpReply; + +import junit.framework.Test; + +public class FtpProviderNoMdtmTestCase extends FtpProviderTestCase { + + public static Test suite() throws Exception { + return suite(new FtpProviderNoMdtmTestCase(), LastModifiedTests.class); + } + + /** + * Explicitly remove MDTM feature from underlying Apache MINA FTP server so we can fallback to LIST timestamp + * (existing default behavior). + */ + @Override + protected CommandFactory getCommandFactory() { + final CommandFactoryFactory factory = new CommandFactoryFactory(); + factory.addCommand("FEAT", new Command() { + + @Override + public void execute(FtpIoSession session, FtpServerContext context, FtpRequest request) + throws IOException, FtpException { + session.resetState(); + + final String replyMsg = FtpReplyTranslator.translateMessage(session, request, context, + FtpReply.REPLY_211_SYSTEM_STATUS_REPLY, "FEAT", null); + final LocalizedFtpReply reply = new LocalizedFtpReply(FtpReply.REPLY_211_SYSTEM_STATUS_REPLY, + replyMsg.replaceFirst(" MDTM\\n", "")); + + session.write(reply); + } + }); + return factory.createCommandFactory(); + } +}