diff options
Diffstat (limited to 'db-4.8.30/test/scr037/LogConfigTest.cs')
-rw-r--r-- | db-4.8.30/test/scr037/LogConfigTest.cs | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/db-4.8.30/test/scr037/LogConfigTest.cs b/db-4.8.30/test/scr037/LogConfigTest.cs new file mode 100644 index 0000000..a49196f --- /dev/null +++ b/db-4.8.30/test/scr037/LogConfigTest.cs @@ -0,0 +1,297 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 2009 Oracle. All rights reserved. + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Xml; +using NUnit.Framework; +using BerkeleyDB; + +namespace CsharpAPITest +{ + [TestFixture] + public class LogConfigTest + { + private string testFixtureHome; + private string testFixtureName; + private string testName; + private string testHome; + + [TestFixtureSetUp] + public void RunBeforeTests() + { + testFixtureName = "LogConfigTest"; + testFixtureHome = "./TestOut/" + testFixtureName; + Configuration.ClearDir(testFixtureHome); + } + + [Test] + public void TestConfig() + { + testName = "TestConfig"; + /* + * Configure the fields/properties and see if + * they are updated successfully. + */ + LogConfig logConfig = new LogConfig(); + XmlElement xmlElem = Configuration.TestSetUp(testFixtureName, testName); + Config(xmlElem, ref logConfig, true); + Confirm(xmlElem, logConfig, true); + } + + [Test, ExpectedException(typeof(ExpectedTestException))] + public void TestFullLogBufferException() + { + testName = "TestFullLogBufferException"; + testHome = testFixtureHome + "/" + testName; + + Configuration.ClearDir(testHome); + + // Open an environment and configured log subsystem. + DatabaseEnvironmentConfig cfg = + new DatabaseEnvironmentConfig(); + cfg.Create = true; + cfg.TxnNoSync = true; + cfg.UseTxns = true; + cfg.UseLocking = true; + cfg.UseMPool = true; + cfg.UseLogging = true; + cfg.LogSystemCfg = new LogConfig(); + cfg.LogSystemCfg.AutoRemove = false; + cfg.LogSystemCfg.BufferSize = 409600; + cfg.LogSystemCfg.MaxFileSize = 10480; + cfg.LogSystemCfg.NoBuffer = false; + cfg.LogSystemCfg.ZeroOnCreate = true; + cfg.LogSystemCfg.InMemory = true; + DatabaseEnvironment env = DatabaseEnvironment.Open(testHome, cfg); + + BTreeDatabase db; + try + { + Transaction openTxn = env.BeginTransaction(); + try + { + BTreeDatabaseConfig dbConfig = + new BTreeDatabaseConfig(); + dbConfig.Creation = CreatePolicy.IF_NEEDED; + dbConfig.Env = env; + db = BTreeDatabase.Open(testName + ".db", dbConfig, openTxn); + openTxn.Commit(); + } + catch (DatabaseException e) + { + openTxn.Abort(); + throw e; + } + + Transaction writeTxn = env.BeginTransaction(); + try + { + /* + * Writing 10 large records into in-memory logging + * database should throw FullLogBufferException since + * the amount of put data is larger than buffer size. + */ + byte[] byteArr = new byte[204800]; + for (int i = 0; i < 10; i++) + db.Put(new DatabaseEntry(BitConverter.GetBytes(i)), + new DatabaseEntry(byteArr), writeTxn); + writeTxn.Commit(); + } + catch (Exception e) + { + writeTxn.Abort(); + throw e; + } + finally + { + db.Close(true); + } + } + catch (FullLogBufferException e) + { + Assert.AreEqual(ErrorCodes.DB_LOG_BUFFER_FULL, e.ErrorCode); + throw new ExpectedTestException(); + } + finally + { + env.Close(); + } + } + + [Test] + public void TestLoggingSystemStats() + { + testName = "TestLoggingSystemStats"; + testHome = testFixtureHome + "/" + testName; + string logDir = "./"; + + Configuration.ClearDir(testHome); + Directory.CreateDirectory(testHome + "/" + logDir); + + DatabaseEnvironmentConfig cfg = + new DatabaseEnvironmentConfig(); + cfg.Create = true; + cfg.UseTxns = true; + cfg.AutoCommit = true; + cfg.UseLocking = true; + cfg.UseMPool = true; + cfg.UseLogging = true; + cfg.MPoolSystemCfg = new MPoolConfig(); + cfg.MPoolSystemCfg.CacheSize = new CacheInfo(0, 1048576, 1); + + cfg.LogSystemCfg = new LogConfig(); + cfg.LogSystemCfg.AutoRemove = false; + cfg.LogSystemCfg.BufferSize = 10240; + cfg.LogSystemCfg.Dir = logDir; + cfg.LogSystemCfg.FileMode = 755; + cfg.LogSystemCfg.ForceSync = true; + cfg.LogSystemCfg.InMemory = false; + cfg.LogSystemCfg.MaxFileSize = 1048576; + cfg.LogSystemCfg.NoBuffer = false; + cfg.LogSystemCfg.RegionSize = 204800; + cfg.LogSystemCfg.ZeroOnCreate = true; + + DatabaseEnvironment env = DatabaseEnvironment.Open(testHome, cfg); + + LogStats stats = env.LoggingSystemStats(); + env.PrintLoggingSystemStats(); + Assert.AreEqual(10240, stats.BufferSize); + Assert.AreEqual(1, stats.CurrentFile); + Assert.AreNotEqual(0, stats.CurrentOffset); + Assert.AreEqual(1048576, stats.FileSize); + Assert.AreNotEqual(0, stats.MagicNumber); + Assert.AreNotEqual(0, stats.PermissionsMode); + Assert.AreEqual(1, stats.Records); + Assert.AreNotEqual(0, stats.RegionLockNoWait); + Assert.LessOrEqual(204800, stats.RegionSize); + Assert.AreNotEqual(0, stats.Version); + + Transaction openTxn = env.BeginTransaction(); + BTreeDatabaseConfig dbConfig = new BTreeDatabaseConfig(); + dbConfig.Creation = CreatePolicy.IF_NEEDED; + dbConfig.Env = env; + BTreeDatabase db = BTreeDatabase.Open(testName + ".db", dbConfig, openTxn); + openTxn.Commit(); + + Transaction writeTxn = env.BeginTransaction(); + byte[] byteArr = new byte[1024]; + for (int i = 0; i < 1000; i++) + db.Put(new DatabaseEntry(BitConverter.GetBytes(i)), + new DatabaseEntry(byteArr), writeTxn); + writeTxn.Commit(); + + stats = env.LoggingSystemStats(); + Assert.AreNotEqual(0, stats.Bytes); + Assert.AreNotEqual(0, stats.BytesSinceCheckpoint); + Assert.AreNotEqual(0, stats.DiskFileNumber); + Assert.AreNotEqual(0, stats.DiskOffset); + Assert.AreNotEqual(0, stats.MaxCommitsPerFlush); + Assert.AreNotEqual(0, stats.MBytes); + Assert.AreNotEqual(0, stats.MBytesSinceCheckpoint); + Assert.AreNotEqual(0, stats.MinCommitsPerFlush); + Assert.AreNotEqual(0, stats.OverflowWrites); + Assert.AreNotEqual(0, stats.Syncs); + Assert.AreNotEqual(0, stats.Writes); + Assert.AreEqual(0, stats.Reads); + Assert.AreEqual(0, stats.RegionLockWait); + + stats = env.LoggingSystemStats(true); + stats = env.LoggingSystemStats(); + Assert.AreEqual(0, stats.Bytes); + Assert.AreEqual(0, stats.BytesSinceCheckpoint); + Assert.AreEqual(0, stats.MaxCommitsPerFlush); + Assert.AreEqual(0, stats.MBytes); + Assert.AreEqual(0, stats.MBytesSinceCheckpoint); + Assert.AreEqual(0, stats.MinCommitsPerFlush); + Assert.AreEqual(0, stats.OverflowWrites); + Assert.AreEqual(0, stats.Syncs); + Assert.AreEqual(0, stats.Writes); + Assert.AreEqual(0, stats.Reads); + + env.PrintLoggingSystemStats(true, true); + + db.Close(); + env.Close(); + } + + [Test] + public void TestLsn() + { + testName = "TestLsn"; + testHome = testFixtureHome + "/" + testName; + Configuration.ClearDir(testHome); + + LSN lsn = new LSN(12, 411); + Assert.AreEqual(12, lsn.LogFileNumber); + Assert.AreEqual(411, lsn.Offset); + + LSN newLsn = new LSN(15, 410); + Assert.AreEqual(0, LSN.Compare(lsn, lsn)); + Assert.Greater(0, LSN.Compare(lsn, newLsn)); + } + + public static void Confirm(XmlElement + xmlElement, LogConfig logConfig, bool compulsory) + { + Configuration.ConfirmBool(xmlElement, "AutoRemove", + logConfig.AutoRemove, compulsory); + Configuration.ConfirmUint(xmlElement, "BufferSize", + logConfig.BufferSize, compulsory); + Configuration.ConfirmString(xmlElement, "Dir", + logConfig.Dir, compulsory); + Configuration.ConfirmInt(xmlElement, "FileMode", + logConfig.FileMode, compulsory); + Configuration.ConfirmBool(xmlElement, "ForceSync", + logConfig.ForceSync, compulsory); + Configuration.ConfirmBool(xmlElement, "InMemory", + logConfig.InMemory, compulsory); + Configuration.ConfirmUint(xmlElement, "MaxFileSize", + logConfig.MaxFileSize, compulsory); + Configuration.ConfirmBool(xmlElement, "NoBuffer", + logConfig.NoBuffer, compulsory); + Configuration.ConfirmUint(xmlElement, "RegionSize", + logConfig.RegionSize, compulsory); + Configuration.ConfirmBool(xmlElement, "ZeroOnCreate", + logConfig.ZeroOnCreate, compulsory); + } + + public static void Config(XmlElement + xmlElement, ref LogConfig logConfig, bool compulsory) + { + uint uintValue = new uint(); + int intValue = new int(); + + Configuration.ConfigBool(xmlElement, "AutoRemove", + ref logConfig.AutoRemove, compulsory); + if (Configuration.ConfigUint(xmlElement, "BufferSize", + ref uintValue, compulsory)) + logConfig.BufferSize = uintValue; + Configuration.ConfigString(xmlElement, "Dir", + ref logConfig.Dir, compulsory); + if (Configuration.ConfigInt(xmlElement, "FileMode", + ref intValue, compulsory)) + logConfig.FileMode = intValue; + Configuration.ConfigBool(xmlElement, "ForceSync", + ref logConfig.ForceSync, compulsory); + Configuration.ConfigBool(xmlElement, "InMemory", + ref logConfig.InMemory, compulsory); + if (Configuration.ConfigUint(xmlElement, "MaxFileSize", + ref uintValue, compulsory)) + logConfig.MaxFileSize = uintValue; + Configuration.ConfigBool(xmlElement, "NoBuffer", + ref logConfig.NoBuffer, compulsory); + if (Configuration.ConfigUint(xmlElement, "RegionSize", + ref uintValue, compulsory)) + logConfig.RegionSize = uintValue; + Configuration.ConfigBool(xmlElement, "ZeroOnCreate", + ref logConfig.ZeroOnCreate, compulsory); + } + } +} |