package jnpf.fileStorage;
|
|
import org.dromara.x.file.storage.core.FileStorageService;
|
import org.dromara.x.file.storage.core.platform.FileStorage;
|
import org.dromara.x.file.storage.core.platform.MinioFileStorage;
|
import org.junit.Test;
|
|
import java.util.Arrays;
|
import java.util.Collections;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
|
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertThrows;
|
import static org.junit.Assert.assertTrue;
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.Mockito.doThrow;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
public class SeaweedFsStorageRegistrarTest {
|
|
@Test
|
public void registersDedicatedAndCommonSeaweedFsPlatforms() {
|
SeaweedFsStorageProperties properties = new SeaweedFsStorageProperties();
|
properties.setDefaultPlatform("seaweedfs-common-1");
|
properties.setSeaweedfs(Arrays.asList(
|
enabledConfig("seaweedfs-1", "jnpf-dms"),
|
enabledConfig("seaweedfs-common-1", "jnpf-common")));
|
FileStorageService service = serviceWithEmptyStorageList();
|
SeaweedFsBucketVerifier verifier = mock(SeaweedFsBucketVerifier.class);
|
SeaweedFsStorageRegistrar registrar = new SeaweedFsStorageRegistrar(properties, service, verifier);
|
|
registrar.register();
|
|
assertEquals(2, service.getFileStorageList().size());
|
assertEquals("seaweedfs-1", service.getFileStorageList().get(0).getPlatform());
|
assertEquals("seaweedfs-common-1", service.getFileStorageList().get(1).getPlatform());
|
assertTrue(service.getFileStorageList().get(0) instanceof MinioFileStorage);
|
verify(verifier, times(2)).verify(any(MinioFileStorage.class));
|
registrar.unregister();
|
}
|
|
@Test
|
public void ignoresDisabledSeaweedFs() {
|
SeaweedFsStorageProperties properties = new SeaweedFsStorageProperties();
|
properties.setDefaultPlatform("local-plus-1");
|
SeaweedFsStorageProperties.SeaweedFsConfig config = enabledConfig("seaweedfs-1", "jnpf-dms");
|
config.setEnableStorage(false);
|
properties.setSeaweedfs(Collections.singletonList(config));
|
FileStorageService service = serviceWithPlatforms("local-plus-1");
|
SeaweedFsBucketVerifier verifier = mock(SeaweedFsBucketVerifier.class);
|
|
new SeaweedFsStorageRegistrar(properties, service, verifier).register();
|
|
assertEquals(1, service.getFileStorageList().size());
|
verify(verifier, never()).verify(any(MinioFileStorage.class));
|
}
|
|
@Test(expected = IllegalStateException.class)
|
public void rejectsMinioPlatformNameInSeaweedFsGroup() {
|
SeaweedFsStorageProperties properties = new SeaweedFsStorageProperties();
|
properties.setDefaultPlatform("local-plus-1");
|
properties.setSeaweedfs(Collections.singletonList(enabledConfig("minio-1", "bucket")));
|
|
new SeaweedFsStorageRegistrar(properties, serviceWithPlatforms("local-plus-1"),
|
mock(SeaweedFsBucketVerifier.class)).register();
|
}
|
|
@Test
|
public void rejectsDisabledDefaultPlatform() {
|
SeaweedFsStorageProperties properties = new SeaweedFsStorageProperties();
|
properties.setDefaultPlatform("seaweedfs-common-1");
|
SeaweedFsStorageProperties.SeaweedFsConfig config =
|
enabledConfig("seaweedfs-common-1", "jnpf-common");
|
config.setEnableStorage(false);
|
properties.setSeaweedfs(Collections.singletonList(config));
|
|
IllegalStateException exception = assertThrows(IllegalStateException.class,
|
() -> new SeaweedFsStorageRegistrar(properties, serviceWithEmptyStorageList(),
|
mock(SeaweedFsBucketVerifier.class)).register());
|
|
assertTrue(exception.getMessage().contains("seaweedfs-common-1"));
|
}
|
|
@Test
|
public void rejectsMissingRequiredFieldsBeforeConnecting() {
|
SeaweedFsStorageProperties.SeaweedFsConfig missingAccessKey =
|
enabledConfig("seaweedfs-common-1", "jnpf-common");
|
missingAccessKey.setAccessKey("");
|
SeaweedFsStorageProperties.SeaweedFsConfig missingSecretKey =
|
enabledConfig("seaweedfs-common-1", "jnpf-common");
|
missingSecretKey.setSecretKey("");
|
SeaweedFsStorageProperties.SeaweedFsConfig missingEndpoint =
|
enabledConfig("seaweedfs-common-1", "jnpf-common");
|
missingEndpoint.setEndPoint("");
|
SeaweedFsStorageProperties.SeaweedFsConfig missingBucket =
|
enabledConfig("seaweedfs-common-1", "jnpf-common");
|
missingBucket.setBucketName("");
|
|
for (SeaweedFsStorageProperties.SeaweedFsConfig config : Arrays.asList(
|
missingAccessKey, missingSecretKey, missingEndpoint, missingBucket)) {
|
SeaweedFsStorageProperties properties = new SeaweedFsStorageProperties();
|
properties.setDefaultPlatform("seaweedfs-common-1");
|
properties.setSeaweedfs(Collections.singletonList(config));
|
SeaweedFsBucketVerifier verifier = mock(SeaweedFsBucketVerifier.class);
|
|
assertThrows(IllegalStateException.class,
|
() -> new SeaweedFsStorageRegistrar(properties, serviceWithEmptyStorageList(),
|
verifier).register());
|
|
verify(verifier, never()).verify(any(MinioFileStorage.class));
|
}
|
}
|
|
@Test
|
public void rejectsDuplicatePlatformBeforeConnecting() {
|
SeaweedFsStorageProperties properties = new SeaweedFsStorageProperties();
|
properties.setDefaultPlatform("seaweedfs-common-1");
|
properties.setSeaweedfs(Arrays.asList(
|
enabledConfig("seaweedfs-common-1", "jnpf-common"),
|
enabledConfig("seaweedfs-common-1", "jnpf-other")));
|
SeaweedFsBucketVerifier verifier = mock(SeaweedFsBucketVerifier.class);
|
|
IllegalStateException exception = assertThrows(IllegalStateException.class,
|
() -> new SeaweedFsStorageRegistrar(properties, serviceWithEmptyStorageList(),
|
verifier).register());
|
|
assertTrue(exception.getMessage().contains("seaweedfs-common-1"));
|
verify(verifier, never()).verify(any(MinioFileStorage.class));
|
}
|
|
@Test
|
public void removesPartiallyRegisteredPlatformsWhenBucketCheckFails() {
|
SeaweedFsStorageProperties properties = new SeaweedFsStorageProperties();
|
properties.setDefaultPlatform("seaweedfs-common-1");
|
properties.setSeaweedfs(Collections.singletonList(
|
enabledConfig("seaweedfs-common-1", "jnpf-common")));
|
FileStorageService service = serviceWithEmptyStorageList();
|
SeaweedFsBucketVerifier verifier = mock(SeaweedFsBucketVerifier.class);
|
doThrow(new IllegalStateException("bucket unavailable"))
|
.when(verifier).verify(any(MinioFileStorage.class));
|
|
assertThrows(IllegalStateException.class,
|
() -> new SeaweedFsStorageRegistrar(properties, service, verifier).register());
|
|
assertTrue(service.getFileStorageList().isEmpty());
|
}
|
|
private FileStorageService serviceWithEmptyStorageList() {
|
FileStorageService service = new FileStorageService();
|
service.setFileStorageList(new CopyOnWriteArrayList<>());
|
return service;
|
}
|
|
private FileStorageService serviceWithPlatforms(String... platforms) {
|
FileStorageService service = serviceWithEmptyStorageList();
|
for (String platform : platforms) {
|
FileStorage storage = mock(FileStorage.class);
|
when(storage.getPlatform()).thenReturn(platform);
|
service.getFileStorageList().add(storage);
|
}
|
return service;
|
}
|
|
private SeaweedFsStorageProperties.SeaweedFsConfig enabledConfig(String platform, String bucket) {
|
SeaweedFsStorageProperties.SeaweedFsConfig config = new SeaweedFsStorageProperties.SeaweedFsConfig();
|
config.setEnableStorage(true);
|
config.setPlatform(platform);
|
config.setAccessKey("access");
|
config.setSecretKey("secret");
|
config.setEndPoint("http://127.0.0.1:8333/");
|
config.setBucketName(bucket);
|
config.setDomain("");
|
config.setBasePath("files/");
|
return config;
|
}
|
}
|