public void everything_should_go_fine() { var miniNode = new MiniNode(PathName); miniNode.Start(); var tcpPort = miniNode.TcpEndPoint.Port; var tcpSecPort = miniNode.TcpSecEndPoint.Port; var httpPort = miniNode.HttpEndPoint.Port; const int cnt = 50; var countdown = new CountdownEvent(cnt); // --- first part of events WriteEvents(cnt, miniNode, countdown); Assert.IsTrue(countdown.Wait(TimeSpan.FromSeconds(10)), "Too long writing first part of events."); countdown.Reset(); // -- set up truncation var truncatePosition = miniNode.Db.Config.WriterCheckpoint.ReadNonFlushed(); miniNode.Db.Config.TruncateCheckpoint.Write(truncatePosition); miniNode.Db.Config.TruncateCheckpoint.Flush(); // --- second part of events WriteEvents(cnt, miniNode, countdown); Assert.IsTrue(countdown.Wait(TimeSpan.FromSeconds(10)), "Too long writing second part of events."); countdown.Reset(); miniNode.Shutdown(keepDb: true, keepPorts: true); // --- first restart and truncation miniNode = new MiniNode(PathName, tcpPort, tcpSecPort, httpPort); miniNode.Start(); Assert.AreEqual(-1, miniNode.Db.Config.TruncateCheckpoint.Read()); Assert.That(miniNode.Db.Config.WriterCheckpoint.Read(), Is.GreaterThanOrEqualTo(truncatePosition)); // -- third part of events WriteEvents(cnt, miniNode, countdown); Assert.IsTrue(countdown.Wait(TimeSpan.FromSeconds(10)), "Too long writing third part of events."); countdown.Reset(); miniNode.Shutdown(keepDb: true, keepPorts: true); // -- second restart miniNode = new MiniNode(PathName, tcpPort, tcpSecPort, httpPort); Assert.AreEqual(-1, miniNode.Db.Config.TruncateCheckpoint.Read()); miniNode.Start(); // -- if we get here -- then everything is ok miniNode.Shutdown(); }
public void with_truncate_position_in_completed_chunk_everything_should_go_fine() { const int chunkSize = 1024*1024; const int cachedSize = chunkSize*3; var miniNode = new MiniNode(PathName, chunkSize: chunkSize, cachedChunkSize: cachedSize, inMemDb: false); miniNode.Start(); var tcpPort = miniNode.TcpEndPoint.Port; var tcpSecPort = miniNode.TcpSecEndPoint.Port; var httpPort = miniNode.HttpEndPoint.Port; const int cnt = 1; var countdown = new CountdownEvent(cnt); // --- first part of events WriteEvents(cnt, miniNode, countdown, MiniNode.ChunkSize / 5 * 3); Assert.IsTrue(countdown.Wait(TimeSpan.FromSeconds(10)), "Too long writing first part of events."); countdown.Reset(); // -- set up truncation var truncatePosition = miniNode.Db.Config.WriterCheckpoint.ReadNonFlushed(); miniNode.Db.Config.TruncateCheckpoint.Write(truncatePosition); miniNode.Db.Config.TruncateCheckpoint.Flush(); // --- second part of events WriteEvents(cnt, miniNode, countdown, MiniNode.ChunkSize / 2); Assert.IsTrue(countdown.Wait(TimeSpan.FromSeconds(10)), "Too long writing second part of events."); countdown.Reset(); miniNode.Shutdown(keepDb: true, keepPorts: true); // --- first restart and truncation miniNode = new MiniNode(PathName, tcpPort, tcpSecPort, httpPort, chunkSize: chunkSize, cachedChunkSize: cachedSize, inMemDb: false); miniNode.Start(); Assert.AreEqual(-1, miniNode.Db.Config.TruncateCheckpoint.Read()); Assert.That(miniNode.Db.Config.WriterCheckpoint.Read(), Is.GreaterThanOrEqualTo(truncatePosition)); // -- third part of events WriteEvents(cnt, miniNode, countdown, MiniNode.ChunkSize / 5); Assert.IsTrue(countdown.Wait(TimeSpan.FromSeconds(10)), "Too long writing third part of events."); countdown.Reset(); // -- if we get here -- then everything is ok miniNode.Shutdown(); }