001/* 002 * Copyright (c) 2013 - 2016 TDP Ltd All Rights Reserved. 003 * TDP Ltd grants permission, free of charge, to any person obtaining copies 004 * of this software and its associated documentation files (the "Software"), 005 * to deal in the Software without restriction, including to use, copy, adapt, 006 * publish, distribute, display, perform, sublicense, and sell copies of the 007 * Software, subject to the following condition: You must include the above 008 * copyright notice and this permission notice in all full or partial copies 009 * of the Software. 010 * 011 * TDP LTD PROVIDES THE SOFTWARE "AS IS," WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, 012 * INCLUDING WITHOUT THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 013 * PARTICULAR PURPOSE, AND NON-INFRINGMENT. TDP LTD, THE AUTHORS OF THE SOFTWARE, 014 * AND THE OWNERS OF COPYRIGHT IN THE SOFTWARE ARE NOT LIABLE FOR ANY CLAIM, DAMAGES, 015 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING 016 * FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 017 * THE SOFTWARE. 018 */ 019package cz.tdp.kshield.example; 020 021import java.io.ByteArrayInputStream; 022import java.io.IOException; 023import java.io.InputStream; 024import java.io.OutputStream; 025import java.nio.charset.Charset; 026import java.util.Locale; 027 028import org.apache.http.Header; 029import org.apache.http.HeaderIterator; 030import org.apache.http.HttpEntity; 031import org.apache.http.HttpHost; 032import org.apache.http.HttpRequest; 033import org.apache.http.HttpResponse; 034import org.apache.http.HttpStatus; 035import org.apache.http.ProtocolVersion; 036import org.apache.http.StatusLine; 037import org.apache.http.client.ClientProtocolException; 038import org.apache.http.client.ResponseHandler; 039import org.apache.http.client.methods.CloseableHttpResponse; 040import org.apache.http.client.methods.HttpUriRequest; 041import org.apache.http.conn.ClientConnectionManager; 042import org.apache.http.conn.HttpClientConnectionManager; 043import org.apache.http.impl.client.CloseableHttpClient; 044import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; 045import org.apache.http.message.BasicStatusLine; 046import org.apache.http.params.HttpParams; 047import org.apache.http.protocol.HttpContext; 048 049//SONAR-IGNORE-FILE 050 051/** 052 * Used for JUnit testing and demonstration purposes 053 * This implementation will always return response with given string bytes 054 */ 055@SuppressWarnings("all") 056public class MockHttpClient extends CloseableHttpClient //NOSONAR suppress sonar warnings in Mock class 057{ 058 /** 059 * Last httpRequest - you can check this in tests 060 */ 061 public HttpRequest httpRequest; 062 063 /** 064 * Last httpResponse - you can check this in tests 065 */ 066 public MockHttpResponse httpResponse; 067 068 private HttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); 069 070 /** 071 * @param response fake response as String 072 */ 073 public MockHttpClient(String response) { 074 setResponse(response); 075 } 076 077 /** 078 * Sets new fake response as string 079 * @param response 080 */ 081 public final void setResponse(String response) { 082 final byte[] bytes = response.getBytes(Charset.defaultCharset()); 083 final ByteArrayInputStream istream = new ByteArrayInputStream(bytes); 084 085 httpResponse = new MockHttpResponse(istream, bytes); 086 } 087 088 public final void setStatus(int status) { 089 httpResponse.setStatusCode(status); 090 httpResponse.setStatus(status); 091 } 092 093 static final class MockHttpResponse implements CloseableHttpResponse 094 { 095 private final ByteArrayInputStream istream; 096 private final byte[] bytes; 097 private int status = HttpStatus.SC_OK; 098 099 /** 100 * @param istream 101 * @param bytes 102 */ 103 MockHttpResponse(ByteArrayInputStream istream, byte[] bytes) { 104 this.istream = istream; 105 this.bytes = bytes; 106 } 107 108 @Override 109 public HttpEntity getEntity() { 110 return new MockHttpEntity(); 111 } 112 113 public void setStatus(int status) { 114 this.status = status; 115 } 116 117 @Override 118 public void addHeader(Header arg0) {} 119 120 @Override 121 public void addHeader(String arg0, String arg1) {} 122 123 @Override 124 public boolean containsHeader(String arg0) { return false; } 125 126 @Override 127 public Header[] getAllHeaders() { return null; } 128 129 @Override 130 public Header getFirstHeader(String arg0) { return null; } 131 132 @Override 133 public Header[] getHeaders(String arg0) { return null; } 134 135 @Override 136 public Header getLastHeader(String arg0) { return null; } 137 138 @Override 139 public HttpParams getParams() { return null; } 140 141 @Override 142 public ProtocolVersion getProtocolVersion() { return null; } 143 144 @Override 145 public HeaderIterator headerIterator() { return null; } 146 147 @Override 148 public HeaderIterator headerIterator(String arg0) { return null; } 149 150 @Override 151 public void removeHeader(Header arg0) {} 152 153 @Override 154 public void removeHeaders(String arg0) {} 155 156 @Override 157 public void setHeader(Header arg0) {} 158 159 @Override 160 public void setHeader(String arg0, String arg1) {} 161 162 @Override 163 public void setHeaders(Header[] arg0) {} 164 165 @Override 166 public void setParams(HttpParams arg0) {} 167 168 @Override 169 public Locale getLocale() { return null; } 170 171 @Override 172 public StatusLine getStatusLine() { return new BasicStatusLine(new ProtocolVersion("HTTP",1,1), status, ""); } 173 174 @Override 175 public void setEntity(HttpEntity arg0) {} 176 177 @Override 178 public void setLocale(Locale arg0) {} 179 180 @Override 181 public void setReasonPhrase(String arg0) throws IllegalStateException {} 182 183 @Override 184 public void setStatusCode(int arg0) throws IllegalStateException {} 185 186 @Override 187 public void setStatusLine(StatusLine arg0) {} 188 189 @Override 190 public void setStatusLine(ProtocolVersion arg0, int arg1) {} 191 192 @Override 193 public void setStatusLine(ProtocolVersion arg0, int arg1, String arg2) {} 194 195 class MockHttpEntity implements HttpEntity 196 { 197 @Override 198 public InputStream getContent() throws IOException { 199 return istream; 200 } 201 @Override 202 public void consumeContent() throws IOException {} 203 @Override 204 public Header getContentEncoding() { return null; } 205 @Override 206 public long getContentLength() { return bytes.length; } 207 @Override 208 public Header getContentType() { return null; } 209 @Override 210 public boolean isChunked() { return false; } 211 @Override 212 public boolean isRepeatable() { return false; } 213 @Override 214 public boolean isStreaming() { return false; } 215 @Override 216 public void writeTo(OutputStream arg0) throws IOException {} 217 } 218 219 @Override 220 public void close() throws IOException {} 221 } 222 223 @Override 224 public HttpParams getParams() { 225 return null; 226 } 227 228 @Override 229 public ClientConnectionManager getConnectionManager() { 230 return null; 231 } 232 233 @Override 234 public void close() throws IOException {} 235 236 /* (non-Javadoc) 237 * @see org.apache.http.impl.client.CloseableHttpClient#doExecute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) 238 */ 239 @Override 240 protected CloseableHttpResponse doExecute(HttpHost target, HttpRequest request, HttpContext context) 241 throws IOException, ClientProtocolException { 242 httpRequest = request; 243 return httpResponse; 244 } 245}