mirror of
https://github.com/berkeleydb/je.git
synced 2024-11-15 01:46:24 +00:00
236 lines
6.9 KiB
Java
236 lines
6.9 KiB
Java
/*-
|
||
* 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);
|
||
}
|
||
}
|
||
}
|