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.core.socket; 1777391c2a01ce1fed085906743cc240a4d58edd92chrismair 1877391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.io.IOException; 1977391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.net.ServerSocket; 2077391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.net.Socket; 2177391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.net.SocketTimeoutException; 2277391c2a01ce1fed085906743cc240a4d58edd92chrismair 2377391c2a01ce1fed085906743cc240a4d58edd92chrismair/** 2477391c2a01ce1fed085906743cc240a4d58edd92chrismair * Test (fake) subclass of ServerSocket that performs no network access and allows setting the 2577391c2a01ce1fed085906743cc240a4d58edd92chrismair * Socket returned by accept(), and the local port for the ServerSocket. 2677391c2a01ce1fed085906743cc240a4d58edd92chrismair * 2777391c2a01ce1fed085906743cc240a4d58edd92chrismair * @version $Revision$ - $Date$ 2877391c2a01ce1fed085906743cc240a4d58edd92chrismair * 2977391c2a01ce1fed085906743cc240a4d58edd92chrismair * @author Chris Mair 3077391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 3177391c2a01ce1fed085906743cc240a4d58edd92chrismairpublic class StubServerSocket extends ServerSocket { 3277391c2a01ce1fed085906743cc240a4d58edd92chrismair private int localPort; 3377391c2a01ce1fed085906743cc240a4d58edd92chrismair private Socket socket; 3477391c2a01ce1fed085906743cc240a4d58edd92chrismair 3577391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 3677391c2a01ce1fed085906743cc240a4d58edd92chrismair * Construct a new instance with the specified local port. 3777391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param localPort - the local port to be returned from getLocalPort() 3877391c2a01ce1fed085906743cc240a4d58edd92chrismair * @throws IOException 3977391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 4077391c2a01ce1fed085906743cc240a4d58edd92chrismair public StubServerSocket(int localPort) throws IOException { 4177391c2a01ce1fed085906743cc240a4d58edd92chrismair this(localPort, null); 4277391c2a01ce1fed085906743cc240a4d58edd92chrismair } 4377391c2a01ce1fed085906743cc240a4d58edd92chrismair 4477391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 4577391c2a01ce1fed085906743cc240a4d58edd92chrismair * Construct a new instance with specified local port and accept() socket. 4677391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param localPort - the local port to be returned from getLocalPort() 4777391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param socket - the socket to be returned from accept(); if null, then accept() throws SocketTimeoutException. 4877391c2a01ce1fed085906743cc240a4d58edd92chrismair * @throws IOException 4977391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 5077391c2a01ce1fed085906743cc240a4d58edd92chrismair public StubServerSocket(int localPort, Socket socket) throws IOException { 5177391c2a01ce1fed085906743cc240a4d58edd92chrismair super(0); 5277391c2a01ce1fed085906743cc240a4d58edd92chrismair this.localPort = localPort; 5377391c2a01ce1fed085906743cc240a4d58edd92chrismair this.socket = socket; 5477391c2a01ce1fed085906743cc240a4d58edd92chrismair } 5577391c2a01ce1fed085906743cc240a4d58edd92chrismair 5677391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 5777391c2a01ce1fed085906743cc240a4d58edd92chrismair * Return the predefined local port 5877391c2a01ce1fed085906743cc240a4d58edd92chrismair * @see java.net.ServerSocket#getLocalPort() 5977391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 6077391c2a01ce1fed085906743cc240a4d58edd92chrismair public int getLocalPort() { 6177391c2a01ce1fed085906743cc240a4d58edd92chrismair return localPort; 6277391c2a01ce1fed085906743cc240a4d58edd92chrismair } 6377391c2a01ce1fed085906743cc240a4d58edd92chrismair 6477391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 6577391c2a01ce1fed085906743cc240a4d58edd92chrismair * If a socket was specified on the constructor, then return that; otherwise, throw a SocketTimeoutException. 6677391c2a01ce1fed085906743cc240a4d58edd92chrismair * @see java.net.ServerSocket#accept() 6777391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 6877391c2a01ce1fed085906743cc240a4d58edd92chrismair public Socket accept() throws IOException { 6977391c2a01ce1fed085906743cc240a4d58edd92chrismair if (socket != null) { 7077391c2a01ce1fed085906743cc240a4d58edd92chrismair return socket; 7177391c2a01ce1fed085906743cc240a4d58edd92chrismair } 7277391c2a01ce1fed085906743cc240a4d58edd92chrismair throw new SocketTimeoutException(); 7377391c2a01ce1fed085906743cc240a4d58edd92chrismair } 7477391c2a01ce1fed085906743cc240a4d58edd92chrismair} 75