14bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair/* 24bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * Copyright 2007 the original author or authors. 34bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * 44bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * Licensed under the Apache License, Version 2.0 (the "License"); 54bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * you may not use this file except in compliance with the License. 64bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * You may obtain a copy of the License at 74bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * 84bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * http://www.apache.org/licenses/LICENSE-2.0 94bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * 104bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * Unless required by applicable law or agreed to in writing, software 114bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * distributed under the License is distributed on an "AS IS" BASIS, 124bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * See the License for the specific language governing permissions and 144bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * limitations under the License. 154bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair */ 164bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismairpackage org.mockftpserver.core.socket; 174bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair 184bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismairimport java.io.IOException; 194bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismairimport java.io.InputStream; 204bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismairimport java.io.OutputStream; 214bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismairimport java.net.InetAddress; 224bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismairimport java.net.Socket; 234bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair 244bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair/** 254bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * Test (fake) subclass of Socket that performs no network access and allows setting the 264bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * inputStream and OutputStream for the socket. 274bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * 284bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * @version $Revision$ - $Date$ 294bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * 304bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * @author Chris Mair 314bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair */ 324bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismairpublic final class StubSocket extends Socket { 334bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair 344bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair private InetAddress inetAddress; 354bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair private InetAddress localAddress; 364bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair private InputStream inputStream; 374bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair private OutputStream outputStream; 384bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair 394bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair /** 404bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * Construct a new instance using the specified InputStream and OutputStream 414bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * @param inputStream - the InputStream to use 424bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * @param outputStream - the OutputStream to use 434bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair */ 444bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair public StubSocket(InputStream inputStream, OutputStream outputStream) { 454bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair this(null, inputStream, outputStream); 464bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair } 474bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair 484bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair /** 494bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * Construct a new instance using the specified host, InputStream and OutputStream 504bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * @param inetAddress - the InetAddress for this socket 514bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * @param inputStream - the InputStream to use 524bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * @param outputStream - the OutputStream to use 534bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair */ 544bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair public StubSocket(InetAddress inetAddress, InputStream inputStream, OutputStream outputStream) { 554bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair this.inetAddress = inetAddress; 564bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair this.inputStream = inputStream; 574bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair this.outputStream = outputStream; 584bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair } 594bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair 604bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair /** 614bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * Override the superclass implementation. If the local inetAddress is not null, 624bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * return that. Otherwise return super.getInetAddress(). 634bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * @see java.net.Socket#getInetAddress() 644bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair */ 654bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair public InetAddress getInetAddress() { 664bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair return (inetAddress != null) ? inetAddress : super.getInetAddress(); 674bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair } 684bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair 694bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair /** 704bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * Override the superclass implementation. If the local localAddress is not 714bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * null, return that. Otherwise return super.getLocalAddress(); 724bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * @see java.net.Socket#getLocalAddress() 734bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair */ 744bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair public InetAddress getLocalAddress() { 754bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair return (localAddress != null) ? localAddress : super.getLocalAddress(); 764bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair } 774bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair 784bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair /** 794bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * Override the superclass implementation to provide the predefined InputStream 804bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * @see java.net.Socket#getInputStream() 814bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair */ 824bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair public InputStream getInputStream() throws IOException { 834bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair return inputStream; 844bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair } 854bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair 864bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair /** 874bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * Override the superclass implementation to provide the predefined OutputStream 884bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair * @see java.net.Socket#getOutputStream() 894bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair */ 904bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair public OutputStream getOutputStream() throws IOException { 914bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair return outputStream; 924bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair } 934bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair 944bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair //------------------------------------------------------------------------- 954bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair // Test-specific helper methods 964bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair //------------------------------------------------------------------------- 974bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair 984bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair public void _setLocalAddress(InetAddress localAddress) { 994bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair this.localAddress = localAddress; 1004bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair } 1014bc314fb002f3e5369cd724b91e83e0c71aeeccbchrismair} 102