diff --git a/canarytests/agent/build.gradle b/canarytests/agent/build.gradle index 9cb11e4a..50be2790 100644 --- a/canarytests/agent/build.gradle +++ b/canarytests/agent/build.gradle @@ -1,15 +1,30 @@ +/* +* Copyright 2020 Amazon.com, Inc. or its affiliates. +* 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. +* +*/ + plugins { id 'java' } repositories { jcenter() + mavenCentral() } dependencies { implementation "software.amazon.awssdk:cloudwatch:2.13.54" implementation project(path:rootProject.path, configuration:'archives') - implementation "org.apache.logging.log4j:log4j-api:2.13.3" + implementation "org.apache.logging.log4j:log4j-api:2.13.3" implementation "org.apache.logging.log4j:log4j-core:2.13.3" implementation "org.apache.logging.log4j:log4j-slf4j-impl:2.13.3" } diff --git a/src/main/java/software/amazon/cloudwatchlogs/emf/environment/EC2Environment.java b/src/main/java/software/amazon/cloudwatchlogs/emf/environment/EC2Environment.java index 90f09677..e8bba474 100644 --- a/src/main/java/software/amazon/cloudwatchlogs/emf/environment/EC2Environment.java +++ b/src/main/java/software/amazon/cloudwatchlogs/emf/environment/EC2Environment.java @@ -19,9 +19,9 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import java.net.URI; import java.util.Collections; +import java.util.Map; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import org.javatuples.Pair; import software.amazon.cloudwatchlogs.emf.Constants; import software.amazon.cloudwatchlogs.emf.config.Configuration; import software.amazon.cloudwatchlogs.emf.exception.EMFClientException; @@ -52,8 +52,8 @@ public class EC2Environment extends AgentBasedEnvironment { @Override public boolean probe() { String token; - Pair tokenRequestHeader = - new Pair<>(TOKEN_REQUEST_HEADER_KEY, TOKEN_REQUEST_HEADER_VALUE); + Map tokenRequestHeader = + Collections.singletonMap(TOKEN_REQUEST_HEADER_KEY, TOKEN_REQUEST_HEADER_VALUE); URI tokenEndpoint = null; try { @@ -63,16 +63,14 @@ public boolean probe() { return false; } try { - token = - fetcher.fetch( - tokenEndpoint, "PUT", Collections.singletonList(tokenRequestHeader)); + token = fetcher.fetch(tokenEndpoint, "PUT", tokenRequestHeader); } catch (EMFClientException ex) { log.debug("Failed to get response from: " + tokenEndpoint, ex); return false; } - Pair metadataRequestTokenHeader = - new Pair<>(METADATA_REQUEST_TOKEN_HEADER_KEY, token); + Map metadataRequestTokenHeader = + Collections.singletonMap(METADATA_REQUEST_TOKEN_HEADER_KEY, token); URI endpoint = null; try { endpoint = new URI(INSTANCE_IDENTITY_URL); @@ -82,11 +80,7 @@ public boolean probe() { } try { metadata = - fetcher.fetch( - endpoint, - "GET", - EC2Metadata.class, - Collections.singletonList(metadataRequestTokenHeader)); + fetcher.fetch(endpoint, "GET", EC2Metadata.class, metadataRequestTokenHeader); return true; } catch (EMFClientException ex) { log.debug("Failed to get response from: " + endpoint, ex); diff --git a/src/main/java/software/amazon/cloudwatchlogs/emf/environment/ResourceFetcher.java b/src/main/java/software/amazon/cloudwatchlogs/emf/environment/ResourceFetcher.java index 61115e08..9a437d18 100644 --- a/src/main/java/software/amazon/cloudwatchlogs/emf/environment/ResourceFetcher.java +++ b/src/main/java/software/amazon/cloudwatchlogs/emf/environment/ResourceFetcher.java @@ -24,9 +24,8 @@ import java.net.Proxy; import java.net.URI; import java.util.Collections; -import java.util.List; +import java.util.Map; import lombok.extern.slf4j.Slf4j; -import org.javatuples.Pair; import software.amazon.cloudwatchlogs.emf.exception.EMFClientException; import software.amazon.cloudwatchlogs.emf.util.IOUtils; import software.amazon.cloudwatchlogs.emf.util.Jackson; @@ -36,7 +35,7 @@ public class ResourceFetcher { /** Fetch a json object from a given uri and deserialize it to the specified class: clazz. */ T fetch(URI endpoint, Class clazz) { - String response = doReadResource(endpoint, "GET", Collections.emptyList()); + String response = doReadResource(endpoint, "GET", Collections.emptyMap()); return Jackson.fromJsonString(response, clazz); } @@ -44,13 +43,13 @@ T fetch(URI endpoint, Class clazz) { * Request a json object from a given uri with the provided headers and deserialize it to the * specified class: clazz. */ - T fetch(URI endpoint, String method, Class clazz, List> headers) { + T fetch(URI endpoint, String method, Class clazz, Map headers) { String response = doReadResource(endpoint, method, headers); return Jackson.fromJsonString(response, clazz); } /** Request a string from a given uri with the provided headers */ - String fetch(URI endpoint, String method, List> headers) { + String fetch(URI endpoint, String method, Map headers) { return doReadResource(endpoint, method, headers); } @@ -59,11 +58,11 @@ String fetch(URI endpoint, String method, List> headers) { * Jackson ObjectMapper. */ T fetch(URI endpoint, ObjectMapper objectMapper, Class clazz) { - String response = doReadResource(endpoint, "GET", Collections.emptyList()); + String response = doReadResource(endpoint, "GET", Collections.emptyMap()); return Jackson.fromJsonString(response, objectMapper, clazz); } - private String doReadResource(URI endpoint, String method, List> headers) { + private String doReadResource(URI endpoint, String method, Map headers) { InputStream inputStream = null; try { HttpURLConnection connection = connectToEndpoint(endpoint, method, headers); @@ -122,15 +121,17 @@ private void handleErrorResponse(InputStream errorStream, String responseMessage } private HttpURLConnection connectToEndpoint( - URI endpoint, String method, List> headers) throws IOException { + URI endpoint, String method, Map headers) throws IOException { HttpURLConnection connection = (HttpURLConnection) endpoint.toURL().openConnection(Proxy.NO_PROXY); connection.setConnectTimeout(1000); connection.setReadTimeout(1000); connection.setRequestMethod(method); connection.setDoOutput(true); - headers.forEach( - header -> connection.setRequestProperty(header.getValue0(), header.getValue1())); + + for (Map.Entry header : headers.entrySet()) { + connection.setRequestProperty(header.getKey(), header.getValue()); + } connection.connect(); diff --git a/src/test/java/software/amazon/cloudwatchlogs/emf/environment/ResourceFetcherTest.java b/src/test/java/software/amazon/cloudwatchlogs/emf/environment/ResourceFetcherTest.java index d3fa53bf..34459f53 100644 --- a/src/test/java/software/amazon/cloudwatchlogs/emf/environment/ResourceFetcherTest.java +++ b/src/test/java/software/amazon/cloudwatchlogs/emf/environment/ResourceFetcherTest.java @@ -27,8 +27,8 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Collections; +import java.util.Map; import lombok.Data; -import org.javatuples.Pair; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; @@ -98,11 +98,10 @@ public void testReadDataWith200Response() { @Test public void testReadDataWithHeaders200Response() { - Pair mockHeader = new Pair<>("X-mock-header-key", "headerValue"); + Map mockHeader = + Collections.singletonMap("X-mock-header-key", "headerValue"); generateStub(200, "{\"name\":\"test\",\"size\":10}"); - TestData data = - fetcher.fetch( - endpoint, "GET", TestData.class, Collections.singletonList(mockHeader)); + TestData data = fetcher.fetch(endpoint, "GET", TestData.class, mockHeader); verify( getRequestedFor(urlEqualTo(endpoint_path)) @@ -114,8 +113,9 @@ public void testReadDataWithHeaders200Response() { @Test public void testWithProvidedMethodAndHeadersWith200Response() { generatePutStub(200, "putResponseData"); - Pair mockHeader = new Pair<>("X-mock-header-key", "headerValue"); - String data = fetcher.fetch(endpoint, "PUT", Collections.singletonList(mockHeader)); + Map mockHeader = + Collections.singletonMap("X-mock-header-key", "headerValue"); + String data = fetcher.fetch(endpoint, "PUT", mockHeader); verify( putRequestedFor(urlEqualTo(endpoint_path))