/** * Test method for * {@link org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager#writeBytes(byte[], int, int)} */ @Test public void testWrite_multiplesOfBufferSize() throws IOException { final File file = File.createTempFile("log4j2", "test"); file.deleteOnExit(); try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) { final OutputStream os = NullOutputStream.getInstance(); final boolean append = false; final boolean flushNow = false; final long triggerSize = Long.MAX_VALUE; final long time = System.currentTimeMillis(); final TriggeringPolicy triggerPolicy = new SizeBasedTriggeringPolicy(triggerSize); final RolloverStrategy rolloverStrategy = null; final RollingRandomAccessFileManager manager = new RollingRandomAccessFileManager(null, raf, file.getName(), Strings.EMPTY, os, append, flushNow, RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE, triggerSize, time, triggerPolicy, rolloverStrategy, null, null, null, null, null, true); final int size = RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3; final byte[] data = new byte[size]; manager.write(data, 0, data.length, flushNow); // no buffer overflow exception // buffer is full but not flushed yet assertEquals(RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3, raf.length()); } }
/** * Test method for * {@link org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager#writeBytes(byte[], int, int)} . */ @Test public void testWrite_dataExceedingBufferSize() throws IOException { final File file = File.createTempFile("log4j2", "test"); file.deleteOnExit(); try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) { final OutputStream os = NullOutputStream.getInstance(); final boolean append = false; final boolean flushNow = false; final long triggerSize = 0; final long time = System.currentTimeMillis(); final TriggeringPolicy triggerPolicy = new SizeBasedTriggeringPolicy(triggerSize); final RolloverStrategy rolloverStrategy = null; final RollingRandomAccessFileManager manager = new RollingRandomAccessFileManager(null, raf, file.getName(), Strings.EMPTY, os, append, flushNow, RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE, triggerSize, time, triggerPolicy, rolloverStrategy, null, null, null, null, null, true); final int size = RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3 + 1; final byte[] data = new byte[size]; manager.write(data, 0, data.length, flushNow); // no exception assertEquals(RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3 + 1, raf.length()); manager.flush(); assertEquals(size, raf.length()); // all data written to file now } }
@Test public void testAppendDoesNotOverwriteExistingFile() throws IOException { final boolean isAppend = true; final File file = File.createTempFile("log4j2", "test"); file.deleteOnExit(); assertThat(file, isEmpty()); final byte[] bytes = new byte[4 * 1024]; // create existing file FileOutputStream fos = null; try { fos = new FileOutputStream(file); fos.write(bytes, 0, bytes.length); fos.flush(); } finally { Closer.closeSilently(fos); } assertThat("all flushed to disk", file, hasLength(bytes.length)); final boolean immediateFlush = true; final RollingRandomAccessFileManager manager = RollingRandomAccessFileManager.getRollingRandomAccessFileManager( // file.getAbsolutePath(), Strings.EMPTY, isAppend, immediateFlush, RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE, new SizeBasedTriggeringPolicy(Long.MAX_VALUE), // null, null, null, null, null, null, null); manager.write(bytes, 0, bytes.length, immediateFlush); final int expected = bytes.length * 2; assertThat("appended, not overwritten", file, hasLength(expected)); }