public void T00_LogInit()
{
int system_reserved_space;
IRegionManager rmgr = new RegionExposedFiles(InitMode.NEW_REGION, "c:\\BENDtst\\1"); // TODO, create random directory
{
LogWriter lr = LogWriter.LogWriter_NewRegion(rmgr, null, out system_reserved_space);
lr.Dispose();
}
// open the rootblock stream...
Stream rootblockstream = rmgr.readRegionAddr(0).getNewAccessStream();
// read rootblock header
rootblockstream.Seek(0, SeekOrigin.Begin);
RootBlockHeader rootblockdata = Bend.Util.readStruct<RootBlockHeader>(rootblockstream);
// check rootblock data
{
Assert.AreEqual(rootblockdata.magic, RootBlockHeader.ROOTMAGIC, "root block magic");
Assert.AreEqual(rootblockdata.num_logsegments, LogWriter.DEFAULT_LOG_SEGMENTS);
// TODO: check checksum
}
// read / check each log segment
for (int i = 0; i < rootblockdata.num_logsegments; i++) {
RootBlockLogSegment seg = Bend.Util.readStruct<RootBlockLogSegment>(rootblockstream);
Stream logstream = rmgr.readRegionAddr(seg.logsegment_start).getNewAccessStream();
logstream.Seek(0, SeekOrigin.Begin);
// check that each log segment contains a valid closed log record
logstream.Close();
}
rootblockstream.Close();
}