/* DigiDoc4J library * * This software is released under either the GNU Library General Public * License (see LICENSE.LGPL). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2.1, February 1999 */ package org.digidoc4j.impl.bdoc.asic; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.FileInputStream; import java.util.List; import org.digidoc4j.Configuration; import org.digidoc4j.impl.DigiDoc4JTestHelper; import org.junit.Test; public class AsicContainerParserTest extends DigiDoc4JTestHelper { @Test public void findingNextSignatureFileIndex_onEmptyContainer_shouldReturn_null() throws Exception { AsicParseResult result = parseContainer("testFiles/asics_without_signatures.bdoc"); assertEquals(null, result.getCurrentUsedSignatureFileIndex()); } @Test public void findingNextSignatureFileIndex_onContainerWithOneSignature_withoutIndex_shouldReturn_null() throws Exception { AsicParseResult result = parseContainer("testFiles/asics_for_testing.bdoc"); assertEquals(null, result.getCurrentUsedSignatureFileIndex()); } @Test public void findingNextSignatureFileIndex_onContainerWithOneSignature_withIndex0_shouldReturn_0() throws Exception { AsicParseResult result = parseContainer("testFiles/asics_with_one_signature.bdoc"); assertEquals(Integer.valueOf(0), result.getCurrentUsedSignatureFileIndex()); } @Test public void findingNextSignatureFileIndex_onContainerWithTwoSignature_shouldReturn_1() throws Exception { AsicParseResult result = parseContainer("testFiles/asics_testing_two_signatures.bdoc"); assertEquals(Integer.valueOf(1), result.getCurrentUsedSignatureFileIndex()); } @Test public void parseBdocContainer() throws Exception { AsicParseResult result = parseContainer("testFiles/two_signatures.bdoc"); assertParseResultValid(result); } @Test public void parseBdocContainerStream() throws Exception { AsicContainerParser parser = new AsicStreamContainerParser(new FileInputStream("testFiles/two_signatures.bdoc"), Configuration.getInstance()); AsicParseResult result = parser.read(); assertParseResultValid(result); } @Test public void parseBDoc_containingSignaturesFile_withNonNumericCharacters() throws Exception { AsicParseResult result = parseContainer("testFiles/valid-containers/valid-bdoc-ts-signature-file-name-with-non-numeric-characters.asice"); assertIsAsiceContainer(result); assertEquals("META-INF/l77Tsignaturesn00B.xml", result.getSignatures().get(0).getName()); assertNull(result.getCurrentUsedSignatureFileIndex()); } private AsicParseResult parseContainer(String path) { AsicContainerParser parser = new AsicFileContainerParser(path, Configuration.getInstance()); AsicParseResult result = parser.read(); return result; } private void assertParseResultValid(AsicParseResult result) { assertEquals("test.txt", result.getDataFiles().get(0).getName()); assertEquals("META-INF/signatures0.xml", result.getSignatures().get(0).getName()); assertEquals("META-INF/signatures1.xml", result.getSignatures().get(1).getName()); assertEquals(Integer.valueOf(1), result.getCurrentUsedSignatureFileIndex()); assertIsAsiceContainer(result); } private void assertIsAsiceContainer(AsicParseResult result) { assertTrue(result.getManifestParser().containsManifestFile()); assertFirstAsicEntryIsMimeType(result); assertContainsManifest(result); } private void assertFirstAsicEntryIsMimeType(AsicParseResult result) { List<AsicEntry> asicEntries = result.getAsicEntries(); assertEquals("mimetype", asicEntries.get(0).getZipEntry().getName()); } private void assertContainsManifest(AsicParseResult result) { for(AsicEntry entry: result.getAsicEntries()) { if(entry.getZipEntry().getName().equals("META-INF/manifest.xml")) { return; } } assertTrue("Parse result does not contain manifest.xml", false); } }