Skip to content

Commit 74d85fa

Browse files
committed
increasing test coverage
1 parent 49ecd27 commit 74d85fa

File tree

5 files changed

+119
-2
lines changed

5 files changed

+119
-2
lines changed

service/src/main/java/uk/nhs/adaptors/gp2gp/common/configuration/CustomTrustStore.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ public class CustomTrustStore {
3131
@Autowired(required = false)
3232
private S3Client s3Client;
3333

34+
public void setS3Client(S3Client s3Client) {
35+
this.s3Client = s3Client;
36+
}
37+
3438
@SneakyThrows
3539
public void addToDefault(String trustStorePath, String trustStorePassword) {
3640
final X509TrustManager defaultTrustManager = getDefaultTrustManager();
@@ -59,7 +63,7 @@ private X509TrustManager getDefaultTrustManager() {
5963

6064
@SneakyThrows
6165
@SuppressFBWarnings("RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE")
62-
private X509TrustManager getCustomDbTrustManager(S3Uri s3Uri, String trustStorePassword) {
66+
protected X509TrustManager getCustomDbTrustManager(S3Uri s3Uri, String trustStorePassword) {
6367
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
6468
trustManagerFactory.init((KeyStore) null);
6569

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package uk.nhs.adaptors.gp2gp.common.configuration;
2+
3+
import io.findify.s3mock.S3Mock;
4+
import org.junit.jupiter.api.AfterAll;
5+
import org.junit.jupiter.api.BeforeAll;
6+
import org.junit.jupiter.api.Test;
7+
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
8+
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
9+
import software.amazon.awssdk.regions.Region;
10+
import software.amazon.awssdk.services.s3.S3Client;
11+
import software.amazon.awssdk.services.s3.S3Configuration;
12+
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
13+
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
14+
15+
import java.io.File;
16+
import java.net.URI;
17+
18+
import static org.junit.jupiter.api.Assertions.*;
19+
class CustomTrustStoreTest {
20+
21+
public static final int PORT = 8001;
22+
private static S3Mock s3Mock;
23+
private static S3Client s3Client;
24+
private static final String BUCKET_NAME = "test-bucket";
25+
private static final String TRUSTSTORE_PATH = "test.jks";
26+
private static final String TRUSTSTORE_PASSWORD = "password";
27+
28+
private final CustomTrustStore customTrustStore = new CustomTrustStore();
29+
30+
@BeforeAll
31+
static void setUp() {
32+
s3Mock = new S3Mock.Builder().withPort(PORT).withInMemoryBackend().build();
33+
s3Mock.start();
34+
System.out.println("S3Mock started at http://localhost:" + PORT);
35+
36+
s3Client = S3Client.builder()
37+
.endpointOverride(URI.create("http://localhost:" + PORT))
38+
.credentialsProvider(StaticCredentialsProvider.create(
39+
AwsBasicCredentials.create("accessKey", "secretKey")))
40+
.region(Region.US_EAST_1)
41+
.serviceConfiguration(S3Configuration.builder().pathStyleAccessEnabled(true).build())
42+
.build();
43+
44+
s3Client.createBucket(CreateBucketRequest.builder().bucket(BUCKET_NAME).build());
45+
46+
File trustStoreFile = new File("src/test/resources/test.jks");
47+
s3Client.putObject(PutObjectRequest.builder().bucket(BUCKET_NAME).key(TRUSTSTORE_PATH).build(),
48+
software.amazon.awssdk.core.sync.RequestBody.fromFile(trustStoreFile));
49+
}
50+
51+
@AfterAll
52+
static void tearDown() {
53+
s3Mock.shutdown();
54+
}
55+
56+
@Test
57+
void trustManagerLoadsSuccessfullyTest() {
58+
59+
customTrustStore.setS3Client(s3Client);
60+
61+
String s3Uri = "s3://" + BUCKET_NAME + "/" + TRUSTSTORE_PATH;
62+
63+
var trustManager = customTrustStore.getCustomDbTrustManager(s3Client.utilities().parseUri(URI.create(s3Uri)), TRUSTSTORE_PASSWORD);
64+
65+
assertNotNull(trustManager, "Custom TrustManager wasn't loaded successfully!");
66+
}
67+
}

service/src/test/java/uk/nhs/adaptors/gp2gp/common/storage/S3StorageConnectorTest.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,22 @@
55
import org.mockito.Mock;
66
import org.mockito.MockitoAnnotations;
77
import software.amazon.awssdk.core.ResponseInputStream;
8+
import software.amazon.awssdk.core.sync.RequestBody;
89
import software.amazon.awssdk.services.s3.S3Client;
910
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
1011
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
12+
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
13+
1114
import java.io.ByteArrayInputStream;
15+
import java.io.InputStream;
1216

1317
import static org.junit.Assert.assertEquals;
1418
import static org.junit.Assert.assertThrows;
1519
import static org.junit.jupiter.api.Assertions.assertNotNull;
20+
import static org.mockito.ArgumentMatchers.any;
21+
import static org.mockito.ArgumentMatchers.eq;
1622
import static org.mockito.Mockito.mock;
23+
import static org.mockito.Mockito.times;
1724
import static org.mockito.Mockito.verify;
1825
import static org.mockito.Mockito.when;
1926

@@ -22,9 +29,14 @@ class S3StorageConnectorTest {
2229
private static final String FILE_NAME = "test-file.txt";
2330
private S3StorageConnector s3StorageConnector;
2431
private StorageConnectorConfiguration config;
32+
private static final long STREAM_LENGTH = 100L;
33+
2534
@Mock
2635
private S3Client mockS3Client;
2736

37+
@Mock
38+
private InputStream is;
39+
2840
@BeforeEach
2941
void setUp() {
3042
MockitoAnnotations.openMocks(this);
@@ -46,7 +58,7 @@ void expectExceptionWhenS3ClientCantDeliverResponse() {
4658
}
4759

4860
@Test
49-
void downloadFromStorage() {
61+
void downloadFromStorageTest() {
5062
var mockResponse = mock(GetObjectResponse.class);
5163
var mockInputStream = new ByteArrayInputStream("dummy-content".getBytes());
5264
var mockResponseInputStream = new ResponseInputStream<>(mockResponse, mockInputStream);
@@ -59,4 +71,14 @@ void downloadFromStorage() {
5971
assertNotNull(result);
6072
verify(mockS3Client).getObject(request);
6173
}
74+
75+
@Test
76+
void uploadToStorageTest() {
77+
final var expectedRequest = PutObjectRequest.builder().bucket(config.getContainerName()).key(FILE_NAME).build();
78+
79+
s3StorageConnector.uploadToStorage(is, STREAM_LENGTH, FILE_NAME);
80+
81+
verify(mockS3Client, times(1)).putObject(eq(expectedRequest), any(RequestBody.class));
82+
}
83+
6284
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package uk.nhs.adaptors.gp2gp.common.storage;
2+
3+
import org.junit.jupiter.api.BeforeEach;
4+
import org.junit.jupiter.api.Test;
5+
6+
import static org.junit.jupiter.api.Assertions.*;
7+
8+
class StorageConnectorConfigurationTest {
9+
10+
private StorageConnectorConfiguration configuration;
11+
12+
@BeforeEach
13+
void setUp() {
14+
configuration = new StorageConnectorConfiguration();
15+
configuration.setTrustStoreUrl("s3://my-trust-store");
16+
}
17+
18+
@Test
19+
void expectToReturnS3ClientTest() {
20+
var s3Client = configuration.getS3Client();
21+
22+
assertNotNull(s3Client);
23+
}
24+
}
2.66 KB
Binary file not shown.

0 commit comments

Comments
 (0)