1/*-
2 * See the file LICENSE for redistribution information.
3 *
4 * Copyright (c) 2009 Oracle.  All rights reserved.
5 *
6 */
7using System;
8using System.Collections;
9using System.Collections.Generic;
10using System.IO;
11using System.Text;
12using System.Xml;
13using NUnit.Framework;
14using BerkeleyDB;
15
16namespace CsharpAPITest
17{
18	[TestFixture]
19	public class SecondaryBTreeDatabaseConfigTest
20	{
21		private string testFixtureHome;
22		private string testFixtureName;
23		private string testName;
24		private string testHome;
25
26		[TestFixtureSetUp]
27		public void RunBeforeTests()
28		{
29			testFixtureName = "SecondaryBTreeDatabaseConfigTest";
30			testFixtureHome = "./TestOut/" + testFixtureName;
31
32			Configuration.ClearDir(testFixtureHome);
33		}
34
35		[Test]
36		public void TestConfig()
37		{
38			testName = "TestConfig";
39			testHome = testFixtureHome + "/" + testName;
40			string dbFileName = testHome + "/" + testName + ".db";
41
42			Configuration.ClearDir(testHome);
43			XmlElement xmlElem = Configuration.TestSetUp(
44			    testFixtureName, testName);
45
46			// Open a primary btree database.
47			BTreeDatabaseConfig btreeDBConfig =
48			    new BTreeDatabaseConfig();
49			btreeDBConfig.Creation = CreatePolicy.IF_NEEDED;
50			BTreeDatabase btreeDB = BTreeDatabase.Open(
51			    dbFileName, btreeDBConfig);
52
53			SecondaryBTreeDatabaseConfig secDBConfig =
54			    new SecondaryBTreeDatabaseConfig(btreeDB, null);
55
56			Config(xmlElem, ref secDBConfig, true);
57			Confirm(xmlElem, secDBConfig, true);
58
59			// Close the primary btree database.
60			btreeDB.Close();
61		}
62
63		public static void Confirm(XmlElement xmlElement,
64		    SecondaryBTreeDatabaseConfig secBtreeDBConfig,
65		    bool compulsory)
66		{
67			SecondaryDatabaseConfig secDBConfig =
68			    secBtreeDBConfig;
69			SecondaryDatabaseConfigTest.Confirm(xmlElement,
70			    secDBConfig, compulsory);
71
72			// Confirm secondary btree database specific configuration.
73			Configuration.ConfirmCreatePolicy(xmlElement,
74			    "Creation", secBtreeDBConfig.Creation, compulsory);
75			Configuration.ConfirmDuplicatesPolicy(xmlElement,
76			    "Duplicates", secBtreeDBConfig.Duplicates, compulsory);
77			Configuration.ConfirmUint(xmlElement, "MinKeysPerPage",
78			    secBtreeDBConfig.MinKeysPerPage, compulsory);
79			Configuration.ConfirmBool(xmlElement,
80			    "NoReverseSplitting",
81			    secBtreeDBConfig.NoReverseSplitting, compulsory);
82			Configuration.ConfirmBool(xmlElement,
83			    "UseRecordNumbers",
84			    secBtreeDBConfig.UseRecordNumbers,
85			    compulsory);
86		}
87
88		public static void Config(XmlElement xmlElement,
89		    ref SecondaryBTreeDatabaseConfig secBtreeDBConfig,
90		    bool compulsory)
91		{
92			uint minKeysPerPage = new uint();
93
94			SecondaryDatabaseConfig secDBConfig = secBtreeDBConfig;
95			SecondaryDatabaseConfigTest.Config(xmlElement,
96			    ref secDBConfig, compulsory);
97
98			// Configure specific fields/properties of Btree db
99			Configuration.ConfigCreatePolicy(xmlElement,
100			    "Creation", ref secBtreeDBConfig.Creation, compulsory);
101			Configuration.ConfigDuplicatesPolicy(xmlElement,
102			    "Duplicates", ref secBtreeDBConfig.Duplicates,
103			    compulsory);
104			if (Configuration.ConfigUint(xmlElement,
105			    "MinKeysPerPage", ref minKeysPerPage, compulsory))
106				secBtreeDBConfig.MinKeysPerPage = minKeysPerPage;
107			Configuration.ConfigBool(xmlElement,
108			    "NoReverseSplitting",
109			    ref secBtreeDBConfig.NoReverseSplitting, compulsory);
110			Configuration.ConfigBool(xmlElement,
111			    "UseRecordNumbers",
112			    ref secBtreeDBConfig.UseRecordNumbers, compulsory);
113		}
114	}
115}
116