Skip to content

Commit

Permalink
tests and cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
MatthewBemis committed Feb 25, 2025
1 parent 0730c18 commit b4be9b7
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package bio.terra.pearl.core.service.file;

import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import lombok.Getter;
import lombok.Setter;
import org.springframework.context.annotation.Configuration;
Expand All @@ -11,9 +13,13 @@
public class FileStorageConfig {
private String defaultBackend;
private String localFileStoragePath;
private String gcsStorageBucketName;
private Storage gcsStorageConfig;

public FileStorageConfig(Environment environment) {
this.defaultBackend = environment.getProperty("env.fileUpload.backend", "LocalFileStorageBackend");
this.localFileStoragePath = environment.getProperty("env.fileUpload.localFileStoragePath");
this.gcsStorageBucketName = "mb-test-juniper-upload-bucket";
this.gcsStorageConfig = StorageOptions.newBuilder().setProjectId("broad-juniper-dev").build().getService();
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package bio.terra.pearl.core.service.file.backends;

import bio.terra.pearl.core.service.file.FileStorageConfig;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
Expand All @@ -13,15 +14,19 @@
@Service
public class GCSFileStorageBackend implements FileStorageBackend {

private final String BUCKET_NAME = "mb-test-juniper-upload-bucket";
private final String PROJECT_NAME = "broad-juniper-dev";
private final String bucketName;
private final Storage storage;

public GCSFileStorageBackend(FileStorageConfig storageConfig) {
this.storage = storageConfig.getGcsStorageConfig();
this.bucketName = storageConfig.getGcsStorageBucketName();
}

@Override
public UUID uploadFile(InputStream data) {
UUID fileId = UUID.randomUUID();

Storage storage = StorageOptions.newBuilder().setProjectId(PROJECT_NAME).build().getService();
BlobId blobId = BlobId.of(BUCKET_NAME, fileId.toString());
BlobId blobId = BlobId.of(bucketName, fileId.toString());
BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();

try {
Expand All @@ -35,8 +40,7 @@ public UUID uploadFile(InputStream data) {

@Override
public InputStream downloadFile(UUID uploadedFileId) {
Storage storage = StorageOptions.newBuilder().setProjectId(PROJECT_NAME).build().getService();
BlobId blobId = BlobId.of(BUCKET_NAME, uploadedFileId.toString());
BlobId blobId = BlobId.of(bucketName, uploadedFileId.toString());

try {
byte[] gcsBytes = storage.get(blobId).getContent();
Expand All @@ -48,8 +52,7 @@ public InputStream downloadFile(UUID uploadedFileId) {

@Override
public void deleteFile(UUID uploadedFileId) {
Storage storage = StorageOptions.newBuilder().setProjectId(PROJECT_NAME).build().getService();
BlobId blobId = BlobId.of(BUCKET_NAME, uploadedFileId.toString());
BlobId blobId = BlobId.of(bucketName, uploadedFileId.toString());

try {
storage.delete(blobId);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package bio.terra.pearl.core.service.file.backends;

import bio.terra.pearl.core.service.file.FileStorageConfig;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.MockitoAnnotations;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;

public class GCSFileStorageBackendTest {

@Mock
private Storage storage;

@Mock
private FileStorageConfig fileStorageConfig;

@InjectMocks
private GCSFileStorageBackend gcsFileStorageBackend;

@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);

when(fileStorageConfig.getGcsStorageConfig()).thenReturn(storage);
when(fileStorageConfig.getGcsStorageBucketName()).thenReturn("test-bucket");

gcsFileStorageBackend = new GCSFileStorageBackend(fileStorageConfig);
}

@Test
void testUploadFile() throws IOException {
UUID fileId = UUID.fromString("906c11cd-5e92-487b-a386-ac300e980861");
InputStream data = new ByteArrayInputStream("test data".getBytes());

MockedStatic<UUID> mocked = mockStatic(UUID.class);
mocked.when(UUID::randomUUID).thenReturn(fileId);
when(storage.createFrom(any(BlobInfo.class), any(InputStream.class))).thenReturn(null);

UUID result = gcsFileStorageBackend.uploadFile(data);

assertEquals(fileId,result);
verify(storage, times(1)).createFrom(any(BlobInfo.class), any(InputStream.class));
}

@Test
void testDownloadFile() throws IOException {
UUID fileId = UUID.fromString("906c11cd-5e92-487b-a386-ac300e980861");
byte[] fileContent = "test data".getBytes();

Blob blob = mock(Blob.class);
when(blob.getContent()).thenReturn(fileContent);
when(storage.get(any(BlobId.class))).thenReturn(blob);

InputStream result = gcsFileStorageBackend.downloadFile(fileId);

assertNotNull(result);
byte[] resultBytes = result.readAllBytes();
assertArrayEquals(fileContent, resultBytes);

verify(storage, times(1)).get(any(BlobId.class));
}

@Test
void testDeleteFile() {
UUID fileId = UUID.fromString("906c11cd-5e92-487b-a386-ac300e980861");

when(storage.delete(any(BlobId.class))).thenReturn(true);

gcsFileStorageBackend.deleteFile(fileId);

verify(storage, times(1)).delete(any(BlobId.class));
}

}

0 comments on commit b4be9b7

Please sign in to comment.