mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-16 09:06:25 +00:00
215 lines
5.5 KiB
C#
215 lines
5.5 KiB
C#
/*-
|
|
* See the file LICENSE for redistribution information.
|
|
*
|
|
* Copyright (c) 2009, 2012 Oracle and/or its affiliates. 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 SecondaryQueueDatabaseTest : CSharpTestFixture
|
|
{
|
|
|
|
[TestFixtureSetUp]
|
|
public void SetUpTestFixture()
|
|
{
|
|
testFixtureName = "SecondaryQueueDatabaseTest";
|
|
base.SetUpTestfixture();
|
|
}
|
|
|
|
/*
|
|
* Tests to all Open() share the same configuration in
|
|
* AllTestData.xml.
|
|
*/
|
|
[Test]
|
|
public void TestOpen()
|
|
{
|
|
testName = "TestOpen";
|
|
SetUpTest(true);
|
|
string dbFileName = testHome + "/" + testName + ".db";
|
|
string dbSecFileName = testHome + "/" +
|
|
testName + "_sec.db";
|
|
|
|
OpenSecQueueDB(testFixtureName, "TestOpen",
|
|
dbFileName, dbSecFileName);
|
|
}
|
|
|
|
public void OpenSecQueueDB(string className,
|
|
string funName, string dbFileName, string dbSecFileName)
|
|
{
|
|
XmlElement xmlElem = Configuration.TestSetUp(
|
|
className, funName);
|
|
|
|
// Open a primary queue database.
|
|
QueueDatabaseConfig primaryDBConfig =
|
|
new QueueDatabaseConfig();
|
|
primaryDBConfig.Creation = CreatePolicy.IF_NEEDED;
|
|
QueueDatabase primaryDB;
|
|
|
|
/*
|
|
* If secondary database name is given, the primary
|
|
* database is also opened with database name.
|
|
*/
|
|
primaryDB = QueueDatabase.Open(dbFileName,
|
|
primaryDBConfig);
|
|
|
|
try
|
|
{
|
|
// Open a new secondary database.
|
|
SecondaryQueueDatabaseConfig secQueueDBConfig =
|
|
new SecondaryQueueDatabaseConfig(
|
|
primaryDB, null);
|
|
SecondaryQueueDatabaseConfigTest.Config(
|
|
xmlElem, ref secQueueDBConfig, false);
|
|
secQueueDBConfig.Creation =
|
|
CreatePolicy.IF_NEEDED;
|
|
|
|
SecondaryQueueDatabase secQueueDB;
|
|
secQueueDB = SecondaryQueueDatabase.Open(
|
|
dbSecFileName, secQueueDBConfig);
|
|
|
|
// Close the secondary database.
|
|
secQueueDB.Close();
|
|
|
|
// Open the existing secondary database.
|
|
SecondaryDatabaseConfig secDBConfig =
|
|
new SecondaryQueueDatabaseConfig(
|
|
primaryDB, null);
|
|
|
|
SecondaryDatabase secDB;
|
|
secDB = SecondaryQueueDatabase.Open(
|
|
dbSecFileName, secDBConfig);
|
|
|
|
// Close secondary database.
|
|
secDB.Close();
|
|
}
|
|
catch (DatabaseException)
|
|
{
|
|
throw new TestException();
|
|
}
|
|
finally
|
|
{
|
|
// Close primary database.
|
|
primaryDB.Close();
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void TestOpenWithinTxn()
|
|
{
|
|
testName = "TestOpenWithinTxn";
|
|
SetUpTest(true);
|
|
string dbFileName = testName + ".db";
|
|
string dbSecFileName = testName + "_sec.db";
|
|
|
|
OpenSecQueueDBWithinTxn(testFixtureName,
|
|
"TestOpen", testHome, dbFileName,
|
|
dbSecFileName);
|
|
}
|
|
|
|
[Test]
|
|
public void TestOpenDBNameWithinTxn()
|
|
{
|
|
testName = "TestOpenDBNameWithinTxn";
|
|
SetUpTest(true);
|
|
string dbFileName = testName + ".db";
|
|
string dbSecFileName = testName + "_sec.db";
|
|
|
|
OpenSecQueueDBWithinTxn(testFixtureName,
|
|
"TestOpen", testHome, dbFileName,
|
|
dbSecFileName);
|
|
}
|
|
|
|
public void OpenSecQueueDBWithinTxn(string className,
|
|
string funName, string home, string dbFileName,
|
|
string dbSecFileName)
|
|
{
|
|
XmlElement xmlElem = Configuration.TestSetUp(
|
|
className, funName);
|
|
|
|
// Open an environment.
|
|
DatabaseEnvironmentConfig envConfig =
|
|
new DatabaseEnvironmentConfig();
|
|
envConfig.Create = true;
|
|
envConfig.UseTxns = true;
|
|
envConfig.UseMPool = true;
|
|
envConfig.UseLogging = true;
|
|
DatabaseEnvironment env = DatabaseEnvironment.Open(
|
|
home, envConfig);
|
|
|
|
// Open a primary queue database.
|
|
Transaction openDBTxn = env.BeginTransaction();
|
|
QueueDatabaseConfig dbConfig =
|
|
new QueueDatabaseConfig();
|
|
dbConfig.Creation = CreatePolicy.IF_NEEDED;
|
|
dbConfig.Env = env;
|
|
QueueDatabase db = QueueDatabase.Open(
|
|
dbFileName, dbConfig, openDBTxn);
|
|
openDBTxn.Commit();
|
|
|
|
// Open a secondary queue database.
|
|
Transaction openSecTxn = env.BeginTransaction();
|
|
SecondaryQueueDatabaseConfig secDBConfig =
|
|
new SecondaryQueueDatabaseConfig(db,
|
|
new SecondaryKeyGenDelegate(SecondaryKeyGen));
|
|
SecondaryQueueDatabaseConfigTest.Config(xmlElem,
|
|
ref secDBConfig, true);
|
|
secDBConfig.Env = env;
|
|
SecondaryQueueDatabase secDB;
|
|
secDB = SecondaryQueueDatabase.Open(
|
|
dbSecFileName, secDBConfig, openSecTxn);
|
|
|
|
openSecTxn.Commit();
|
|
|
|
// Confirm its flags configured in secDBConfig.
|
|
Confirm(xmlElem, secDB, true);
|
|
secDB.Close();
|
|
|
|
// Open the existing secondary database.
|
|
Transaction secTxn = env.BeginTransaction();
|
|
SecondaryDatabaseConfig secConfig =
|
|
new SecondaryDatabaseConfig(db,
|
|
new SecondaryKeyGenDelegate(SecondaryKeyGen));
|
|
secConfig.Env = env;
|
|
|
|
SecondaryDatabase secExDB;
|
|
secExDB = SecondaryQueueDatabase.Open(
|
|
dbSecFileName, secConfig, secTxn);
|
|
|
|
secExDB.Close();
|
|
secTxn.Commit();
|
|
|
|
db.Close();
|
|
env.Close();
|
|
}
|
|
|
|
public DatabaseEntry SecondaryKeyGen(
|
|
DatabaseEntry key, DatabaseEntry data)
|
|
{
|
|
DatabaseEntry dbtGen;
|
|
dbtGen = new DatabaseEntry(data.Data);
|
|
return dbtGen;
|
|
}
|
|
|
|
public static void Confirm(XmlElement xmlElem,
|
|
SecondaryQueueDatabase secDB, bool compulsory)
|
|
{
|
|
Configuration.ConfirmUint(xmlElem,
|
|
"ExtentSize", secDB.ExtentSize, compulsory);
|
|
Configuration.ConfirmUint(xmlElem, "Length",
|
|
secDB.Length, compulsory);
|
|
Configuration.ConfirmInt(xmlElem, "PadByte",
|
|
secDB.PadByte, compulsory);
|
|
}
|
|
}
|
|
}
|