Skip to content

Commit f14cedd

Browse files
authored
Merge branch 'master' into feature/localstack-version
2 parents 07bab27 + 34fd80e commit f14cedd

File tree

11 files changed

+164
-43
lines changed

11 files changed

+164
-43
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,21 @@ spring.localstack.random-ports=true
9999
# You can specify which is the Docker host for the container to use.
100100
##
101101
spring.localstack.external-host=localhost
102+
103+
##
104+
# You can specify is container will be removed after stop. Default: true
105+
##
106+
spring.localstack.auto-remove=false
107+
108+
##
109+
# You can specify the extra-options for the container.
110+
##
111+
spring.localstack.extra-options=
112+
113+
##
114+
# You can specify which is the region. Default: us-east-1
115+
##
116+
spring.localstack.region=sa-east-1
102117
```
103118

104119

src/main/java/xyz/fabiano/spring/localstack/LocalstackDockerBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public class LocalstackDockerBuilder {
3232

3333
private Collection<String> options = new ArrayList<>();
3434

35+
private String region = "us-east-1";
36+
3537
public LocalstackDocker build() {
3638
if (!cborEnable) {
3739
TestUtils.setEnv("AWS_CBOR_DISABLE", "1");
@@ -47,6 +49,7 @@ public LocalstackDocker build() {
4749
docker.setEnvironmentVariables(environmentVariables);
4850
docker.setOptions(options);
4951
docker.setVersion(version);
52+
docker.setRegion(region);
5053
return docker;
5154
}
5255

@@ -134,4 +137,8 @@ public LocalstackDockerBuilder withVersion(String version) {
134137
return this;
135138
}
136139

140+
public LocalstackDockerBuilder withRegion(String region) {
141+
this.region = region;
142+
return this;
143+
}
137144
}

src/main/java/xyz/fabiano/spring/localstack/annotation/SpringLocalstackProperties.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,6 @@
2424
boolean autoRemove() default true;
2525

2626
String[] extraOptions() default {};
27+
28+
String region() default "us-east-1";
2729
}

src/main/java/xyz/fabiano/spring/localstack/autoconfigure/LocalstackAutoConfiguration.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class LocalstackAutoConfiguration {
3535
private final boolean autoRemove;
3636
private final String extraOptions;
3737
private final String version;
38+
private final String region;
3839

3940
public LocalstackAutoConfiguration(
4041
@Value("${spring.localstack.async-clients.enabled:false}") boolean asyncClientsEnabled,
@@ -45,6 +46,7 @@ public LocalstackAutoConfiguration(
4546
@Value("${spring.localstack.auto-remove:true}") boolean autoRemove,
4647
@Value("${spring.localstack.extra-options:}") String extraOptions,
4748
@Value("${spring.localstack.version:latest}") String version) {
49+
@Value("${spring.localstack.region:us-east-1}") String region) {
4850
this.asyncClientsEnabled = asyncClientsEnabled;
4951
this.pullNewImage = pullNewImage;
5052
this.randomPorts = randomPorts;
@@ -53,6 +55,7 @@ public LocalstackAutoConfiguration(
5355
this.autoRemove = autoRemove;
5456
this.extraOptions = extraOptions;
5557
this.version = version;
58+
this.region = region;
5659
}
5760

5861
@Bean
@@ -65,6 +68,7 @@ public LocalstackDocker localstackDocker() {
6568
.withServices(services())
6669
.withOptions(options())
6770
.withVersion(version)
71+
.withRegion(region)
6872
.build();
6973

7074
localstackDocker.startup();

src/main/java/xyz/fabiano/spring/localstack/junit/SpringLocalstackDockerRunner.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public void run(RunNotifier notifier) {
3333
builder.withRandomPorts(p.randomPorts());
3434
builder.pullingNewImages(p.pullNewImage());
3535
builder.withOptions(options(p));
36+
builder.withRegion(p.region());
3637
});
3738

3839
LocalstackDocker docker = builder.build();

src/main/java/xyz/fabiano/spring/localstack/legacy/Container.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class Container {
3131
private static final int NUM_LOG_LINES = 10;
3232

3333
private static final String LOCALSTACK_EXTERNAL_HOSTNAME = "HOSTNAME_EXTERNAL";
34+
private static final String LOCALSTACK_DEFAULT_REGION = "DEFAULT_REGION";
3435

3536
private final String containerId;
3637
private final List<PortMapping> ports;
@@ -49,9 +50,10 @@ public static Container createLocalstackContainer(String externalHostName,
4950
boolean randomizePorts,
5051
Map<String, String> environmentVariables,
5152
Collection<String> options,
52-
String version) {
53+
String version,
54+
String region) {
5355
String imageName = LOCALSTACK_NAME + ":" + version;
54-
56+
5557
if(pullNewImage) {
5658
LOG.info("Pulling latest image...");
5759
new PullCommand(imageName).execute();
@@ -62,6 +64,7 @@ public static Container createLocalstackContainer(String externalHostName,
6264
.withExposedPorts(LOCALSTACK_PORTS, randomizePorts)
6365
.withEnvironmentVariable(LOCALSTACK_EXTERNAL_HOSTNAME, externalHostName)
6466
.withEnvironmentVariables(environmentVariables)
67+
.withEnvironmentVariable(LOCALSTACK_DEFAULT_REGION, region)
6568
.execute();
6669
LOG.info("Started container: " + containerId);
6770

src/main/java/xyz/fabiano/spring/localstack/legacy/LocalstackDocker.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ public class LocalstackDocker {
5757
private Collection<String> options = new ArrayList<>();
5858
@Setter
5959
private String version = "latest";
60+
@Getter
61+
private String region = "us-east-1";
6062

6163
@Getter
6264
private static LocalstackDocker localstackDocker = new LocalstackDocker();
@@ -71,7 +73,14 @@ public void startup() {
7173
locked = true;
7274

7375
try {
74-
localStackContainer = Container.createLocalstackContainer(externalHostName, pullNewImage, randomizePorts, environmentVariables, options, version);
76+
localStackContainer = Container.createLocalstackContainer(
77+
externalHostName,
78+
pullNewImage,
79+
randomizePorts,
80+
environmentVariables,
81+
options,
82+
version,
83+
region);
7584
loadServiceToPortMap();
7685

7786
LOG.info("Waiting for localstack container to be ready...");
Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package xyz.fabiano.spring.localstack.support;
22

33
import cloud.localstack.TestUtils;
4-
54
import com.amazonaws.client.builder.AwsClientBuilder;
5+
import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
66
import com.amazonaws.services.s3.AmazonS3;
77
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
88
import xyz.fabiano.spring.localstack.legacy.LocalstackDocker;
99

10-
import java.util.function.Supplier;
10+
import java.util.function.Function;
1111

1212
public abstract class AbstractAmazonDockerClientsHolder implements AmazonClientsHolder {
1313

14-
LocalstackDocker localstackDocker;
14+
private LocalstackDocker localstackDocker;
1515

1616
AbstractAmazonDockerClientsHolder(LocalstackDocker localstackDocker) {
1717
this.localstackDocker = localstackDocker;
@@ -20,16 +20,21 @@ public abstract class AbstractAmazonDockerClientsHolder implements AmazonClients
2020
@Override
2121
public AmazonS3 amazonS3() {
2222
return decorateWithConfigsAndBuild(
23-
AmazonS3ClientBuilder
24-
.standard()
25-
.enablePathStyleAccess(),
26-
localstackDocker::getEndpointS3);
23+
AmazonS3ClientBuilder.standard().enablePathStyleAccess(),
24+
LocalstackDocker::getEndpointS3
25+
);
2726
}
2827

29-
static <S, T extends AwsClientBuilder<T, S>> S decorateWithConfigsAndBuild(T builder, Supplier<String> endpointSupplier) {
28+
<S, T extends AwsClientBuilder<T, S>> S decorateWithConfigsAndBuild(
29+
T builder,
30+
Function<LocalstackDocker, String> endpointFunction
31+
) {
3032
return builder
3133
.withCredentials(TestUtils.getCredentialsProvider())
32-
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpointSupplier.get(), region))
34+
.withEndpointConfiguration(new EndpointConfiguration(
35+
endpointFunction.apply(localstackDocker),
36+
localstackDocker.getRegion()
37+
))
3338
.build();
3439
}
3540
}

src/main/java/xyz/fabiano/spring/localstack/support/AmazonAsyncDockerClientsHolder.java

Lines changed: 53 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,66 +37,105 @@ public AmazonAsyncDockerClientsHolder(LocalstackDocker localstackDocker) {
3737

3838
@Override
3939
public AmazonSQSAsync amazonSQS() {
40-
return decorateWithConfigsAndBuild(AmazonSQSAsyncClientBuilder.standard(), localstackDocker::getEndpointSQS);
40+
return decorateWithConfigsAndBuild(
41+
AmazonSQSAsyncClientBuilder.standard(),
42+
LocalstackDocker::getEndpointSQS
43+
);
4144
}
4245

4346
@Override
4447
public AmazonSNSAsync amazonSNS() {
45-
return decorateWithConfigsAndBuild(AmazonSNSAsyncClientBuilder.standard(), localstackDocker::getEndpointSNS);
48+
return decorateWithConfigsAndBuild(
49+
AmazonSNSAsyncClientBuilder.standard(),
50+
LocalstackDocker::getEndpointSNS
51+
);
4652
}
4753

4854
@Override
4955
public AmazonKinesisAsync amazonKinesis() {
50-
return decorateWithConfigsAndBuild(AmazonKinesisAsyncClientBuilder.standard(), localstackDocker::getEndpointKinesis);
56+
return decorateWithConfigsAndBuild(
57+
AmazonKinesisAsyncClientBuilder.standard(),
58+
LocalstackDocker::getEndpointKinesis
59+
);
5160
}
5261

5362
@Override
5463
public AmazonDynamoDBAsync amazonDynamoDB() {
55-
return decorateWithConfigsAndBuild(AmazonDynamoDBAsyncClientBuilder.standard(), localstackDocker::getEndpointDynamoDB);
64+
return decorateWithConfigsAndBuild(
65+
AmazonDynamoDBAsyncClientBuilder.standard(),
66+
LocalstackDocker::getEndpointDynamoDB
67+
);
5668
}
5769

5870
@Override
5971
public AmazonDynamoDBStreamsAsync amazonDynamoDBStreams() {
60-
return decorateWithConfigsAndBuild(AmazonDynamoDBStreamsAsyncClientBuilder.standard(), localstackDocker::getEndpointDynamoDBStreams);
72+
return decorateWithConfigsAndBuild(
73+
AmazonDynamoDBStreamsAsyncClientBuilder.standard(),
74+
LocalstackDocker::getEndpointDynamoDBStreams
75+
);
6176
}
6277

6378
@Override
6479
public AmazonSimpleEmailServiceAsync amazonSimpleEmailService() {
65-
return decorateWithConfigsAndBuild(AmazonSimpleEmailServiceAsyncClientBuilder.standard(), localstackDocker::getEndpointSES);
80+
return decorateWithConfigsAndBuild(
81+
AmazonSimpleEmailServiceAsyncClientBuilder.standard(),
82+
LocalstackDocker::getEndpointSES
83+
);
6684
}
6785

6886
@Override
6987
public AmazonApiGatewayAsync amazonApiGateway() {
70-
return decorateWithConfigsAndBuild(AmazonApiGatewayAsyncClientBuilder.standard(), localstackDocker::getEndpointAPIGateway);
88+
return decorateWithConfigsAndBuild(
89+
AmazonApiGatewayAsyncClientBuilder.standard(),
90+
LocalstackDocker::getEndpointAPIGateway
91+
);
7192
}
7293

7394
@Override
7495
public AmazonRedshiftAsync amazonRedshift() {
75-
return decorateWithConfigsAndBuild(AmazonRedshiftAsyncClientBuilder.standard(), localstackDocker::getEndpointRedshift);
96+
return decorateWithConfigsAndBuild(
97+
AmazonRedshiftAsyncClientBuilder.standard(),
98+
LocalstackDocker::getEndpointRedshift
99+
);
76100
}
77101

78102
@Override
79103
public AmazonCloudWatchAsync amazonCloudWatch() {
80-
return decorateWithConfigsAndBuild(AmazonCloudWatchAsyncClientBuilder.standard(), localstackDocker::getEndpointCloudWatch);
104+
return decorateWithConfigsAndBuild(
105+
AmazonCloudWatchAsyncClientBuilder.standard(),
106+
LocalstackDocker::getEndpointCloudWatch
107+
);
81108
}
82109

83110
@Override
84111
public AmazonCloudFormationAsync amazonCloudFormation() {
85-
return decorateWithConfigsAndBuild(AmazonCloudFormationAsyncClientBuilder.standard(), localstackDocker::getEndpointCloudFormation);
112+
return decorateWithConfigsAndBuild(
113+
AmazonCloudFormationAsyncClientBuilder.standard(),
114+
LocalstackDocker::getEndpointCloudFormation
115+
);
86116
}
87117

88118
@Override
89119
public AmazonKinesisFirehoseAsync amazonKinesisFirehose() {
90-
return decorateWithConfigsAndBuild(AmazonKinesisFirehoseAsyncClientBuilder.standard(), localstackDocker::getEndpointFirehose);
120+
return decorateWithConfigsAndBuild(
121+
AmazonKinesisFirehoseAsyncClientBuilder.standard(),
122+
LocalstackDocker::getEndpointFirehose
123+
);
91124
}
92125

93126
@Override
94127
public AmazonRoute53Async amazonRoute53() {
95-
return decorateWithConfigsAndBuild(AmazonRoute53AsyncClientBuilder.standard(), localstackDocker::getEndpointRoute53);
128+
return decorateWithConfigsAndBuild(
129+
AmazonRoute53AsyncClientBuilder.standard(),
130+
LocalstackDocker::getEndpointRoute53
131+
);
96132
}
97133

98134
@Override
99135
public AWSLambdaAsync awsLambda() {
100-
return decorateWithConfigsAndBuild(AWSLambdaAsyncClientBuilder.standard(), localstackDocker::getEndpointLambda);
136+
return decorateWithConfigsAndBuild(
137+
AWSLambdaAsyncClientBuilder.standard(),
138+
LocalstackDocker::getEndpointLambda
139+
);
101140
}
102-
}
141+
}

src/main/java/xyz/fabiano/spring/localstack/support/AmazonClientsHolder.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package xyz.fabiano.spring.localstack.support;
22

3-
4-
import com.amazonaws.regions.Regions;
53
import com.amazonaws.services.apigateway.AmazonApiGateway;
64
import com.amazonaws.services.cloudformation.AmazonCloudFormation;
75
import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
@@ -18,7 +16,6 @@
1816
import com.amazonaws.services.sqs.AmazonSQS;
1917

2018
public interface AmazonClientsHolder {
21-
String region = Regions.DEFAULT_REGION.getName();
2219

2320
AmazonS3 amazonS3();
2421

0 commit comments

Comments
 (0)