diff options
Diffstat (limited to 'test/csharp/HeapDatabaseTest.cs')
-rw-r--r-- | test/csharp/HeapDatabaseTest.cs | 229 |
1 files changed, 227 insertions, 2 deletions
diff --git a/test/csharp/HeapDatabaseTest.cs b/test/csharp/HeapDatabaseTest.cs index c0461e8b..3270710b 100644 --- a/test/csharp/HeapDatabaseTest.cs +++ b/test/csharp/HeapDatabaseTest.cs @@ -1,7 +1,7 @@ /*- * See the file LICENSE for redistribution information. * - * Copyright (c) 2011, 2012 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015 Oracle and/or its affiliates. All rights reserved. * */ using System; @@ -94,6 +94,175 @@ namespace CsharpAPITest { } + [Test] + public void TestBlob() { + testName = "TestBlob"; + SetUpTest(false); + // Test opening the blob database without environment. + TestBlobHeapDatabase(0, null, 6, null, false); + + /* + * Test opening the blob database without environment + * but specifying blob directory. + */ + TestBlobHeapDatabase(0, null, 6, testHome + "/DBBLOB", true); + + // Test opening the blob database with environment. + TestBlobHeapDatabase(3, "ENVBLOB", 6, null, false); + + /* + * Test opening the blob database with environment + * and specifying blob directory. + */ + TestBlobHeapDatabase(3, null, 6, "/DBBLOB", true); + } + + /* + * Test the blob database with or without environment. + * 1. Config and open the environment; + * 2. Verify the environment blob configs; + * 3. Config and open the database; + * 4. Verify the database blob configs; + * 5. Insert and verify some blob data by database methods; + * 6. Verify the stats; + * 7. Close all handles. + * If "blobdbt" is true, set the data DatabaseEntry.Blob as + * true, otherwise make the data DatabaseEntry reach the blob + * threshold in size. + */ + void TestBlobHeapDatabase(uint env_threshold, string env_blobdir, + uint db_threshold, string db_blobdir, bool blobdbt) + { + if (env_threshold == 0 && db_threshold == 0) + return; + + string heapDBName = + testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + HeapDatabaseConfig cfg = new HeapDatabaseConfig(); + cfg.Creation = CreatePolicy.ALWAYS; + string blrootdir = "__db_bl"; + + // Open the environment and verify the blob configs. + if (env_threshold > 0) + { + DatabaseEnvironmentConfig envConfig = + new DatabaseEnvironmentConfig(); + envConfig.AutoCommit = true; + envConfig.Create = true; + envConfig.UseMPool = true; + envConfig.UseLogging = true; + envConfig.UseTxns = true; + envConfig.UseLocking = true; + envConfig.BlobThreshold = env_threshold; + if (env_blobdir != null) + { + envConfig.BlobDir = env_blobdir; + blrootdir = env_blobdir; + } + DatabaseEnvironment env = DatabaseEnvironment.Open( + testHome, envConfig); + if (env_blobdir == null) + Assert.IsNull(env.BlobDir); + else + Assert.AreEqual(0, + env.BlobDir.CompareTo(env_blobdir)); + Assert.AreEqual(env_threshold, env.BlobThreshold); + cfg.Env = env; + heapDBName = testName + ".db"; + } + + // Open the database and verify the blob configs. + if (db_threshold > 0) + cfg.BlobThreshold = db_threshold; + if (db_blobdir != null) + { + cfg.BlobDir = db_blobdir; + /* + * The blob directory setting in the database + * is effective only when it is opened without + * an environment. + */ + if (cfg.Env == null) + blrootdir = db_blobdir; + } + + HeapDatabase db = HeapDatabase.Open(heapDBName, cfg); + Assert.AreEqual( + db_threshold > 0 ? db_threshold : env_threshold, + db.BlobThreshold); + if (db_blobdir == null && cfg.Env == null) + Assert.IsNull(db.BlobDir); + else + Assert.AreEqual(0, db.BlobDir.CompareTo(blrootdir)); + + // Insert and verify some blob data by database methods. + string[] records = {"a", "b", "c", "d", "e", "f", "g", "h", + "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", + "t", "u", "v", "w", "x", "y", "z"}; + DatabaseEntry kdbt = new DatabaseEntry(); + DatabaseEntry ddbt = new DatabaseEntry(); + byte[] ddata; + string str; + KeyValuePair<DatabaseEntry, DatabaseEntry> pair; + ddbt.Blob = blobdbt; + Assert.AreEqual(blobdbt, ddbt.Blob); + for (int i = 0; i < records.Length; i++) + { + str = records[i]; + if (!blobdbt) + { + for (int j = 0; j < db_threshold; j++) + str = str + records[i]; + } + ddata = Encoding.ASCII.GetBytes(str); + ddbt.Data = ddata; + kdbt = new DatabaseEntry((db.Append(ddbt)).toArray()) ; + try + { + pair = db.Get(kdbt); + } + catch (DatabaseException) + { + db.Close(); + if (cfg.Env != null) + cfg.Env.Close(); + throw new TestException(); + } + Assert.AreEqual(ddata, pair.Value.Data); + } + + /* + * Verify the blob files are created in the expected location. + * This part of test is disabled since BTreeDatabase.BlobSubDir + * is not exposed to users. + */ + //if (cfg.Env != null) + // blrootdir = testHome + "/" + blrootdir; + //string blobdir = blrootdir + "/" + db.BlobSubDir; + //Assert.AreEqual(records.Length, + // Directory.GetFiles(blobdir, "__db.bl*").Length); + //Assert.AreEqual(1, + // Directory.GetFiles(blobdir, "__db_blob_meta.db").Length); + + // Verify the stats. + HeapStats st = db.Stats(); + Assert.AreEqual(records.Length, st.nBlobRecords); + + // Close all handles. + db.Close(); + if (cfg.Env != null) + cfg.Env.Close(); + + /* + * Remove the default blob directory + * when it is not under the test home. + */ + if (db_blobdir == null && cfg.Env == null) + Directory.Delete("__db_bl", true); + } + [Test] public void TestCursor() { testName = "TestCursor"; @@ -214,6 +383,60 @@ namespace CsharpAPITest { } [Test] + public void TestMessageFile() + { + testName = "TestMessageFile"; + SetUpTest(true); + + // Configure and open an environment. + DatabaseEnvironmentConfig envConfig = + new DatabaseEnvironmentConfig(); + envConfig.Create = true; + envConfig.UseMPool = true; + DatabaseEnvironment env = DatabaseEnvironment.Open( + testHome, envConfig); + + // Configure and open a database. + HeapDatabaseConfig DBConfig = + new HeapDatabaseConfig(); + DBConfig.Env = env; + DBConfig.Creation = CreatePolicy.IF_NEEDED; + + string DBFileName = testName + ".db"; + HeapDatabase db = HeapDatabase.Open(DBFileName, DBConfig); + + // Confirm message file does not exist. + string messageFile = testHome + "/" + "msgfile"; + Assert.AreEqual(false, File.Exists(messageFile)); + + // Call set_msgfile() of db. + db.Msgfile = messageFile; + + // Print db statistic to message file. + db.PrintStats(true); + + // Confirm message file exists now. + Assert.AreEqual(true, File.Exists(messageFile)); + + db.Msgfile = ""; + string line = null; + + // Read the third line of message file. + System.IO.StreamReader file = new System.IO.StreamReader(@"" + messageFile); + line = file.ReadLine(); + line = file.ReadLine(); + line = file.ReadLine(); + + // Confirm the message file is not empty. + Assert.AreEqual(line, "DB handle information:"); + file.Close(); + + // Close database and environment. + db.Close(); + env.Close(); + } + + [Test] public void TestOpenExistingHeapDB() { testName = "TestOpenExistingHeapDB"; SetUpTest(true); @@ -300,6 +523,7 @@ namespace CsharpAPITest { HeapStats stats = db.Stats(); ConfirmStatsPart1Case1(stats); + db.Msgfile = testHome + "/" + testName+ ".log"; db.PrintFastStats(true); // Put 500 records into the database. @@ -385,6 +609,7 @@ namespace CsharpAPITest { stats = db.Stats(statsTxn, Isolation.DEGREE_ONE); ConfirmStatsPart1Case1(stats); + db.Msgfile = home + "/" + name+ ".log"; db.PrintStats(true); // Put 500 records into the database. @@ -438,7 +663,7 @@ namespace CsharpAPITest { Assert.AreNotEqual(0, stats.MagicNumber); Assert.AreEqual(4096, stats.PageSize); Assert.AreNotEqual(0, stats.RegionSize); - Assert.AreNotEqual(0, stats.Version); + Assert.AreEqual(2, stats.Version); } public void ConfirmStatsPart2Case1(HeapStats stats) { |