diff --git a/src/main/java/com/epam/ta/reportportal/config/DataStoreConfiguration.java b/src/main/java/com/epam/ta/reportportal/config/DataStoreConfiguration.java index fd44e297e..596ddac8d 100644 --- a/src/main/java/com/epam/ta/reportportal/config/DataStoreConfiguration.java +++ b/src/main/java/com/epam/ta/reportportal/config/DataStoreConfiguration.java @@ -177,9 +177,10 @@ public BlobStore minioBlobStore(@Value("${datastore.accessKey}") String accessKe @ConditionalOnProperty(name = "datastore.type", havingValue = "minio") public DataStore minioDataStore(@Autowired BlobStore blobStore, @Value("${datastore.bucketPrefix}") String bucketPrefix, + @Value("${datastore.bucketPostfix}") String bucketPostfix, @Value("${datastore.defaultBucketName}") String defaultBucketName, @Value("${datastore.region}") String region, FeatureFlagHandler featureFlagHandler) { - return new S3DataStore(blobStore, bucketPrefix, defaultBucketName, region, featureFlagHandler); + return new S3DataStore(blobStore, bucketPrefix, bucketPostfix, defaultBucketName, region, featureFlagHandler); } /** @@ -208,9 +209,11 @@ public BlobStore s3BlobStore(@Value("${datastore.accessKey}") String accessKey, @ConditionalOnProperty(name = "datastore.type", havingValue = "s3") public DataStore s3DataStore(@Autowired BlobStore blobStore, @Value("${datastore.bucketPrefix}") String bucketPrefix, + @Value("${datastore.bucketPostfix}") String bucketPostfix, @Value("${datastore.defaultBucketName}") String defaultBucketName, @Value("${datastore.region}") String region, FeatureFlagHandler featureFlagHandler) { - return new S3DataStore(blobStore, bucketPrefix, defaultBucketName, region, featureFlagHandler); + return new S3DataStore(blobStore, bucketPrefix, bucketPostfix, defaultBucketName, region, + featureFlagHandler); } @Bean("attachmentThumbnailator") diff --git a/src/main/java/com/epam/ta/reportportal/filesystem/distributed/s3/S3DataStore.java b/src/main/java/com/epam/ta/reportportal/filesystem/distributed/s3/S3DataStore.java index e2601b95b..e9f7e2e49 100644 --- a/src/main/java/com/epam/ta/reportportal/filesystem/distributed/s3/S3DataStore.java +++ b/src/main/java/com/epam/ta/reportportal/filesystem/distributed/s3/S3DataStore.java @@ -25,6 +25,7 @@ import java.io.InputStream; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Objects; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import org.jclouds.blobstore.BlobStore; @@ -36,6 +37,8 @@ import org.slf4j.LoggerFactory; /** + * Implimitation of basic operations with blob storages. + * * @author Ivan Budayeu */ public class S3DataStore implements DataStore { @@ -45,6 +48,7 @@ public class S3DataStore implements DataStore { private final BlobStore blobStore; private final String bucketPrefix; + private final String bucketPostfix; private final String defaultBucketName; private final Location location; @@ -55,14 +59,16 @@ public class S3DataStore implements DataStore { * * @param blobStore {@link BlobStore} * @param bucketPrefix Prefix for bucket name + * @param bucketPostfix Postfix for bucket name * @param defaultBucketName Name of default bucket to use * @param region Region to use * @param featureFlagHandler {@link FeatureFlagHandler} */ - public S3DataStore(BlobStore blobStore, String bucketPrefix, String defaultBucketName, - String region, FeatureFlagHandler featureFlagHandler) { + public S3DataStore(BlobStore blobStore, String bucketPrefix, String bucketPostfix, + String defaultBucketName, String region, FeatureFlagHandler featureFlagHandler) { this.blobStore = blobStore; this.bucketPrefix = bucketPrefix; + this.bucketPostfix = Objects.requireNonNullElse(bucketPostfix, ""); this.defaultBucketName = defaultBucketName; this.location = getLocationFromString(region); this.featureFlagHandler = featureFlagHandler; @@ -126,14 +132,14 @@ private S3File getS3File(String filePath) { } Path targetPath = Paths.get(filePath); int nameCount = targetPath.getNameCount(); + String bucketName; if (nameCount > 1) { - return new S3File(bucketPrefix + retrievePath(targetPath, 0, 1), - retrievePath(targetPath, 1, nameCount) - ); + bucketName = bucketPrefix + retrievePath(targetPath, 0, 1) + bucketPostfix; + return new S3File(bucketName, retrievePath(targetPath, 1, nameCount)); } else { - return new S3File(defaultBucketName, retrievePath(targetPath, 0, 1)); + bucketName = bucketPrefix + defaultBucketName + bucketPostfix; + return new S3File(bucketName, retrievePath(targetPath, 0, 1)); } - } private Location getLocationFromString(String locationString) { diff --git a/src/test/java/com/epam/ta/reportportal/filesystem/distributed/s3/S3DataStoreTest.java b/src/test/java/com/epam/ta/reportportal/filesystem/distributed/s3/S3DataStoreTest.java index 4d8d62d0b..23f4cdc3d 100644 --- a/src/test/java/com/epam/ta/reportportal/filesystem/distributed/s3/S3DataStoreTest.java +++ b/src/test/java/com/epam/ta/reportportal/filesystem/distributed/s3/S3DataStoreTest.java @@ -39,6 +39,7 @@ class S3DataStoreTest { private static final String FILE_PATH = "someFile"; private static final String BUCKET_PREFIX = "prj-"; + private static final String BUCKET_POSTFIX = "-postfix"; private static final String DEFAULT_BUCKET_NAME = "rp-bucket"; private static final String REGION = "us-east-1"; private static final int ZERO = 0; @@ -49,7 +50,8 @@ class S3DataStoreTest { private final FeatureFlagHandler featureFlagHandler = mock(FeatureFlagHandler.class); private final S3DataStore s3DataStore = - new S3DataStore(blobStore, BUCKET_PREFIX, DEFAULT_BUCKET_NAME, REGION, featureFlagHandler); + new S3DataStore(blobStore, BUCKET_PREFIX, BUCKET_POSTFIX, DEFAULT_BUCKET_NAME, REGION, + featureFlagHandler); @Test void save() throws Exception { @@ -72,7 +74,8 @@ void save() throws Exception { s3DataStore.save(FILE_PATH, inputStream); - verify(blobStore, times(1)).putBlob(DEFAULT_BUCKET_NAME, blobMock); + verify(blobStore, times(1)) + .putBlob(BUCKET_PREFIX + DEFAULT_BUCKET_NAME + BUCKET_POSTFIX, blobMock); } @Test @@ -84,7 +87,8 @@ void load() throws Exception { when(mockPayload.openStream()).thenReturn(inputStream); when(mockBlob.getPayload()).thenReturn(mockPayload); - when(blobStore.getBlob(DEFAULT_BUCKET_NAME, FILE_PATH)).thenReturn(mockBlob); + when(blobStore.getBlob(BUCKET_PREFIX + DEFAULT_BUCKET_NAME + BUCKET_POSTFIX, + FILE_PATH)).thenReturn(mockBlob); InputStream loaded = s3DataStore.load(FILE_PATH); Assertions.assertEquals(inputStream, loaded); @@ -95,6 +99,7 @@ void delete() throws Exception { s3DataStore.delete(FILE_PATH); - verify(blobStore, times(1)).removeBlob(DEFAULT_BUCKET_NAME, FILE_PATH); + verify(blobStore, times(1)) + .removeBlob(BUCKET_PREFIX + DEFAULT_BUCKET_NAME + BUCKET_POSTFIX, FILE_PATH); } } \ No newline at end of file