|
10 | 10 | import dev.zarr.zarrjava.ome.metadata.WellImage; |
11 | 11 | import dev.zarr.zarrjava.ome.metadata.WellMetadata; |
12 | 12 | import dev.zarr.zarrjava.ome.metadata.WellRef; |
| 13 | +import dev.zarr.zarrjava.store.S3Store; |
13 | 14 | import dev.zarr.zarrjava.store.StoreHandle; |
14 | 15 | import dev.zarr.zarrjava.v3.Array; |
15 | 16 | import dev.zarr.zarrjava.v3.DataType; |
16 | 17 | import org.junit.jupiter.api.Test; |
| 18 | +import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider; |
| 19 | +import software.amazon.awssdk.regions.Region; |
| 20 | +import software.amazon.awssdk.services.s3.S3Client; |
| 21 | +import software.amazon.awssdk.services.s3.S3Configuration; |
17 | 22 |
|
| 23 | +import java.net.URI; |
18 | 24 | import java.util.Arrays; |
19 | 25 | import java.util.Collections; |
| 26 | +import java.util.HashSet; |
20 | 27 | import java.util.List; |
| 28 | +import java.util.Set; |
21 | 29 |
|
22 | 30 | import static org.junit.jupiter.api.Assertions.*; |
23 | 31 |
|
24 | 32 | public class OmeZarrV05Test extends OmeZarrBaseTest { |
| 33 | + private static final String UK1_S3_ENDPOINT = "https://uk1s3.embassy.ebi.ac.uk"; |
| 34 | + |
| 35 | + private static StoreHandle publicIrdV05Store(String prefix, String key) { |
| 36 | + S3Client client = S3Client.builder() |
| 37 | + .endpointOverride(URI.create(UK1_S3_ENDPOINT)) |
| 38 | + .region(Region.US_EAST_1) |
| 39 | + .serviceConfiguration(S3Configuration.builder().pathStyleAccessEnabled(true).build()) |
| 40 | + .credentialsProvider(AnonymousCredentialsProvider.create()) |
| 41 | + .build(); |
| 42 | + return new S3Store(client, "idr", prefix).resolve(key); |
| 43 | + } |
25 | 44 |
|
26 | 45 | @Override |
27 | 46 | StoreHandle imageStoreHandle() throws Exception { |
@@ -220,4 +239,39 @@ void writeHcsFullIntegration() throws Exception { |
220 | 239 | assertInstanceOf(dev.zarr.zarrjava.ome.v0_5.MultiscaleImage.class, image); |
221 | 240 | assertEquals(Arrays.asList("z", "y"), image.getAxisNames()); |
222 | 241 | } |
| 242 | + |
| 243 | + @Test |
| 244 | + void openS3Idr0083V05() throws Exception { |
| 245 | + StoreHandle handle = publicIrdV05Store("zarr/v0.5/idr0083", "9822152.zarr"); |
| 246 | + MultiscaleImage image = MultiscaleImage.open(handle); |
| 247 | + assertInstanceOf(dev.zarr.zarrjava.ome.v0_5.MultiscaleImage.class, image); |
| 248 | + assertEquals(11, image.getScaleLevelCount()); |
| 249 | + |
| 250 | + MultiscalesMetadataImage<?> typed = (MultiscalesMetadataImage<?>) image; |
| 251 | + MultiscalesEntry entry = (MultiscalesEntry) typed.getMultiscalesEntry(0); |
| 252 | + assertNotNull(entry); |
| 253 | + assertNull(entry.version); // v0.5 keeps version at ome.version, not per multiscales entry |
| 254 | + assertEquals(Arrays.asList("t", "c", "z", "y", "x"), image.getAxisNames()); |
| 255 | + assertEquals(11, entry.datasets.size()); |
| 256 | + for (int i = 0; i < entry.datasets.size(); i++) { |
| 257 | + dev.zarr.zarrjava.ome.metadata.Dataset ds = entry.datasets.get(i); |
| 258 | + assertEquals(Integer.toString(i), ds.path); |
| 259 | + assertEquals("scale", ds.coordinateTransformations.get(0).type); |
| 260 | + assertEquals(5, ds.coordinateTransformations.get(0).scale.size()); |
| 261 | + } |
| 262 | + |
| 263 | + dev.zarr.zarrjava.core.Array level0 = image.openScaleLevel(0); |
| 264 | + long[] shape = level0.metadata().shape; |
| 265 | + assertEquals(5, shape.length); |
| 266 | + // IDR sample catalog (idr0083/9822152): X=144384, Y=93184, Z=1, C=1, T=1. |
| 267 | + assertArrayEquals(new long[]{1, 1, 1, 93184, 144384}, shape); |
| 268 | + long[] offset = new long[shape.length]; |
| 269 | + long[] readShape = new long[shape.length]; |
| 270 | + Arrays.fill(readShape, 1L); |
| 271 | + assertEquals(1L, level0.read(offset, readShape).getSize()); |
| 272 | + long[] shape1 = image.openScaleLevel(1).metadata().shape; |
| 273 | + for (int i = 0; i < shape.length; i++) { |
| 274 | + assertTrue(shape1[i] <= shape[i], "expected downsampled-or-equal shape at dim " + i); |
| 275 | + } |
| 276 | + } |
223 | 277 | } |
0 commit comments