/* 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; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.FileUtils; import org.digidoc4j.exceptions.DigiDoc4JException; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Paths; import static org.digidoc4j.utils.Helper.deleteFile; import static org.junit.Assert.*; import eu.europa.esig.dss.DSSDocument; import eu.europa.esig.dss.InMemoryDocument; public class DataFileTest { private static DataFile dataFile; @Before public void setUp() throws Exception { dataFile = new DataFile("testFiles/test.txt", "text/plain"); } @Test public void testGetFileSize() throws Exception { assertEquals(15, dataFile.getFileSize()); } @Test public void testGetFileSizeForInMemoryDocument() { DataFile mockDataFile = new MockDataFile(new byte[]{1, 2}, "fileName", "text/plain"); assertEquals(2, mockDataFile.getFileSize()); } @Test public void testGetMediaType() throws Exception { assertEquals("text/plain", dataFile.getMediaType()); } @Test public void testGetFileName() throws Exception { assertEquals("test.txt", dataFile.getName()); } @Test public void testCalculateDigest() throws Exception { assertEquals("RqDqtqi3rTsWj07rrWc5kATAZIw7T1XHP/NPLCF05RU=", Base64.encodeBase64String(dataFile.calculateDigest())); } @Test public void testCalculateDigestWithEnumTypeSHA256() throws Exception { assertEquals("RqDqtqi3rTsWj07rrWc5kATAZIw7T1XHP/NPLCF05RU=", Base64.encodeBase64String(dataFile.calculateDigest(DigestAlgorithm.SHA256))); } @Test public void testCalculateDigestWithEnumTypeSHA1() throws Exception { assertEquals("OQj17m9Rt2vPXYrry+v/KHpf98Q=", Base64.encodeBase64String(dataFile.calculateDigest(DigestAlgorithm.SHA1))); } @Test public void testSaveToFile() throws IOException { String fileName = "testSaveToFile.txt"; dataFile.saveAs(fileName); assertTrue(new File(fileName).exists()); byte[] testFileContent = FileUtils.readFileToByteArray(new File("testFiles/test.txt")); byte[] savedFileContent = FileUtils.readFileToByteArray(new File(fileName)); assertArrayEquals(testFileContent, savedFileContent); deleteFile(fileName); } @Test public void testSaveToOutputStream() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); dataFile.saveAs(out); out.flush(); assertEquals("see on testfail", out.toString()); out.close(); } @Test(expected = DigiDoc4JException.class) public void incorrectMimeType() { dataFile = new DataFile("testFiles/test.txt", "incorrect"); } @Test(expected = DigiDoc4JException.class) public void incorrectMimeTypeByteArrayConstructor() { dataFile = new DataFile(new byte[]{0x041}, "testFiles/test.txt", "incorrect"); } @Test(expected = DigiDoc4JException.class) public void testThrowsFileNotFoundExceptionIfFileDoesNotExists() throws Exception { new DataFile("NOT_EXISTS.TXT", "text/plain"); } @Test(expected = Exception.class) public void testThrowsExceptionOnUnknownError() throws Exception { new DataFile(null, "none/none"); } @Test public void testInMemoryDocumentRetrievesFileName() { DataFile dataFile = new DataFile(new byte[]{0x041}, "suura.txt", "text/plain"); assertEquals("suura.txt", dataFile.getName()); } @Test public void testGetBytes() throws Exception { DataFile dataFile = new DataFile(new byte[]{0x041}, "suura.txt", "text/plain"); assertArrayEquals(new byte[]{0x041}, dataFile.getBytes()); } @Test public void createDocumentFromStream() throws Exception { try(ByteArrayInputStream inputStream = new ByteArrayInputStream("tere tere tipajalga".getBytes())) { DataFile dataFile = new DataFile(inputStream, "test.txt", "text/plain"); dataFile.saveAs("createDocumentFromStream.txt"); DataFile dataFileToCompare = new DataFile("createDocumentFromStream.txt", "text/plain"); assertArrayEquals("tere tere tipajalga".getBytes(), dataFileToCompare.getBytes()); } Files.deleteIfExists(Paths.get("createDocumentFromStream.txt")); } @Test(expected = DigiDoc4JException.class) public void createDocumentFromInoutStreamThrowsException() throws IOException { try(ByteArrayInputStream inputStream = new ByteArrayInputStream("test".getBytes())) { new DataFile(inputStream, "test.txt", "unknown"); } } @Test public void calculateSizeForStreamedFile() throws Exception { try(ByteArrayInputStream inputStream = new ByteArrayInputStream("tere tere tipajalga".getBytes())) { DataFile dataFile = new DataFile(inputStream, "test.txt", "text/plain"); assertEquals(19, dataFile.getFileSize()); } } @Ignore("Data files are not written on disk") @Test(expected = DigiDoc4JException.class) public void askingDataFileSizeWhenTemporoaryFileIsDeleted() throws Exception { try(ByteArrayInputStream inputStream = new ByteArrayInputStream("tere tere tipajalga".getBytes())) { DataFile dataFile = new DataFile(inputStream, "test.txt", "text/plain"); Files.deleteIfExists(Paths.get(dataFile.getDocument().getAbsolutePath())); dataFile.getFileSize(); } } @Test public void testDigestIsCalculatedOnlyOnce() throws Exception { byte[] digest = dataFile.calculateDigest(); assertEquals(digest, dataFile.calculateDigest(new URL("http://NonExisting.test"))); } private class MockDataFile extends DataFile { public MockDataFile(byte[] data, String fileName, String mimeType) { super(data, fileName, mimeType); DSSDocument document = new InMemoryDocument(data, mimeType); setDocument(document); } } }