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