All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.api.client.testing.http.MockLowLevelHttpRequest Maven / Gradle / Ivy

Go to download

Google HTTP Client Library for Java. Functionality that works on all supported Java platforms, including Java 5 (or higher) desktop (SE) and web (EE), Android, and Google App Engine.

The newest version!
/*
 * Copyright (c) 2010 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package com.google.api.client.testing.http;

import com.google.api.client.http.HttpMediaType;
import com.google.api.client.http.LowLevelHttpRequest;
import com.google.api.client.http.LowLevelHttpResponse;
import com.google.api.client.util.Beta;
import com.google.api.client.util.IOUtils;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.zip.GZIPInputStream;

/**
 * {@link Beta} 
* Mock for {@link LowLevelHttpRequest}. * *

Implementation is not thread-safe. * * @author Yaniv Inbar * @since 1.3 */ @Beta public class MockLowLevelHttpRequest extends LowLevelHttpRequest { /** Request URL or {@code null} for none. */ private String url; /** Map of lowercase header name to values. */ private final Map> headersMap = new HashMap>(); /** * HTTP response to return from {@link #execute()}. * *

By default this is a new instance of {@link MockLowLevelHttpResponse}. */ private MockLowLevelHttpResponse response = new MockLowLevelHttpResponse(); public MockLowLevelHttpRequest() {} /** * @param url Request URL or {@code null} for none * @since 1.4 */ public MockLowLevelHttpRequest(String url) { this.url = url; } @Override public void addHeader(String name, String value) throws IOException { name = name.toLowerCase(Locale.US); List values = headersMap.get(name); if (values == null) { values = new ArrayList(); headersMap.put(name, values); } values.add(value); } @Override public LowLevelHttpResponse execute() throws IOException { return response; } /** * Returns the request URL or {@code null} for none. * * @since 1.5 */ public String getUrl() { return url; } /** * Returns an unmodifiable view of the map of lowercase header name to values. * *

Note that unlike this method, {@link #getFirstHeaderValue(String)} and {@link * #getHeaderValues(String)} are not case sensitive with respect to the input header name. * * @since 1.5 */ public Map> getHeaders() { return Collections.unmodifiableMap(headersMap); } /** * Returns the value of the first header of the given name or {@code null} for none. * * @param name header name (may be any case) * @since 1.13 */ public String getFirstHeaderValue(String name) { List values = headersMap.get(name.toLowerCase(Locale.US)); return values == null ? null : values.get(0); } /** * Returns the unmodifiable list of values of the headers of the given name (may be empty). * * @param name header name (may be any case) * @since 1.13 */ public List getHeaderValues(String name) { List values = headersMap.get(name.toLowerCase(Locale.US)); return values == null ? Collections.emptyList() : Collections.unmodifiableList(values); } /** * Sets the request URL or {@code null} for none. * * @since 1.5 */ public MockLowLevelHttpRequest setUrl(String url) { this.url = url; return this; } /** * Returns HTTP content as a string, taking care of any encodings of the content if necessary. * *

Returns an empty string if there is no HTTP content. * * @since 1.12 */ public String getContentAsString() throws IOException { if (getStreamingContent() == null) { return ""; } // write content to a byte[] ByteArrayOutputStream out = new ByteArrayOutputStream(); getStreamingContent().writeTo(out); // determine gzip encoding String contentEncoding = getContentEncoding(); if (contentEncoding != null && contentEncoding.contains("gzip")) { InputStream contentInputStream = new GZIPInputStream(new ByteArrayInputStream(out.toByteArray())); out = new ByteArrayOutputStream(); IOUtils.copy(contentInputStream, out); } // determine charset parameter from content type String contentType = getContentType(); HttpMediaType mediaType = contentType != null ? new HttpMediaType(contentType) : null; Charset charset = mediaType == null || mediaType.getCharsetParameter() == null ? StandardCharsets.ISO_8859_1 : mediaType.getCharsetParameter(); return out.toString(charset.name()); } /** * HTTP response to return from {@link #execute()}. * * @since 1.8 */ public MockLowLevelHttpResponse getResponse() { return response; } /** * Sets the HTTP response to return from {@link #execute()}. * *

By default this is a new instance of {@link MockLowLevelHttpResponse}. */ public MockLowLevelHttpRequest setResponse(MockLowLevelHttpResponse response) { this.response = response; return this; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy