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