implement demo code for how-to-mock-aws-s3-integration-tests
This commit is contained in:
		
							parent
							
								
									72cd365b26
								
							
						
					
					
						commit
						c977f8f738
					
				| @ -20,6 +20,12 @@ | ||||
|             <artifactId>s3</artifactId> | ||||
|             <version>${aws.java.sdk.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>software.amazon.awssdk</groupId> | ||||
|             <artifactId>url-connection-client</artifactId> | ||||
|             <version>${aws.java.sdk.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>commons-io</groupId> | ||||
| @ -37,12 +43,34 @@ | ||||
|             <artifactId>commons-codec</artifactId> | ||||
|             <version>${commons-codec-version}</version> | ||||
|         </dependency> | ||||
|         <!-- adobe s3mock --> | ||||
|         <dependency> | ||||
|             <groupId>com.adobe.testing</groupId> | ||||
|             <artifactId>s3mock</artifactId> | ||||
|             <version>${com.adobe.testing.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.adobe.testing</groupId> | ||||
|             <artifactId>s3mock-testcontainers</artifactId> | ||||
|             <version>${com.adobe.testing.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>org.testcontainers</groupId> | ||||
|             <artifactId>junit-jupiter</artifactId> | ||||
|             <version>${org.testcontainers.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
|     <properties> | ||||
|         <aws.java.sdk.version>2.20.52</aws.java.sdk.version> | ||||
|         <commons-codec-version>1.10.L001</commons-codec-version> | ||||
|         <jets3t-version>0.9.4.0006L</jets3t-version> | ||||
|         <com.adobe.testing.version>3.3.0</com.adobe.testing.version> | ||||
|         <org.testcontainers.version>1.19.4</org.testcontainers.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -0,0 +1,65 @@ | ||||
| package com.baeldung.s3; | ||||
| 
 | ||||
| import java.util.Optional; | ||||
| 
 | ||||
| import software.amazon.awssdk.core.ResponseBytes; | ||||
| import software.amazon.awssdk.core.sync.RequestBody; | ||||
| import software.amazon.awssdk.services.s3.S3Client; | ||||
| import software.amazon.awssdk.services.s3.model.CreateBucketRequest; | ||||
| import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; | ||||
| import software.amazon.awssdk.services.s3.model.GetObjectRequest; | ||||
| import software.amazon.awssdk.services.s3.model.GetObjectResponse; | ||||
| import software.amazon.awssdk.services.s3.model.PutObjectRequest; | ||||
| import software.amazon.awssdk.services.s3.model.S3Exception; | ||||
| 
 | ||||
| public class S3CrudService { | ||||
| 
 | ||||
|     private final S3Client s3Client; | ||||
| 
 | ||||
|     public S3CrudService(S3Client s3Client) { | ||||
|         this.s3Client = s3Client; | ||||
|     } | ||||
| 
 | ||||
|     public void createBucket(String bucketName) { | ||||
|         CreateBucketRequest bucketRequest = CreateBucketRequest.builder() | ||||
|           .bucket(bucketName) | ||||
|           .build(); | ||||
| 
 | ||||
|         s3Client.createBucket(bucketRequest); | ||||
|     } | ||||
| 
 | ||||
|     public void createObject(String bucketName, File inMemoryObject) { | ||||
|         PutObjectRequest request = PutObjectRequest.builder() | ||||
|           .bucket(bucketName) | ||||
|           .key(inMemoryObject.getName()) | ||||
|           .build(); | ||||
|         s3Client.putObject(request, RequestBody.fromByteBuffer(inMemoryObject.getContent())); | ||||
|     } | ||||
| 
 | ||||
|     public Optional<byte[]> getObject(String bucketName, String objectKey) { | ||||
|         try { | ||||
|             GetObjectRequest getObjectRequest = GetObjectRequest.builder() | ||||
|               .bucket(bucketName) | ||||
|               .key(objectKey) | ||||
|               .build(); | ||||
|             ResponseBytes<GetObjectResponse> responseResponseBytes = s3Client.getObjectAsBytes(getObjectRequest); | ||||
|             return Optional.of(responseResponseBytes.asByteArray()); | ||||
|         } catch (S3Exception e) { | ||||
|             return Optional.empty(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public boolean deleteObject(String bucketName, String objectKey) { | ||||
|         try { | ||||
|             DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder() | ||||
|               .bucket(bucketName) | ||||
|               .key(objectKey) | ||||
|               .build(); | ||||
| 
 | ||||
|             s3Client.deleteObject(deleteObjectRequest); | ||||
|             return true; | ||||
|         } catch (S3Exception e) { | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,82 @@ | ||||
| package com.baeldung.s3; | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| import static software.amazon.awssdk.http.SdkHttpConfigurationOption.TRUST_ALL_CERTIFICATES; | ||||
| 
 | ||||
| import java.net.URI; | ||||
| import java.util.Arrays; | ||||
| 
 | ||||
| import org.junit.jupiter.api.BeforeEach; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.testcontainers.junit.jupiter.Container; | ||||
| import org.testcontainers.junit.jupiter.Testcontainers; | ||||
| 
 | ||||
| import com.adobe.testing.s3mock.testcontainers.S3MockContainer; | ||||
| 
 | ||||
| import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; | ||||
| import software.amazon.awssdk.services.s3.S3Client; | ||||
| import software.amazon.awssdk.services.s3.S3Configuration; | ||||
| import software.amazon.awssdk.utils.AttributeMap; | ||||
| 
 | ||||
| // This live test needs a running Docker instance so that a S3Mock Container can be started | ||||
| 
 | ||||
| @Testcontainers | ||||
| public class S3CrudServiceIntegrationTest { | ||||
| 
 | ||||
|     private static final String TEST_BUCKET_NAME = "test-bucket"; | ||||
| 
 | ||||
|     @Container | ||||
|     private final S3MockContainer s3Mock = new S3MockContainer("latest"); | ||||
|     private S3Client s3Client; | ||||
| 
 | ||||
|     @BeforeEach | ||||
|     void setUp() { | ||||
|         var endpoint = s3Mock.getHttpsEndpoint(); | ||||
|         var serviceConfig = S3Configuration.builder() | ||||
|           .pathStyleAccessEnabled(true) | ||||
|           .build(); | ||||
|         var httpClient = UrlConnectionHttpClient.builder() | ||||
|           .buildWithDefaults(AttributeMap.builder() | ||||
|             .put(TRUST_ALL_CERTIFICATES, Boolean.TRUE) | ||||
|             .build()); | ||||
|         s3Client = S3Client.builder() | ||||
|           .endpointOverride(URI.create(endpoint)) | ||||
|           .serviceConfiguration(serviceConfig) | ||||
|           .httpClient(httpClient) | ||||
|           .build(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     void whenVerifyingCreationOfS3Bucket_thenCorrect() { | ||||
|         var s3CrudService = new S3CrudService(s3Client); | ||||
|         s3CrudService.createBucket(TEST_BUCKET_NAME); | ||||
| 
 | ||||
|         var createdBucketName = s3Client.listBuckets() | ||||
|           .buckets() | ||||
|           .get(0) | ||||
|           .name(); | ||||
|         assertThat(TEST_BUCKET_NAME).isEqualTo(createdBucketName); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     void whenCreatingAnObjectOnS3Bucket_thenSameObjectIsRetrived() { | ||||
|         var s3CrudService = new S3CrudService(s3Client); | ||||
|         s3CrudService.createBucket(TEST_BUCKET_NAME); | ||||
| 
 | ||||
|         var fileToSave = FileGenerator.generateFiles(1, 100) | ||||
|           .get(0); | ||||
|         s3CrudService.createObject(TEST_BUCKET_NAME, fileToSave); | ||||
| 
 | ||||
|         var savedFileContent = s3CrudService.getObject(TEST_BUCKET_NAME, fileToSave.getName()); | ||||
| 
 | ||||
|         assertThat(Arrays.equals(fileToSave.getContent() | ||||
|           .array(), savedFileContent.orElse(new byte[]{}))).isTrue(); | ||||
| 
 | ||||
|         s3CrudService.deleteObject(TEST_BUCKET_NAME,fileToSave.getName()); | ||||
| 
 | ||||
|         var deletedFileContent = s3CrudService.getObject(TEST_BUCKET_NAME, fileToSave.getName()); | ||||
|         assertThat(deletedFileContent).isEmpty(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user