/* 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;
import static org.digidoc4j.SignatureProfile.B_BES;
import static org.digidoc4j.SignatureProfile.B_EPES;
import static org.digidoc4j.SignatureProfile.LT;
import static org.digidoc4j.SignatureProfile.LTA;
import static org.digidoc4j.SignatureProfile.LT_TM;
import static org.digidoc4j.testutils.TestDataBuilder.createContainerWithFile;
import static org.digidoc4j.testutils.TestDataBuilder.createEmptyBDocContainer;
import static org.digidoc4j.testutils.TestDataBuilder.open;
import static org.digidoc4j.testutils.TestDataBuilder.signContainer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.digidoc4j.Container;
import org.digidoc4j.Signature;
import org.digidoc4j.SignatureProfile;
import org.digidoc4j.exceptions.DigiDoc4JException;
import org.digidoc4j.exceptions.NotSupportedException;
import org.digidoc4j.impl.DigiDoc4JTestHelper;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
public class ExtendingBDocContainerTest extends DigiDoc4JTestHelper {
String testContainerPath;
@Rule
public TemporaryFolder testFolder = new TemporaryFolder();
@Before
public void setUp() throws Exception {
testContainerPath = testFolder.newFile("testExtendTo.bdoc").getPath();
}
@Test
public void extendFromB_BESToTS() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, B_BES);
container.saveAsFile(testContainerPath);
assertEquals(1, container.getSignatures().size());
assertNull(container.getSignatures().get(0).getOCSPCertificate());
container = open(testContainerPath);
container.extendSignatureProfile(LT);
container.saveAsFile(testFolder.newFile().getPath());
assertEquals(1, container.getSignatures().size());
Signature signature = container.getSignatures().get(0);
assertNotNull(signature.getOCSPCertificate());
assertEquals(LT, signature.getProfile());
assertTrue(container.validate().isValid());
}
@Test
public void extendFromEpesToLT_TM() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, B_EPES);
container.saveAsFile(testContainerPath);
assertEquals(1, container.getSignatures().size());
assertNull(container.getSignatures().get(0).getOCSPCertificate());
container = open(testContainerPath);
container.extendSignatureProfile(LT_TM);
container.saveAsFile(testFolder.newFile().getPath());
assertEquals(1, container.getSignatures().size());
Signature signature = container.getSignatures().get(0);
assertNotNull(signature.getOCSPCertificate());
assertEquals(LT_TM, signature.getProfile());
assertTrue(container.validate().isValid());
}
@Test
public void extendFromB_BESToLTA() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, B_BES);
container.saveAsFile(testContainerPath);
assertEquals(1, container.getSignatures().size());
assertNull(container.getSignatures().get(0).getOCSPCertificate());
container = open(testContainerPath);
container.extendSignatureProfile(SignatureProfile.LTA);
container.saveAsFile(testFolder.newFile().getPath());
assertEquals(1, container.getSignatures().size());
assertNotNull(container.getSignatures().get(0).getOCSPCertificate());
}
@Test (expected = NotSupportedException.class)
public void extendFromB_BESToLT_TMThrowsException() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, B_BES);
container.extendSignatureProfile(LT_TM);
}
@Test (expected = NotSupportedException.class)
public void extendFromEpesToLTThrowsException() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, B_EPES);
container.extendSignatureProfile(LT);
}
@Test (expected = NotSupportedException.class)
public void extendFromEpesToLTAThrowsException() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, B_EPES);
container.extendSignatureProfile(SignatureProfile.LTA);
}
@Test (expected = NotSupportedException.class)
public void extendFromLTToLT_TMThrowsException() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, LT);
container.extendSignatureProfile(LT_TM);
}
@Test (expected = NotSupportedException.class)
public void extendFromLTAToLT_TMThrowsException() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, LTA);
container.extendSignatureProfile(LT_TM);
}
@Test (expected = NotSupportedException.class)
public void extendFromLTToBESThrowsException() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, LT);
container.extendSignatureProfile(B_BES);
}
@Test (expected = NotSupportedException.class)
public void extendFromLTToEPESThrowsException() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, LT);
container.extendSignatureProfile(B_EPES);
}
@Test (expected = NotSupportedException.class)
public void extendFromLT_TMToLTThrowsException() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, LT_TM);
container.extendSignatureProfile(LT);
}
@Test(expected = DigiDoc4JException.class)
public void extendToWhenConfirmationAlreadyExists() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, B_BES);
container.saveAsFile(testContainerPath);
assertEquals(1, container.getSignatures().size());
assertNull(container.getSignatures().get(0).getOCSPCertificate());
container = open(testContainerPath);
container.extendSignatureProfile(LT);
container.extendSignatureProfile(LT);
}
@Test
public void extendToWithMultipleSignatures() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, B_BES);
signContainer(container, B_BES);
container.saveAsFile(testContainerPath);
assertEquals(2, container.getSignatures().size());
assertNull(container.getSignatures().get(0).getOCSPCertificate());
assertNull(container.getSignatures().get(1).getOCSPCertificate());
container = open(testContainerPath);
container.extendSignatureProfile(LT);
String containerPath = testFolder.newFile("testExtendToContainsIt.bdoc").getPath();
container.saveAsFile(containerPath);
container = open(containerPath);
assertEquals(2, container.getSignatures().size());
assertNotNull(container.getSignatures().get(0).getOCSPCertificate());
assertNotNull(container.getSignatures().get(1).getOCSPCertificate());
assertTrue(container.validate().isValid());
}
@Test
public void extendToWithMultipleSignaturesAndMultipleFiles() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
container.addDataFile("testFiles/test.xml", "text/xml");
signContainer(container, B_BES);
signContainer(container, B_BES);
container.saveAsFile(testContainerPath);
assertEquals(2, container.getSignatures().size());
assertEquals(2, container.getDataFiles().size());
assertNull(container.getSignatures().get(0).getOCSPCertificate());
assertNull(container.getSignatures().get(1).getOCSPCertificate());
container = open(testContainerPath);
container.extendSignatureProfile(LT);
container.saveAsFile(testFolder.newFile("testAddConfirmationContainsIt.bdoc").getPath());
assertEquals(2, container.getSignatures().size());
assertEquals(2, container.getDataFiles().size());
assertNotNull(container.getSignatures().get(0).getOCSPCertificate());
assertNotNull(container.getSignatures().get(1).getOCSPCertificate());
assertTrue(container.validate().isValid());
}
@Test
public void testContainerExtensionFromLTtoLTA() throws Exception {
Container container = createContainerWithFile("testFiles/test.txt", "text/plain");
signContainer(container, LT);
container.extendSignatureProfile(LTA);
assertNotNull(container.getSignatures().get(0).getOCSPCertificate());
assertTrue(container.validate().isValid());
}
@Test(expected = NotSupportedException.class)
public void extensionNotPossibleWhenSignatureLevelIsSame() throws Exception {
Container container = createEmptyBDocContainer();
container.addDataFile("testFiles/test.txt", "text/plain");
signContainer(container, LTA);
container.extendSignatureProfile(LTA);
}
}