Skip to content

Commit 755a9e6

Browse files
authored
add test for CloudWatch PutMetric via v2 SDK client (#29)
1 parent 1fa45d5 commit 755a9e6

File tree

4 files changed

+65
-3
lines changed

4 files changed

+65
-3
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,12 @@
134134
</dependency>
135135

136136
<!-- AWS SDK version 2 libs -->
137+
<dependency>
138+
<groupId>software.amazon.awssdk</groupId>
139+
<artifactId>cloudwatch</artifactId>
140+
<version>${aws.sdkv2.version}</version>
141+
<scope>provided</scope>
142+
</dependency>
137143
<dependency>
138144
<groupId>software.amazon.awssdk</groupId>
139145
<artifactId>sns</artifactId>

src/main/java/cloud/localstack/awssdkv2/TestUtils.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import software.amazon.awssdk.regions.Region;
44
import software.amazon.awssdk.utils.*;
55
import software.amazon.awssdk.http.*;
6+
import software.amazon.awssdk.services.cloudwatch.*;
67
import software.amazon.awssdk.services.kinesis.*;
78
import software.amazon.awssdk.services.sns.*;
89
import software.amazon.awssdk.services.sqs.*;
@@ -47,6 +48,10 @@ public static SecretsManagerAsyncClient getClientSecretsManagerAsyncV2() {
4748
public static S3AsyncClient getClientS3AsyncV2() {
4849
return wrapApiClientV2(S3AsyncClient.builder(), Localstack.INSTANCE.getEndpointS3()).build();
4950
}
51+
52+
public static CloudWatchAsyncClient getClientCloudWatchAsyncV2() {
53+
return wrapApiClientV2(CloudWatchAsyncClient.builder(), Localstack.INSTANCE.getEndpointCloudWatch()).build();
54+
}
5055

5156
public static <T extends SdkAsyncClientBuilder> T wrapApiClientV2(T builder, String endpointURL) {
5257
try {

src/test/java/cloud/localstack/SQSMessagingTest.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
import java.util.concurrent.CompletableFuture;
2626
import java.util.concurrent.TimeUnit;
2727

28+
import com.fasterxml.jackson.core.type.TypeReference;
29+
import com.fasterxml.jackson.databind.ObjectMapper;
30+
31+
2832
/**
2933
* Test integration of SQS/JMS messaging with LocalStack
3034
* Based on: https://bitbucket.org/atlassian/localstack/issues/24/not-support-sqs-in-jms
@@ -193,9 +197,10 @@ public void testGetQueueRedrivePolicy() {
193197
GetQueueAttributesResult dlQueueAttrs = clientSQS.getQueueAttributes(
194198
new GetQueueAttributesRequest(dlQueueUrl).withAttributeNames("QueueArn")
195199
);
196-
String dlQueueArn = dlQueueAttrs.getAttributes().get("QueueArn");
197200

198-
final String redrivePolicy = "{\"maxReceiveCount\": 5, \"deadLetterTargetArn\": \"" + dlQueueArn + "\"}";
201+
String dlQueueArn = dlQueueAttrs.getAttributes().get("QueueArn");
202+
int maxReceiveCount = 5;
203+
final String redrivePolicy = "{\"maxReceiveCount\":"+maxReceiveCount+", \"deadLetterTargetArn\": \"" + dlQueueArn + "\"}";
199204

200205
SetQueueAttributesRequest request = new SetQueueAttributesRequest()
201206
.withQueueUrl(srcQueueUrl)
@@ -210,6 +215,17 @@ public void testGetQueueRedrivePolicy() {
210215

211216
result = clientSQS.getQueueAttributes(new GetQueueAttributesRequest(srcQueueUrl).withAttributeNames("RedrivePolicy"));
212217
Assert.assertEquals(result.getAttributes().size(), 1);
213-
Assert.assertEquals(result.getAttributes().get("RedrivePolicy"), redrivePolicy);
218+
219+
String resultPolicy = result.getAttributes().get("RedrivePolicy");
220+
ObjectMapper mapper = new ObjectMapper();
221+
HashMap<String, Object> map = new HashMap<String, Object>();
222+
223+
try {
224+
map = mapper.readValue(resultPolicy, new TypeReference<Map<String, Object>>(){});
225+
Assert.assertEquals( map.get("maxReceiveCount"), maxReceiveCount);
226+
Assert.assertEquals( map.get("deadLetterTargetArn"), dlQueueArn);
227+
} catch (Exception e) {
228+
throw new RuntimeException("No RedrivePolicy found");
229+
}
214230
}
215231
}

src/test/java/cloud/localstack/awssdkv2/BasicFeaturesSDKV2Test.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import cloud.localstack.LocalstackTestRunner;
55

66
import software.amazon.awssdk.core.SdkSystemSetting;
7+
import software.amazon.awssdk.services.cloudwatch.*;
8+
import software.amazon.awssdk.services.cloudwatch.model.*;
79
import software.amazon.awssdk.services.kinesis.*;
810
import software.amazon.awssdk.services.kinesis.model.*;
911
import software.amazon.awssdk.services.s3.*;
@@ -25,6 +27,11 @@
2527

2628
import java.util.*;
2729
import java.nio.ByteBuffer;
30+
import java.time.ZonedDateTime;
31+
import java.time.format.DateTimeFormatter;
32+
import java.time.ZoneOffset;
33+
import java.time.Instant;
34+
2835
import software.amazon.awssdk.core.SdkBytes;
2936
import java.util.concurrent.CompletableFuture;
3037

@@ -139,4 +146,32 @@ public void testGetSecretAsParam() throws Exception {
139146
Assert.assertNotNull(parameterValue);
140147
Assert.assertEquals("secretcontent", parameterValue);
141148
}
149+
@Test
150+
public void testCWPutMetrics() throws Exception {
151+
final CloudWatchAsyncClient clientCW = TestUtils.getClientCloudWatchAsyncV2();
152+
Dimension dimension = Dimension.builder()
153+
.name("UNIQUE_PAGES")
154+
.value("URLS")
155+
.build();
156+
157+
// Set an Instant object
158+
String time = ZonedDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.ISO_INSTANT );
159+
Instant instant = Instant.parse(time);
160+
161+
double dataPoint = 1.23423;
162+
163+
MetricDatum datum = MetricDatum.builder()
164+
.metricName("PAGES_VISITED")
165+
.unit(StandardUnit.NONE)
166+
.value(dataPoint)
167+
.timestamp(instant)
168+
.dimensions(dimension).build();
169+
170+
PutMetricDataRequest request = PutMetricDataRequest.builder()
171+
.namespace("SITE/TRAFFIC")
172+
.metricData(datum).build();
173+
174+
PutMetricDataResponse response = clientCW.putMetricData(request).get();
175+
Assert.assertNotNull(response);
176+
}
142177
}

0 commit comments

Comments
 (0)