1 /*
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License").
5  * You may not use this file except in compliance with the License.
6  * A copy of the License is located at
7  *
8  *  http://aws.amazon.com/apache2.0
9  *
10  * or in the "license" file accompanying this file. This file is distributed
11  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12  * express or implied. See the License for the specific language governing
13  * permissions and limitations under the License.
14  */
15 
16 package software.amazon.awssdk.services.directory;
17 
18 import static org.junit.Assert.assertNotNull;
19 
20 import java.util.List;
21 import junit.framework.Assert;
22 import org.junit.Test;
23 import software.amazon.awssdk.services.directory.model.CreateDirectoryRequest;
24 import software.amazon.awssdk.services.directory.model.DeleteDirectoryRequest;
25 import software.amazon.awssdk.services.directory.model.DescribeDirectoriesRequest;
26 import software.amazon.awssdk.services.directory.model.DirectorySize;
27 import software.amazon.awssdk.services.directory.model.DirectoryVpcSettings;
28 import software.amazon.awssdk.services.directory.model.InvalidNextTokenException;
29 import software.amazon.awssdk.services.ec2.model.DescribeSubnetsRequest;
30 import software.amazon.awssdk.services.ec2.model.DescribeVpcsRequest;
31 import software.amazon.awssdk.services.ec2.model.Filter;
32 import software.amazon.awssdk.services.ec2.model.Subnet;
33 import software.amazon.awssdk.services.ec2.model.Vpc;
34 
35 public class ServiceIntegrationTest extends IntegrationTestBase {
36 
37     private static final String US_EAST_1A = "us-east-1a";
38     private static final String US_EAST_1B = "us-east-1b";
39 
40     @Test
testDirectories()41     public void testDirectories() {
42 
43         String vpcId = getVpcId();
44         // Creating a directory requires at least two subnets located in
45         // different availability zones
46         String subnetId_0 = getSubnetIdInVpc(vpcId, US_EAST_1A);
47         String subnetId_1 = getSubnetIdInVpc(vpcId, US_EAST_1B);
48 
49         String dsId = dsClient
50                 .createDirectory(CreateDirectoryRequest.builder().description("This is my directory!")
51                                                              .name("AWS.Java.SDK.Directory").shortName("md").password("My.Awesome.Password.2015")
52                                                              .size(DirectorySize.SMALL).vpcSettings(
53                                 DirectoryVpcSettings.builder().vpcId(vpcId).subnetIds(subnetId_0, subnetId_1).build()).build())
54                 .directoryId();
55 
56         dsClient.deleteDirectory(DeleteDirectoryRequest.builder().directoryId(dsId).build());
57     }
58 
getVpcId()59     private String getVpcId() {
60         List<Vpc> vpcs = ec2Client.describeVpcs(DescribeVpcsRequest.builder().build()).vpcs();
61         if (vpcs.isEmpty()) {
62             Assert.fail("No VPC found in this account.");
63         }
64         return vpcs.get(0).vpcId();
65     }
66 
getSubnetIdInVpc(String vpcId, String az)67     private String getSubnetIdInVpc(String vpcId, String az) {
68         List<Subnet> subnets = ec2Client.describeSubnets(DescribeSubnetsRequest.builder()
69                 .filters(
70                         Filter.builder()
71                                 .name("vpc-id")
72                                 .values(vpcId)
73                                 .build(),
74                         Filter.builder()
75                                 .name("availabilityZone")
76                                 .values(az)
77                                 .build())
78                 .build())
79                 .subnets();
80         if (subnets.isEmpty()) {
81             Assert.fail("No Subnet found in VPC " + vpcId + " AvailabilityZone: " + az);
82         }
83         return subnets.get(0).subnetId();
84     }
85 
86     /**
87      * Tests that an exception with a member in it is serialized properly. See TT0064111680
88      */
89     @Test
describeDirectories_InvalidNextToken_ThrowsExceptionWithRequestIdPresent()90     public void describeDirectories_InvalidNextToken_ThrowsExceptionWithRequestIdPresent() {
91         try {
92             dsClient.describeDirectories(DescribeDirectoriesRequest.builder().nextToken("invalid").build());
93         } catch (InvalidNextTokenException e) {
94             assertNotNull(e.requestId());
95         }
96     }
97 }
98