193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair/*
293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Copyright 2007 the original author or authors.
393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair *
493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Licensed under the Apache License, Version 2.0 (the "License");
593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * you may not use this file except in compliance with the License.
693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * You may obtain a copy of the License at
793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair *
893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair *      http://www.apache.org/licenses/LICENSE-2.0
993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair *
1093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Unless required by applicable law or agreed to in writing, software
1193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * distributed under the License is distributed on an "AS IS" BASIS,
1293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * See the License for the specific language governing permissions and
1493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * limitations under the License.
1593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */
1693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairpackage org.mockftpserver.stub.command;
1793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
18dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismairimport org.slf4j.Logger;
19dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismairimport org.slf4j.LoggerFactory;
2093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport org.mockftpserver.core.command.Command;
2193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport org.mockftpserver.core.command.InvocationRecord;
2293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport org.mockftpserver.core.session.Session;
2393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport org.mockftpserver.core.util.AssertFailedException;
2440658190151b7ded3489ff89c301b470155c95f4chrismairimport org.mockftpserver.test.AbstractTestCase;
2593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
26848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismairimport java.util.ListResourceBundle;
27848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismairimport java.util.ResourceBundle;
28848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair
2993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair/**
3093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Tests for AbstractStubDataCommandHandler. The class name is prefixed with an underscore
3193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * so that it is not filtered out by Maven's Surefire test plugin.
3293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair *
334ca3386623ce60063f27955ad1b2b1b6cbba8b09chrismair * @version $Revision$ - $Date$
3493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair *
3593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * @author Chris Mair
3693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */
3740658190151b7ded3489ff89c301b470155c95f4chrismairpublic final class _AbstractStubDataCommandHandlerTest extends AbstractTestCase {
3893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
39dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismair    private static final Logger LOG = LoggerFactory.getLogger(_AbstractStubDataCommandHandlerTest.class);
4093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    private static final Command COMMAND = new Command("command", EMPTY);
4193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    private static final InvocationRecord INVOCATION_RECORD = new InvocationRecord(COMMAND, DEFAULT_HOST);
4293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
4393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    private static final String REPLY_TEXT150 = "reply 150 ... abcdef";
4493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    private static final String REPLY_TEXT226 = "reply 226 ... abcdef";
4593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    private static final String REPLY_TEXT222 = "reply 222 ... abcdef";
4693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    private static final String REPLY_TEXT333 = "reply 333 ... abcdef";
4793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    private static final String REPLY_TEXT444 = "reply 444 ... abcdef";
4893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
4993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    private Session session;
5093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    private ResourceBundle replyTextBundle;
5193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    private AbstractStubDataCommandHandler commandHandler;
5293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
5393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    /**
5493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair     * Test the handleCommand() method
5593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair     */
5693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    public void testHandleCommand() throws Exception {
5793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
5893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session.sendReply(150, REPLY_TEXT150);
5993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session.openDataConnection();
6093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session.sendReply(222, REPLY_TEXT222);
6193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session.sendReply(333, REPLY_TEXT333);
6293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session.sendReply(444, REPLY_TEXT444);
6393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session.closeDataConnection();
6493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session.sendReply(226, REPLY_TEXT226);
6593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        replay(session);
6693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
6793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        // Define CommandHandler test subclass
6893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        commandHandler = new AbstractStubDataCommandHandler() {
6993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            protected void beforeProcessData(Command c, Session s, InvocationRecord ir) {
7093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                verifyParameters(c, s, ir);
7193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                // Send unique reply code so that we can verify proper method invocation and ordering
7293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                session.sendReply(222, REPLY_TEXT222);
7393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            }
7493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
7593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            protected void processData(Command c, Session s, InvocationRecord ir) {
7693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                verifyParameters(c, s, ir);
7793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                // Send unique reply code so that we can verify proper method invocation and ordering
7893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                session.sendReply(333, REPLY_TEXT333);
7993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            }
8093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
8193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            protected void afterProcessData(Command c, Session s, InvocationRecord ir) {
8293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                verifyParameters(c, s, ir);
8393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                // Send unique reply code so that we can verify proper method invocation and ordering
8493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                session.sendReply(444, REPLY_TEXT444);
8593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            }
8693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
8793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            private void verifyParameters(Command c, Session s, InvocationRecord ir) {
8893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                assertSame("command", COMMAND, c);
8993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                assertSame("session", session, s);
9093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                assertSame("invocationRecord", INVOCATION_RECORD, ir);
9193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            }
9293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        };
9393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
9493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        commandHandler.setReplyTextBundle(replyTextBundle);
9593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        commandHandler.handleCommand(COMMAND, session, INVOCATION_RECORD);
9693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
9793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        verify(session);
9893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    }
9993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
10093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    /**
10193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair     * Test the handleCommand() method, overriding the initial reply code and text
10293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair     */
10393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    public void testHandleCommand_OverrideInitialReplyCodeAndText() throws Exception {
10493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
10593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        final int OVERRIDE_REPLY_CODE = 333;
10693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        final String OVERRIDE_REPLY_TEXT = "reply text";
10793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
10893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session.sendReply(OVERRIDE_REPLY_CODE, OVERRIDE_REPLY_TEXT);
10993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session.openDataConnection();
11093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session.closeDataConnection();
11193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session.sendReply(226, REPLY_TEXT226);
11293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        replay(session);
11393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
11493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        commandHandler.setPreliminaryReplyCode(OVERRIDE_REPLY_CODE);
11593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        commandHandler.setPreliminaryReplyText(OVERRIDE_REPLY_TEXT);
11693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        commandHandler.setReplyTextBundle(replyTextBundle);
11793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        commandHandler.handleCommand(COMMAND, session, INVOCATION_RECORD);
11893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
11993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        verify(session);
12093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    }
12193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
12293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    /**
12393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair     * Test the setPreliminaryReplyCode() method, passing in an invalid value
12493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair     */
12593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    public void testSetPreliminaryReplyCode_Invalid() {
12693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        try {
12793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            commandHandler.setPreliminaryReplyCode(0);
12893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            fail("Expected AssertFailedException");
12993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        }
13093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        catch (AssertFailedException expected) {
13193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            LOG.info("Expected: " + expected);
13293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        }
13393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    }
13493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
13593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    /**
13693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair     * Test the setFinalReplyCode() method, passing in an invalid value
13793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair     */
13893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    public void testSetFinalReplyCode_Invalid() {
13993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        try {
14093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            commandHandler.setFinalReplyCode(0);
14193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            fail("Expected AssertFailedException");
14293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        }
14393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        catch (AssertFailedException expected) {
14493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            LOG.info("Expected: " + expected);
14593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        }
14693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    }
14793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
14893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    //-------------------------------------------------------------------------
14993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    // Test setup
15093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    //-------------------------------------------------------------------------
15193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
15293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    /**
15393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair     * Perform initialization before each test
15493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair     *
15540658190151b7ded3489ff89c301b470155c95f4chrismair     * @see org.mockftpserver.test.AbstractTestCase#setUp()
15693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair     */
15793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    protected void setUp() throws Exception {
15893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        super.setUp();
15993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        session = (Session) createMock(Session.class);
16093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        replyTextBundle = new ListResourceBundle() {
16193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            protected Object[][] getContents() {
16293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                return new Object[][] {
16393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                        { Integer.toString(150), REPLY_TEXT150 },
16493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                        { Integer.toString(222), REPLY_TEXT222 },
16593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                        { Integer.toString(226), REPLY_TEXT226 },
16693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                        { Integer.toString(333), REPLY_TEXT333 },
16793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                        { Integer.toString(444), REPLY_TEXT444 },
16893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair                };
16993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            }
17093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        };
17193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        commandHandler = new AbstractStubDataCommandHandler() {
17293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            protected void processData(Command c, Session s, InvocationRecord ir) {
17393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair            }
17493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair        };
17593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair    }
17693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair
17793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair}
178