libdb/test/csharp/LockingConfigTest.cs
2011-09-13 13:44:24 -04:00

154 lines
4.1 KiB
C#

/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2009, 2011 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.Xml;
using NUnit.Framework;
using BerkeleyDB;
namespace CsharpAPITest
{
[TestFixture]
public class LockingConfigTest : CSharpTestFixture
{
[TestFixtureSetUp]
public void SetUpTestFixture()
{
testFixtureName = "LockingConfigTest";
base.SetUpTestfixture();
}
[Test]
public void TestConfig()
{
testName = "TestConfig";
SetUpTest(false);
// Configure the fields/properties.
LockingConfig lockingConfig = new LockingConfig();
XmlElement xmlElem = Configuration.TestSetUp(
testFixtureName, testName);
// Configure LockingConfig
Config(xmlElem, ref lockingConfig, true);
// Confirm LockingConfig
Confirm(xmlElem, lockingConfig, true);
}
[Test]
public void TestMaxLock() {
testName = "TestMaxLock";
SetUpTest(true);
DatabaseEnvironment env;
uint maxLocks;
DatabaseEntry obj;
maxLocks = 1;
obj = new DatabaseEntry();
/*
* Initialize environment using locking subsystem. The max number
* of locks should be larger than environment's partitions. So in
* order to make the MaxLock work, the environment paritition is
* set to be the same value as MaxLock.
*/
LockTest.LockingEnvSetUp(testHome, testName, out env,
maxLocks, 0, 0, maxLocks);
Assert.AreEqual(maxLocks, env.MaxLocks);
env.Close();
}
[Test]
public void TestMaxLocker() {
testName = "TestMaxLocker";
SetUpTest(true);
DatabaseEnvironment env;
uint maxLockers;
maxLockers = 1;
LockTest.LockingEnvSetUp(testHome, testName, out env,
0, maxLockers, 0, 0);
Assert.AreEqual(maxLockers, env.MaxLockers);
env.Close();
}
[Test]
public void TestMaxObjects() {
testName = "TestMaxObjects";
SetUpTest(true);
DatabaseEnvironment env;
uint maxObjects;
maxObjects = 1;
/*
* Initialize environment using locking subsystem. The max number
* of objects should be larger than environment's partitions. So
* in order to make the MaxObject work, the environment paritition
* is set to be the same value as MaxObject.
*/
LockTest.LockingEnvSetUp(testHome, testName, out env, 0, 0,
maxObjects, maxObjects);
Assert.AreEqual(maxObjects, env.MaxObjects);
env.Close();
}
public static void Confirm(XmlElement xmlElement,
LockingConfig lockingConfig, bool compulsory)
{
Configuration.ConfirmByteMatrix(xmlElement, "Conflicts",
lockingConfig.Conflicts, compulsory);
Configuration.ConfirmDeadlockPolicy(xmlElement,
"DeadlockResolution",
lockingConfig.DeadlockResolution, compulsory);
Configuration.ConfirmUint(xmlElement, "MaxLockers",
lockingConfig.MaxLockers, compulsory);
Configuration.ConfirmUint(xmlElement, "MaxLocks",
lockingConfig.MaxLocks, compulsory);
Configuration.ConfirmUint(xmlElement, "MaxObjects",
lockingConfig.MaxObjects, compulsory);
Configuration.ConfirmUint(xmlElement, "Partitions",
lockingConfig.Partitions, compulsory);
}
public static void Config(XmlElement xmlElement,
ref LockingConfig lockingConfig, bool compulsory)
{
byte[,] matrix = new byte[6, 6];
uint value = new uint();
if (Configuration.ConfigByteMatrix(xmlElement, "Conflicts",
ref matrix, compulsory) == true)
lockingConfig.Conflicts = matrix;
Configuration.ConfigDeadlockPolicy(xmlElement, "DeadlockResolution",
ref lockingConfig.DeadlockResolution, compulsory);
if (Configuration.ConfigUint(xmlElement, "MaxLockers",
ref value, compulsory))
lockingConfig.MaxLockers = value;
if (Configuration.ConfigUint(xmlElement, "MaxLocks",
ref value, compulsory))
lockingConfig.MaxLocks = value;
if (Configuration.ConfigUint(xmlElement, "MaxObjects",
ref value, compulsory))
lockingConfig.MaxObjects = value;
if (Configuration.ConfigUint(xmlElement, "Partitions",
ref value, compulsory))
lockingConfig.Partitions = value;
}
}
}