Add 'sdk/java-v2/' from commit '55f103e336ca9fb8bf1720d2ef4ee8dd4e221118'
[arvados.git] / sdk / java-v2 / src / test / java / org / arvados / client / logic / collection / ManifestDecoderTest.java
diff --git a/sdk/java-v2/src/test/java/org/arvados/client/logic/collection/ManifestDecoderTest.java b/sdk/java-v2/src/test/java/org/arvados/client/logic/collection/ManifestDecoderTest.java
new file mode 100644 (file)
index 0000000..c9464e0
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) The Arvados Authors. All rights reserved.
+ *
+ * SPDX-License-Identifier: AGPL-3.0 OR Apache-2.0
+ *
+ */
+
+package org.arvados.client.logic.collection;
+
+import org.arvados.client.exception.ArvadosClientException;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.List;
+
+import static junit.framework.TestCase.fail;
+
+public class ManifestDecoderTest {
+
+    private ManifestDecoder manifestDecoder = new ManifestDecoder();
+
+    private static final String ONE_LINE_MANIFEST_TEXT = ". " +
+            "eff999f3b5158331eb44a9a93e3b36e1+67108864+Aad3839bea88bce22cbfe71cf4943de7dab3ea52a@5826180f " +
+            "db141bfd11f7da60dce9e5ee85a988b8+34038725+Ae8f48913fed782cbe463e0499ab37697ee06a2f8@5826180f " +
+            "0:101147589:rna.SRR948778.bam" +
+            "\\n";
+
+    private static final String MULTIPLE_LINES_MANIFEST_TEXT  = ". " +
+            "930625b054ce894ac40596c3f5a0d947+33 " +
+            "0:0:a 0:0:b 0:33:output.txt\n" +
+            "./c d41d8cd98f00b204e9800998ecf8427e+0 0:0:d";
+
+    private static final String MANIFEST_TEXT_WITH_INVALID_FIRST_PATH_COMPONENT = "a" + ONE_LINE_MANIFEST_TEXT;
+
+
+    @Test
+    public void allLocatorsAndFileTokensAreExtractedFromSimpleManifest() {
+
+        List<ManifestStream> actual = manifestDecoder.decode(ONE_LINE_MANIFEST_TEXT);
+
+        // one manifest stream
+        Assert.assertEquals(1, actual.size());
+
+        ManifestStream manifest = actual.get(0);
+        // two locators
+        Assert.assertEquals(2, manifest.getKeepLocators().size());
+        // one file token
+        Assert.assertEquals(1, manifest.getFileTokens().size());
+
+    }
+
+    @Test
+    public void allLocatorsAndFileTokensAreExtractedFromComplexManifest() {
+
+        List<ManifestStream> actual = manifestDecoder.decode(MULTIPLE_LINES_MANIFEST_TEXT);
+
+        // two manifest streams
+        Assert.assertEquals(2, actual.size());
+
+        // first stream - 1 locator and 3 file tokens
+        ManifestStream firstManifestStream = actual.get(0);
+        Assert.assertEquals(1, firstManifestStream.getKeepLocators().size());
+        Assert.assertEquals(3, firstManifestStream.getFileTokens().size());
+
+        // second stream - 1 locator and 1 file token
+        ManifestStream secondManifestStream = actual.get(1);
+        Assert.assertEquals(1, secondManifestStream.getKeepLocators().size());
+        Assert.assertEquals(1, secondManifestStream.getFileTokens().size());
+    }
+
+    @Test
+    public void manifestTextWithInvalidStreamNameThrowsException() {
+
+        try {
+            List<ManifestStream> actual = manifestDecoder.decode(MANIFEST_TEXT_WITH_INVALID_FIRST_PATH_COMPONENT);
+            fail();
+        } catch (ArvadosClientException e) {
+            Assert.assertEquals("Invalid first path component (expecting \".\")", e.getMessage());
+        }
+
+    }
+
+    @Test
+    public void emptyManifestTextThrowsException() {
+        String emptyManifestText = null;
+
+        try {
+            List<ManifestStream> actual = manifestDecoder.decode(emptyManifestText);
+            fail();
+        } catch (ArvadosClientException e) {
+            Assert.assertEquals("Manifest text cannot be empty.", e.getMessage());
+        }
+
+        emptyManifestText = "";
+        try {
+            List<ManifestStream> actual = manifestDecoder.decode(emptyManifestText);
+            fail();
+        } catch (ArvadosClientException e) {
+            Assert.assertEquals("Manifest text cannot be empty.", e.getMessage());
+        }
+
+    }
+
+
+
+
+
+}