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