1fba2635c088b01af59300e8a02611bb788ee3bffchrismair/*
2fba2635c088b01af59300e8a02611bb788ee3bffchrismair * Copyright 2011 the original author or authors.
3fba2635c088b01af59300e8a02611bb788ee3bffchrismair *
4fba2635c088b01af59300e8a02611bb788ee3bffchrismair * Licensed under the Apache License, Version 2.0 (the "License");
5fba2635c088b01af59300e8a02611bb788ee3bffchrismair * you may not use this file except in compliance with the License.
6fba2635c088b01af59300e8a02611bb788ee3bffchrismair * You may obtain a copy of the License at
7fba2635c088b01af59300e8a02611bb788ee3bffchrismair *
8fba2635c088b01af59300e8a02611bb788ee3bffchrismair *      http://www.apache.org/licenses/LICENSE-2.0
9fba2635c088b01af59300e8a02611bb788ee3bffchrismair *
10fba2635c088b01af59300e8a02611bb788ee3bffchrismair * Unless required by applicable law or agreed to in writing, software
11fba2635c088b01af59300e8a02611bb788ee3bffchrismair * distributed under the License is distributed on an "AS IS" BASIS,
12fba2635c088b01af59300e8a02611bb788ee3bffchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fba2635c088b01af59300e8a02611bb788ee3bffchrismair * See the License for the specific language governing permissions and
14fba2635c088b01af59300e8a02611bb788ee3bffchrismair * limitations under the License.
15fba2635c088b01af59300e8a02611bb788ee3bffchrismair */
16fba2635c088b01af59300e8a02611bb788ee3bffchrismairpackage org.mockftpserver.core.server
17fba2635c088b01af59300e8a02611bb788ee3bffchrismair
18fba2635c088b01af59300e8a02611bb788ee3bffchrismairimport org.mockftpserver.fake.FakeFtpServer
19fba2635c088b01af59300e8a02611bb788ee3bffchrismairimport org.mockftpserver.test.AbstractGroovyTestCase
20fba2635c088b01af59300e8a02611bb788ee3bffchrismairimport org.mockftpserver.test.PortTestUtil
21fba2635c088b01af59300e8a02611bb788ee3bffchrismair
22fba2635c088b01af59300e8a02611bb788ee3bffchrismair/**
23fba2635c088b01af59300e8a02611bb788ee3bffchrismair * Test starting and stopping Abstract(Fake)FtpServer multiple times.
24fba2635c088b01af59300e8a02611bb788ee3bffchrismair *
25fba2635c088b01af59300e8a02611bb788ee3bffchrismair * @version $Revision: 242 $ - $Date: 2010-03-21 07:41:01 -0400 (Sun, 21 Mar 2010) $
26fba2635c088b01af59300e8a02611bb788ee3bffchrismair *
27fba2635c088b01af59300e8a02611bb788ee3bffchrismair * @author Chris Mair
28fba2635c088b01af59300e8a02611bb788ee3bffchrismair */
29fba2635c088b01af59300e8a02611bb788ee3bffchrismairclass AbstractFtpServer_MultipleStartAndStopTest extends AbstractGroovyTestCase {
30fba2635c088b01af59300e8a02611bb788ee3bffchrismair
31fba2635c088b01af59300e8a02611bb788ee3bffchrismair    private FakeFtpServer ftpServer = new FakeFtpServer()
32fba2635c088b01af59300e8a02611bb788ee3bffchrismair
33fba2635c088b01af59300e8a02611bb788ee3bffchrismair    // Takes ~ 500ms per start/stop
34fba2635c088b01af59300e8a02611bb788ee3bffchrismair
35fba2635c088b01af59300e8a02611bb788ee3bffchrismair    void testStartAndStop() {
36fba2635c088b01af59300e8a02611bb788ee3bffchrismair        10.times {
37fba2635c088b01af59300e8a02611bb788ee3bffchrismair            final def port = PortTestUtil.getFtpServerControlPort()
38fba2635c088b01af59300e8a02611bb788ee3bffchrismair            ftpServer.setServerControlPort(port);
39fba2635c088b01af59300e8a02611bb788ee3bffchrismair
40fba2635c088b01af59300e8a02611bb788ee3bffchrismair            ftpServer.start();
41fba2635c088b01af59300e8a02611bb788ee3bffchrismair            assert ftpServer.getServerControlPort() == port
42fba2635c088b01af59300e8a02611bb788ee3bffchrismair            Thread.sleep(100L);     // give it some time to get started
43fba2635c088b01af59300e8a02611bb788ee3bffchrismair            assertEquals("started - after start()", true, ftpServer.isStarted());
44fba2635c088b01af59300e8a02611bb788ee3bffchrismair            assertEquals("shutdown - after start()", false, ftpServer.isShutdown());
45fba2635c088b01af59300e8a02611bb788ee3bffchrismair
46fba2635c088b01af59300e8a02611bb788ee3bffchrismair            ftpServer.stop();
47fba2635c088b01af59300e8a02611bb788ee3bffchrismair
48fba2635c088b01af59300e8a02611bb788ee3bffchrismair            assertEquals("shutdown - after stop()", true, ftpServer.isShutdown());
49fba2635c088b01af59300e8a02611bb788ee3bffchrismair        }
50fba2635c088b01af59300e8a02611bb788ee3bffchrismair    }
51fba2635c088b01af59300e8a02611bb788ee3bffchrismair
52fba2635c088b01af59300e8a02611bb788ee3bffchrismair    void testStartAndStop_UseDynamicFreePort() {
53fba2635c088b01af59300e8a02611bb788ee3bffchrismair        5.times {
54fba2635c088b01af59300e8a02611bb788ee3bffchrismair            ftpServer.setServerControlPort(0);
55fba2635c088b01af59300e8a02611bb788ee3bffchrismair            assert ftpServer.getServerControlPort() == 0
56fba2635c088b01af59300e8a02611bb788ee3bffchrismair
57fba2635c088b01af59300e8a02611bb788ee3bffchrismair            ftpServer.start();
58fba2635c088b01af59300e8a02611bb788ee3bffchrismair            log("Using port ${ftpServer.getServerControlPort()}")
59fba2635c088b01af59300e8a02611bb788ee3bffchrismair            assert ftpServer.getServerControlPort() != 0
60fba2635c088b01af59300e8a02611bb788ee3bffchrismair
61fba2635c088b01af59300e8a02611bb788ee3bffchrismair            ftpServer.stop();
62fba2635c088b01af59300e8a02611bb788ee3bffchrismair        }
63fba2635c088b01af59300e8a02611bb788ee3bffchrismair    }
64fba2635c088b01af59300e8a02611bb788ee3bffchrismair
65fba2635c088b01af59300e8a02611bb788ee3bffchrismair    void tearDown() {
66fba2635c088b01af59300e8a02611bb788ee3bffchrismair        super.tearDown()
67fba2635c088b01af59300e8a02611bb788ee3bffchrismair        ftpServer.stop();   // just to be sure
68fba2635c088b01af59300e8a02611bb788ee3bffchrismair    }
69fba2635c088b01af59300e8a02611bb788ee3bffchrismair}
70