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