diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
commit | 54df2afaa61c6a03cbb4a33c9b90fa572b6d07b8 (patch) | |
tree | 18147b92b969d25ffbe61935fb63035cac820dd0 /db-4.8.30/test/scr037/SequenceTest.cs |
Berkeley DB 4.8 with rust build script for linux.
Diffstat (limited to 'db-4.8.30/test/scr037/SequenceTest.cs')
-rw-r--r-- | db-4.8.30/test/scr037/SequenceTest.cs | 406 |
1 files changed, 406 insertions, 0 deletions
diff --git a/db-4.8.30/test/scr037/SequenceTest.cs b/db-4.8.30/test/scr037/SequenceTest.cs new file mode 100644 index 0000000..92f8cc0 --- /dev/null +++ b/db-4.8.30/test/scr037/SequenceTest.cs @@ -0,0 +1,406 @@ +/*- + * 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.Threading; +using System.Xml; +using NUnit.Framework; +using BerkeleyDB; + +namespace CsharpAPITest +{ + [TestFixture] + public class SequenceTest + { + private string testFixtureHome; + private string testFixtureName; + private string testName; + private string testHome; + + [TestFixtureSetUp] + public void RunBeforeTests() + { + testFixtureName = "SequenceTest"; + testFixtureHome = "./TestOut/" + testFixtureName; + + Configuration.ClearDir(testFixtureHome); + } + + [Test] + public void TestConfig() + { + testName = "TestConfig"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + XmlElement xmlElem = Configuration.TestSetUp( + testFixtureName, testName); + + Configuration.ClearDir(testHome); + + // Open a database. + BTreeDatabaseConfig btreeDBConfig = + new BTreeDatabaseConfig(); + btreeDBConfig.Creation = CreatePolicy.IF_NEEDED; + BTreeDatabase btreeDB = BTreeDatabase.Open( + dbFileName, btreeDBConfig); + + // Configure and initialize sequence. + SequenceConfig seqConfig = new SequenceConfig(); + seqConfig.BackingDatabase = btreeDB; + seqConfig.Creation = CreatePolicy.IF_NEEDED; + seqConfig.key = new DatabaseEntry( + ASCIIEncoding.ASCII.GetBytes("key")); + seqConfig.SetRange(Int64.MinValue, Int64.MaxValue); + SequenceConfigTest.Config(xmlElem, ref seqConfig, true); + Sequence seq = new Sequence(seqConfig); + + + /* + * Confirm that the squence is opened with the + * configuration that we set. + */ + Confirm(xmlElem, seq, true); + + /* Close sequence, database and environment. */ + seq.Close(); + btreeDB.Close(); + } + + [Test] + public void TestClose() + { + testName = "TestClose"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + BTreeDatabase db; + Sequence seq; + OpenNewSequence(dbFileName, out db, out seq); + seq.Close(); + db.Close(); + } + + [Test] + public void TestDispose() + { + testName = "TestDispose"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + BTreeDatabase db; + Sequence seq; + OpenNewSequence(dbFileName, out db, out seq); + seq.Dispose(); + db.Close(); + } + + [Test] + public void TestGet() + { + testName = "TestGet"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + // Open a database and an increase sequence. + BTreeDatabase db; + Sequence seq; + OpenNewSequence(dbFileName, out db, out seq); + + /* + * Check the delta of two sequence number get + * from sequence. + */ + int delta = 100; + long seqNum1 = seq.Get(delta); + long seqNum2 = seq.Get(delta); + Assert.AreEqual(delta, seqNum2 - seqNum1); + + // Close all. + seq.Close(); + db.Close(); + } + + [Test] + public void TestGetWithNoSync() + { + testName = "TestGetWithNoSync"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + // Open a database and an increase sequence. + BTreeDatabase db; + DatabaseEnvironment env; + Sequence seq; + OpenNewSequenceInEnv(testHome, testName, out env, + out db, out seq); + + /* + * Check the delta of two sequence number get + * from sequence. + */ + int delta = 100; + long seqNum1 = seq.Get(delta, true); + long seqNum2 = seq.Get(delta, true); + Assert.AreEqual(delta, seqNum2 - seqNum1); + + // Close all. + seq.Close(); + db.Close(); + env.Close(); + } + + [Test] + public void TestGetWithinTxn() + { + testName = "TestGetWithinTxn"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + // Open a database and an increase sequence. + BTreeDatabase db; + DatabaseEnvironment env; + Sequence seq; + OpenNewSequenceInEnv(testHome, testName, out env, + out db, out seq); + + /* + * Check the delta of two sequence number get + * from sequence. + */ + int delta = 100; + Transaction txn = env.BeginTransaction(); + long seqNum1 = seq.Get(delta, txn); + long seqNum2 = seq.Get(delta, txn); + Assert.AreEqual(delta, seqNum2 - seqNum1); + txn.Commit(); + + // Close all. + seq.Close(); + db.Close(); + env.Close(); + } + + + [Test] + public void TestRemove() + { + testName = "TestRemove"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + // Open a database and an increase sequence. + BTreeDatabase db; + Sequence seq; + OpenNewSequence(dbFileName, out db, out seq); + + /* + * Remove the sequence. The sequence handle can not + * be accessed again. + */ + seq.Remove(); + db.Close(); + } + + [Test] + public void TestRemoveWithNoSync() + { + testName = "TestRemoveWithNoSync"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testName + ".db"; + + Configuration.ClearDir(testHome); + + // Open a database and an increase sequence. + DatabaseEnvironmentConfig envConfig = new DatabaseEnvironmentConfig(); + envConfig.Create = true; + envConfig.UseLogging = true; + envConfig.UseMPool = true; + envConfig.UseTxns = true; + DatabaseEnvironment env = DatabaseEnvironment.Open(testHome, envConfig); + + /* Configure and open sequence's database. */ + BTreeDatabaseConfig btreeDBConfig = new BTreeDatabaseConfig(); + btreeDBConfig.AutoCommit = true; + btreeDBConfig.Creation = CreatePolicy.IF_NEEDED; + btreeDBConfig.Env = env; + BTreeDatabase btreeDB = BTreeDatabase.Open(dbFileName, btreeDBConfig); + + /* Configure and initialize sequence. */ + SequenceConfig seqConfig = new SequenceConfig(); + seqConfig.BackingDatabase = btreeDB; + seqConfig.Creation = CreatePolicy.IF_NEEDED; + seqConfig.Increment = true; + seqConfig.InitialValue = Int64.MaxValue; + seqConfig.key = new DatabaseEntry(); + seqConfig.SetRange(Int64.MinValue, Int64.MaxValue); + seqConfig.Wrap = true; + seqConfig.key = new DatabaseEntry(); + seqConfig.key.Data = ASCIIEncoding.ASCII.GetBytes("ex_csharp_sequence"); + Sequence seq = new Sequence(seqConfig); + + /* + * Remove the sequence. The sequence handle can not + * be accessed again. + */ + seq.Remove(true); + btreeDB.Close(); + env.Close(); + } + + [Test] + public void TestRemoveWithInTxn() + { + testName = "TestRemoveWithInTxn"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + // Open a database and an increase sequence. + BTreeDatabase db; + DatabaseEnvironment env; + Sequence seq; + OpenNewSequenceInEnv(testHome, testName, out env, + out db, out seq); + + //Remove the sequence. + Transaction txn = env.BeginTransaction(); + seq.Remove(txn); + txn.Commit(); + db.Close(); + env.Close(); + } + + [Test] + public void TestStats() + { + testName = "TestStats"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + // Open a database and an increase sequence. + BTreeDatabase db; + Sequence seq; + OpenNewSequence(dbFileName, out db, out seq); + + // Get a value from sequence. + seq.Get(100); + + // Get sequence statistics. + SequenceStats stats = seq.Stats(); + seq.PrintStats(true); + Assert.AreEqual(200, stats.CachedValue); + Assert.AreEqual(1000, stats.CacheSize); + Assert.AreNotEqual(0, stats.Flags); + Assert.AreEqual(1099, stats.LastCachedValue); + Assert.AreEqual(Int64.MaxValue, stats.Max); + Assert.AreEqual(Int64.MinValue, stats.Min); + Assert.AreEqual(1100, stats.StoredValue); + + stats = seq.Stats(true); + seq.PrintStats(); + stats = seq.Stats(); + Assert.AreEqual(0, stats.LockNoWait); + Assert.AreEqual(0, stats.LockWait); + + seq.Close(); + db.Close(); + } + + public void OpenNewSequence(string dbFileName, + out BTreeDatabase db, out Sequence seq) + { + // Open a database. + BTreeDatabaseConfig btreeDBConfig = + new BTreeDatabaseConfig(); + btreeDBConfig.Creation = CreatePolicy.IF_NEEDED; + db = BTreeDatabase.Open(dbFileName, btreeDBConfig); + + // Configure and initialize sequence. + SequenceConfig seqConfig = new SequenceConfig(); + seqConfig.BackingDatabase = db; + seqConfig.CacheSize = 1000; + seqConfig.Creation = CreatePolicy.ALWAYS; + seqConfig.Decrement = false; + seqConfig.FreeThreaded = true; + seqConfig.Increment = true; + seqConfig.InitialValue = 100; + seqConfig.key = new DatabaseEntry( + ASCIIEncoding.ASCII.GetBytes("key")); + seqConfig.SetRange(Int64.MinValue, Int64.MaxValue); + seqConfig.Wrap = true; + seq = new Sequence(seqConfig); + } + + public void OpenNewSequenceInEnv(string home, string dbname, + out DatabaseEnvironment env, out BTreeDatabase db, + out Sequence seq) + { + DatabaseEnvironmentConfig envConfig = + new DatabaseEnvironmentConfig(); + envConfig.Create = true; + envConfig.UseTxns = true; + envConfig.UseMPool = true; + envConfig.UseLogging = true; + env = DatabaseEnvironment.Open(home, envConfig); + + Transaction openTxn = env.BeginTransaction(); + BTreeDatabaseConfig dbConfig = + new BTreeDatabaseConfig(); + dbConfig.Creation = CreatePolicy.IF_NEEDED; + dbConfig.Env = env; + db = BTreeDatabase.Open(dbname + ".db", dbConfig, + openTxn); + openTxn.Commit(); + + Transaction seqTxn = env.BeginTransaction(); + SequenceConfig seqConfig = new SequenceConfig(); + seqConfig.BackingDatabase = db; + seqConfig.Creation = CreatePolicy.ALWAYS; + seqConfig.Decrement = false; + seqConfig.FreeThreaded = true; + seqConfig.Increment = true; + seqConfig.InitialValue = 0; + seqConfig.key = new DatabaseEntry( + ASCIIEncoding.ASCII.GetBytes("key")); + seqConfig.SetRange(Int64.MinValue, Int64.MaxValue); + seqConfig.Wrap = true; + seq = new Sequence(seqConfig); + seqTxn.Commit(); + } + + public static void Confirm(XmlElement xmlElement, + Sequence seq, bool compulsory) + { + Configuration.ConfirmInt(xmlElement, "CacheSize", + seq.Cachesize, compulsory); + Configuration.ConfirmBool(xmlElement, "Decrement", + seq.Decrement, compulsory); + Configuration.ConfirmBool(xmlElement, "Increment", + seq.Increment, compulsory); + Configuration.ConfirmBool(xmlElement, "Wrap", + seq.Wrap, compulsory); + } + } +} |