177391c2a01ce1fed085906743cc240a4d58edd92chrismair/* 277391c2a01ce1fed085906743cc240a4d58edd92chrismair * Copyright 2007 the original author or authors. 377391c2a01ce1fed085906743cc240a4d58edd92chrismair * 477391c2a01ce1fed085906743cc240a4d58edd92chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 577391c2a01ce1fed085906743cc240a4d58edd92chrismair * you may not use this file except in compliance with the License. 677391c2a01ce1fed085906743cc240a4d58edd92chrismair * You may obtain a copy of the License at 777391c2a01ce1fed085906743cc240a4d58edd92chrismair * 877391c2a01ce1fed085906743cc240a4d58edd92chrismair * http://www.apache.org/licenses/LICENSE-2.0 977391c2a01ce1fed085906743cc240a4d58edd92chrismair * 1077391c2a01ce1fed085906743cc240a4d58edd92chrismair * Unless required by applicable law or agreed to in writing, software 1177391c2a01ce1fed085906743cc240a4d58edd92chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1277391c2a01ce1fed085906743cc240a4d58edd92chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1377391c2a01ce1fed085906743cc240a4d58edd92chrismair * See the License for the specific language governing permissions and 1477391c2a01ce1fed085906743cc240a4d58edd92chrismair * limitations under the License. 1577391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 1677391c2a01ce1fed085906743cc240a4d58edd92chrismairpackage org.mockftpserver.stub.example; 1777391c2a01ce1fed085906743cc240a4d58edd92chrismair 1877391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.io.IOException; 1977391c2a01ce1fed085906743cc240a4d58edd92chrismair 2077391c2a01ce1fed085906743cc240a4d58edd92chrismairimport org.mockftpserver.core.command.CommandNames; 2177391c2a01ce1fed085906743cc240a4d58edd92chrismairimport org.mockftpserver.core.command.InvocationRecord; 2277391c2a01ce1fed085906743cc240a4d58edd92chrismairimport org.mockftpserver.stub.StubFtpServer; 2377391c2a01ce1fed085906743cc240a4d58edd92chrismairimport org.mockftpserver.stub.command.RetrCommandHandler; 2477391c2a01ce1fed085906743cc240a4d58edd92chrismairimport org.mockftpserver.test.AbstractTest; 2577391c2a01ce1fed085906743cc240a4d58edd92chrismairimport org.mockftpserver.test.IntegrationTest; 2677391c2a01ce1fed085906743cc240a4d58edd92chrismair 2777391c2a01ce1fed085906743cc240a4d58edd92chrismair/** 2877391c2a01ce1fed085906743cc240a4d58edd92chrismair * Example test using StubFtpServer, with programmatic configuration. 2977391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 3077391c2a01ce1fed085906743cc240a4d58edd92chrismairpublic class RemoteFileTest extends AbstractTest implements IntegrationTest { 3177391c2a01ce1fed085906743cc240a4d58edd92chrismair 3277391c2a01ce1fed085906743cc240a4d58edd92chrismair private static final int PORT = 9981; 3377391c2a01ce1fed085906743cc240a4d58edd92chrismair private static final String FILENAME = "dir/sample.txt"; 3477391c2a01ce1fed085906743cc240a4d58edd92chrismair 3577391c2a01ce1fed085906743cc240a4d58edd92chrismair private RemoteFile remoteFile; 3677391c2a01ce1fed085906743cc240a4d58edd92chrismair private StubFtpServer stubFtpServer; 3777391c2a01ce1fed085906743cc240a4d58edd92chrismair 3877391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 3977391c2a01ce1fed085906743cc240a4d58edd92chrismair * Test readFile() method 4077391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 4177391c2a01ce1fed085906743cc240a4d58edd92chrismair public void testReadFile() throws Exception { 4277391c2a01ce1fed085906743cc240a4d58edd92chrismair 4377391c2a01ce1fed085906743cc240a4d58edd92chrismair final String CONTENTS = "abcdef 1234567890"; 4477391c2a01ce1fed085906743cc240a4d58edd92chrismair 4577391c2a01ce1fed085906743cc240a4d58edd92chrismair // Replace the default RETR CommandHandler; customize returned file contents 4677391c2a01ce1fed085906743cc240a4d58edd92chrismair RetrCommandHandler retrCommandHandler = new RetrCommandHandler(); 4777391c2a01ce1fed085906743cc240a4d58edd92chrismair retrCommandHandler.setFileContents(CONTENTS); 4877391c2a01ce1fed085906743cc240a4d58edd92chrismair stubFtpServer.setCommandHandler(CommandNames.RETR, retrCommandHandler); 4977391c2a01ce1fed085906743cc240a4d58edd92chrismair 5077391c2a01ce1fed085906743cc240a4d58edd92chrismair stubFtpServer.start(); 5177391c2a01ce1fed085906743cc240a4d58edd92chrismair 5277391c2a01ce1fed085906743cc240a4d58edd92chrismair String contents = remoteFile.readFile(FILENAME); 5377391c2a01ce1fed085906743cc240a4d58edd92chrismair 5477391c2a01ce1fed085906743cc240a4d58edd92chrismair // Verify returned file contents 5577391c2a01ce1fed085906743cc240a4d58edd92chrismair assertEquals("contents", CONTENTS, contents); 5677391c2a01ce1fed085906743cc240a4d58edd92chrismair 5777391c2a01ce1fed085906743cc240a4d58edd92chrismair // Verify the submitted filename 5877391c2a01ce1fed085906743cc240a4d58edd92chrismair InvocationRecord invocationRecord = retrCommandHandler.getInvocation(0); 5977391c2a01ce1fed085906743cc240a4d58edd92chrismair String filename = invocationRecord.getString(RetrCommandHandler.PATHNAME_KEY); 6077391c2a01ce1fed085906743cc240a4d58edd92chrismair assertEquals("filename", FILENAME, filename); 6177391c2a01ce1fed085906743cc240a4d58edd92chrismair } 6277391c2a01ce1fed085906743cc240a4d58edd92chrismair 6377391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 6477391c2a01ce1fed085906743cc240a4d58edd92chrismair * Test the readFile() method when the FTP transfer fails (returns a non-success reply code) 6577391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 6677391c2a01ce1fed085906743cc240a4d58edd92chrismair public void testReadFileThrowsException() { 6777391c2a01ce1fed085906743cc240a4d58edd92chrismair 6877391c2a01ce1fed085906743cc240a4d58edd92chrismair // Replace the default RETR CommandHandler; return failure reply code 6977391c2a01ce1fed085906743cc240a4d58edd92chrismair RetrCommandHandler retrCommandHandler = new RetrCommandHandler(); 7077391c2a01ce1fed085906743cc240a4d58edd92chrismair retrCommandHandler.setFinalReplyCode(550); 7177391c2a01ce1fed085906743cc240a4d58edd92chrismair stubFtpServer.setCommandHandler(CommandNames.RETR, retrCommandHandler); 7277391c2a01ce1fed085906743cc240a4d58edd92chrismair 7377391c2a01ce1fed085906743cc240a4d58edd92chrismair stubFtpServer.start(); 7477391c2a01ce1fed085906743cc240a4d58edd92chrismair 7577391c2a01ce1fed085906743cc240a4d58edd92chrismair try { 7677391c2a01ce1fed085906743cc240a4d58edd92chrismair remoteFile.readFile(FILENAME); 7777391c2a01ce1fed085906743cc240a4d58edd92chrismair fail("Expected IOException"); 7877391c2a01ce1fed085906743cc240a4d58edd92chrismair } 7977391c2a01ce1fed085906743cc240a4d58edd92chrismair catch (IOException expected) { 8077391c2a01ce1fed085906743cc240a4d58edd92chrismair // Expected this 8177391c2a01ce1fed085906743cc240a4d58edd92chrismair } 8277391c2a01ce1fed085906743cc240a4d58edd92chrismair } 8377391c2a01ce1fed085906743cc240a4d58edd92chrismair 8477391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 8577391c2a01ce1fed085906743cc240a4d58edd92chrismair * @see org.mockftpserver.test.AbstractTest#setUp() 8677391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 8777391c2a01ce1fed085906743cc240a4d58edd92chrismair protected void setUp() throws Exception { 8877391c2a01ce1fed085906743cc240a4d58edd92chrismair super.setUp(); 8977391c2a01ce1fed085906743cc240a4d58edd92chrismair remoteFile = new RemoteFile(); 9077391c2a01ce1fed085906743cc240a4d58edd92chrismair remoteFile.setServer("localhost"); 9177391c2a01ce1fed085906743cc240a4d58edd92chrismair remoteFile.setPort(PORT); 9277391c2a01ce1fed085906743cc240a4d58edd92chrismair stubFtpServer = new StubFtpServer(); 9377391c2a01ce1fed085906743cc240a4d58edd92chrismair stubFtpServer.setServerControlPort(PORT); 9477391c2a01ce1fed085906743cc240a4d58edd92chrismair } 9577391c2a01ce1fed085906743cc240a4d58edd92chrismair 9677391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 9777391c2a01ce1fed085906743cc240a4d58edd92chrismair * @see org.mockftpserver.test.AbstractTest#tearDown() 9877391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 9977391c2a01ce1fed085906743cc240a4d58edd92chrismair protected void tearDown() throws Exception { 10077391c2a01ce1fed085906743cc240a4d58edd92chrismair super.tearDown(); 10177391c2a01ce1fed085906743cc240a4d58edd92chrismair stubFtpServer.stop(); 10277391c2a01ce1fed085906743cc240a4d58edd92chrismair } 10377391c2a01ce1fed085906743cc240a4d58edd92chrismair 10477391c2a01ce1fed085906743cc240a4d58edd92chrismair} 105