117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair/* 217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Copyright 2007 the original author or authors. 317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * 417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Licensed under the Apache License, Version 2.0 (the "License"); 517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * you may not use this file except in compliance with the License. 617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * You may obtain a copy of the License at 717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * 817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * http://www.apache.org/licenses/LICENSE-2.0 917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * 1017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Unless required by applicable law or agreed to in writing, software 1117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * distributed under the License is distributed on an "AS IS" BASIS, 1217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * See the License for the specific language governing permissions and 1417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * limitations under the License. 1517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 1617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairpackage org.mockftpserver.stub; 1717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 1817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport java.util.HashMap; 1917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport java.util.Map; 2017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport java.util.ResourceBundle; 2117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 2217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 2317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.apache.log4j.Logger; 2417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.core.command.Command; 2517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.core.command.CommandHandler; 2617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.core.command.InvocationRecord; 2717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.core.session.Session; 2817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.core.util.AssertFailedException; 2917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.stub.StubFtpServer; 3017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.stub.command.AbstractStubCommandHandler; 3117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.stub.command.CwdCommandHandler; 3217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.test.AbstractTest; 3317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 3417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair/** 3517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Unit tests for StubFtpServer. Also see {@link StubFtpServer_StartTest} 3617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * and {@link StubFtpServerIntegrationTest}. 3717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * 3817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @version $Revision$ - $Date$ 3917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * 4017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @author Chris Mair 4117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 4217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairpublic final class StubFtpServerTest extends AbstractTest { 4317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 4417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair private static final Logger LOG = Logger.getLogger(StubFtpServerTest.class); 4517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 4617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair private StubFtpServer stubFtpServer; 4717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair private AbstractStubCommandHandler commandHandler; 4817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair private CommandHandler commandHandler_NoReplyTextBundle; 4917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 5017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 5117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Test the setCommandHandlers() method 5217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 5317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public void testSetCommandHandlers() { 5417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair Map mapping = new HashMap(); 5517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair mapping.put("AAA", commandHandler); 5617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair mapping.put("BBB", commandHandler_NoReplyTextBundle); 5717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 5817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer.setCommandHandlers(mapping); 5917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("commandHandler1", commandHandler, stubFtpServer.getCommandHandler("AAA")); 6017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("commandHandler2", commandHandler_NoReplyTextBundle, stubFtpServer.getCommandHandler("BBB")); 6117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 6217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("replyTextBundle", stubFtpServer.replyTextBundle, commandHandler.getReplyTextBundle()); 6317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 6417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair // Make sure default CommandHandlers are still set 6517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertEquals("CwdCommandHandler", CwdCommandHandler.class, stubFtpServer.getCommandHandler("CWD").getClass()); 6617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 6717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 6817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 6917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Test the setCommandHandlers() method, when the Map is null 7017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 7117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public void testSetCommandHandlers_Null() { 7217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair try { 7317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer.setCommandHandlers(null); 7417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair fail("Expected AssertFailedException"); 7517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 7617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair catch (AssertFailedException expected) { 7717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair LOG.info("Expected: " + expected); 7817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 7917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 8017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 8117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 8217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Test the setCommandHandler() method, for a CommandHandler that does not implement ResourceBundleAware 8317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 8417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public void testSetCommandHandler_NotReplyTextBundleAware() { 8517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer.setCommandHandler("ZZZ", commandHandler_NoReplyTextBundle); 8617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("commandHandler", commandHandler_NoReplyTextBundle, stubFtpServer.getCommandHandler("ZZZ")); 8717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 8817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 8917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 9017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Test the setCommandHandler() method, for a CommandHandler that implements ReplyTextBundleAware, 9117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * and whose replyTextBundle attribute is null. 9217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 9317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public void testSetCommandHandler_NullReplyTextBundle() { 9417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer.setCommandHandler("ZZZ", commandHandler); 9517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("commandHandler", commandHandler, stubFtpServer.getCommandHandler("ZZZ")); 9617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("replyTextBundle", stubFtpServer.replyTextBundle, commandHandler.getReplyTextBundle()); 9717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 9817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 9917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 10017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Test the setCommandHandler() method, when the commandName is null 10117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 10217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public void testSetCommandHandler_NullCommandName() { 10317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair CommandHandler commandHandler = (CommandHandler) createMock(CommandHandler.class); 10417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair try { 10517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer.setCommandHandler(null, commandHandler); 10617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair fail("Expected AssertFailedException"); 10717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 10817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair catch (AssertFailedException expected) { 10917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair LOG.info("Expected: " + expected); 11017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 11117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 11217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 11317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 11417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Test the setCommandHandler() method, when the commandHandler is null 11517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 11617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public void testSetCommandHandler_NullCommandHandler() { 11717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair try { 11817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer.setCommandHandler("ZZZ", null); 11917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair fail("Expected AssertFailedException"); 12017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 12117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair catch (AssertFailedException expected) { 12217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair LOG.info("Expected: " + expected); 12317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 12417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 12517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 12617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 12717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Test setReplyTextBaseName() method 12817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 12917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public void testSetReplyTextBaseName() { 13017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer.setReplyTextBaseName("SampleReplyText"); 13117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair CwdCommandHandler commandHandler = new CwdCommandHandler(); 13217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 13317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair // The resource bundle is passed along to new CommandHandlers (if they don't already have one) 13417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer.setCommandHandler("CWD", commandHandler); 13517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair ResourceBundle resourceBundle = commandHandler.getReplyTextBundle(); 13617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertEquals("110", "Testing123", resourceBundle.getString("110")); 13717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 13817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 13917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 14017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Test the setCommandHandler() and getCommandHandler() methods for commands in lower case or mixed case 14117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 14217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public void testLowerCaseOrMixedCaseCommandNames() { 14317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer.setCommandHandler("XXX", commandHandler); 14417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("ZZZ", commandHandler, stubFtpServer.getCommandHandler("XXX")); 14517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("Zzz", commandHandler, stubFtpServer.getCommandHandler("Xxx")); 14617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("zzz", commandHandler, stubFtpServer.getCommandHandler("xxx")); 14717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 14817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer.setCommandHandler("YyY", commandHandler); 14917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("ZZZ", commandHandler, stubFtpServer.getCommandHandler("YYY")); 15017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("Zzz", commandHandler, stubFtpServer.getCommandHandler("Yyy")); 15117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("zzz", commandHandler, stubFtpServer.getCommandHandler("yyy")); 15217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 15317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer.setCommandHandler("zzz", commandHandler); 15417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("ZZZ", commandHandler, stubFtpServer.getCommandHandler("ZZZ")); 15517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("Zzz", commandHandler, stubFtpServer.getCommandHandler("zzZ")); 15617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair assertSame("zzz", commandHandler, stubFtpServer.getCommandHandler("zzz")); 15717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 15817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 15917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair //------------------------------------------------------------------------- 16017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair // Test setup 16117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair //------------------------------------------------------------------------- 16217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 16317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair /** 16417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @see org.mockftpserver.test.AbstractTest#setUp() 16517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */ 16617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair protected void setUp() throws Exception { 16717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair super.setUp(); 16817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 16917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair stubFtpServer = new StubFtpServer(); 17017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 17117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair // Create a CommandHandler instance that also implements ResourceBundleAware 17217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair commandHandler = new AbstractStubCommandHandler() { 17317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair protected void handleCommand(Command command, Session session, InvocationRecord invocationRecord) throws Exception { 17417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 17517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair }; 17617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 17717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair // Create a CommandHandler instance that does NOT implement ResourceBundleAware 17817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair commandHandler_NoReplyTextBundle = new CommandHandler() { 17917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair public void handleCommand(Command command, Session session) throws Exception { 18017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 18117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair }; 18217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair } 18317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair 18417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair} 185