160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair/*
260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Copyright 2007 the original author or authors.
360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *
460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Licensed under the Apache License, Version 2.0 (the "License");
560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * you may not use this file except in compliance with the License.
660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * You may obtain a copy of the License at
760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *
860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *      http://www.apache.org/licenses/LICENSE-2.0
960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *
1060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Unless required by applicable law or agreed to in writing, software
1160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * distributed under the License is distributed on an "AS IS" BASIS,
1260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * See the License for the specific language governing permissions and
1460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * limitations under the License.
1560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair */
1660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairpackage org.mockftpserver.stub.command;
1760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
1860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.apache.log4j.Logger;
1960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.core.command.Command;
2060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.core.command.InvocationRecord;
2160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.core.session.Session;
2260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.core.util.AssertFailedException;
2360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.test.AbstractTest;
2460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
2560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport java.util.ListResourceBundle;
2660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport java.util.ResourceBundle;
2760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
2860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair/**
2960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Tests for AbstractStubDataCommandHandler. The class name is prefixed with an underscore
3060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * so that it is not filtered out by Maven's Surefire test plugin.
3160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *
3260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * @version $Revision$ - $Date$
3360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *
3460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * @author Chris Mair
3560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair */
3660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairpublic final class _AbstractStubDataCommandHandlerTest extends AbstractTest {
3760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
3860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    private static final Logger LOG = Logger.getLogger(_AbstractStubDataCommandHandlerTest.class);
3960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    private static final Command COMMAND = new Command("command", EMPTY);
4060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    private static final InvocationRecord INVOCATION_RECORD = new InvocationRecord(COMMAND, DEFAULT_HOST);
4160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
4260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    private static final String REPLY_TEXT150 = "reply 150 ... abcdef";
4360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    private static final String REPLY_TEXT226 = "reply 226 ... abcdef";
4460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    private static final String REPLY_TEXT222 = "reply 222 ... abcdef";
4560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    private static final String REPLY_TEXT333 = "reply 333 ... abcdef";
4660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    private static final String REPLY_TEXT444 = "reply 444 ... abcdef";
4760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
4860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    private Session session;
4960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    private ResourceBundle replyTextBundle;
5060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    private AbstractStubDataCommandHandler commandHandler;
5160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
5260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    /**
5360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     * Test the handleCommand() method
5460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     */
5560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    public void testHandleCommand() throws Exception {
5660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
5760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.sendReply(150, REPLY_TEXT150);
5860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.openDataConnection();
5960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.sendReply(222, REPLY_TEXT222);
6060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.sendReply(333, REPLY_TEXT333);
6160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.sendReply(444, REPLY_TEXT444);
6260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.closeDataConnection();
6360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.sendReply(226, REPLY_TEXT226);
6460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        replay(session);
6560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
6660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        // Define CommandHandler test subclass
6760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        commandHandler = new AbstractStubDataCommandHandler() {
6860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            protected void beforeProcessData(Command c, Session s, InvocationRecord ir) {
6960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                verifyParameters(c, s, ir);
7060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                // Send unique reply code so that we can verify proper method invocation and ordering
7160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                session.sendReply(222, REPLY_TEXT222);
7260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            }
7360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
7460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            protected void processData(Command c, Session s, InvocationRecord ir) {
7560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                verifyParameters(c, s, ir);
7660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                // Send unique reply code so that we can verify proper method invocation and ordering
7760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                session.sendReply(333, REPLY_TEXT333);
7860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            }
7960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
8060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            protected void afterProcessData(Command c, Session s, InvocationRecord ir) {
8160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                verifyParameters(c, s, ir);
8260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                // Send unique reply code so that we can verify proper method invocation and ordering
8360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                session.sendReply(444, REPLY_TEXT444);
8460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            }
8560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
8660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            private void verifyParameters(Command c, Session s, InvocationRecord ir) {
8760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                assertSame("command", COMMAND, c);
8860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                assertSame("session", session, s);
8960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                assertSame("invocationRecord", INVOCATION_RECORD, ir);
9060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            }
9160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        };
9260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
9360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        commandHandler.setReplyTextBundle(replyTextBundle);
9460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        commandHandler.handleCommand(COMMAND, session, INVOCATION_RECORD);
9560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
9660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        verify(session);
9760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
9860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
9960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    /**
10060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     * Test the handleCommand() method, overriding the initial reply code and text
10160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     */
10260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    public void testHandleCommand_OverrideInitialReplyCodeAndText() throws Exception {
10360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
10460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        final int OVERRIDE_REPLY_CODE = 333;
10560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        final String OVERRIDE_REPLY_TEXT = "reply text";
10660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
10760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.sendReply(OVERRIDE_REPLY_CODE, OVERRIDE_REPLY_TEXT);
10860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.openDataConnection();
10960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.closeDataConnection();
11060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.sendReply(226, REPLY_TEXT226);
11160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        replay(session);
11260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
11360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        commandHandler.setPreliminaryReplyCode(OVERRIDE_REPLY_CODE);
11460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        commandHandler.setPreliminaryReplyText(OVERRIDE_REPLY_TEXT);
11560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        commandHandler.setReplyTextBundle(replyTextBundle);
11660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        commandHandler.handleCommand(COMMAND, session, INVOCATION_RECORD);
11760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
11860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        verify(session);
11960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
12060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
12160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    /**
12260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     * Test the setPreliminaryReplyCode() method, passing in an invalid value
12360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     */
12460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    public void testSetPreliminaryReplyCode_Invalid() {
12560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        try {
12660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            commandHandler.setPreliminaryReplyCode(0);
12760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            fail("Expected AssertFailedException");
12860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        }
12960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        catch (AssertFailedException expected) {
13060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            LOG.info("Expected: " + expected);
13160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        }
13260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
13360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
13460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    /**
13560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     * Test the setFinalReplyCode() method, passing in an invalid value
13660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     */
13760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    public void testSetFinalReplyCode_Invalid() {
13860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        try {
13960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            commandHandler.setFinalReplyCode(0);
14060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            fail("Expected AssertFailedException");
14160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        }
14260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        catch (AssertFailedException expected) {
14360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            LOG.info("Expected: " + expected);
14460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        }
14560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
14660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
14760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    //-------------------------------------------------------------------------
14860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    // Test setup
14960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    //-------------------------------------------------------------------------
15060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
15160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    /**
15260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     * Perform initialization before each test
15360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     *
15460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     * @see org.mockftpserver.test.AbstractTest#setUp()
15560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair     */
15660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    protected void setUp() throws Exception {
15760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        super.setUp();
15860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session = (Session) createMock(Session.class);
15960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        replyTextBundle = new ListResourceBundle() {
16060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            protected Object[][] getContents() {
16160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                return new Object[][] {
16260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                        { Integer.toString(150), REPLY_TEXT150 },
16360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                        { Integer.toString(222), REPLY_TEXT222 },
16460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                        { Integer.toString(226), REPLY_TEXT226 },
16560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                        { Integer.toString(333), REPLY_TEXT333 },
16660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                        { Integer.toString(444), REPLY_TEXT444 },
16760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair                };
16860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            }
16960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        };
17060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        commandHandler = new AbstractStubDataCommandHandler() {
17160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            protected void processData(Command c, Session s, InvocationRecord ir) {
17260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair            }
17360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        };
17460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
17560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
17660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair}
177