Skip to content

Commit a9c2e9e

Browse files
authored
[LocalStack] Remove usage of deprecated methods (#5491)
Improve documentation and tests avoiding usage of deprecated methods.
1 parent cfc64bd commit a9c2e9e

File tree

4 files changed

+102
-51
lines changed

4 files changed

+102
-51
lines changed

docs/modules/localstack.md

+10-25
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,18 @@ DockerImageName localstackImage = DockerImageName.parse("localstack/localstack:0
1212
@Rule
1313
public LocalStackContainer localstack = new LocalStackContainer(localstackImage)
1414
.withServices(S3);
15-
16-
@Test
17-
public void someTestMethod() {
18-
// AWS SDK v1
19-
AmazonS3 s3 = AmazonS3ClientBuilder
20-
.standard()
21-
.withEndpointConfiguration(localstack.getEndpointConfiguration(S3))
22-
.withCredentials(localstack.getDefaultCredentialsProvider())
23-
.build();
24-
25-
s3.createBucket("foo");
26-
s3.putObject("foo", "bar", "baz");
27-
28-
// AWS SDK v2
29-
S3Client s3 = S3Client
30-
.builder()
31-
.endpointOverride(localstack.getEndpointOverride(LocalStackContainer.Service.S3))
32-
.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(
33-
localstack.getAccessKey(), localstack.getSecretKey()
34-
)))
35-
.region(Region.of(localstack.getRegion()))
36-
.build();
37-
38-
s3.createBucket(b -> b.bucket("foo"));
39-
s3.putObject(b -> b.bucket("foo").key("bar"), RequestBody.fromBytes("baz".getBytes()));
4015
```
4116

17+
## Creating a client using AWS SDK
18+
19+
<!--codeinclude-->
20+
[AWS SDK V1](../../modules/localstack/src/test/java/org/testcontainers/containers/localstack/LocalstackContainerTest.java) inside_block:with_aws_sdk_v1
21+
<!--/codeinclude-->
22+
23+
<!--codeinclude-->
24+
[AWS SDK V2](../../modules/localstack/src/test/java/org/testcontainers/containers/localstack/LocalstackContainerTest.java) inside_block:with_aws_sdk_v2
25+
<!--/codeinclude-->
26+
4227
Environment variables listed in [Localstack's README](https://github.com/localstack/localstack#configurations) may be used to customize Localstack's configuration.
4328
Use the `.withEnv(key, value)` method on `LocalStackContainer` to apply configuration settings.
4429

modules/localstack/src/main/java/org/testcontainers/containers/localstack/LocalStackContainer.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,7 @@
2727
/**
2828
* <p>Container for LocalStack, 'A fully functional local AWS cloud stack'.</p>
2929
* <p>{@link LocalStackContainer#withServices(Service...)} should be used to select which services
30-
* are to be launched. See {@link Service} for available choices. It is advised that
31-
* {@link LocalStackContainer#getEndpointConfiguration(Service)} and
32-
* {@link LocalStackContainer#getDefaultCredentialsProvider()}
33-
* be used to obtain compatible endpoint configuration and credentials, respectively.</p>
30+
* are to be launched. See {@link Service} for available choices.
3431
*/
3532
@Slf4j
3633
public class LocalStackContainer extends GenericContainer<LocalStackContainer> {

modules/localstack/src/test/java/org/testcontainers/containers/localstack/LegacyModeTest.java

+28-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.testcontainers.containers.localstack;
22

3+
import com.amazonaws.client.builder.AwsClientBuilder;
34
import com.github.dockerjava.api.DockerClient;
45
import lombok.AllArgsConstructor;
56
import org.junit.BeforeClass;
@@ -8,6 +9,7 @@
89
import org.junit.runner.RunWith;
910
import org.junit.runners.Parameterized;
1011
import org.testcontainers.DockerClientFactory;
12+
import org.testcontainers.containers.localstack.LocalStackContainer.Service;
1113
import org.testcontainers.images.RemoteDockerImage;
1214
import org.testcontainers.utility.DockerImageName;
1315

@@ -46,20 +48,28 @@ public static Iterable<Object[]> constructors() {
4648

4749
@Test
4850
public void samePortIsExposedForAllServices() {
49-
localstack.withServices(LocalStackContainer.Service.S3, LocalStackContainer.Service.SQS);
51+
localstack.withServices(Service.S3, Service.SQS);
5052
localstack.start();
5153

5254
try {
5355
assertTrue("A single port is exposed", localstack.getExposedPorts().size() == 1);
5456
assertEquals(
5557
"Endpoint overrides are different",
56-
localstack.getEndpointOverride(LocalStackContainer.Service.S3).toString(),
57-
localstack.getEndpointOverride(LocalStackContainer.Service.SQS).toString()
58+
localstack.getEndpointOverride(Service.S3).toString(),
59+
localstack.getEndpointOverride(Service.SQS).toString()
5860
);
5961
assertEquals(
6062
"Endpoint configuration have different endpoints",
61-
localstack.getEndpointConfiguration(LocalStackContainer.Service.S3).getServiceEndpoint(),
62-
localstack.getEndpointConfiguration(LocalStackContainer.Service.SQS).getServiceEndpoint()
63+
new AwsClientBuilder.EndpointConfiguration(
64+
localstack.getEndpointOverride(Service.S3).toString(),
65+
localstack.getRegion()
66+
)
67+
.getServiceEndpoint(),
68+
new AwsClientBuilder.EndpointConfiguration(
69+
localstack.getEndpointOverride(Service.SQS).toString(),
70+
localstack.getRegion()
71+
)
72+
.getServiceEndpoint()
6373
);
6474
} finally {
6575
localstack.stop();
@@ -103,20 +113,28 @@ public static Iterable<Object[]> constructors() {
103113

104114
@Test
105115
public void differentPortsAreExposed() {
106-
localstack.withServices(LocalStackContainer.Service.S3, LocalStackContainer.Service.SQS);
116+
localstack.withServices(Service.S3, Service.SQS);
107117
localstack.start();
108118

109119
try {
110120
assertTrue("Multiple ports are exposed", localstack.getExposedPorts().size() > 1);
111121
assertNotEquals(
112122
"Endpoint overrides are different",
113-
localstack.getEndpointOverride(LocalStackContainer.Service.S3).toString(),
114-
localstack.getEndpointOverride(LocalStackContainer.Service.SQS).toString()
123+
localstack.getEndpointOverride(Service.S3).toString(),
124+
localstack.getEndpointOverride(Service.SQS).toString()
115125
);
116126
assertNotEquals(
117127
"Endpoint configuration have different endpoints",
118-
localstack.getEndpointConfiguration(LocalStackContainer.Service.S3).getServiceEndpoint(),
119-
localstack.getEndpointConfiguration(LocalStackContainer.Service.SQS).getServiceEndpoint()
128+
new AwsClientBuilder.EndpointConfiguration(
129+
localstack.getEndpointOverride(Service.S3).toString(),
130+
localstack.getRegion()
131+
)
132+
.getServiceEndpoint(),
133+
new AwsClientBuilder.EndpointConfiguration(
134+
localstack.getEndpointOverride(Service.SQS).toString(),
135+
localstack.getRegion()
136+
)
137+
.getServiceEndpoint()
120138
);
121139
} finally {
122140
localstack.stop();

modules/localstack/src/test/java/org/testcontainers/containers/localstack/LocalstackContainerTest.java

+63-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.testcontainers.containers.localstack;
22

3+
import com.amazonaws.auth.AWSStaticCredentialsProvider;
4+
import com.amazonaws.auth.BasicAWSCredentials;
35
import com.amazonaws.client.builder.AwsClientBuilder;
46
import com.amazonaws.services.kms.AWSKMS;
57
import com.amazonaws.services.kms.AWSKMSClientBuilder;
@@ -73,11 +75,22 @@ public static class WithoutNetwork {
7375

7476
@Test
7577
public void s3TestOverBridgeNetwork() throws IOException {
78+
// with_aws_sdk_v1 {
7679
AmazonS3 s3 = AmazonS3ClientBuilder
7780
.standard()
78-
.withEndpointConfiguration(localstack.getEndpointConfiguration(Service.S3))
79-
.withCredentials(localstack.getDefaultCredentialsProvider())
81+
.withEndpointConfiguration(
82+
new AwsClientBuilder.EndpointConfiguration(
83+
localstack.getEndpointOverride(Service.S3).toString(),
84+
localstack.getRegion()
85+
)
86+
)
87+
.withCredentials(
88+
new AWSStaticCredentialsProvider(
89+
new BasicAWSCredentials(localstack.getAccessKey(), localstack.getSecretKey())
90+
)
91+
)
8092
.build();
93+
// }
8194

8295
final String bucketName = "foo";
8396
s3.createBucket(bucketName);
@@ -103,6 +116,7 @@ public void s3TestOverBridgeNetwork() throws IOException {
103116

104117
@Test
105118
public void s3TestUsingAwsSdkV2() {
119+
// with_aws_sdk_v2 {
106120
S3Client s3 = S3Client
107121
.builder()
108122
.endpointOverride(localstack.getEndpointOverride(Service.S3))
@@ -113,6 +127,7 @@ public void s3TestUsingAwsSdkV2() {
113127
)
114128
.region(Region.of(localstack.getRegion()))
115129
.build();
130+
// }
116131

117132
final String bucketName = "foov2";
118133
s3.createBucket(b -> b.bucket(bucketName));
@@ -126,8 +141,17 @@ public void s3TestUsingAwsSdkV2() {
126141
public void sqsTestOverBridgeNetwork() {
127142
AmazonSQS sqs = AmazonSQSClientBuilder
128143
.standard()
129-
.withEndpointConfiguration(localstack.getEndpointConfiguration(Service.SQS))
130-
.withCredentials(localstack.getDefaultCredentialsProvider())
144+
.withEndpointConfiguration(
145+
new AwsClientBuilder.EndpointConfiguration(
146+
localstack.getEndpointOverride(Service.SQS).toString(),
147+
localstack.getRegion()
148+
)
149+
)
150+
.withCredentials(
151+
new AWSStaticCredentialsProvider(
152+
new BasicAWSCredentials(localstack.getAccessKey(), localstack.getSecretKey())
153+
)
154+
)
131155
.build();
132156

133157
CreateQueueResult queueResult = sqs.createQueue("baz");
@@ -157,8 +181,17 @@ public void sqsTestOverBridgeNetwork() {
157181
public void cloudWatchLogsTestOverBridgeNetwork() {
158182
AWSLogs logs = AWSLogsClientBuilder
159183
.standard()
160-
.withEndpointConfiguration(localstack.getEndpointConfiguration(Service.CLOUDWATCHLOGS))
161-
.withCredentials(localstack.getDefaultCredentialsProvider())
184+
.withEndpointConfiguration(
185+
new AwsClientBuilder.EndpointConfiguration(
186+
localstack.getEndpointOverride(Service.CLOUDWATCHLOGS).toString(),
187+
localstack.getRegion()
188+
)
189+
)
190+
.withCredentials(
191+
new AWSStaticCredentialsProvider(
192+
new BasicAWSCredentials(localstack.getAccessKey(), localstack.getSecretKey())
193+
)
194+
)
162195
.build();
163196

164197
logs.createLogGroup(new CreateLogGroupRequest("foo"));
@@ -172,8 +205,17 @@ public void cloudWatchLogsTestOverBridgeNetwork() {
172205
public void kmsKeyCreationTest() {
173206
AWSKMS awskms = AWSKMSClientBuilder
174207
.standard()
175-
.withEndpointConfiguration(localstack.getEndpointConfiguration(Service.KMS))
176-
.withCredentials(localstack.getDefaultCredentialsProvider())
208+
.withEndpointConfiguration(
209+
new AwsClientBuilder.EndpointConfiguration(
210+
localstack.getEndpointOverride(Service.KMS).toString(),
211+
localstack.getRegion()
212+
)
213+
)
214+
.withCredentials(
215+
new AWSStaticCredentialsProvider(
216+
new BasicAWSCredentials(localstack.getAccessKey(), localstack.getSecretKey())
217+
)
218+
)
177219
.build();
178220

179221
String desc = String.format("AWS CMK Description");
@@ -198,8 +240,16 @@ public void samePortIsExposedForAllServices() {
198240
);
199241
assertEquals(
200242
"Endpoint configuration have different endpoints",
201-
localstack.getEndpointConfiguration(Service.S3).getServiceEndpoint(),
202-
localstack.getEndpointConfiguration(Service.SQS).getServiceEndpoint()
243+
new AwsClientBuilder.EndpointConfiguration(
244+
localstack.getEndpointOverride(Service.S3).toString(),
245+
localstack.getRegion()
246+
)
247+
.getServiceEndpoint(),
248+
new AwsClientBuilder.EndpointConfiguration(
249+
localstack.getEndpointOverride(Service.SQS).toString(),
250+
localstack.getRegion()
251+
)
252+
.getServiceEndpoint()
203253
);
204254
}
205255
}
@@ -302,8 +352,9 @@ public static class WithRegion {
302352

303353
@Test
304354
public void s3EndpointHasProperRegion() {
305-
final AwsClientBuilder.EndpointConfiguration endpointConfiguration = localstack.getEndpointConfiguration(
306-
Service.S3
355+
final AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(
356+
localstack.getEndpointOverride(Service.S3).toString(),
357+
localstack.getRegion()
307358
);
308359
assertEquals(
309360
"The endpoint configuration has right region",

0 commit comments

Comments
 (0)