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.core.socket; 172ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 182ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport java.io.IOException; 192ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport java.net.ServerSocket; 202ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport java.net.Socket; 212ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport java.net.SocketTimeoutException; 222ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 232ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair/** 242ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Test (fake) subclass of ServerSocket that performs no network access and allows setting the 252ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Socket returned by accept(), and the local port for the ServerSocket. 262ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * 272ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @version $Revision$ - $Date$ 282ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * 292ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @author Chris Mair 302ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */ 312ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairpublic class StubServerSocket extends ServerSocket { 322ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair private int localPort; 332ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair private Socket socket; 342ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 352ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair /** 362ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Construct a new instance with the specified local port. 372ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @param localPort - the local port to be returned from getLocalPort() 382ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @throws IOException 392ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */ 402ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair public StubServerSocket(int localPort) throws IOException { 412ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair this(localPort, null); 422ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 432ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 442ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair /** 452ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Construct a new instance with specified local port and accept() socket. 462ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @param localPort - the local port to be returned from getLocalPort() 472ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @param socket - the socket to be returned from accept(); if null, then accept() throws SocketTimeoutException. 482ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @throws IOException 492ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */ 502ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair public StubServerSocket(int localPort, Socket socket) throws IOException { 512ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair super(0); 522ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair this.localPort = localPort; 532ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair this.socket = socket; 542ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 552ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 562ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair /** 572ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Return the predefined local port 582ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @see java.net.ServerSocket#getLocalPort() 592ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */ 602ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair public int getLocalPort() { 612ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair return localPort; 622ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 632ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 642ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair /** 652ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * If a socket was specified on the constructor, then return that; otherwise, throw a SocketTimeoutException. 662ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @see java.net.ServerSocket#accept() 672ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */ 682ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair public Socket accept() throws IOException { 692ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair if (socket != null) { 702ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair return socket; 712ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 722ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair throw new SocketTimeoutException(); 732ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 742ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair} 75