Skip to content

Commit 71749b4

Browse files
committed
add test to read ome sample data from s3
1 parent 585690f commit 71749b4

2 files changed

Lines changed: 107 additions & 0 deletions

File tree

src/test/java/dev/zarr/zarrjava/ome/OmeZarrV04Test.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,35 @@
77
import dev.zarr.zarrjava.ome.metadata.PlateMetadata;
88
import dev.zarr.zarrjava.ome.metadata.NamedEntry;
99
import dev.zarr.zarrjava.ome.metadata.WellRef;
10+
import dev.zarr.zarrjava.store.S3Store;
1011
import dev.zarr.zarrjava.store.StoreHandle;
1112
import org.junit.jupiter.api.Test;
13+
import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider;
14+
import software.amazon.awssdk.regions.Region;
15+
import software.amazon.awssdk.services.s3.S3Client;
16+
import software.amazon.awssdk.services.s3.S3Configuration;
1217

18+
import java.net.URI;
1319
import java.util.Arrays;
1420
import java.util.Collections;
21+
import java.util.HashSet;
1522
import java.util.List;
23+
import java.util.Set;
1624

1725
import static org.junit.jupiter.api.Assertions.*;
1826

1927
public class OmeZarrV04Test extends OmeZarrBaseTest {
28+
private static final String UK1_S3_ENDPOINT = "https://uk1s3.embassy.ebi.ac.uk";
29+
30+
private static StoreHandle publicIrdV04Store(String key) {
31+
S3Client client = S3Client.builder()
32+
.endpointOverride(URI.create(UK1_S3_ENDPOINT))
33+
.region(Region.US_EAST_1)
34+
.serviceConfiguration(S3Configuration.builder().pathStyleAccessEnabled(true).build())
35+
.credentialsProvider(AnonymousCredentialsProvider.create())
36+
.build();
37+
return new S3Store(client, "idr", "zarr/v0.4/idr0048A").resolve(key);
38+
}
2039

2140
@Override
2241
StoreHandle imageStoreHandle() throws Exception {
@@ -179,4 +198,38 @@ void writePlateRoundTrip() throws Exception {
179198
assertEquals(2, reopened.getPlateMetadata().columns.size());
180199
assertEquals("A/1", reopened.getPlateMetadata().wells.get(0).path);
181200
}
201+
202+
@Test
203+
void openS3Idr0048AV04() throws Exception {
204+
StoreHandle handle = publicIrdV04Store("9846152.zarr");
205+
MultiscaleImage image = MultiscaleImage.open(handle);
206+
assertInstanceOf(dev.zarr.zarrjava.ome.v0_4.MultiscaleImage.class, image);
207+
assertEquals(9, image.getScaleLevelCount());
208+
209+
MultiscalesMetadataImage<?> typed = (MultiscalesMetadataImage<?>) image;
210+
MultiscalesEntry entry = (MultiscalesEntry) typed.getMultiscalesEntry(0);
211+
assertEquals("0.4", entry.version);
212+
assertEquals(Arrays.asList("c", "z", "y", "x"), image.getAxisNames());
213+
assertEquals(9, entry.datasets.size());
214+
for (int i = 0; i < entry.datasets.size(); i++) {
215+
dev.zarr.zarrjava.ome.metadata.Dataset ds = entry.datasets.get(i);
216+
assertEquals(Integer.toString(i), ds.path);
217+
assertEquals("scale", ds.coordinateTransformations.get(0).type);
218+
assertEquals(4, ds.coordinateTransformations.get(0).scale.size());
219+
}
220+
221+
dev.zarr.zarrjava.core.Array level0 = image.openScaleLevel(0);
222+
long[] shape = level0.metadata().shape;
223+
assertEquals(4, shape.length);
224+
// IDR sample catalog (idr0048A/9846152): X=19120, Y=13350, Z=91, C=3.
225+
assertArrayEquals(new long[]{3, 91, 13350, 19120}, shape);
226+
long[] offset = new long[shape.length];
227+
long[] readShape = new long[shape.length];
228+
Arrays.fill(readShape, 1L);
229+
assertEquals(1L, level0.read(offset, readShape).getSize());
230+
long[] shape1 = image.openScaleLevel(1).metadata().shape;
231+
for (int i = 0; i < shape.length; i++) {
232+
assertTrue(shape1[i] <= shape[i], "expected downsampled-or-equal shape at dim " + i);
233+
}
234+
}
182235
}

src/test/java/dev/zarr/zarrjava/ome/OmeZarrV05Test.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,37 @@
1010
import dev.zarr.zarrjava.ome.metadata.WellImage;
1111
import dev.zarr.zarrjava.ome.metadata.WellMetadata;
1212
import dev.zarr.zarrjava.ome.metadata.WellRef;
13+
import dev.zarr.zarrjava.store.S3Store;
1314
import dev.zarr.zarrjava.store.StoreHandle;
1415
import dev.zarr.zarrjava.v3.Array;
1516
import dev.zarr.zarrjava.v3.DataType;
1617
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;
1722

23+
import java.net.URI;
1824
import java.util.Arrays;
1925
import java.util.Collections;
26+
import java.util.HashSet;
2027
import java.util.List;
28+
import java.util.Set;
2129

2230
import static org.junit.jupiter.api.Assertions.*;
2331

2432
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+
}
2544

2645
@Override
2746
StoreHandle imageStoreHandle() throws Exception {
@@ -220,4 +239,39 @@ void writeHcsFullIntegration() throws Exception {
220239
assertInstanceOf(dev.zarr.zarrjava.ome.v0_5.MultiscaleImage.class, image);
221240
assertEquals(Arrays.asList("z", "y"), image.getAxisNames());
222241
}
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+
}
223277
}

0 commit comments

Comments
 (0)