package com.constellio.data.utils; import static org.assertj.core.api.Assertions.assertThat; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import com.constellio.data.io.services.facades.IOServices; import com.constellio.sdk.tests.ConstellioTest; public class BigFileWriterAcceptTest extends ConstellioTest { IOServices ioServices; String file1 = "file1.doc"; String file2 = "file2.ppt"; String file3 = "file3.xlsx"; String file4 = "file4.doc"; @Before public void setUp() throws Exception { ioServices = getIOLayerFactory().newIOServices(); } @Test public void whenWritingBigFileThenCanReadItAndObtainSameContentAndTitles() throws Exception { File bigFile = new File(newTempFolder(), "zeBigFile.big"); OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(bigFile)); try { BigFileWriter w = new BigFileWriter(outputStream); w.write(file3()); w.write(file1()); w.write(file2()); w.write(file4()); w.write(file1()); w.write(file2()); } finally { outputStream.close(); } InputStream inputStream = newFileInputStream(bigFile); BigFileIterator iterator = new BigFileIterator(inputStream); byte[] bytes = FileUtils.readFileToByteArray(bigFile); System.out.println(bytes); BigFileEntry entry1 = iterator.next(); assertThat(entry1.fileName).isEqualTo("BigFileWriterAcceptTest-" + file3); assertThat(entry1.bytes).isEqualTo(file3Bytes()); BigFileEntry entry2 = iterator.next(); assertThat(entry2.fileName).isEqualTo("BigFileWriterAcceptTest-" + file1); assertThat(entry2.bytes).isEqualTo(file1Bytes()); BigFileEntry entry3 = iterator.next(); assertThat(entry3.fileName).isEqualTo("BigFileWriterAcceptTest-" + file2); assertThat(entry3.bytes).isEqualTo(file2Bytes()); BigFileEntry entry4 = iterator.next(); assertThat(entry4.fileName).isEqualTo("BigFileWriterAcceptTest-" + file4); assertThat(entry4.bytes).isEqualTo(file4Bytes()); BigFileEntry entry5 = iterator.next(); assertThat(entry5.fileName).isEqualTo("BigFileWriterAcceptTest-" + file1); assertThat(entry5.bytes).isEqualTo(file1Bytes()); BigFileEntry entry6 = iterator.next(); assertThat(entry6.fileName).isEqualTo("BigFileWriterAcceptTest-" + file2); assertThat(entry6.bytes).isEqualTo(file2Bytes()); assertThat(iterator.hasNext()).isFalse(); } @Test public void whenWritingMultipleBigFilesInAFolderThenCanReadThemAndObtainSameContentAndTitles() throws Exception { File zeFolder = newTempFolder(); File bigFile1 = new File(zeFolder, "bigFile1.bigf"); File bigFile2 = new File(zeFolder, "bigFile2.bigf"); File bigFile3 = new File(zeFolder, "bigFile3.bigf"); File textFile = new File(zeFolder, "file.txt"); FileUtils.touch(textFile); OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(bigFile1)); try { BigFileWriter w = new BigFileWriter(outputStream); w.write(file3()); w.write(file1()); w.write(file2()); w.write(file4()); w.write(file1()); w.write(file2()); } finally { outputStream.close(); } outputStream = new BufferedOutputStream(new FileOutputStream(bigFile2)); try { BigFileWriter w = new BigFileWriter(outputStream); } finally { outputStream.close(); } outputStream = new BufferedOutputStream(new FileOutputStream(bigFile3)); try { BigFileWriter w = new BigFileWriter(outputStream); w.write(file3()); } finally { outputStream.close(); } BigFileFolderIterator iterator = new BigFileFolderIterator(zeFolder, ioServices, "zeIterator"); BigFileEntry entry1 = iterator.next(); assertThat(entry1.fileName).isEqualTo("BigFileWriterAcceptTest-" + file3); assertThat(entry1.bytes).isEqualTo(file3Bytes()); BigFileEntry entry2 = iterator.next(); assertThat(entry2.fileName).isEqualTo("BigFileWriterAcceptTest-" + file1); assertThat(entry2.bytes).isEqualTo(file1Bytes()); BigFileEntry entry3 = iterator.next(); assertThat(entry3.fileName).isEqualTo("BigFileWriterAcceptTest-" + file2); assertThat(entry3.bytes).isEqualTo(file2Bytes()); BigFileEntry entry4 = iterator.next(); assertThat(entry4.fileName).isEqualTo("BigFileWriterAcceptTest-" + file4); assertThat(entry4.bytes).isEqualTo(file4Bytes()); BigFileEntry entry5 = iterator.next(); assertThat(entry5.fileName).isEqualTo("BigFileWriterAcceptTest-" + file1); assertThat(entry5.bytes).isEqualTo(file1Bytes()); BigFileEntry entry6 = iterator.next(); assertThat(entry6.fileName).isEqualTo("BigFileWriterAcceptTest-" + file2); assertThat(entry6.bytes).isEqualTo(file2Bytes()); BigFileEntry entry7 = iterator.next(); assertThat(entry7.fileName).isEqualTo("BigFileWriterAcceptTest-" + file3); assertThat(entry7.bytes).isEqualTo(file3Bytes()); assertThat(iterator.hasNext()).isFalse(); iterator.close(); } private File file1() { return getTestResourceFile(file1); } private File file2() { return getTestResourceFile(file2); } private File file3() { return getTestResourceFile(file3); } private File file4() { return getTestResourceFile(file4); } private byte[] file1Bytes() throws IOException { return FileUtils.readFileToByteArray(file1()); } private byte[] file2Bytes() throws IOException { return FileUtils.readFileToByteArray(file2()); } private byte[] file3Bytes() throws IOException { return FileUtils.readFileToByteArray(file3()); } private byte[] file4Bytes() throws IOException { return FileUtils.readFileToByteArray(file4()); } }