Skip to content

Commit 3e854f0

Browse files
authored
add simple tests for IAM service (#62)
1 parent 42beccf commit 3e854f0

File tree

4 files changed

+129
-1
lines changed

4 files changed

+129
-1
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,12 @@
193193
<version>${aws.sdkv2.version}</version>
194194
<scope>provided</scope>
195195
</dependency>
196+
<dependency>
197+
<groupId>software.amazon.awssdk</groupId>
198+
<artifactId>iam</artifactId>
199+
<version>${aws.sdkv2.version}</version>
200+
<scope>provided</scope>
201+
</dependency>
196202
<dependency>
197203
<groupId>software.amazon.awssdk</groupId>
198204
<artifactId>netty-nio-client</artifactId>

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import software.amazon.awssdk.services.s3.*;
1313
import software.amazon.awssdk.services.secretsmanager.SecretsManagerAsyncClient;
1414
import software.amazon.awssdk.services.ssm.*;
15+
import software.amazon.awssdk.services.iam.*;
1516
import software.amazon.awssdk.auth.credentials.*;
1617
import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient;
1718
import software.amazon.awssdk.core.client.builder.SdkAsyncClientBuilder;
@@ -62,7 +63,11 @@ public static CloudWatchAsyncClient getClientCloudWatchAsyncV2() {
6263
public static LambdaAsyncClient getClientLambdaAsyncV2() {
6364
return wrapApiClientV2(LambdaAsyncClient.builder(), Localstack.INSTANCE.getEndpointCloudWatch()).build();
6465
}
65-
66+
67+
public static IamAsyncClient getClientIamAsyncV2() {
68+
return wrapApiClientV2(IamAsyncClient.builder(), Localstack.INSTANCE.getEndpointIAM()).build();
69+
}
70+
6671
public static <T extends SdkAsyncClientBuilder> T wrapApiClientV2(T builder, String endpointURL) {
6772
try {
6873
return (T) ((AwsClientBuilder)builder
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package cloud.localstack;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import cloud.localstack.docker.annotation.LocalstackDockerProperties;
7+
import cloud.localstack.awssdkv1.TestUtils;
8+
9+
import java.util.*;
10+
import java.util.concurrent.atomic.AtomicBoolean;
11+
12+
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
13+
import com.amazonaws.services.identitymanagement.model.*;
14+
15+
import org.junit.Test;
16+
import org.junit.runner.RunWith;
17+
18+
19+
@RunWith(LocalstackTestRunner.class)
20+
@LocalstackDockerProperties(services = {"iam"}, ignoreDockerRunErrors=true)
21+
public class IAMTest {
22+
23+
/**
24+
* Test the creation of a IAM user.
25+
*/
26+
@Test
27+
public void testUserCreation() throws Exception {
28+
AmazonIdentityManagement iamClient = TestUtils.getClientIAM();
29+
30+
String username = UUID.randomUUID().toString();
31+
CreateUserRequest createUserRequest = new CreateUserRequest(username);
32+
iamClient.createUser(createUserRequest);
33+
34+
ListUsersRequest listUsersRequest = new ListUsersRequest();
35+
ListUsersResult response = iamClient.listUsers(listUsersRequest);
36+
37+
boolean userFound = false;
38+
for (User user : response.getUsers()) {
39+
40+
if(user.getUserName().equals(username)){
41+
userFound = true;
42+
break;
43+
}
44+
}
45+
46+
assertEquals(true, userFound);
47+
48+
}
49+
50+
@Test
51+
public void testIAMListUserPagination() throws Exception {
52+
AmazonIdentityManagement iamClient = TestUtils.getClientIAM();
53+
54+
String username = UUID.randomUUID().toString();
55+
CreateUserRequest createUserRequest = new CreateUserRequest(username);
56+
iamClient.createUser(createUserRequest);
57+
58+
AtomicBoolean userFound = new AtomicBoolean(false);
59+
iamClient.listUsers().getUsers().forEach(user->{
60+
if(user.getUserName().equals(username)){
61+
userFound.set(true);;
62+
}
63+
});
64+
65+
assertTrue(userFound.get());
66+
}
67+
}

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import cloud.localstack.Constants;
44
import cloud.localstack.LocalstackTestRunner;
5+
import cloud.localstack.docker.annotation.LocalstackDockerProperties;
56
import cloud.localstack.sample.LambdaHandler;
67
import cloud.localstack.utils.LocalTestUtil;
78

@@ -12,6 +13,9 @@
1213
import software.amazon.awssdk.services.cloudwatch.model.*;
1314
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
1415
import software.amazon.awssdk.services.dynamodb.model.*;
16+
import software.amazon.awssdk.services.iam.*;
17+
import software.amazon.awssdk.services.iam.model.*;
18+
import software.amazon.awssdk.services.iam.paginators.ListUsersPublisher;
1519
import software.amazon.awssdk.services.kinesis.*;
1620
import software.amazon.awssdk.services.kinesis.model.*;
1721
import software.amazon.awssdk.services.lambda.model.CreateFunctionRequest;
@@ -42,8 +46,11 @@
4246

4347
import software.amazon.awssdk.core.SdkBytes;
4448
import java.util.concurrent.CompletableFuture;
49+
import java.util.concurrent.TimeUnit;
50+
import java.util.concurrent.atomic.AtomicBoolean;
4551

4652
@RunWith(LocalstackTestRunner.class)
53+
@LocalstackDockerProperties(ignoreDockerRunErrors=true)
4754
public class BasicFeaturesSDKV2Test {
4855

4956
static {
@@ -258,4 +265,47 @@ public void testLambdaCreateListFunctions() throws Exception {
258265
val function = functions.functions().stream().filter(f -> f.functionName().equals(functionName)).findFirst().get();
259266
Assert.assertNotNull(function);
260267
}
268+
269+
@Test
270+
public void testIAMUserCreation() throws Exception {
271+
IamAsyncClient iamClient = TestUtils.getClientIamAsyncV2();
272+
273+
String username = UUID.randomUUID().toString();
274+
CreateUserRequest createUserRequest = CreateUserRequest.builder().userName(username).build();
275+
iamClient.createUser(createUserRequest);
276+
277+
boolean userFound = false;
278+
List<User> users = iamClient.listUsers().get().users();
279+
280+
281+
for (int i = 0; i < users.size(); i++) {
282+
System.out.println(users.get(i).userName());
283+
if(users.get(i).userName().equals(username)){
284+
userFound = true;
285+
break;
286+
}
287+
}
288+
289+
Assert.assertTrue(userFound);
290+
}
291+
292+
@Test
293+
public void testIAMListUserPagination() throws Exception {
294+
IamAsyncClient iamClient = TestUtils.getClientIamAsyncV2();
295+
296+
String username = UUID.randomUUID().toString();
297+
CreateUserRequest createUserRequest = CreateUserRequest.builder().userName(username).build();
298+
iamClient.createUser(createUserRequest);
299+
300+
301+
AtomicBoolean userFound = new AtomicBoolean(false);
302+
iamClient.listUsersPaginator().users().subscribe(user -> {
303+
if(user.userName().equals(username)){
304+
userFound.set(true);
305+
}
306+
});
307+
308+
TimeUnit.SECONDS.sleep(2);
309+
Assert.assertTrue(userFound.get());
310+
}
261311
}

0 commit comments

Comments
 (0)