1ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair/* 2ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Copyright 2007 the original author or authors. 3ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * 4ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * you may not use this file except in compliance with the License. 6ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * You may obtain a copy of the License at 7ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * 8ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * http://www.apache.org/licenses/LICENSE-2.0 9ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * 10ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Unless required by applicable law or agreed to in writing, software 11ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * distributed under the License is distributed on an "AS IS" BASIS, 12ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * See the License for the specific language governing permissions and 14ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * limitations under the License. 15ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 16ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismairpackage org.mockftpserver.core.socket; 17ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 18ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismairimport java.io.IOException; 19ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismairimport java.io.InputStream; 20ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismairimport java.io.OutputStream; 21ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismairimport java.net.InetAddress; 22ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismairimport java.net.Socket; 23ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 24ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair/** 25ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Test (fake) subclass of Socket that performs no network access and allows setting the 26ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * inputStream and OutputStream for the socket. 27ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * 28ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @version $Revision$ - $Date$ 29ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * 30ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @author Chris Mair 31ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 32ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismairpublic final class StubSocket extends Socket { 33ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 34ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair private InetAddress inetAddress; 35ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair private InetAddress localAddress; 36ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair private InputStream inputStream; 37ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair private OutputStream outputStream; 38ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 39ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair /** 40ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Construct a new instance using the specified InputStream and OutputStream 41ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @param inputStream - the InputStream to use 42ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @param outputStream - the OutputStream to use 43ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 44ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair public StubSocket(InputStream inputStream, OutputStream outputStream) { 45ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair this(null, inputStream, outputStream); 46ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 47ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 48ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair /** 49ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Construct a new instance using the specified host, InputStream and OutputStream 50ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @param inetAddress - the InetAddress for this socket 51ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @param inputStream - the InputStream to use 52ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @param outputStream - the OutputStream to use 53ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 54ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair public StubSocket(InetAddress inetAddress, InputStream inputStream, OutputStream outputStream) { 55ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair this.inetAddress = inetAddress; 56ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair this.inputStream = inputStream; 57ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair this.outputStream = outputStream; 58ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 59ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 60ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair /** 61ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Override the superclass implementation. If the local inetAddress is not null, 62ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * return that. Otherwise return super.getInetAddress(). 63ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @see java.net.Socket#getInetAddress() 64ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 65ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair public InetAddress getInetAddress() { 66ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair return (inetAddress != null) ? inetAddress : super.getInetAddress(); 67ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 68ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 69ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair /** 70ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Override the superclass implementation. If the local localAddress is not 71ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * null, return that. Otherwise return super.getLocalAddress(); 72ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @see java.net.Socket#getLocalAddress() 73ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 74ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair public InetAddress getLocalAddress() { 75ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair return (localAddress != null) ? localAddress : super.getLocalAddress(); 76ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 77ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 78ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair /** 79ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Override the superclass implementation to provide the predefined InputStream 80ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @see java.net.Socket#getInputStream() 81ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 82ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair public InputStream getInputStream() throws IOException { 83ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair return inputStream; 84ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 85ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 86ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair /** 87ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Override the superclass implementation to provide the predefined OutputStream 88ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @see java.net.Socket#getOutputStream() 89ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 90ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair public OutputStream getOutputStream() throws IOException { 91ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair return outputStream; 92ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 93ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 94ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair //------------------------------------------------------------------------- 95ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair // Test-specific helper methods 96ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair //------------------------------------------------------------------------- 97ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 98ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair public void _setLocalAddress(InetAddress localAddress) { 99ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair this.localAddress = localAddress; 100ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 101ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair} 102