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

com.facebook.presto.jdbc.internal.google.api.client.testing.http.MockHttpTransport Maven / Gradle / Ivy

/*
 * 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.facebook.presto.jdbc.internal.google.api.client.testing.http;

import com.facebook.presto.jdbc.internal.google.api.client.http.HttpTransport;
import com.facebook.presto.jdbc.internal.google.api.client.http.LowLevelHttpRequest;
import com.facebook.presto.jdbc.internal.google.api.client.util.Beta;
import com.facebook.presto.jdbc.internal.google.api.client.util.Preconditions;

import java.io.IOException;
import java.util.Collections;
import java.util.Set;

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

* Implementation is thread-safe. For maximum efficiency, applications should use a single * globally-shared instance of the HTTP transport. *

* * @author Yaniv Inbar * @since 1.3 */ @Beta public class MockHttpTransport extends HttpTransport { /** Supported HTTP methods or {@code null} to specify that all methods are supported. */ private Set supportedMethods; /** * The {@link MockLowLevelHttpRequest} to be returned by {@link #buildRequest}. If * this field is {@code null}, {@link #buildRequest} will create a new instance * from its arguments. * */ private MockLowLevelHttpRequest lowLevelHttpRequest; /** * The {@link MockLowLevelHttpResponse} to be returned when this {@link MockHttpTransport} * executes the associated request. Note that this field is ignored if the caller provided * a non-{@code null} {@link MockLowLevelHttpRequest} with this {@link MockHttpTransport} * was built. */ private MockLowLevelHttpResponse lowLevelHttpResponse; public MockHttpTransport() { } /** * @param builder builder * * @since 1.14 */ protected MockHttpTransport(Builder builder) { supportedMethods = builder.supportedMethods; lowLevelHttpRequest = builder.lowLevelHttpRequest; lowLevelHttpResponse = builder.lowLevelHttpResponse; } @Override public boolean supportsMethod(String method) throws IOException { return supportedMethods == null || supportedMethods.contains(method); } @Override public LowLevelHttpRequest buildRequest(String method, String url) throws IOException { Preconditions.checkArgument(supportsMethod(method), "HTTP method %s not supported", method); if (lowLevelHttpRequest != null) { return lowLevelHttpRequest; } lowLevelHttpRequest = new MockLowLevelHttpRequest(url); if (lowLevelHttpResponse != null) { lowLevelHttpRequest.setResponse(lowLevelHttpResponse); } return lowLevelHttpRequest; } /** * Returns the unmodifiable set of supported HTTP methods or {@code null} to specify that all * methods are supported. */ public final Set getSupportedMethods() { return supportedMethods == null ? null : Collections.unmodifiableSet(supportedMethods); } /** * Returns the {@link MockLowLevelHttpRequest} that is associated with this {@link Builder}, * or {@code null} if no such instance exists. * * @since 1.18 */ public final MockLowLevelHttpRequest getLowLevelHttpRequest() { return lowLevelHttpRequest; } /** * Returns an instance of a new builder. * *

* @deprecated (to be removed in the future) Use {@link Builder#Builder()} instead. *

* * @since 1.5 */ @Deprecated public static Builder builder() { return new Builder(); } /** * {@link Beta}
* Builder for {@link MockHttpTransport}. * *

* Implementation is not thread-safe. *

* * @since 1.5 */ @Beta public static class Builder { /** Supported HTTP methods or {@code null} to specify that all methods are supported. */ Set supportedMethods; /** * The {@link MockLowLevelHttpRequest} to be returned by {@link #buildRequest}. If * this field is {@code null}, {@link #buildRequest} will create a new instance * from its arguments. * */ MockLowLevelHttpRequest lowLevelHttpRequest; /** * The {@link MockLowLevelHttpResponse} that should be the result of the * {@link MockLowLevelHttpRequest} to be returned by {@link #buildRequest}. Note * that this field is ignored if the caller provides a {@link MockLowLevelHttpRequest} * via {@link #setLowLevelHttpRequest}. */ MockLowLevelHttpResponse lowLevelHttpResponse; /** * Constructs a new {@link Builder}. Note that this constructor was {@code protected} * in version 1.17 and its predecessors, and was made {@code public} in version * 1.18. */ public Builder() { } /** Builds a new instance of {@link MockHttpTransport}. */ public MockHttpTransport build() { return new MockHttpTransport(this); } /** * Returns the supported HTTP methods or {@code null} to specify that all methods are supported. */ public final Set getSupportedMethods() { return supportedMethods; } /** * Sets the supported HTTP methods or {@code null} to specify that all methods are supported. */ public final Builder setSupportedMethods(Set supportedMethods) { this.supportedMethods = supportedMethods; return this; } /** * Sets the {@link MockLowLevelHttpRequest} that will be returned by {@link #buildRequest}, if * non-{@code null}. If {@code null}, {@link #buildRequest} will create a new * {@link MockLowLevelHttpRequest} arguments. * *

Note that the user can set a low level HTTP Request only if a low level HTTP response * has not been set on this instance. * * @since 1.18 */ public final Builder setLowLevelHttpRequest(MockLowLevelHttpRequest lowLevelHttpRequest) { Preconditions.checkState(lowLevelHttpResponse == null, "Cannnot set a low level HTTP request when a low level HTTP response has been set."); this.lowLevelHttpRequest = lowLevelHttpRequest; return this; } /** * Returns the {@link MockLowLevelHttpRequest} that is associated with this {@link Builder}, * or {@code null} if no such instance exists. * * @since 1.18 */ public final MockLowLevelHttpRequest getLowLevelHttpRequest() { return lowLevelHttpRequest; } /** * Sets the {@link MockLowLevelHttpResponse} that will be the result when the * {@link MockLowLevelHttpRequest} returned by {@link #buildRequest} is executed. * Note that the response can be set only the caller has not provided a * {@link MockLowLevelHttpRequest} via {@link #setLowLevelHttpRequest}. * * @throws IllegalStateException if the caller has already set a {@link LowLevelHttpRequest} * in this instance * * @since 1.18 */ public final Builder setLowLevelHttpResponse(MockLowLevelHttpResponse lowLevelHttpResponse) { Preconditions.checkState(lowLevelHttpRequest == null, "Cannot set a low level HTTP response when a low level HTTP request has been set."); this.lowLevelHttpResponse = lowLevelHttpResponse; return this; } /** * Returns the {@link MockLowLevelHttpResponse} that is associated with this {@link Builder}, * or {@code null} if no such instance exists. * * @since 1.18 */ MockLowLevelHttpResponse getLowLevelHttpResponse() { return this.lowLevelHttpResponse; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy