1e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair/*
2e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Copyright 2007 the original author or authors.
3e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
4e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Licensed under the Apache License, Version 2.0 (the "License");
5e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * you may not use this file except in compliance with the License.
6e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * You may obtain a copy of the License at
7e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
8e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *      http://www.apache.org/licenses/LICENSE-2.0
9e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
10e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Unless required by applicable law or agreed to in writing, software
11e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * distributed under the License is distributed on an "AS IS" BASIS,
12e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * See the License for the specific language governing permissions and
14e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * limitations under the License.
15e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair */
16e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairpackage org.mockftpserver.stub.command;
17e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
18e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.ListResourceBundle;
19e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.ResourceBundle;
20e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
21e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.apache.log4j.Logger;
22e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.core.command.Command;
23e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.core.command.InvocationRecord;
24e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.core.session.Session;
25e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.core.util.AssertFailedException;
26e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.stub.command.AbstractStubDataCommandHandler;
27e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.test.AbstractTest;
28e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
29e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair/**
30e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Tests for AbstractStubDataCommandHandler. The class name is prefixed with an underscore
31e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * so that it is not filtered out by Maven's Surefire test plugin.
32e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
33e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * @version $Revision$ - $Date$
34e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
35e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * @author Chris Mair
36e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair */
37e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairpublic final class _AbstractStubDataCommandHandlerTest extends AbstractTest {
38e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
39e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private static final Logger LOG = Logger.getLogger(_AbstractStubDataCommandHandlerTest.class);
40e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private static final Command COMMAND = new Command("command", EMPTY);
41e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private static final InvocationRecord INVOCATION_RECORD = new InvocationRecord(COMMAND, DEFAULT_HOST);
42e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
43e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private static final String REPLY_TEXT150 = "reply 150 ... abcdef";
44e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private static final String REPLY_TEXT226 = "reply 226 ... abcdef";
45e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private static final String REPLY_TEXT222 = "reply 222 ... abcdef";
46e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private static final String REPLY_TEXT333 = "reply 333 ... abcdef";
47e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private static final String REPLY_TEXT444 = "reply 444 ... abcdef";
48e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
49e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private Session session;
50e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private ResourceBundle replyTextBundle;
51e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private AbstractStubDataCommandHandler commandHandler;
52e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
53e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
54e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Test the handleCommand() method
55e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
56e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    public void testHandleCommand() throws Exception {
57e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
58e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session.sendReply(150, REPLY_TEXT150);
59e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session.openDataConnection();
60e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session.sendReply(222, REPLY_TEXT222);
61e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session.sendReply(333, REPLY_TEXT333);
62e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session.sendReply(444, REPLY_TEXT444);
63e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session.closeDataConnection();
64e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session.sendReply(226, REPLY_TEXT226);
65e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        replay(session);
66e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
67e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        // Define CommandHandler test subclass
68e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        commandHandler = new AbstractStubDataCommandHandler() {
69e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            protected void beforeProcessData(Command c, Session s, InvocationRecord ir) {
70e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                verifyParameters(c, s, ir);
71e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                // Send unique reply code so that we can verify proper method invocation and ordering
72e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                session.sendReply(222, REPLY_TEXT222);
73e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            }
74e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
75e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            protected void processData(Command c, Session s, InvocationRecord ir) {
76e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                verifyParameters(c, s, ir);
77e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                // Send unique reply code so that we can verify proper method invocation and ordering
78e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                session.sendReply(333, REPLY_TEXT333);
79e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            }
80e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
81e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            protected void afterProcessData(Command c, Session s, InvocationRecord ir) {
82e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                verifyParameters(c, s, ir);
83e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                // Send unique reply code so that we can verify proper method invocation and ordering
84e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                session.sendReply(444, REPLY_TEXT444);
85e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            }
86e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
87e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            private void verifyParameters(Command c, Session s, InvocationRecord ir) {
88e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                assertSame("command", COMMAND, c);
89e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                assertSame("session", session, s);
90e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                assertSame("invocationRecord", INVOCATION_RECORD, ir);
91e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            }
92e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        };
93e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
94e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        commandHandler.setReplyTextBundle(replyTextBundle);
95e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        commandHandler.handleCommand(COMMAND, session, INVOCATION_RECORD);
96e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
97e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        verify(session);
98e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
99e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
100e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
101e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Test the handleCommand() method, overriding the initial reply code and text
102e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
103e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    public void testHandleCommand_OverrideInitialReplyCodeAndText() throws Exception {
104e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
105e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        final int OVERRIDE_REPLY_CODE = 333;
106e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        final String OVERRIDE_REPLY_TEXT = "reply text";
107e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
108e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session.sendReply(OVERRIDE_REPLY_CODE, OVERRIDE_REPLY_TEXT);
109e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session.openDataConnection();
110e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session.closeDataConnection();
111e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session.sendReply(226, REPLY_TEXT226);
112e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        replay(session);
113e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
114e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        commandHandler.setPreliminaryReplyCode(OVERRIDE_REPLY_CODE);
115e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        commandHandler.setPreliminaryReplyText(OVERRIDE_REPLY_TEXT);
116e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        commandHandler.setReplyTextBundle(replyTextBundle);
117e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        commandHandler.handleCommand(COMMAND, session, INVOCATION_RECORD);
118e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
119e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        verify(session);
120e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
121e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
122e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
123e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Test the setPreliminaryReplyCode() method, passing in an invalid value
124e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
125e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    public void testSetPreliminaryReplyCode_Invalid() {
126e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        try {
127e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            commandHandler.setPreliminaryReplyCode(0);
128e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            fail("Expected AssertFailedException");
129e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
130e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        catch (AssertFailedException expected) {
131e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            LOG.info("Expected: " + expected);
132e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
133e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
134e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
135e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
136e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Test the setFinalReplyCode() method, passing in an invalid value
137e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
138e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    public void testSetFinalReplyCode_Invalid() {
139e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        try {
140e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            commandHandler.setFinalReplyCode(0);
141e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            fail("Expected AssertFailedException");
142e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
143e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        catch (AssertFailedException expected) {
144e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            LOG.info("Expected: " + expected);
145e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
146e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
147e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
148e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-------------------------------------------------------------------------
149e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    // Test setup
150e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-------------------------------------------------------------------------
151e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
152e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
153e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Perform initialization before each test
154e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     *
155e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @see org.mockftpserver.test.AbstractTest#setUp()
156e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
157e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void setUp() throws Exception {
158e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        super.setUp();
159e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        session = (Session) createMock(Session.class);
160e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        replyTextBundle = new ListResourceBundle() {
161e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            protected Object[][] getContents() {
162e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                return new Object[][] {
163e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                        { Integer.toString(150), REPLY_TEXT150 },
164e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                        { Integer.toString(222), REPLY_TEXT222 },
165e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                        { Integer.toString(226), REPLY_TEXT226 },
166e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                        { Integer.toString(333), REPLY_TEXT333 },
167e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                        { Integer.toString(444), REPLY_TEXT444 },
168e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                };
169e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            }
170e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        };
171e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        commandHandler = new AbstractStubDataCommandHandler() {
172e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            protected void processData(Command c, Session s, InvocationRecord ir) {
173e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            }
174e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        };
175e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
176e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
177e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair}
178