12ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair/*
22ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Copyright 2007 the original author or authors.
32ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
42ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Licensed under the Apache License, Version 2.0 (the "License");
52ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * you may not use this file except in compliance with the License.
62ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * You may obtain a copy of the License at
72ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
82ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *      http://www.apache.org/licenses/LICENSE-2.0
92ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
102ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Unless required by applicable law or agreed to in writing, software
112ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * distributed under the License is distributed on an "AS IS" BASIS,
122ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * See the License for the specific language governing permissions and
142ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * limitations under the License.
152ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */
162ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairpackage org.mockftpserver.stub.example;
172ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
182ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.core.command.CommandNames;
192ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.core.command.InvocationRecord;
202ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.stub.StubFtpServer;
212ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.stub.command.RetrCommandHandler;
222ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.test.AbstractTest;
232ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.test.IntegrationTest;
242ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
252ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport java.io.IOException;
262ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
272ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair/**
282ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Example test using StubFtpServer, with programmatic configuration.
292ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */
302ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairpublic class RemoteFileTest extends AbstractTest implements IntegrationTest {
312ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
322ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    private static final int PORT = 9981;
332ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    private static final String FILENAME = "dir/sample.txt";
342ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
352ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    private RemoteFile remoteFile;
362ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    private StubFtpServer stubFtpServer;
372ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
382ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
392ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * Test readFile() method
402ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
412ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    public void testReadFile() throws Exception {
422ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
432ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        final String CONTENTS = "abcdef 1234567890";
442ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
452ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        // Replace the default RETR CommandHandler; customize returned file contents
462ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        RetrCommandHandler retrCommandHandler = new RetrCommandHandler();
472ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        retrCommandHandler.setFileContents(CONTENTS);
482ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        stubFtpServer.setCommandHandler(CommandNames.RETR, retrCommandHandler);
492ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
502ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        stubFtpServer.start();
512ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
522ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        String contents = remoteFile.readFile(FILENAME);
532ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
542ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        // Verify returned file contents
552ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assertEquals("contents", CONTENTS, contents);
562ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
572ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        // Verify the submitted filename
582ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        InvocationRecord invocationRecord = retrCommandHandler.getInvocation(0);
592ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        String filename = invocationRecord.getString(RetrCommandHandler.PATHNAME_KEY);
602ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assertEquals("filename", FILENAME, filename);
612ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
622ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
632ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
642ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * Test the readFile() method when the FTP transfer fails (returns a non-success reply code)
652ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
662ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    public void testReadFileThrowsException() {
672ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
682ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        // Replace the default RETR CommandHandler; return failure reply code
692ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        RetrCommandHandler retrCommandHandler = new RetrCommandHandler();
702ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        retrCommandHandler.setFinalReplyCode(550);
712ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        stubFtpServer.setCommandHandler(CommandNames.RETR, retrCommandHandler);
722ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
732ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        stubFtpServer.start();
742ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
752ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        try {
762ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair            remoteFile.readFile(FILENAME);
772ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair            fail("Expected IOException");
782ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        }
792ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        catch (IOException expected) {
802ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair            // Expected this
812ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        }
822ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
832ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
842ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
852ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @see org.mockftpserver.test.AbstractTest#setUp()
862ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
872ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected void setUp() throws Exception {
882ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        super.setUp();
892ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        remoteFile = new RemoteFile();
902ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        remoteFile.setServer("localhost");
912ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        remoteFile.setPort(PORT);
922ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        stubFtpServer = new StubFtpServer();
932ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        stubFtpServer.setServerControlPort(PORT);
942ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
952ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
962ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
972ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @see org.mockftpserver.test.AbstractTest#tearDown()
982ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
992ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected void tearDown() throws Exception {
1002ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        super.tearDown();
1012ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        stubFtpServer.stop();
1022ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
1032ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
1042ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair}
105