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