100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair/* 200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Copyright 2007 the original author or authors. 300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * you may not use this file except in compliance with the License. 600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * You may obtain a copy of the License at 700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * http://www.apache.org/licenses/LICENSE-2.0 900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 1000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Unless required by applicable law or agreed to in writing, software 1100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * See the License for the specific language governing permissions and 1400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * limitations under the License. 1500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 1600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairpackage org.mockftpserver.core.command; 1700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 1800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.slf4j.Logger; 1900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.slf4j.LoggerFactory; 2000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.easymock.MockControl; 2100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.session.Session; 2200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.util.AssertFailedException; 2300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.test.AbstractTestCase; 2400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 2500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport java.util.ListResourceBundle; 2600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport java.util.ResourceBundle; 2700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 2800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair/** 2900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Tests for the AbstractTrackingCommandHandler class. The class name is prefixed with an 3000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * underscore so that it is not filtered out by Maven's Surefire test plugin. 3100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 3200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @author Chris Mair 3300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @version $Revision$ - $Date$ 3400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 3500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairpublic final class _AbstractTrackingCommandHandlerTest extends AbstractTestCase { 3600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 3700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final Logger LOG = LoggerFactory.getLogger(_AbstractTrackingCommandHandlerTest.class); 3800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final String COMMAND_NAME = "abc"; 3900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final Object ARG = "123"; 4000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final Object[] ARGS = {ARG}; 4100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final Command COMMAND = new Command(COMMAND_NAME, EMPTY); 4200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final Command COMMAND_WITH_ARGS = new Command(COMMAND_NAME, EMPTY); 4300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final int REPLY_CODE1 = 777; 4400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final int REPLY_CODE2 = 888; 4500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final int REPLY_CODE3 = 999; 4600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final String REPLY_TEXT1 = "reply1 ... abcdef"; 4700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final String REPLY_TEXT2 = "abc {0} def"; 4800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final String REPLY_TEXT2_FORMATTED = "abc 123 def"; 4900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final String OVERRIDE_REPLY_TEXT = "overridden reply ... abcdef"; 5000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final String MESSAGE_KEY = "key.123"; 5100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private static final String MESSAGE_TEXT = "message.123"; 5200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 5300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private AbstractTrackingCommandHandler commandHandler; 5400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair private Session session; 5500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 5600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 5700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Test the handleCommand(Command,Session) method 5800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 5900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair public void testHandleCommand() throws Exception { 6000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertEquals("before", 0, commandHandler.numberOfInvocations()); 6100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.handleCommand(COMMAND, session); 6200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertEquals("after", 1, commandHandler.numberOfInvocations()); 6300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertTrue("locked", commandHandler.getInvocation(0).isLocked()); 6400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 6500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 6600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 6700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Test the handleCommand(Command,Session) method, passing in a null Command 6800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 6900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair public void testHandleCommand_NullCommand() throws Exception { 7000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair try { 7100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.handleCommand(null, session); 7200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fail("Expected AssertFailedException"); 7300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 7400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair catch (AssertFailedException expected) { 7500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair LOG.info("Expected: " + expected); 7600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 7700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 7800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 7900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 8000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Test the handleCommand(Command,Session) method, passing in a null Session 8100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 8200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair public void testHandleCommand_NullSession() throws Exception { 8300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair try { 8400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.handleCommand(COMMAND, null); 8500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fail("Expected AssertFailedException"); 8600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 8700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair catch (AssertFailedException expected) { 8800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair LOG.info("Expected: " + expected); 8900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 9000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 9100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 9200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 9300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Test the numberOfInvocations(), addInvocationRecord() and clearInvocationRecord() methods 9400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 9500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair public void testInvocationHistory() throws Exception { 9600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair control(session).expectAndDefaultReturn(session.getClientHost(), DEFAULT_HOST); 9700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair replay(session); 9800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 9900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertEquals("none", 0, commandHandler.numberOfInvocations()); 10000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.handleCommand(COMMAND, session); 10100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertEquals("1", 1, commandHandler.numberOfInvocations()); 10200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.handleCommand(COMMAND, session); 10300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertEquals("2", 2, commandHandler.numberOfInvocations()); 10400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.clearInvocations(); 10500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertEquals("cleared", 0, commandHandler.numberOfInvocations()); 10600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 10700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 10800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 10900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Test the getInvocation() method 11000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 11100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @throws Exception 11200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 11300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair public void testGetInvocation() throws Exception { 11400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair control(session).expectAndDefaultReturn(session.getClientHost(), DEFAULT_HOST); 11500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair replay(session); 11600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 11700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.handleCommand(COMMAND, session); 11800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.handleCommand(COMMAND_WITH_ARGS, session); 11900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSame("1", COMMAND, commandHandler.getInvocation(0).getCommand()); 12000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSame("2", COMMAND_WITH_ARGS, commandHandler.getInvocation(1).getCommand()); 12100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 12200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 12300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 12400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Test the getInvocation() method, passing in an invalid index 12500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 12600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair public void testGetInvocation_IndexOutOfBounds() throws Exception { 12700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.handleCommand(COMMAND, session); 12800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair try { 12900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.getInvocation(2); 13000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fail("Expected IndexOutOfBoundsException"); 13100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 13200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair catch (IndexOutOfBoundsException expected) { 13300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair LOG.info("Expected: " + expected); 13400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 13500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 13600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 13700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 13800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Test the sendReply() method, when no message arguments are specified 13900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 14000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair public void testSendReply() { 14100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair session.sendReply(REPLY_CODE1, REPLY_TEXT1); 14200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair session.sendReply(REPLY_CODE1, MESSAGE_TEXT); 14300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair session.sendReply(REPLY_CODE1, OVERRIDE_REPLY_TEXT); 14400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair session.sendReply(REPLY_CODE3, null); 14500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair replay(session); 14600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 14700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.sendReply(session, REPLY_CODE1, null, null, null); 14800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.sendReply(session, REPLY_CODE1, MESSAGE_KEY, null, null); 14900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.sendReply(session, REPLY_CODE1, MESSAGE_KEY, OVERRIDE_REPLY_TEXT, null); 15000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.sendReply(session, REPLY_CODE3, null, null, null); 15100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 15200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair verify(session); 15300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 15400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 15500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 15600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Test the sendReply() method, passing in message arguments 15700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 15800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair public void testSendReply_WithMessageArguments() { 15900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair session.sendReply(REPLY_CODE1, REPLY_TEXT2_FORMATTED); 16000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair replay(session); 16100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 16200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.sendReply(session, REPLY_CODE1, null, REPLY_TEXT2, ARGS); 16300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 16400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair verify(session); 16500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 16600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 16700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 16800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Test the sendReply() method, passing in a null Session 16900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 17000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair public void testSendReply_NullSession() { 17100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair try { 17200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.sendReply(null, REPLY_CODE1, REPLY_TEXT1, null, null); 17300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fail("Expected AssertFailedException"); 17400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 17500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair catch (AssertFailedException expected) { 17600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair LOG.info("Expected: " + expected); 17700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 17800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 17900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 18000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 18100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Test the sendReply() method, passing in an invalid replyCode 18200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 18300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair public void testSendReply_InvalidReplyCode() { 18400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair try { 18500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.sendReply(session, 0, REPLY_TEXT1, null, null); 18600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fail("Expected AssertFailedException"); 18700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 18800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair catch (AssertFailedException expected) { 18900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair LOG.info("Expected: " + expected); 19000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 19100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 19200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 19300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair //------------------------------------------------------------------------- 19400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair // Test setup 19500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair //------------------------------------------------------------------------- 19600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 19700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 19800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Perform initialization before each test 19900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 20000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @see org.mockftpserver.test.AbstractTestCase#setUp() 20100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 20200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected void setUp() throws Exception { 20300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair super.setUp(); 20400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair session = (Session) createMock(Session.class); 20500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair control(session).setDefaultMatcher(MockControl.ARRAY_MATCHER); 20600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler = new AbstractTrackingCommandHandler() { 20700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair public void handleCommand(Command command, Session session, InvocationRecord invocationRecord) throws Exception { 20800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 20900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair }; 21000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair ResourceBundle replyTextBundle = new ListResourceBundle() { 21100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected Object[][] getContents() { 21200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair return new Object[][]{ 21300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair {Integer.toString(REPLY_CODE1), REPLY_TEXT1}, 21400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair {Integer.toString(REPLY_CODE2), REPLY_TEXT2}, 21500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair {MESSAGE_KEY, MESSAGE_TEXT} 21600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair }; 21700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 21800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair }; 21900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair commandHandler.setReplyTextBundle(replyTextBundle); 22000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 22100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 22200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair} 223