Commit f650fd6
committed
add ZipStore tests
diff --git c/src/main/java/dev/zarr/zarrjava/store/ZipStore.java i/src/main/java/dev/zarr/zarrjava/store/ZipStore.java
new file mode 100644
index 0000000..054917f
--- /dev/null
+++ i/src/main/java/dev/zarr/zarrjava/store/ZipStore.java
@@ -0,0 +1,72 @@
+package dev.zarr.zarrjava.store;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.nio.ByteBuffer;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.stream.Stream;
+
+public class ZipStore implements Store, Store.ListableStore {
+ @nonnull
+ private final Path path;
+
+ public ZipStore(@nonnull Path path) {
+ this.path = path;
+ }
+
+ public ZipStore(@nonnull String path) {
+ this.path = Paths.get(path);
+ }
+
+
+ @OverRide
+ public Stream<String> list(String[] keys) {
+ return Stream.empty();
+ }
+
+ @OverRide
+ public boolean exists(String[] keys) {
+ return false;
+ }
+
+ @nullable
+ @OverRide
+ public ByteBuffer get(String[] keys) {
+ return null;
+ }
+
+ @nullable
+ @OverRide
+ public ByteBuffer get(String[] keys, long start) {
+ return null;
+ }
+
+ @nullable
+ @OverRide
+ public ByteBuffer get(String[] keys, long start, long end) {
+ return null;
+ }
+
+ @OverRide
+ public void set(String[] keys, ByteBuffer bytes) {
+
+ }
+
+ @OverRide
+ public void delete(String[] keys) {
+
+ }
+
+ @nonnull
+ @OverRide
+ public StoreHandle resolve(String... keys) {
+ return new StoreHandle(this, keys);
+ }
+
+ @OverRide
+ public String toString() {
+ return this.path.toUri().toString().replaceAll("\\/$", "");
+ }
+
+}
diff --git c/src/test/java/dev/zarr/zarrjava/Utils.java i/src/test/java/dev/zarr/zarrjava/Utils.java
new file mode 100644
index 0000000..0026200
--- /dev/null
+++ i/src/test/java/dev/zarr/zarrjava/Utils.java
@@ -0,0 +1,40 @@
+package dev.zarr.zarrjava;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+public class Utils {
+
+ static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {
+ if (fileToZip.isHidden()) {
+ return;
+ }
+ if (fileToZip.isDirectory()) {
+ if (fileName.endsWith("/")) {
+ zipOut.putNextEntry(new ZipEntry(fileName));
+ zipOut.closeEntry();
+ } else {
+ zipOut.putNextEntry(new ZipEntry(fileName + "/"));
+ zipOut.closeEntry();
+ }
+ File[] children = fileToZip.listFiles();
+ for (File childFile : children) {
+ zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);
+ }
+ return;
+ }
+ FileInputStream fis = new FileInputStream(fileToZip);
+ ZipEntry zipEntry = new ZipEntry(fileName);
+ zipOut.putNextEntry(zipEntry);
+ byte[] bytes = new byte[1024];
+ int length;
+ while ((length = fis.read(bytes)) >= 0) {
+ zipOut.write(bytes, 0, length);
+ }
+ fis.close();
+ }
+
+}
diff --git c/src/test/java/dev/zarr/zarrjava/ZarrStoreTest.java i/src/test/java/dev/zarr/zarrjava/ZarrStoreTest.java
index 4a369c9..c7d2ab4 100644
--- c/src/test/java/dev/zarr/zarrjava/ZarrStoreTest.java
+++ i/src/test/java/dev/zarr/zarrjava/ZarrStoreTest.java
@@ -7,16 +7,22 @@ import dev.zarr.zarrjava.v3.*;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.CsvSource;
import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.stream.Stream;
+import java.nio.file.Path;
+import java.util.zip.ZipOutputStream;
+import static dev.zarr.zarrjava.Utils.zipFile;
import static dev.zarr.zarrjava.v3.Node.makeObjectMapper;
public class ZarrStoreTest extends ZarrTest {
@@ -132,4 +138,72 @@ public class ZarrStoreTest extends ZarrTest {
Assertions.assertEquals("test group", attrs.getString("description"));
}
+
+ @test
+ public void testZipStore() throws ZarrException, IOException {
+ Path sourceDir = TESTOUTPUT.resolve("testZipStore");
+ Path targetDir = TESTOUTPUT.resolve("testZipStore.zip");
+ FilesystemStore fsStore = new FilesystemStore(sourceDir);
+ writeTestGroupV3(fsStore, true);
+
+ FileOutputStream fos = new FileOutputStream(targetDir.toFile());
+ ZipOutputStream zipOut = new ZipOutputStream(fos);
+
+ File fileToZip = new File(sourceDir.toUri());
+ zipFile(fileToZip, fileToZip.getName(), zipOut);
+ zipOut.close();
+ fos.close();
+
+ ZipStore zipStore = new ZipStore(targetDir);
+ assertIsTestGroupV3(Group.open(zipStore.resolve()), true);
+ }
+
+ static Stream<Store> localStores() {
+ return Stream.of(
+// new ConcurrentMemoryStore(),
+ new FilesystemStore(TESTOUTPUT.resolve("testLocalStoresFS")),
+ new ZipStore(TESTOUTPUT.resolve("testLocalStoresZIP.zip"))
+ );
+ }
+
+ @ParameterizedTest
+ @MethodSource("localStores")
+ public void testLocalStores(Store store) throws IOException, ZarrException {
+ boolean useParallel = true;
+ Group group = writeTestGroupV3(store, useParallel);
+ assertIsTestGroupV3(group, useParallel);
+ }
+
+ int[] testData(){
+ int[] testData = new int[1024 * 1024];
+ Arrays.setAll(testData, p -> p);
+ return testData;
+ }
+
+ Group writeTestGroupV3(Store store, boolean useParallel) throws ZarrException, IOException {
+ StoreHandle storeHandle = store.resolve();
+
+ Group group = Group.create(storeHandle);
+ Array array = group.createArray("array", b -> b
+ .withShape(1024, 1024)
+ .withDataType(DataType.UINT32)
+ .withChunkShape(5, 5)
+ );
+ array.write(ucar.ma2.Array.factory(ucar.ma2.DataType.UINT, new int[]{1024, 1024}, testData()), useParallel);
+ group.createGroup("subgroup");
+ group.setAttributes(new Attributes(b -> b.set("some", "value")));
+ return group;
+ }
+
+ void assertIsTestGroupV3(Group group, boolean useParallel) throws ZarrException {
+ Stream<dev.zarr.zarrjava.core.Node> nodes = group.list();
+ Assertions.assertEquals(2, nodes.count());
+ Array array = (Array) group.get("array");
+ Assertions.assertNotNull(array);
+ ucar.ma2.Array result = array.read(useParallel);
+ Assertions.assertArrayEquals(testData(), (int[]) result.get1DJavaArray(ucar.ma2.DataType.UINT));
+ Attributes attrs = group.metadata().attributes;
+ Assertions.assertNotNull(attrs);
+ Assertions.assertEquals("value", attrs.getString("some"));
+ }
}1 parent a6512de commit f650fd6
File tree
3 files changed
+186
-0
lines changed- src
- main/java/dev/zarr/zarrjava/store
- test/java/dev/zarr/zarrjava
3 files changed
+186
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
14 | 15 | | |
| 16 | + | |
| 17 | + | |
15 | 18 | | |
16 | 19 | | |
17 | 20 | | |
18 | 21 | | |
| 22 | + | |
| 23 | + | |
19 | 24 | | |
| 25 | + | |
20 | 26 | | |
21 | 27 | | |
22 | 28 | | |
| |||
132 | 138 | | |
133 | 139 | | |
134 | 140 | | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
135 | 209 | | |
0 commit comments