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