je/test/com/sleepycat/utilint/StatLoggerTest.java
2021-06-06 13:46:45 -04:00

236 lines
6.9 KiB
Java
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*-
* Copyright (C) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
package com.sleepycat.utilint;
import static org.junit.Assert.assertEquals;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileReader;
import java.io.IOException;
import org.junit.Test;
import com.sleepycat.util.test.SharedTestUtils;
import com.sleepycat.util.test.TestBase;
public class StatLoggerTest extends TestBase {
String filename = "testStatFile";
@Test
public void testBasic() throws IOException{
StringBuffer rowbuf = new StringBuffer();
String fileext = "csv";
int columnCount = 4;
String columnDelimiter = ",";
int rowsInFile = 4;
int numFiles = 3;
FileFilter ff = new FindFile(filename);
String header;
File envHome = SharedTestUtils.getTestDir();
File[] files = envHome.listFiles(ff);
for (File f : files) {
f.delete();
}
StatLogger sl = new StatLogger(
envHome, filename, fileext, numFiles, rowsInFile);
rowbuf.setLength(0);
for (int i = 0; i < columnCount; i++) {
if (i > 0) {
rowbuf.append(columnDelimiter);
}
rowbuf.append("Column Header" + i);
}
header = rowbuf.toString();
sl.setHeader(header);
rowbuf.setLength(0);
for (int i = 0; i < columnCount; i++) {
if (i > 0) {
rowbuf.append(columnDelimiter);
}
rowbuf.append(i);
}
for (int i = 0; i < rowsInFile - 1; i++) {
sl.log(rowbuf.toString());
}
files = envHome.listFiles(ff);
assertEquals(files.length, 1);
for (int j = 0; j < numFiles - 1; j++) {
for (int i = 0; i < rowsInFile - 1; i++) {
sl.log(rowbuf.toString());
}
}
files = envHome.listFiles(ff);
assertEquals(files.length, numFiles);
/* add more rows but file number should be max */
for (int j = 0; j < numFiles; j++) {
for (int i = 0; i < rowsInFile; i++) {
sl.log(rowbuf.toString());
}
}
sl.log(rowbuf.toString());
files = envHome.listFiles(ff);
assertEquals(files.length, numFiles);
/* Recreate logger like a reboot with existing
* stat file. Make sure file count is correct.
*/
files = envHome.listFiles(ff);
for (File f : files) {
f.delete();
}
sl = new StatLogger(
envHome, filename, fileext, numFiles, rowsInFile);
sl.setHeader(header);
for (int i = 0; i < rowsInFile - 1; i++) {
sl.log(rowbuf.toString());
}
files = envHome.listFiles(ff);
assertEquals(files.length, 1);
sl = new StatLogger(
envHome, filename, fileext, numFiles, rowsInFile);
sl.setHeader(header);
files = envHome.listFiles(ff);
assertEquals(files.length, 1);
sl.log(rowbuf.toString());
files = envHome.listFiles(ff);
assertEquals(files.length, 2);
/* Test changing the row count */
sl.setRowCount(10);
for (int i = 0; i < 5; i++) {
sl.log(rowbuf.toString());
}
files = envHome.listFiles(ff);
assertEquals(files.length, 2);
}
@Test
public void testDelta() throws IOException {
StringBuffer rowbuf = new StringBuffer();
String fileext = "csv";
int columnCount = 4;
String columnDelimiter = ",";
int rowsInFile = 100;
int numFiles = 3;
FileFilter ff = new FindFile(filename);
String header;
File envHome = SharedTestUtils.getTestDir();
File testfile =
new File(envHome.getAbsolutePath() + File.separator + filename +
"." + fileext);
File[] files = envHome.listFiles(ff);
for (File f : files) {
f.delete();
}
StatLogger sl = new StatLogger(
envHome, filename, fileext, numFiles, rowsInFile);
rowbuf.setLength(0);
for (int i = 0; i < columnCount; i++) {
if (i > 0) {
rowbuf.append(columnDelimiter);
}
rowbuf.append("Column Header" + i);
}
header = rowbuf.toString();
rowbuf.setLength(0);
for (int i = 0; i < columnCount; i++) {
if (i > 0) {
rowbuf.append(columnDelimiter);
}
rowbuf.append(i);
}
for (int i = 0; i < 10; i++) {
sl.setHeader(header);
sl.logDelta(rowbuf.toString());
}
files = envHome.listFiles(ff);
assertEquals(files.length, 1);
/* should only have a header and a data row. */
assertEquals(
"Number of rows not expected", getRowCount(testfile), 2);
rowbuf.append("1");
sl.setHeader(header);
sl.logDelta(rowbuf.toString());
assertEquals(
"Number of rows not expected", getRowCount(testfile), 3);
/* simulate a reboot. */
sl = new StatLogger(
envHome, filename, fileext, numFiles, rowsInFile);
sl.setHeader(header);
sl.logDelta(rowbuf.toString());
assertEquals(
"Number of rows not expected", getRowCount(testfile), 3);
sl.setHeader("a" + header);
assertEquals(
"Number of rows not expected", getRowCount(testfile), 1);
files = envHome.listFiles(ff);
assertEquals(files.length, 2);
for (int i = 0; i < 2; i++) {
sl.logDelta(rowbuf.toString());
}
assertEquals(
"Number of rows not expected", getRowCount(testfile), 2);
}
private int getRowCount(File file) throws IOException {
BufferedReader fr = null;
int currentRowCount = 0;
try {
fr = new BufferedReader(new FileReader(file));
while (fr.readLine() != null) {
currentRowCount++;
}
} finally {
if (fr != null) {
fr.close();
}
}
return currentRowCount;
}
class FindFile implements FileFilter {
String fileprefix;
FindFile(String fileprefix) {
this.fileprefix = fileprefix;
}
@Override
public boolean accept(File f) {
return f.getName().startsWith(fileprefix);
}
}
}