Skip to content

Commit 4163550

Browse files
committed
Revert "Modify ArnResource to handle more variants of resources (#4317)"
This reverts commit 0a37e9f.
1 parent cf2cc96 commit 4163550

File tree

4 files changed

+82
-49
lines changed

4 files changed

+82
-49
lines changed

core/arns/src/main/java/software/amazon/awssdk/arns/ArnResource.java

+16-12
Original file line numberDiff line numberDiff line change
@@ -91,30 +91,34 @@ public static Builder builder() {
9191
* @return {@link ArnResource}
9292
*/
9393
public static ArnResource fromString(String resource) {
94-
Character primarySplitter = StringUtils.findFirstOccurrence(resource, ':', '/');
94+
Character splitter = StringUtils.findFirstOccurrence(resource, ':', '/');
9595

96-
if (primarySplitter == null) {
97-
return builder().resource(resource).build();
96+
if (splitter == null) {
97+
return ArnResource.builder().resource(resource).build();
9898
}
9999

100-
int resourceTypeIndex = resource.indexOf(primarySplitter);
101-
ArnResource.Builder builder = builder().resourceType(resource.substring(0, resourceTypeIndex));
100+
int resourceTypeColonIndex = resource.indexOf(splitter);
102101

103-
String remainingResource = resource.substring(resourceTypeIndex + 1);
104-
int qualifierColonIndex = remainingResource.lastIndexOf(':');
105-
if (qualifierColonIndex < 1) {
106-
builder.resource(remainingResource);
102+
ArnResource.Builder builder = ArnResource.builder().resourceType(resource.substring(0, resourceTypeColonIndex));
103+
int resourceColonIndex = resource.indexOf(splitter, resourceTypeColonIndex);
104+
int qualifierColonIndex = resource.indexOf(splitter, resourceColonIndex + 1);
105+
if (qualifierColonIndex < 0) {
106+
builder.resource(resource.substring(resourceTypeColonIndex + 1));
107107
} else {
108-
builder.resource(remainingResource.substring(0, qualifierColonIndex));
109-
builder.qualifier(remainingResource.substring(qualifierColonIndex + 1));
108+
builder.resource(resource.substring(resourceTypeColonIndex + 1, qualifierColonIndex));
109+
builder.qualifier(resource.substring(qualifierColonIndex + 1));
110110
}
111111

112112
return builder.build();
113113
}
114114

115115
@Override
116116
public String toString() {
117-
return String.join(":", this.resourceType, this.resource, this.qualifier);
117+
return this.resourceType
118+
+ ":"
119+
+ this.resource
120+
+ ":"
121+
+ this.qualifier;
118122
}
119123

120124
@Override

core/arns/src/test/java/software/amazon/awssdk/arns/ArnResourceTest.java

+1-35
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,12 @@
1515

1616
package software.amazon.awssdk.arns;
1717

18+
1819
import static org.assertj.core.api.Assertions.assertThat;
1920
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2021

21-
import java.util.Arrays;
22-
import java.util.List;
2322
import java.util.Optional;
2423
import org.junit.jupiter.api.Test;
25-
import org.junit.jupiter.params.ParameterizedTest;
26-
import org.junit.jupiter.params.provider.Arguments;
27-
import org.junit.jupiter.params.provider.MethodSource;
2824

2925
public class ArnResourceTest {
3026

@@ -68,34 +64,4 @@ public void hashCodeEquals_minimalProperties() {
6864
assertThat(arnResource.equals(anotherResource)).isTrue();
6965
assertThat(arnResource.hashCode()).isEqualTo(anotherResource.hashCode());
7066
}
71-
72-
@ParameterizedTest
73-
@MethodSource("resources")
74-
void arnResource_ParsesCorrectly(String resource, ArnResource expected) {
75-
ArnResource arnResource = ArnResource.fromString(resource);
76-
77-
assertThat(arnResource.resourceType()).isEqualTo(expected.resourceType());
78-
assertThat(arnResource.resource()).isEqualTo(expected.resource());
79-
assertThat(arnResource.qualifier()).isEqualTo(expected.qualifier());
80-
}
81-
82-
private static List<Arguments> resources() {
83-
return Arrays.asList(
84-
Arguments.of("myresource", ArnResource.builder().resource("myresource").build()),
85-
Arguments.of("alias/foo/bar", ArnResource.builder().resourceType("alias").resource("foo/bar").build()),
86-
Arguments.of("alias//", ArnResource.builder().resourceType("alias").resource("/").build()),
87-
Arguments.of("alias//a", ArnResource.builder().resourceType("alias").resource("/a").build()),
88-
Arguments.of("alias///a", ArnResource.builder().resourceType("alias").resource("//a").build()),
89-
Arguments.of("alias///a/b", ArnResource.builder().resourceType("alias").resource("//a/b").build()),
90-
Arguments.of("alias/foo", ArnResource.builder().resourceType("alias").resource("foo").build()),
91-
Arguments.of("alias/foo:quali", ArnResource.builder().resourceType("alias").resource("foo").qualifier("quali").build()),
92-
Arguments.of("alias/foo:bar:quali", ArnResource.builder().resourceType("alias").resource("foo:bar").qualifier("quali").build()),
93-
Arguments.of("alias:foo", ArnResource.builder().resourceType("alias").resource("foo").build()),
94-
Arguments.of("alias:foo.bar", ArnResource.builder().resourceType("alias").resource("foo.bar").build()),
95-
Arguments.of("alias:foo/bar", ArnResource.builder().resourceType("alias").resource("foo/bar").build()),
96-
Arguments.of("alias:foo/bar/baz", ArnResource.builder().resourceType("alias").resource("foo/bar/baz").build()),
97-
Arguments.of("alias:foo:quali", ArnResource.builder().resourceType("alias").resource("foo").qualifier("quali").build()),
98-
Arguments.of("alias:foo:bar:quali", ArnResource.builder().resourceType("alias").resource("foo:bar").qualifier("quali").build())
99-
);
100-
}
10167
}

core/arns/src/test/java/software/amazon/awssdk/arns/ArnTest.java

+64-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public void arnWithBasicResource_ParsesCorrectly() {
3131
assertThat(arn.region()).hasValue("us-east-1");
3232
assertThat(arn.accountId()).hasValue("12345678910");
3333
assertThat(arn.resourceAsString()).isEqualTo("myresource");
34+
System.out.println(arn.resource());
3435
}
3536

3637
@Test
@@ -64,6 +65,14 @@ public void arnWithResourceTypeAndResource_ParsesCorrectly() {
6465
assertThat(arn.service()).isEqualTo("s3");
6566
assertThat(arn.region()).hasValue("us-east-1");
6667
assertThat(arn.resourceAsString()).isEqualTo("bucket:foobar");
68+
69+
verifyArnResource(arn.resource());
70+
}
71+
72+
private void verifyArnResource(ArnResource arnResource) {
73+
assertThat(arnResource.resource()).isEqualTo("foobar");
74+
assertThat(arnResource.resourceType()).isPresent();
75+
assertThat(arnResource.resourceType().get()).isEqualTo("bucket");
6776
}
6877

6978
@Test
@@ -74,6 +83,12 @@ public void arnWithResourceTypeAndResourceAndQualifier_ParsesCorrectly() {
7483
assertThat(arn.service()).isEqualTo("s3");
7584
assertThat(arn.region()).hasValue("us-east-1");
7685
assertThat(arn.resourceAsString()).isEqualTo("bucket:foobar:1");
86+
87+
88+
ArnResource arnResource = arn.resource();
89+
verifyArnResource(arnResource);
90+
assertThat(arnResource.qualifier()).isPresent();
91+
assertThat(arnResource.qualifier().get()).isEqualTo("1");
7792
}
7893

7994
@Test
@@ -84,7 +99,20 @@ public void arnWithResourceTypeAndResource_SlashSplitter_ParsesCorrectly() {
8499
assertThat(arn.service()).isEqualTo("s3");
85100
assertThat(arn.region()).hasValue("us-east-1");
86101
assertThat(arn.resourceAsString()).isEqualTo("bucket/foobar");
87-
}
102+
verifyArnResource(arn.resource());
103+
}
104+
105+
@Test
106+
public void arnWithResourceTypeAndResourceAndQualifier_SlashSplitter_ParsesCorrectly() {
107+
String arnString = "arn:aws:s3:us-east-1:12345678910:bucket/foobar/1";
108+
Arn arn = Arn.fromString(arnString);
109+
assertThat(arn.partition()).isEqualTo("aws");
110+
assertThat(arn.service()).isEqualTo("s3");
111+
assertThat(arn.region()).hasValue("us-east-1");
112+
assertThat(arn.resourceAsString()).isEqualTo("bucket/foobar/1");
113+
verifyArnResource(arn.resource());
114+
assertThat(arn.resource().qualifier().get()).isEqualTo("1");
115+
}
88116

89117
@Test
90118
public void oneArnEqualsEquivalentArn() {
@@ -110,6 +138,30 @@ public void arnFromBuilder_ParsesCorrectly() {
110138
assertThat(arn.region()).hasValue("us-east-1");
111139
assertThat(arn.accountId()).hasValue("123456789012");
112140
assertThat(arn.resourceAsString()).isEqualTo("bucket:foobar:1");
141+
verifyArnResource(arn.resource());
142+
assertThat(arn.resource().qualifier()).isPresent();
143+
assertThat(arn.resource().qualifier().get()).isEqualTo("1");
144+
}
145+
146+
@Test
147+
public void arnResourceWithColonAndSlash_ParsesOnFirstSplitter() {
148+
String resourceWithColonAndSlash = "object:foobar/myobjectname:1";
149+
Arn arn = Arn.builder()
150+
.partition("aws")
151+
.service("s3")
152+
.region("us-east-1")
153+
.accountId("123456789012")
154+
.resource(resourceWithColonAndSlash)
155+
.build();
156+
assertThat(arn.partition()).isEqualTo("aws");
157+
assertThat(arn.service()).isEqualTo("s3");
158+
assertThat(arn.region()).hasValue("us-east-1");
159+
assertThat(arn.accountId()).hasValue("123456789012");
160+
assertThat(arn.resourceAsString()).isEqualTo(resourceWithColonAndSlash);
161+
162+
assertThat(arn.resource().resource()).isEqualTo("foobar/myobjectname");
163+
assertThat(arn.resource().qualifier()).hasValue("1");
164+
assertThat(arn.resource().resourceType()).hasValue("object");
113165
}
114166

115167
@Test
@@ -134,6 +186,17 @@ public void arnWithoutAccountId_ParsesCorrectly() {
134186
assertThat(arn.resourceAsString()).isEqualTo("myresource");
135187
}
136188

189+
@Test
190+
public void arnResourceContainingDots_ParsesCorrectly() {
191+
String arnString = "arn:aws:s3:us-east-1:12345678910:myresource:foobar.1";
192+
Arn arn = Arn.fromString(arnString);
193+
assertThat(arn.partition()).isEqualTo("aws");
194+
assertThat(arn.service()).isEqualTo("s3");
195+
assertThat(arn.region()).hasValue("us-east-1");
196+
assertThat(arn.accountId()).hasValue("12345678910");
197+
assertThat(arn.resourceAsString()).isEqualTo("myresource:foobar.1");
198+
}
199+
137200
@Test
138201
public void toBuilder() {
139202
Arn oneArn = Arn.builder()

services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/resource/S3ArnUtilsTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public void parseOutpostArn_malformedArnNullSubresource_shouldThrowException() {
122122
@Test
123123
public void parseOutpostArn_malformedArnEmptyOutpostId_shouldThrowException() {
124124
exception.expect(IllegalArgumentException.class);
125-
exception.expectMessage("Invalid format for S3 outpost ARN, missing outpostId");
125+
exception.expectMessage("resource must not be blank or empty");
126126

127127
S3ArnUtils.parseOutpostArn(Arn.builder()
128128
.partition("aws")

0 commit comments

Comments
 (0)