diff options
Diffstat (limited to 'db-4.8.30/test/scr037/RecnoCursorTest.cs')
-rw-r--r-- | db-4.8.30/test/scr037/RecnoCursorTest.cs | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/db-4.8.30/test/scr037/RecnoCursorTest.cs b/db-4.8.30/test/scr037/RecnoCursorTest.cs new file mode 100644 index 0000000..790372b --- /dev/null +++ b/db-4.8.30/test/scr037/RecnoCursorTest.cs @@ -0,0 +1,257 @@ +/*- + * 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 NUnit.Framework; +using BerkeleyDB; + +namespace CsharpAPITest +{ + [TestFixture] + public class RecnoCursorTest + { + private string testFixtureName; + private string testFixtureHome; + private string testName; + private string testHome; + + [TestFixtureSetUp] + public void RunBeforeTests() + { + testFixtureName = "RecnoCursorTest"; + testFixtureHome = "./TestOut/" + testFixtureName; + } + + [Test] + public void TestCursor() + { + testName = "TestCursor"; + testHome = testFixtureHome + "/" + testName; + + Configuration.ClearDir(testHome); + + GetCursorWithImplicitTxn(testHome, + testName + ".db", false); + } + + [Test] + public void TestCursorWithConfig() + { + testName = "TestCursorWithConfig"; + testHome = testFixtureHome + "/" + testName; + + Configuration.ClearDir(testHome); + + GetCursorWithImplicitTxn(testHome, + testName + ".db", true); + } + + public void GetCursorWithImplicitTxn(string home, + string dbFile, bool ifConfig) + { + DatabaseEnvironmentConfig envConfig = + new DatabaseEnvironmentConfig(); + envConfig.Create = true; + envConfig.UseCDB = true; + envConfig.UseMPool = true; + DatabaseEnvironment env = DatabaseEnvironment.Open( + home, envConfig); + + RecnoDatabaseConfig dbConfig = + new RecnoDatabaseConfig(); + dbConfig.Creation = CreatePolicy.IF_NEEDED; + dbConfig.Env = env; + RecnoDatabase db = RecnoDatabase.Open(dbFile, + dbConfig); + + RecnoCursor cursor; + if (ifConfig == false) + cursor = db.Cursor(); + else + cursor = db.Cursor(new CursorConfig()); + + cursor.Close(); + db.Close(); + env.Close(); + } + + [Test] + public void TestCursorInTxn() + { + testName = "TestCursorInTxn"; + testHome = testFixtureHome + "/" + testName; + + Configuration.ClearDir(testHome); + + GetCursorWithExplicitTxn(testHome, + testName + ".db", false); + } + + [Test] + public void TestConfigedCursorInTxn() + { + testName = "TestConfigedCursorInTxn"; + testHome = testFixtureHome + "/" + testName; + + Configuration.ClearDir(testHome); + + GetCursorWithExplicitTxn(testHome, + testName + ".db", true); + } + + public void GetCursorWithExplicitTxn(string home, + string dbFile, bool ifConfig) + { + DatabaseEnvironmentConfig envConfig = + new DatabaseEnvironmentConfig(); + envConfig.Create = true; + envConfig.UseTxns = true; + envConfig.UseMPool = true; + DatabaseEnvironment env = DatabaseEnvironment.Open( + home, envConfig); + + Transaction openTxn = env.BeginTransaction(); + RecnoDatabaseConfig dbConfig = + new RecnoDatabaseConfig(); + dbConfig.Creation = CreatePolicy.IF_NEEDED; + dbConfig.Env = env; + RecnoDatabase db = RecnoDatabase.Open(dbFile, + dbConfig, openTxn); + openTxn.Commit(); + + Transaction cursorTxn = env.BeginTransaction(); + RecnoCursor cursor; + if (ifConfig == false) + cursor = db.Cursor(cursorTxn); + else + cursor = db.Cursor(new CursorConfig(), cursorTxn); + cursor.Close(); + cursorTxn.Commit(); + db.Close(); + env.Close(); + } + + [Test] + public void TestDuplicate() + { + KeyValuePair<DatabaseEntry, DatabaseEntry> pair; + RecnoDatabase db; + RecnoDatabaseConfig dbConfig; + RecnoCursor cursor, dupCursor; + string dbFileName; + + testName = "TestDuplicate"; + testHome = testFixtureHome + "/" + testName; + dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + dbConfig = new RecnoDatabaseConfig(); + dbConfig.Creation = CreatePolicy.IF_NEEDED; + db = RecnoDatabase.Open(dbFileName, dbConfig); + cursor = db.Cursor(); + + /* + * Add a record(1, 1) by cursor and move + * the cursor to the current record. + */ + AddOneByCursor(cursor); + cursor.Refresh(); + + //Duplicate a new cursor to the same position. + dupCursor = cursor.Duplicate(true); + + // Overwrite the record. + dupCursor.Overwrite(new DatabaseEntry( + ASCIIEncoding.ASCII.GetBytes("newdata"))); + + // Confirm that the original data doesn't exist. + pair = new KeyValuePair<DatabaseEntry, DatabaseEntry>( + new DatabaseEntry( + BitConverter.GetBytes((int)1)), + new DatabaseEntry( + BitConverter.GetBytes((int)1))); + Assert.IsFalse(dupCursor.Move(pair, true)); + + dupCursor.Close(); + cursor.Close(); + db.Close(); + } + + [Test] + public void TestInsertToLoc() + { + RecnoDatabase db; + RecnoDatabaseConfig dbConfig; + RecnoCursor cursor; + DatabaseEntry data; + KeyValuePair<DatabaseEntry, DatabaseEntry> pair; + string dbFileName; + + testName = "TestInsertToLoc"; + testHome = testFixtureHome + "/" + testName; + dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + // Open database and cursor. + dbConfig = new RecnoDatabaseConfig(); + dbConfig.Creation = CreatePolicy.IF_NEEDED; + dbConfig.Renumber = true; + db = RecnoDatabase.Open(dbFileName, dbConfig); + cursor = db.Cursor(); + + // Add record(1,1) into database. + /* + * Add a record(1, 1) by cursor and move + * the cursor to the current record. + */ + AddOneByCursor(cursor); + cursor.Refresh(); + + /* + * Insert the new record(1,10) after the + * record(1,1). + */ + data = new DatabaseEntry( + BitConverter.GetBytes((int)10)); + cursor.Insert(data, Cursor.InsertLocation.AFTER); + + /* + * Move the cursor to the record(1,1) and + * confirm that the next record is the one just inserted. + */ + pair = new KeyValuePair<DatabaseEntry, DatabaseEntry>( + new DatabaseEntry( + BitConverter.GetBytes((int)1)), + new DatabaseEntry( + BitConverter.GetBytes((int)1))); + Assert.IsTrue(cursor.Move(pair, true)); + Assert.IsTrue(cursor.MoveNext()); + Assert.AreEqual(BitConverter.GetBytes((int)10), + cursor.Current.Value.Data); + + cursor.Close(); + db.Close(); + } + + public void AddOneByCursor(RecnoCursor cursor) + { + KeyValuePair<DatabaseEntry, DatabaseEntry> pair = + new KeyValuePair<DatabaseEntry, DatabaseEntry>( + new DatabaseEntry( + BitConverter.GetBytes((int)1)), + new DatabaseEntry( + BitConverter.GetBytes((int)1))); + cursor.Add(pair); + } + } +} |