/*
* Copyright 2011-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file 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.amazonaws.http;
import static com.amazonaws.http.AmazonHttpClient.HEADER_SDK_TRANSACTION_ID;
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.findAll;
import static com.github.tomakehurst.wiremock.client.WireMock.get;
import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor;
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import org.junit.Test;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.ClientConfiguration;
import com.github.tomakehurst.wiremock.verification.LoggedRequest;
import utils.http.WireMockTestBase;
public class SdkTransactionIdInHeaderTest extends WireMockTestBase {
private static final String RESOURCE_PATH = "/transaction-id/";
@Test
public void retriedRequest_HasSameTransactionIdForAllRetries() throws Exception {
stubFor(get(urlEqualTo(RESOURCE_PATH)).willReturn(aResponse().withStatus(500)));
executeRequest();
assertTransactionIdIsUnchangedAcrossRetries();
}
private void assertTransactionIdIsUnchangedAcrossRetries() {
String previousTransactionId = null;
for (LoggedRequest request : findAll(getRequestedFor(urlEqualTo(RESOURCE_PATH)))) {
final String currentTransactionId = request.getHeader(HEADER_SDK_TRANSACTION_ID);
// Transaction ID should always be set
assertNotNull(currentTransactionId);
// Transaction ID should be the same across retries
if (previousTransactionId != null) {
assertEquals(previousTransactionId, currentTransactionId);
}
previousTransactionId = currentTransactionId;
}
}
private void executeRequest() throws Exception {
AmazonHttpClient httpClient = new AmazonHttpClient(new ClientConfiguration());
try {
httpClient.requestExecutionBuilder().request(newGetRequest(RESOURCE_PATH)).errorResponseHandler(stubErrorHandler()).execute();
fail("Expected exception");
} catch (AmazonServiceException expected) {
}
}
}