193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair/* 293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Copyright 2007 the original author or authors. 393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * 493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * you may not use this file except in compliance with the License. 693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * You may obtain a copy of the License at 793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * 893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * http://www.apache.org/licenses/LICENSE-2.0 993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * 1093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Unless required by applicable law or agreed to in writing, software 1193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * See the License for the specific language governing permissions and 1493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * limitations under the License. 1593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 1693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairpackage org.mockftpserver.stub.command; 1793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 18dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismairimport org.slf4j.Logger; 19dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismairimport org.slf4j.LoggerFactory; 2093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport org.mockftpserver.core.command.Command; 2193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport org.mockftpserver.core.command.InvocationRecord; 2293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport org.mockftpserver.core.session.Session; 2393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismairimport org.mockftpserver.core.util.AssertFailedException; 2440658190151b7ded3489ff89c301b470155c95f4chrismairimport org.mockftpserver.test.AbstractTestCase; 2593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 26848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismairimport java.util.ListResourceBundle; 27848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismairimport java.util.ResourceBundle; 28848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair 2993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair/** 3093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Tests for AbstractStubDataCommandHandler. The class name is prefixed with an underscore 3193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * so that it is not filtered out by Maven's Surefire test plugin. 3293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * 334ca3386623ce60063f27955ad1b2b1b6cbba8b09chrismair * @version $Revision$ - $Date$ 3493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * 3593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * @author Chris Mair 3693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 3740658190151b7ded3489ff89c301b470155c95f4chrismairpublic final class _AbstractStubDataCommandHandlerTest extends AbstractTestCase { 3893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 39dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismair private static final Logger LOG = LoggerFactory.getLogger(_AbstractStubDataCommandHandlerTest.class); 4093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private static final Command COMMAND = new Command("command", EMPTY); 4193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private static final InvocationRecord INVOCATION_RECORD = new InvocationRecord(COMMAND, DEFAULT_HOST); 4293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 4393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private static final String REPLY_TEXT150 = "reply 150 ... abcdef"; 4493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private static final String REPLY_TEXT226 = "reply 226 ... abcdef"; 4593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private static final String REPLY_TEXT222 = "reply 222 ... abcdef"; 4693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private static final String REPLY_TEXT333 = "reply 333 ... abcdef"; 4793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private static final String REPLY_TEXT444 = "reply 444 ... abcdef"; 4893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 4993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private Session session; 5093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private ResourceBundle replyTextBundle; 5193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private AbstractStubDataCommandHandler commandHandler; 5293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 5393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair /** 5493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Test the handleCommand() method 5593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 5693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair public void testHandleCommand() throws Exception { 5793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 5893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.sendReply(150, REPLY_TEXT150); 5993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.openDataConnection(); 6093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.sendReply(222, REPLY_TEXT222); 6193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.sendReply(333, REPLY_TEXT333); 6293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.sendReply(444, REPLY_TEXT444); 6393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.closeDataConnection(); 6493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.sendReply(226, REPLY_TEXT226); 6593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair replay(session); 6693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 6793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair // Define CommandHandler test subclass 6893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair commandHandler = new AbstractStubDataCommandHandler() { 6993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair protected void beforeProcessData(Command c, Session s, InvocationRecord ir) { 7093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair verifyParameters(c, s, ir); 7193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair // Send unique reply code so that we can verify proper method invocation and ordering 7293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.sendReply(222, REPLY_TEXT222); 7393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 7493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 7593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair protected void processData(Command c, Session s, InvocationRecord ir) { 7693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair verifyParameters(c, s, ir); 7793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair // Send unique reply code so that we can verify proper method invocation and ordering 7893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.sendReply(333, REPLY_TEXT333); 7993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 8093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 8193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair protected void afterProcessData(Command c, Session s, InvocationRecord ir) { 8293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair verifyParameters(c, s, ir); 8393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair // Send unique reply code so that we can verify proper method invocation and ordering 8493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.sendReply(444, REPLY_TEXT444); 8593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 8693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 8793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair private void verifyParameters(Command c, Session s, InvocationRecord ir) { 8893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair assertSame("command", COMMAND, c); 8993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair assertSame("session", session, s); 9093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair assertSame("invocationRecord", INVOCATION_RECORD, ir); 9193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 9293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair }; 9393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 9493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair commandHandler.setReplyTextBundle(replyTextBundle); 9593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair commandHandler.handleCommand(COMMAND, session, INVOCATION_RECORD); 9693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 9793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair verify(session); 9893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 9993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 10093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair /** 10193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Test the handleCommand() method, overriding the initial reply code and text 10293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 10393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair public void testHandleCommand_OverrideInitialReplyCodeAndText() throws Exception { 10493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 10593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair final int OVERRIDE_REPLY_CODE = 333; 10693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair final String OVERRIDE_REPLY_TEXT = "reply text"; 10793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 10893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.sendReply(OVERRIDE_REPLY_CODE, OVERRIDE_REPLY_TEXT); 10993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.openDataConnection(); 11093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.closeDataConnection(); 11193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session.sendReply(226, REPLY_TEXT226); 11293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair replay(session); 11393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 11493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair commandHandler.setPreliminaryReplyCode(OVERRIDE_REPLY_CODE); 11593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair commandHandler.setPreliminaryReplyText(OVERRIDE_REPLY_TEXT); 11693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair commandHandler.setReplyTextBundle(replyTextBundle); 11793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair commandHandler.handleCommand(COMMAND, session, INVOCATION_RECORD); 11893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 11993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair verify(session); 12093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 12193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 12293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair /** 12393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Test the setPreliminaryReplyCode() method, passing in an invalid value 12493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 12593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair public void testSetPreliminaryReplyCode_Invalid() { 12693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair try { 12793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair commandHandler.setPreliminaryReplyCode(0); 12893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair fail("Expected AssertFailedException"); 12993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 13093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair catch (AssertFailedException expected) { 13193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair LOG.info("Expected: " + expected); 13293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 13393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 13493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 13593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair /** 13693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Test the setFinalReplyCode() method, passing in an invalid value 13793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 13893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair public void testSetFinalReplyCode_Invalid() { 13993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair try { 14093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair commandHandler.setFinalReplyCode(0); 14193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair fail("Expected AssertFailedException"); 14293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 14393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair catch (AssertFailedException expected) { 14493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair LOG.info("Expected: " + expected); 14593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 14693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 14793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 14893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair //------------------------------------------------------------------------- 14993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair // Test setup 15093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair //------------------------------------------------------------------------- 15193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 15293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair /** 15393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * Perform initialization before each test 15493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair * 15540658190151b7ded3489ff89c301b470155c95f4chrismair * @see org.mockftpserver.test.AbstractTestCase#setUp() 15693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair */ 15793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair protected void setUp() throws Exception { 15893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair super.setUp(); 15993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair session = (Session) createMock(Session.class); 16093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair replyTextBundle = new ListResourceBundle() { 16193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair protected Object[][] getContents() { 16293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair return new Object[][] { 16393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair { Integer.toString(150), REPLY_TEXT150 }, 16493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair { Integer.toString(222), REPLY_TEXT222 }, 16593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair { Integer.toString(226), REPLY_TEXT226 }, 16693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair { Integer.toString(333), REPLY_TEXT333 }, 16793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair { Integer.toString(444), REPLY_TEXT444 }, 16893102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair }; 16993102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 17093102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair }; 17193102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair commandHandler = new AbstractStubDataCommandHandler() { 17293102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair protected void processData(Command c, Session s, InvocationRecord ir) { 17393102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 17493102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair }; 17593102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair } 17693102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair 17793102446a7b7c3d17888064b4e2e4e5cb534e6d0chrismair} 178