X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/89c5953f15ff025971e465c86eb6d129ff0a63f9..16f704326f44fd1e5e5e60b936c9b5895d6a6ff8:/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 index 0000000000..c9464e03b6 --- /dev/null +++ b/sdk/java-v2/src/test/java/org/arvados/client/logic/collection/ManifestDecoderTest.java @@ -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 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 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 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 actual = manifestDecoder.decode(emptyManifestText); + fail(); + } catch (ArvadosClientException e) { + Assert.assertEquals("Manifest text cannot be empty.", e.getMessage()); + } + + emptyManifestText = ""; + try { + List actual = manifestDecoder.decode(emptyManifestText); + fail(); + } catch (ArvadosClientException e) { + Assert.assertEquals("Manifest text cannot be empty.", e.getMessage()); + } + + } + + + + + +}