Skip to content

Commit 40ee837

Browse files
Replace FakeClientBuilder with spy (#385)
1 parent 7776810 commit 40ee837

File tree

4 files changed

+77
-186
lines changed

4 files changed

+77
-186
lines changed

src/test/java/software/amazon/nio/spi/s3/FakeAsyncS3ClientBuilder.java

-126
This file was deleted.

src/test/java/software/amazon/nio/spi/s3/S3ClientProviderTest.java

+20-9
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@
55

66
package software.amazon.nio.spi.s3;
77

8-
import static org.assertj.core.api.BDDAssertions.then;
98
import static org.junit.jupiter.api.Assertions.assertNotNull;
109
import static org.junit.jupiter.api.Assertions.assertSame;
1110
import static org.junit.jupiter.api.Assertions.assertThrows;
12-
import static org.mockito.Mockito.inOrder;
13-
import static org.mockito.Mockito.when;
11+
import static org.mockito.Mockito.*;
1412
import static software.amazon.nio.spi.s3.S3Matchers.anyConsumer;
1513

14+
import java.net.URI;
1615
import java.util.NoSuchElementException;
1716
import java.util.concurrent.CompletableFuture;
1817
import java.util.concurrent.ExecutionException;
@@ -155,17 +154,29 @@ public void testGenerateAsyncClientWith403Then301ResponsesNoHeader(){
155154

156155
@Test
157156
public void generateAsyncClientByEndpointBucketCredentials() {
158-
final var BUILDER = new FakeAsyncS3ClientBuilder();
157+
// GIVEN
158+
// use a spy to record method calls on the builder which should be invoked by the provider
159+
var BUILDER = spy(S3AsyncClient.crtBuilder());
159160
provider.asyncClientBuilder = BUILDER;
160-
161161
provider.configuration.withEndpoint("endpoint1:1010");
162+
163+
// WHEN
162164
provider.generateClient("bucket1", true);
163-
then(BUILDER.endpointOverride.toString()).isEqualTo("https://endpoint1:1010");
164-
then(BUILDER.region).isEqualTo(Region.US_EAST_1); // just a default in the case not provide
165165

166+
// THEN
167+
verify(BUILDER, times(1)).endpointOverride(URI.create("https://endpoint1:1010"));
168+
verify(BUILDER, times(1)).region(Region.US_EAST_1);
169+
170+
// GIVEN
171+
BUILDER = spy(S3AsyncClient.crtBuilder());
172+
provider.asyncClientBuilder = BUILDER;
166173
provider.configuration.withEndpoint("endpoint2:2020");
174+
175+
// WHEN
167176
provider.generateClient("bucket2", true);
168-
then(BUILDER.endpointOverride.toString()).isEqualTo("https://endpoint2:2020");
169-
then(BUILDER.region).isEqualTo(Region.US_EAST_1); // just a default in the case not provide
177+
178+
// THEN
179+
verify(BUILDER, times(1)).endpointOverride(URI.create("https://endpoint2:2020"));
180+
verify(BUILDER, times(1)).region(Region.US_EAST_1);
170181
}
171182
}

src/test/java/software/amazon/nio/spi/s3/S3FileSystemProviderTest.java

+38-38
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,36 @@
55

66
package software.amazon.nio.spi.s3;
77

8+
import static java.util.concurrent.CompletableFuture.completedFuture;
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
import static org.assertj.core.api.Assertions.assertThatCode;
11+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
12+
import static org.junit.jupiter.api.Assertions.*;
13+
import static org.mockito.ArgumentMatchers.any;
14+
import static org.mockito.Mockito.*;
15+
import static software.amazon.nio.spi.s3.S3Matchers.anyConsumer;
16+
17+
import java.io.IOException;
18+
import java.net.URI;
19+
import java.nio.file.AccessMode;
20+
import java.nio.file.DirectoryStream;
21+
import java.nio.file.FileAlreadyExistsException;
22+
import java.nio.file.FileSystemNotFoundException;
23+
import java.nio.file.Path;
24+
import java.nio.file.Paths;
25+
import java.nio.file.StandardCopyOption;
26+
import java.nio.file.StandardOpenOption;
27+
import java.nio.file.attribute.BasicFileAttributeView;
28+
import java.nio.file.attribute.BasicFileAttributes;
29+
import java.nio.file.attribute.FileAttributeView;
30+
import java.nio.file.attribute.FileTime;
31+
import java.time.Instant;
32+
import java.util.Collections;
33+
import java.util.concurrent.CompletableFuture;
34+
import java.util.concurrent.atomic.AtomicInteger;
35+
import java.util.function.Consumer;
36+
import java.util.stream.Collectors;
37+
import java.util.stream.Stream;
838
import org.junit.jupiter.api.AfterEach;
939
import org.junit.jupiter.api.BeforeEach;
1040
import org.junit.jupiter.api.DisplayName;
@@ -30,40 +60,6 @@
3060
import software.amazon.awssdk.services.s3.model.S3Object;
3161
import software.amazon.awssdk.services.s3.paginators.ListObjectsV2Publisher;
3262

33-
import java.io.IOException;
34-
import java.net.URI;
35-
import java.nio.file.AccessMode;
36-
import java.nio.file.DirectoryStream;
37-
import java.nio.file.FileAlreadyExistsException;
38-
import java.nio.file.FileSystemNotFoundException;
39-
import java.nio.file.Path;
40-
import java.nio.file.Paths;
41-
import java.nio.file.StandardCopyOption;
42-
import java.nio.file.StandardOpenOption;
43-
import java.nio.file.attribute.BasicFileAttributeView;
44-
import java.nio.file.attribute.BasicFileAttributes;
45-
import java.nio.file.attribute.FileAttributeView;
46-
import java.nio.file.attribute.FileTime;
47-
import java.time.Instant;
48-
import java.util.Collections;
49-
import java.util.concurrent.CompletableFuture;
50-
import java.util.concurrent.atomic.AtomicInteger;
51-
import java.util.function.Consumer;
52-
import java.util.stream.Collectors;
53-
import java.util.stream.Stream;
54-
55-
import static java.util.concurrent.CompletableFuture.completedFuture;
56-
import static org.assertj.core.api.Assertions.assertThat;
57-
import static org.assertj.core.api.Assertions.assertThatCode;
58-
import static org.assertj.core.api.Assertions.assertThatThrownBy;
59-
import static org.junit.jupiter.api.Assertions.*;
60-
import static org.mockito.ArgumentMatchers.any;
61-
import static org.mockito.Mockito.lenient;
62-
import static org.mockito.Mockito.times;
63-
import static org.mockito.Mockito.verify;
64-
import static org.mockito.Mockito.when;
65-
import static software.amazon.nio.spi.s3.S3Matchers.anyConsumer;
66-
6763
@SuppressWarnings("unchecked")
6864
@ExtendWith(MockitoExtension.class)
6965
public class S3FileSystemProviderTest {
@@ -478,11 +474,15 @@ public void setAttribute() {
478474

479475
@Test
480476
public void defaultForcePathStyle() throws Exception {
481-
final var BUILDER = new FakeAsyncS3ClientBuilder();
482-
477+
// GIVEN
478+
final var BUILDER = spy(S3AsyncClient.crtBuilder());
483479
fs.clientProvider().asyncClientBuilder(BUILDER);
484-
fs.client(); fs.close();
485480

486-
assertNull(BUILDER.forcePathStyle);
481+
// WHEN
482+
fs.client();
483+
fs.close();
484+
485+
// THEN verify that the force path style is never set and will therefore be the default
486+
verify(BUILDER, times(0)).forcePathStyle(any());
487487
}
488488
}

src/test/java/software/amazon/nio/spi/s3/S3XFileSystemProviderTest.java

+19-13
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,32 @@
55

66
package software.amazon.nio.spi.s3;
77

8-
import org.junit.jupiter.api.DisplayName;
9-
import org.junit.jupiter.api.Test;
8+
import static com.github.stefanbirkner.systemlambda.SystemLambda.restoreSystemProperties;
9+
import static org.assertj.core.api.Assertions.assertThatCode;
10+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
11+
import static org.assertj.core.api.BDDAssertions.then;
12+
import static org.mockito.Mockito.spy;
13+
import static org.mockito.Mockito.verify;
1014

1115
import java.net.URI;
1216
import java.nio.file.FileSystem;
1317
import java.nio.file.FileSystemNotFoundException;
1418
import java.nio.file.Paths;
1519
import java.util.Collections;
16-
17-
import static com.github.stefanbirkner.systemlambda.SystemLambda.restoreSystemProperties;
18-
import static org.assertj.core.api.Assertions.assertThatCode;
19-
import static org.assertj.core.api.Assertions.assertThatThrownBy;
20-
import static org.assertj.core.api.BDDAssertions.then;
20+
import org.junit.jupiter.api.DisplayName;
21+
import org.junit.jupiter.api.Test;
22+
import software.amazon.awssdk.services.s3.S3AsyncClient;
2123

2224
public class S3XFileSystemProviderTest {
2325

24-
final static FakeAsyncS3ClientBuilder BUILDER = new FakeAsyncS3ClientBuilder();
2526

2627
final static URI URI1 = URI.create("s3x://myendpoint/foo");
2728
final static URI URI2 = URI.create("s3x://myendpoint/foo/baa2");
2829
final static URI URI3 = URI.create("s3x://myendpoint.com:1010/foo/baa2/dir");
2930
final static URI URI7 = URI.create("s3x://key:secret@myendpoint.com:1010/foo/baa2");
3031
final static URI URI8 = URI.create("s3x://key:anothersecret@myendpoint.com:1010/foo/baa2");
3132

33+
3234
@Test
3335
public void nio_provider() {
3436
var path = (S3Path)Paths.get(URI.create("s3x://myendpoint/mybucket/myfolder"));
@@ -79,18 +81,22 @@ public void getFileSystem() {
7981
@Test
8082
public void setCredentialsThroughURI() throws Exception {
8183
var p = new S3XFileSystemProvider();
84+
var BUILDER = spy(S3AsyncClient.crtBuilder());
8285
restoreSystemProperties(() -> {
8386
System.setProperty("aws.region", "us-west-1");
8487

85-
var fs = p.getFileSystem(URI.create("s3://urikey:urisecret@some.where.com:1010/bucket"), true);
88+
var fs = p.getFileSystem(URI.create("s3x://urikey:urisecret@some.where.com:1010/bucket"), true);
8689
fs.clientProvider().asyncClientBuilder(BUILDER);
87-
fs.client(); fs.close();
90+
fs.client();
91+
fs.close();
8892

8993
then(fs.configuration().getBucketName()).isEqualTo("bucket");
9094
then(fs.configuration().getEndpoint()).isEqualTo("some.where.com:1010");
91-
then(BUILDER.endpointOverride.toString()).isEqualTo("https://some.where.com:1010");
92-
then(BUILDER.credentialsProvider.resolveCredentials().accessKeyId()).isEqualTo("urikey");
93-
then(BUILDER.credentialsProvider.resolveCredentials().secretAccessKey()).isEqualTo("urisecret");
95+
96+
verify(BUILDER).endpointOverride(URI.create("https://some.where.com:1010"));
97+
then(fs.configuration().getCredentials().accessKeyId()).isEqualTo("urikey");
98+
then(fs.configuration().getCredentials().secretAccessKey()).isEqualTo("urisecret");
99+
94100
});
95101
}
96102

0 commit comments

Comments
 (0)