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