package org.hive2hive.client.util.buffer; import java.io.File; import java.io.IOException; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; import org.apache.commons.io.FileUtils; import org.junit.Assert; import org.junit.Test; /** * Test the buffer * * @author Nico * */ public class BaseFileBufferTest { @Test public void testBufferFinishesSomewhen() throws IOException, InterruptedException { final AtomicInteger counter = new AtomicInteger(0); BaseFileBuffer buffer = new BaseFileBuffer(null) { @Override protected void processBuffer(IFileBufferHolder buffer) { counter.set(buffer.getFileBuffer().size()); } }; File directory = new File(FileUtils.getTempDirectory(), UUID.randomUUID().toString()); buffer.addFileToBuffer(directory); buffer.addFileToBuffer(createFileRandomContent(directory)); // sleep for some time Thread.sleep((long) (IFileBuffer.BUFFER_WAIT_TIME_MS * 1.5)); // added two files, buffer should contain two files too Assert.assertEquals(2, counter.get()); } @Test public void testBufferRunsInBatches() throws IOException, InterruptedException { final AtomicInteger counter = new AtomicInteger(0); BaseFileBuffer buffer = new BaseFileBuffer(null) { @Override protected void processBuffer(IFileBufferHolder buffer) { counter.addAndGet(buffer.getFileBuffer().size()); } }; File directory = new File(FileUtils.getTempDirectory(), UUID.randomUUID().toString()); buffer.addFileToBuffer(directory); buffer.addFileToBuffer(createFileRandomContent(directory)); // sleep for some time Thread.sleep((long) (IFileBuffer.BUFFER_WAIT_TIME_MS * 1.4)); // add another file buffer.addFileToBuffer(createFileRandomContent(directory)); // although it's same buffer, should still be 2 Assert.assertEquals(2, counter.get()); // reset to 0 counter.set(0); // wait for the next batch Thread.sleep((long) (IFileBuffer.BUFFER_WAIT_TIME_MS * 1.4)); Assert.assertEquals(1, counter.get()); } public static File createFileRandomContent(File parent) throws IOException { // create file of size of multiple numbers of chunks File file = new File(parent, UUID.randomUUID().toString()); FileUtils.write(file, UUID.randomUUID().toString(), true); return file; } }