1b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair/* 2b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Copyright 2007 the original author or authors. 3b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 4b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * you may not use this file except in compliance with the License. 6b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * You may obtain a copy of the License at 7b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 8b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * http://www.apache.org/licenses/LICENSE-2.0 9b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 10b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Unless required by applicable law or agreed to in writing, software 11b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * distributed under the License is distributed on an "AS IS" BASIS, 12b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * See the License for the specific language governing permissions and 14b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * limitations under the License. 15b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 16b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairpackage org.mockftpserver.core.socket; 17b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 18b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport java.io.IOException; 19b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport java.net.ServerSocket; 20b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport java.net.Socket; 21b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport java.net.SocketTimeoutException; 22b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 23b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair/** 24b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Test (fake) subclass of ServerSocket that performs no network access and allows setting the 25b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Socket returned by accept(), and the local port for the ServerSocket. 26b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 27b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @version $Revision$ - $Date$ 28b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 29b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @author Chris Mair 30b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 31b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairpublic class StubServerSocket extends ServerSocket { 32b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair private int localPort; 33b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair private Socket socket; 34b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 35b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 36b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Construct a new instance with the specified local port. 37b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @param localPort - the local port to be returned from getLocalPort() 38b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @throws IOException 39b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 40b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair public StubServerSocket(int localPort) throws IOException { 41b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair this(localPort, null); 42b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 43b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 44b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 45b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Construct a new instance with specified local port and accept() socket. 46b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @param localPort - the local port to be returned from getLocalPort() 47b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @param socket - the socket to be returned from accept(); if null, then accept() throws SocketTimeoutException. 48b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @throws IOException 49b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 50b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair public StubServerSocket(int localPort, Socket socket) throws IOException { 51b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair super(0); 52b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair this.localPort = localPort; 53b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair this.socket = socket; 54b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 55b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 56b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 57b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Return the predefined local port 58b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @see java.net.ServerSocket#getLocalPort() 59b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 60b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair public int getLocalPort() { 61b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair return localPort; 62b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 63b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 64b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 65b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * If a socket was specified on the constructor, then return that; otherwise, throw a SocketTimeoutException. 66b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @see java.net.ServerSocket#accept() 67b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 68b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair public Socket accept() throws IOException { 69b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair if (socket != null) { 70b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair return socket; 71b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 72b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair throw new SocketTimeoutException(); 73b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 74b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair} 75