/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.beam.sdk.util; import com.google.api.client.http.GenericUrl; import com.google.api.client.http.HttpResponse; import com.google.api.client.testing.http.HttpTesting; import com.google.api.client.testing.http.MockHttpTransport; import com.google.api.client.testing.http.MockLowLevelHttpResponse; import java.io.IOException; import org.apache.beam.sdk.testing.ExpectedLogs; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; /** * A test for {@link UploadIdResponseInterceptor}. */ @RunWith(JUnit4.class) public class UploadIdResponseInterceptorTest { @Rule public ExpectedException expectedException = ExpectedException.none(); // Note that expected logs also turns on debug logging. @Rule public ExpectedLogs expectedLogs = ExpectedLogs.none(UploadIdResponseInterceptor.class); /** * Builds a HttpResponse with the given string response. * * @param header header value to provide or null if none. * @param uploadId upload id to provide in the url upload id param or null if none. * @param uploadType upload type to provide in url upload type param or null if none. * @return HttpResponse with the given parameters * @throws IOException */ private HttpResponse buildHttpResponse(String header, String uploadId, String uploadType) throws IOException { MockHttpTransport.Builder builder = new MockHttpTransport.Builder(); MockLowLevelHttpResponse resp = new MockLowLevelHttpResponse(); builder.setLowLevelHttpResponse(resp); resp.setStatusCode(200); GenericUrl url = new GenericUrl(HttpTesting.SIMPLE_URL); if (header != null) { resp.addHeader("X-GUploader-UploadID", header); } if (uploadId != null) { url.put("upload_id", uploadId); } if (uploadType != null) { url.put("uploadType", uploadType); } return builder.build().createRequestFactory().buildGetRequest(url).execute(); } /** * Tests the responses that should not log. */ @Test public void testResponseNoLogging() throws IOException { new UploadIdResponseInterceptor().interceptResponse(buildHttpResponse(null, null, null)); new UploadIdResponseInterceptor().interceptResponse(buildHttpResponse("hh", "a", null)); new UploadIdResponseInterceptor().interceptResponse(buildHttpResponse(null, "h", null)); new UploadIdResponseInterceptor().interceptResponse(buildHttpResponse("hh", null, null)); new UploadIdResponseInterceptor().interceptResponse(buildHttpResponse(null, null, "type")); new UploadIdResponseInterceptor().interceptResponse(buildHttpResponse("hh", "a", "type")); new UploadIdResponseInterceptor().interceptResponse(buildHttpResponse(null, "h", "type")); expectedLogs.verifyNotLogged(""); } /** * Check that a response logs with the correct log. */ @Test public void testResponseLogs() throws IOException { new UploadIdResponseInterceptor().interceptResponse(buildHttpResponse("abc", null, "type")); GenericUrl url = new GenericUrl(HttpTesting.SIMPLE_URL); url.put("uploadType", "type"); String worker = System.getProperty("worker_id"); expectedLogs.verifyDebug("Upload ID for url " + url + " on worker " + worker + " is abc"); } }