185efb15529d45e32fea8de03c38a968c157c8262chrismair/* 285efb15529d45e32fea8de03c38a968c157c8262chrismair * Copyright 2007 the original author or authors. 385efb15529d45e32fea8de03c38a968c157c8262chrismair * 485efb15529d45e32fea8de03c38a968c157c8262chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 585efb15529d45e32fea8de03c38a968c157c8262chrismair * you may not use this file except in compliance with the License. 685efb15529d45e32fea8de03c38a968c157c8262chrismair * You may obtain a copy of the License at 785efb15529d45e32fea8de03c38a968c157c8262chrismair * 885efb15529d45e32fea8de03c38a968c157c8262chrismair * http://www.apache.org/licenses/LICENSE-2.0 985efb15529d45e32fea8de03c38a968c157c8262chrismair * 1085efb15529d45e32fea8de03c38a968c157c8262chrismair * Unless required by applicable law or agreed to in writing, software 1185efb15529d45e32fea8de03c38a968c157c8262chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1285efb15529d45e32fea8de03c38a968c157c8262chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1385efb15529d45e32fea8de03c38a968c157c8262chrismair * See the License for the specific language governing permissions and 1485efb15529d45e32fea8de03c38a968c157c8262chrismair * limitations under the License. 1585efb15529d45e32fea8de03c38a968c157c8262chrismair */ 1685efb15529d45e32fea8de03c38a968c157c8262chrismairpackage org.mockftpserver.stub.example; 1785efb15529d45e32fea8de03c38a968c157c8262chrismair 1885efb15529d45e32fea8de03c38a968c157c8262chrismairimport java.io.IOException; 1985efb15529d45e32fea8de03c38a968c157c8262chrismair 2085efb15529d45e32fea8de03c38a968c157c8262chrismairimport org.mockftpserver.core.command.CommandNames; 2185efb15529d45e32fea8de03c38a968c157c8262chrismairimport org.mockftpserver.core.command.InvocationRecord; 2285efb15529d45e32fea8de03c38a968c157c8262chrismairimport org.mockftpserver.stub.StubFtpServer; 2385efb15529d45e32fea8de03c38a968c157c8262chrismairimport org.mockftpserver.stub.command.RetrCommandHandler; 2485efb15529d45e32fea8de03c38a968c157c8262chrismairimport org.mockftpserver.test.AbstractTest; 2585efb15529d45e32fea8de03c38a968c157c8262chrismairimport org.mockftpserver.test.IntegrationTest; 2685efb15529d45e32fea8de03c38a968c157c8262chrismair 2785efb15529d45e32fea8de03c38a968c157c8262chrismair/** 2885efb15529d45e32fea8de03c38a968c157c8262chrismair * Example test using StubFtpServer, with programmatic configuration. 2985efb15529d45e32fea8de03c38a968c157c8262chrismair */ 3085efb15529d45e32fea8de03c38a968c157c8262chrismairpublic class RemoteFileTest extends AbstractTest implements IntegrationTest { 3185efb15529d45e32fea8de03c38a968c157c8262chrismair 3285efb15529d45e32fea8de03c38a968c157c8262chrismair private static final int PORT = 9981; 3385efb15529d45e32fea8de03c38a968c157c8262chrismair private static final String FILENAME = "dir/sample.txt"; 3485efb15529d45e32fea8de03c38a968c157c8262chrismair 3585efb15529d45e32fea8de03c38a968c157c8262chrismair private RemoteFile remoteFile; 3685efb15529d45e32fea8de03c38a968c157c8262chrismair private StubFtpServer stubFtpServer; 3785efb15529d45e32fea8de03c38a968c157c8262chrismair 3885efb15529d45e32fea8de03c38a968c157c8262chrismair /** 3985efb15529d45e32fea8de03c38a968c157c8262chrismair * Test readFile() method 4085efb15529d45e32fea8de03c38a968c157c8262chrismair */ 4185efb15529d45e32fea8de03c38a968c157c8262chrismair public void testReadFile() throws Exception { 4285efb15529d45e32fea8de03c38a968c157c8262chrismair 4385efb15529d45e32fea8de03c38a968c157c8262chrismair final String CONTENTS = "abcdef 1234567890"; 4485efb15529d45e32fea8de03c38a968c157c8262chrismair 4585efb15529d45e32fea8de03c38a968c157c8262chrismair // Replace the default RETR CommandHandler; customize returned file contents 4685efb15529d45e32fea8de03c38a968c157c8262chrismair RetrCommandHandler retrCommandHandler = new RetrCommandHandler(); 4785efb15529d45e32fea8de03c38a968c157c8262chrismair retrCommandHandler.setFileContents(CONTENTS); 4885efb15529d45e32fea8de03c38a968c157c8262chrismair stubFtpServer.setCommandHandler(CommandNames.RETR, retrCommandHandler); 4985efb15529d45e32fea8de03c38a968c157c8262chrismair 5085efb15529d45e32fea8de03c38a968c157c8262chrismair stubFtpServer.start(); 5185efb15529d45e32fea8de03c38a968c157c8262chrismair 5285efb15529d45e32fea8de03c38a968c157c8262chrismair String contents = remoteFile.readFile(FILENAME); 5385efb15529d45e32fea8de03c38a968c157c8262chrismair 5485efb15529d45e32fea8de03c38a968c157c8262chrismair // Verify returned file contents 5585efb15529d45e32fea8de03c38a968c157c8262chrismair assertEquals("contents", CONTENTS, contents); 5685efb15529d45e32fea8de03c38a968c157c8262chrismair 5785efb15529d45e32fea8de03c38a968c157c8262chrismair // Verify the submitted filename 5885efb15529d45e32fea8de03c38a968c157c8262chrismair InvocationRecord invocationRecord = retrCommandHandler.getInvocation(0); 5985efb15529d45e32fea8de03c38a968c157c8262chrismair String filename = invocationRecord.getString(RetrCommandHandler.PATHNAME_KEY); 6085efb15529d45e32fea8de03c38a968c157c8262chrismair assertEquals("filename", FILENAME, filename); 6185efb15529d45e32fea8de03c38a968c157c8262chrismair } 6285efb15529d45e32fea8de03c38a968c157c8262chrismair 6385efb15529d45e32fea8de03c38a968c157c8262chrismair /** 6485efb15529d45e32fea8de03c38a968c157c8262chrismair * Test the readFile() method when the FTP transfer fails (returns a non-success reply code) 6585efb15529d45e32fea8de03c38a968c157c8262chrismair */ 6685efb15529d45e32fea8de03c38a968c157c8262chrismair public void testReadFileThrowsException() { 6785efb15529d45e32fea8de03c38a968c157c8262chrismair 6885efb15529d45e32fea8de03c38a968c157c8262chrismair // Replace the default RETR CommandHandler; return failure reply code 6985efb15529d45e32fea8de03c38a968c157c8262chrismair RetrCommandHandler retrCommandHandler = new RetrCommandHandler(); 7085efb15529d45e32fea8de03c38a968c157c8262chrismair retrCommandHandler.setFinalReplyCode(550); 7185efb15529d45e32fea8de03c38a968c157c8262chrismair stubFtpServer.setCommandHandler(CommandNames.RETR, retrCommandHandler); 7285efb15529d45e32fea8de03c38a968c157c8262chrismair 7385efb15529d45e32fea8de03c38a968c157c8262chrismair stubFtpServer.start(); 7485efb15529d45e32fea8de03c38a968c157c8262chrismair 7585efb15529d45e32fea8de03c38a968c157c8262chrismair try { 7685efb15529d45e32fea8de03c38a968c157c8262chrismair remoteFile.readFile(FILENAME); 7785efb15529d45e32fea8de03c38a968c157c8262chrismair fail("Expected IOException"); 7885efb15529d45e32fea8de03c38a968c157c8262chrismair } 7985efb15529d45e32fea8de03c38a968c157c8262chrismair catch (IOException expected) { 8085efb15529d45e32fea8de03c38a968c157c8262chrismair // Expected this 8185efb15529d45e32fea8de03c38a968c157c8262chrismair } 8285efb15529d45e32fea8de03c38a968c157c8262chrismair } 8385efb15529d45e32fea8de03c38a968c157c8262chrismair 8485efb15529d45e32fea8de03c38a968c157c8262chrismair /** 8585efb15529d45e32fea8de03c38a968c157c8262chrismair * @see org.mockftpserver.test.AbstractTest#setUp() 8685efb15529d45e32fea8de03c38a968c157c8262chrismair */ 8785efb15529d45e32fea8de03c38a968c157c8262chrismair protected void setUp() throws Exception { 8885efb15529d45e32fea8de03c38a968c157c8262chrismair super.setUp(); 8985efb15529d45e32fea8de03c38a968c157c8262chrismair remoteFile = new RemoteFile(); 9085efb15529d45e32fea8de03c38a968c157c8262chrismair remoteFile.setServer("localhost"); 9185efb15529d45e32fea8de03c38a968c157c8262chrismair remoteFile.setPort(PORT); 9285efb15529d45e32fea8de03c38a968c157c8262chrismair stubFtpServer = new StubFtpServer(); 9385efb15529d45e32fea8de03c38a968c157c8262chrismair stubFtpServer.setServerControlPort(PORT); 9485efb15529d45e32fea8de03c38a968c157c8262chrismair } 9585efb15529d45e32fea8de03c38a968c157c8262chrismair 9685efb15529d45e32fea8de03c38a968c157c8262chrismair /** 9785efb15529d45e32fea8de03c38a968c157c8262chrismair * @see org.mockftpserver.test.AbstractTest#tearDown() 9885efb15529d45e32fea8de03c38a968c157c8262chrismair */ 9985efb15529d45e32fea8de03c38a968c157c8262chrismair protected void tearDown() throws Exception { 10085efb15529d45e32fea8de03c38a968c157c8262chrismair super.tearDown(); 10185efb15529d45e32fea8de03c38a968c157c8262chrismair stubFtpServer.stop(); 10285efb15529d45e32fea8de03c38a968c157c8262chrismair } 10385efb15529d45e32fea8de03c38a968c157c8262chrismair 10485efb15529d45e32fea8de03c38a968c157c8262chrismair} 105