1abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair/*
2abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * Copyright 2007 the original author or authors.
3abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair *
4abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * Licensed under the Apache License, Version 2.0 (the "License");
5abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * you may not use this file except in compliance with the License.
6abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * You may obtain a copy of the License at
7abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair *
8abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair *      http://www.apache.org/licenses/LICENSE-2.0
9abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair *
10abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * Unless required by applicable law or agreed to in writing, software
11abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * distributed under the License is distributed on an "AS IS" BASIS,
12abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * See the License for the specific language governing permissions and
14abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * limitations under the License.
15abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair */
16abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismairpackage org.mockftpserver.core.server;
17abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
18abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismairimport org.apache.commons.net.ftp.FTPClient;
1940658190151b7ded3489ff89c301b470155c95f4chrismairimport org.mockftpserver.test.*;
2040658190151b7ded3489ff89c301b470155c95f4chrismairimport org.mockftpserver.test.AbstractTestCase;
21abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
22abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair/**
23abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * Abstract superclass for tests of AbstractFtpServer subclasses that require the server thread to be started.
24abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair *
25abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * @author Chris Mair
26abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair * @version $Revision$ - $Date$
27abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair */
2840658190151b7ded3489ff89c301b470155c95f4chrismairpublic abstract class AbstractFtpServer_StartTestCase extends AbstractTestCase {
29abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
30abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    private static final String SERVER = "localhost";
31abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
32abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    private AbstractFtpServer ftpServer;
33abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
34abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    /**
35abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair     * Test the start() and stop() methods. Start the server and then stop it immediately.
36abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair     */
37abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    public void testStartAndStop() throws Exception {
38abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        ftpServer.setServerControlPort(PortTestUtil.getFtpServerControlPort());
39abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        assertEquals("started - before", false, ftpServer.isStarted());
40abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
41abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        ftpServer.start();
42abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        Thread.sleep(200L);     // give it some time to get started
43abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        assertEquals("started - after start()", true, ftpServer.isStarted());
44abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        assertEquals("shutdown - after start()", false, ftpServer.isShutdown());
45abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
46abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        ftpServer.stop();
47abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
48abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        assertEquals("shutdown - after stop()", true, ftpServer.isShutdown());
49abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    }
50abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
51abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    /**
52abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair     * Test setting a non-default port number for the StubFtpServer control connection socket.
53abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair     */
54abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    public void testCustomServerControlPort() throws Exception {
55abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        final int SERVER_CONTROL_PORT = 9187;
56abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
57abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        ftpServer.setServerControlPort(SERVER_CONTROL_PORT);
58abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        ftpServer.start();
59abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
60abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        try {
61abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair            FTPClient ftpClient = new FTPClient();
62abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair            ftpClient.connect(SERVER, SERVER_CONTROL_PORT);
63abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        }
64abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        finally {
65abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair            ftpServer.stop();
66abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        }
67abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    }
68abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
69abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    //-------------------------------------------------------------------------
70abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    // Test setup
71abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    //-------------------------------------------------------------------------
72abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
73abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    /**
7440658190151b7ded3489ff89c301b470155c95f4chrismair     * @see org.mockftpserver.test.AbstractTestCase#setUp()
75abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair     */
76abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    protected void setUp() throws Exception {
77abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        super.setUp();
78abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair        ftpServer = createFtpServer();
79abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    }
80abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
81abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    //-------------------------------------------------------------------------
82abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    // Abstract method declarations
83abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    //-------------------------------------------------------------------------
84abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
85abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair    protected abstract AbstractFtpServer createFtpServer();
86abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair
87abc66ab652b34d39ea5a00a75b1d7c7cc157a84fchrismair}