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 package software.amazon.awssdk.codegen.lite.regions;
16 
17 import static org.hamcrest.MatcherAssert.assertThat;
18 import static software.amazon.awssdk.codegen.lite.PoetMatchers.generatesTo;
19 
20 import java.io.File;
21 import java.nio.file.Paths;
22 import org.junit.jupiter.api.BeforeEach;
23 import org.junit.jupiter.api.Test;
24 import software.amazon.awssdk.codegen.lite.regions.model.Partition;
25 import software.amazon.awssdk.codegen.lite.regions.model.Partitions;
26 
27 public class RegionGenerationTest {
28 
29     private static final String ENDPOINTS = "/software/amazon/awssdk/codegen/lite/test-endpoints.json";
30     private static final String SERVICE_METADATA_BASE = "software.amazon.awssdk.regions.servicemetadata";
31     private static final String REGION_METADATA_BASE = "software.amazon.awssdk.regions.regionmetadata";
32     private static final String PARTITION_METADATA_BASE = "software.amazon.awssdk.regions.partitionmetadata";
33     private static final String REGION_BASE = "software.amazon.awssdk.regions";
34 
35     private File endpoints;
36     private Partitions partitions;
37 
38     @BeforeEach
before()39     public void before() throws Exception {
40         this.endpoints = Paths.get(getClass().getResource(ENDPOINTS).toURI()).toFile();
41         this.partitions = RegionMetadataLoader.build(endpoints);
42     }
43 
44     @Test
regionClass()45     public void regionClass() {
46         RegionGenerator regions = new RegionGenerator(partitions, REGION_BASE);
47         assertThat(regions, generatesTo("regions.java"));
48     }
49 
50     @Test
regionMetadataClass()51     public void regionMetadataClass()  {
52         Partition partition = partitions.getPartitions().get(0);
53         RegionMetadataGenerator metadataGenerator = new RegionMetadataGenerator(partition,
54                                                                                 "us-east-1",
55                                                                                 "US East (N. Virginia)",
56                                                                                 REGION_METADATA_BASE,
57                                                                                 REGION_BASE);
58 
59         assertThat(metadataGenerator, generatesTo("us-east-1.java"));
60     }
61 
62     @Test
regionMetadataProviderClass()63     public void regionMetadataProviderClass() {
64         RegionMetadataProviderGenerator providerGenerator = new RegionMetadataProviderGenerator(partitions,
65                                                                                                 REGION_METADATA_BASE,
66                                                                                                 REGION_BASE);
67         assertThat(providerGenerator, generatesTo("region-metadata-provider.java"));
68     }
69 
70     @Test
serviceMetadataClass()71     public void serviceMetadataClass() {
72         ServiceMetadataGenerator serviceMetadataGenerator = new ServiceMetadataGenerator(partitions,
73                                                                                          "s3",
74                                                                                          SERVICE_METADATA_BASE,
75                                                                                          REGION_BASE);
76 
77         assertThat(serviceMetadataGenerator, generatesTo("s3-service-metadata.java"));
78     }
79 
80     @Test
serviceWithOverriddenPartitionsMetadataClass()81     public void serviceWithOverriddenPartitionsMetadataClass() {
82         ServiceMetadataGenerator serviceMetadataGenerator = new ServiceMetadataGenerator(partitions,
83                                                                                          "sts",
84                                                                                          SERVICE_METADATA_BASE,
85                                                                                          REGION_BASE);
86 
87         assertThat(serviceMetadataGenerator, generatesTo("sts-service-metadata.java"));
88     }
89 
90     @Test
serviceMetadataProviderClass()91     public void serviceMetadataProviderClass() {
92         ServiceMetadataProviderGenerator serviceMetadataProviderGenerator = new ServiceMetadataProviderGenerator(partitions,
93                                                                                                                  SERVICE_METADATA_BASE,
94                                                                                                                  REGION_BASE);
95 
96         assertThat(serviceMetadataProviderGenerator, generatesTo("service-metadata-provider.java"));
97     }
98 
99     @Test
partitionMetadataClass()100     public void partitionMetadataClass() {
101         PartitionMetadataGenerator partitionMetadataGenerator = new PartitionMetadataGenerator(partitions.getPartitions().get(0),
102                                                                               PARTITION_METADATA_BASE,
103                                                                               REGION_BASE);
104 
105         assertThat(partitionMetadataGenerator, generatesTo("partition-metadata.java"));
106     }
107 
108     @Test
endpointTagClass()109     public void endpointTagClass() {
110         EndpointTagGenerator partitionMetadataGenerator = new EndpointTagGenerator(partitions, REGION_BASE);
111 
112         assertThat(partitionMetadataGenerator, generatesTo("endpoint-tags.java"));
113     }
114 
115     @Test
partitionMetadataProviderClass()116     public void partitionMetadataProviderClass() {
117         PartitionMetadataProviderGenerator partitionMetadataProviderGenerator =
118             new PartitionMetadataProviderGenerator(partitions, PARTITION_METADATA_BASE, REGION_BASE);
119 
120         assertThat(partitionMetadataProviderGenerator, generatesTo("partition-metadata-provider.java"));
121     }
122 }
123