1dfb59d50631968ab1a13002ea5421ece93169851chrismair/* 2dfb59d50631968ab1a13002ea5421ece93169851chrismair * Copyright 2007 the original author or authors. 3dfb59d50631968ab1a13002ea5421ece93169851chrismair * 4dfb59d50631968ab1a13002ea5421ece93169851chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5dfb59d50631968ab1a13002ea5421ece93169851chrismair * you may not use this file except in compliance with the License. 6dfb59d50631968ab1a13002ea5421ece93169851chrismair * You may obtain a copy of the License at 7dfb59d50631968ab1a13002ea5421ece93169851chrismair * 8dfb59d50631968ab1a13002ea5421ece93169851chrismair * http://www.apache.org/licenses/LICENSE-2.0 9dfb59d50631968ab1a13002ea5421ece93169851chrismair * 10dfb59d50631968ab1a13002ea5421ece93169851chrismair * Unless required by applicable law or agreed to in writing, software 11dfb59d50631968ab1a13002ea5421ece93169851chrismair * distributed under the License is distributed on an "AS IS" BASIS, 12dfb59d50631968ab1a13002ea5421ece93169851chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dfb59d50631968ab1a13002ea5421ece93169851chrismair * See the License for the specific language governing permissions and 14dfb59d50631968ab1a13002ea5421ece93169851chrismair * limitations under the License. 15dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 16dfb59d50631968ab1a13002ea5421ece93169851chrismairpackage org.mockftpserver.core.command; 17dfb59d50631968ab1a13002ea5421ece93169851chrismair 18dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.apache.log4j.Logger; 19dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.easymock.MockControl; 20dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.session.Session; 21dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.util.AssertFailedException; 22dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.test.AbstractTestCase; 23dfb59d50631968ab1a13002ea5421ece93169851chrismair 24dfb59d50631968ab1a13002ea5421ece93169851chrismairimport java.util.ListResourceBundle; 25dfb59d50631968ab1a13002ea5421ece93169851chrismairimport java.util.ResourceBundle; 26dfb59d50631968ab1a13002ea5421ece93169851chrismair 27dfb59d50631968ab1a13002ea5421ece93169851chrismair/** 28dfb59d50631968ab1a13002ea5421ece93169851chrismair * Tests for the AbstractTrackingCommandHandler class. The class name is prefixed with an 29dfb59d50631968ab1a13002ea5421ece93169851chrismair * underscore so that it is not filtered out by Maven's Surefire test plugin. 30dfb59d50631968ab1a13002ea5421ece93169851chrismair * 31dfb59d50631968ab1a13002ea5421ece93169851chrismair * @author Chris Mair 32dfb59d50631968ab1a13002ea5421ece93169851chrismair * @version $Revision$ - $Date$ 33dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 34dfb59d50631968ab1a13002ea5421ece93169851chrismairpublic final class _AbstractTrackingCommandHandlerTest extends AbstractTestCase { 35dfb59d50631968ab1a13002ea5421ece93169851chrismair 36dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final Logger LOG = Logger.getLogger(_AbstractTrackingCommandHandlerTest.class); 37dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String COMMAND_NAME = "abc"; 38dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final Object ARG = "123"; 39dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final Object[] ARGS = {ARG}; 40dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final Command COMMAND = new Command(COMMAND_NAME, EMPTY); 41dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final Command COMMAND_WITH_ARGS = new Command(COMMAND_NAME, EMPTY); 42dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final int REPLY_CODE1 = 777; 43dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final int REPLY_CODE2 = 888; 44dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final int REPLY_CODE3 = 999; 45dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String REPLY_TEXT1 = "reply1 ... abcdef"; 46dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String REPLY_TEXT2 = "abc {0} def"; 47dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String REPLY_TEXT2_FORMATTED = "abc 123 def"; 48dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String OVERRIDE_REPLY_TEXT = "overridden reply ... abcdef"; 49dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String MESSAGE_KEY = "key.123"; 50dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String MESSAGE_TEXT = "message.123"; 51dfb59d50631968ab1a13002ea5421ece93169851chrismair 52dfb59d50631968ab1a13002ea5421ece93169851chrismair private AbstractTrackingCommandHandler commandHandler; 53dfb59d50631968ab1a13002ea5421ece93169851chrismair private Session session; 54dfb59d50631968ab1a13002ea5421ece93169851chrismair 55dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 56dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the handleCommand(Command,Session) method 57dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 58dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testHandleCommand() throws Exception { 59dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("before", 0, commandHandler.numberOfInvocations()); 60dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.handleCommand(COMMAND, session); 61dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("after", 1, commandHandler.numberOfInvocations()); 62dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("locked", commandHandler.getInvocation(0).isLocked()); 63dfb59d50631968ab1a13002ea5421ece93169851chrismair } 64dfb59d50631968ab1a13002ea5421ece93169851chrismair 65dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 66dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the handleCommand(Command,Session) method, passing in a null Command 67dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 68dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testHandleCommand_NullCommand() throws Exception { 69dfb59d50631968ab1a13002ea5421ece93169851chrismair try { 70dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.handleCommand(null, session); 71dfb59d50631968ab1a13002ea5421ece93169851chrismair fail("Expected AssertFailedException"); 72dfb59d50631968ab1a13002ea5421ece93169851chrismair } 73dfb59d50631968ab1a13002ea5421ece93169851chrismair catch (AssertFailedException expected) { 74dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Expected: " + expected); 75dfb59d50631968ab1a13002ea5421ece93169851chrismair } 76dfb59d50631968ab1a13002ea5421ece93169851chrismair } 77dfb59d50631968ab1a13002ea5421ece93169851chrismair 78dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 79dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the handleCommand(Command,Session) method, passing in a null Session 80dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 81dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testHandleCommand_NullSession() throws Exception { 82dfb59d50631968ab1a13002ea5421ece93169851chrismair try { 83dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.handleCommand(COMMAND, null); 84dfb59d50631968ab1a13002ea5421ece93169851chrismair fail("Expected AssertFailedException"); 85dfb59d50631968ab1a13002ea5421ece93169851chrismair } 86dfb59d50631968ab1a13002ea5421ece93169851chrismair catch (AssertFailedException expected) { 87dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Expected: " + expected); 88dfb59d50631968ab1a13002ea5421ece93169851chrismair } 89dfb59d50631968ab1a13002ea5421ece93169851chrismair } 90dfb59d50631968ab1a13002ea5421ece93169851chrismair 91dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 92dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the numberOfInvocations(), addInvocationRecord() and clearInvocationRecord() methods 93dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 94dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testInvocationHistory() throws Exception { 95dfb59d50631968ab1a13002ea5421ece93169851chrismair control(session).expectAndDefaultReturn(session.getClientHost(), DEFAULT_HOST); 96dfb59d50631968ab1a13002ea5421ece93169851chrismair replay(session); 97dfb59d50631968ab1a13002ea5421ece93169851chrismair 98dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("none", 0, commandHandler.numberOfInvocations()); 99dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.handleCommand(COMMAND, session); 100dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("1", 1, commandHandler.numberOfInvocations()); 101dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.handleCommand(COMMAND, session); 102dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("2", 2, commandHandler.numberOfInvocations()); 103dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.clearInvocations(); 104dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("cleared", 0, commandHandler.numberOfInvocations()); 105dfb59d50631968ab1a13002ea5421ece93169851chrismair } 106dfb59d50631968ab1a13002ea5421ece93169851chrismair 107dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 108dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the getInvocation() method 109dfb59d50631968ab1a13002ea5421ece93169851chrismair * 110dfb59d50631968ab1a13002ea5421ece93169851chrismair * @throws Exception 111dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 112dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testGetInvocation() throws Exception { 113dfb59d50631968ab1a13002ea5421ece93169851chrismair control(session).expectAndDefaultReturn(session.getClientHost(), DEFAULT_HOST); 114dfb59d50631968ab1a13002ea5421ece93169851chrismair replay(session); 115dfb59d50631968ab1a13002ea5421ece93169851chrismair 116dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.handleCommand(COMMAND, session); 117dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.handleCommand(COMMAND_WITH_ARGS, session); 118dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSame("1", COMMAND, commandHandler.getInvocation(0).getCommand()); 119dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSame("2", COMMAND_WITH_ARGS, commandHandler.getInvocation(1).getCommand()); 120dfb59d50631968ab1a13002ea5421ece93169851chrismair } 121dfb59d50631968ab1a13002ea5421ece93169851chrismair 122dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 123dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the getInvocation() method, passing in an invalid index 124dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 125dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testGetInvocation_IndexOutOfBounds() throws Exception { 126dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.handleCommand(COMMAND, session); 127dfb59d50631968ab1a13002ea5421ece93169851chrismair try { 128dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.getInvocation(2); 129dfb59d50631968ab1a13002ea5421ece93169851chrismair fail("Expected IndexOutOfBoundsException"); 130dfb59d50631968ab1a13002ea5421ece93169851chrismair } 131dfb59d50631968ab1a13002ea5421ece93169851chrismair catch (IndexOutOfBoundsException expected) { 132dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Expected: " + expected); 133dfb59d50631968ab1a13002ea5421ece93169851chrismair } 134dfb59d50631968ab1a13002ea5421ece93169851chrismair } 135dfb59d50631968ab1a13002ea5421ece93169851chrismair 136dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 137dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the sendReply() method, when no message arguments are specified 138dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 139dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testSendReply() { 140dfb59d50631968ab1a13002ea5421ece93169851chrismair session.sendReply(REPLY_CODE1, REPLY_TEXT1); 141dfb59d50631968ab1a13002ea5421ece93169851chrismair session.sendReply(REPLY_CODE1, MESSAGE_TEXT); 142dfb59d50631968ab1a13002ea5421ece93169851chrismair session.sendReply(REPLY_CODE1, OVERRIDE_REPLY_TEXT); 143dfb59d50631968ab1a13002ea5421ece93169851chrismair session.sendReply(REPLY_CODE3, null); 144dfb59d50631968ab1a13002ea5421ece93169851chrismair replay(session); 145dfb59d50631968ab1a13002ea5421ece93169851chrismair 146dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.sendReply(session, REPLY_CODE1, null, null, null); 147dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.sendReply(session, REPLY_CODE1, MESSAGE_KEY, null, null); 148dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.sendReply(session, REPLY_CODE1, MESSAGE_KEY, OVERRIDE_REPLY_TEXT, null); 149dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.sendReply(session, REPLY_CODE3, null, null, null); 150dfb59d50631968ab1a13002ea5421ece93169851chrismair 151dfb59d50631968ab1a13002ea5421ece93169851chrismair verify(session); 152dfb59d50631968ab1a13002ea5421ece93169851chrismair } 153dfb59d50631968ab1a13002ea5421ece93169851chrismair 154dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 155dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the sendReply() method, passing in message arguments 156dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 157dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testSendReply_WithMessageArguments() { 158dfb59d50631968ab1a13002ea5421ece93169851chrismair session.sendReply(REPLY_CODE1, REPLY_TEXT2_FORMATTED); 159dfb59d50631968ab1a13002ea5421ece93169851chrismair replay(session); 160dfb59d50631968ab1a13002ea5421ece93169851chrismair 161dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.sendReply(session, REPLY_CODE1, null, REPLY_TEXT2, ARGS); 162dfb59d50631968ab1a13002ea5421ece93169851chrismair 163dfb59d50631968ab1a13002ea5421ece93169851chrismair verify(session); 164dfb59d50631968ab1a13002ea5421ece93169851chrismair } 165dfb59d50631968ab1a13002ea5421ece93169851chrismair 166dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 167dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the sendReply() method, passing in a null Session 168dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 169dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testSendReply_NullSession() { 170dfb59d50631968ab1a13002ea5421ece93169851chrismair try { 171dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.sendReply(null, REPLY_CODE1, REPLY_TEXT1, null, null); 172dfb59d50631968ab1a13002ea5421ece93169851chrismair fail("Expected AssertFailedException"); 173dfb59d50631968ab1a13002ea5421ece93169851chrismair } 174dfb59d50631968ab1a13002ea5421ece93169851chrismair catch (AssertFailedException expected) { 175dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Expected: " + expected); 176dfb59d50631968ab1a13002ea5421ece93169851chrismair } 177dfb59d50631968ab1a13002ea5421ece93169851chrismair } 178dfb59d50631968ab1a13002ea5421ece93169851chrismair 179dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 180dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the sendReply() method, passing in an invalid replyCode 181dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 182dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testSendReply_InvalidReplyCode() { 183dfb59d50631968ab1a13002ea5421ece93169851chrismair try { 184dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.sendReply(session, 0, REPLY_TEXT1, null, null); 185dfb59d50631968ab1a13002ea5421ece93169851chrismair fail("Expected AssertFailedException"); 186dfb59d50631968ab1a13002ea5421ece93169851chrismair } 187dfb59d50631968ab1a13002ea5421ece93169851chrismair catch (AssertFailedException expected) { 188dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Expected: " + expected); 189dfb59d50631968ab1a13002ea5421ece93169851chrismair } 190dfb59d50631968ab1a13002ea5421ece93169851chrismair } 191dfb59d50631968ab1a13002ea5421ece93169851chrismair 192dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 193dfb59d50631968ab1a13002ea5421ece93169851chrismair // Test setup 194dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 195dfb59d50631968ab1a13002ea5421ece93169851chrismair 196dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 197dfb59d50631968ab1a13002ea5421ece93169851chrismair * Perform initialization before each test 198dfb59d50631968ab1a13002ea5421ece93169851chrismair * 199dfb59d50631968ab1a13002ea5421ece93169851chrismair * @see org.mockftpserver.test.AbstractTestCase#setUp() 200dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 201dfb59d50631968ab1a13002ea5421ece93169851chrismair protected void setUp() throws Exception { 202dfb59d50631968ab1a13002ea5421ece93169851chrismair super.setUp(); 203dfb59d50631968ab1a13002ea5421ece93169851chrismair session = (Session) createMock(Session.class); 204dfb59d50631968ab1a13002ea5421ece93169851chrismair control(session).setDefaultMatcher(MockControl.ARRAY_MATCHER); 205dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler = new AbstractTrackingCommandHandler() { 206dfb59d50631968ab1a13002ea5421ece93169851chrismair public void handleCommand(Command command, Session session, InvocationRecord invocationRecord) throws Exception { 207dfb59d50631968ab1a13002ea5421ece93169851chrismair } 208dfb59d50631968ab1a13002ea5421ece93169851chrismair }; 209dfb59d50631968ab1a13002ea5421ece93169851chrismair ResourceBundle replyTextBundle = new ListResourceBundle() { 210dfb59d50631968ab1a13002ea5421ece93169851chrismair protected Object[][] getContents() { 211dfb59d50631968ab1a13002ea5421ece93169851chrismair return new Object[][]{ 212dfb59d50631968ab1a13002ea5421ece93169851chrismair {Integer.toString(REPLY_CODE1), REPLY_TEXT1}, 213dfb59d50631968ab1a13002ea5421ece93169851chrismair {Integer.toString(REPLY_CODE2), REPLY_TEXT2}, 214dfb59d50631968ab1a13002ea5421ece93169851chrismair {MESSAGE_KEY, MESSAGE_TEXT} 215dfb59d50631968ab1a13002ea5421ece93169851chrismair }; 216dfb59d50631968ab1a13002ea5421ece93169851chrismair } 217dfb59d50631968ab1a13002ea5421ece93169851chrismair }; 218dfb59d50631968ab1a13002ea5421ece93169851chrismair commandHandler.setReplyTextBundle(replyTextBundle); 219dfb59d50631968ab1a13002ea5421ece93169851chrismair } 220dfb59d50631968ab1a13002ea5421ece93169851chrismair 221dfb59d50631968ab1a13002ea5421ece93169851chrismair} 222