• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/db-4.8.30/test/scr037/
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.Threading;
13using System.Xml;
14using NUnit.Framework;
15using BerkeleyDB;
16
17namespace CsharpAPITest
18{
19	[TestFixture]
20	public class SecondaryQueueDatabaseTest
21	{
22		private string testFixtureHome;
23		private string testFixtureName;
24		private string testName;
25		private string testHome;
26
27		[TestFixtureSetUp]
28		public void RunBeforeTests()
29		{
30			testFixtureName = "SecondaryQueueDatabaseTest";
31			testFixtureHome = "./TestOut/" + testFixtureName;
32
33			Configuration.ClearDir(testFixtureHome);
34		}
35
36		/*
37		 * Tests to all Open() share the same configuration in
38		 * AllTestData.xml.
39		 */
40		[Test]
41		public void TestOpen()
42		{
43			testName = "TestOpen";
44			testHome = testFixtureHome + "/" + testName;
45			string dbFileName = testHome + "/" + testName + ".db";
46			string dbSecFileName = testHome + "/" +
47			    testName + "_sec.db";
48
49			Configuration.ClearDir(testHome);
50
51			OpenSecQueueDB(testFixtureName, "TestOpen",
52			    dbFileName, dbSecFileName);
53		}
54
55		public void OpenSecQueueDB(string className,
56		    string funName, string dbFileName, string dbSecFileName)
57		{
58			XmlElement xmlElem = Configuration.TestSetUp(
59			    className, funName);
60
61			// Open a primary queue database.
62			QueueDatabaseConfig primaryDBConfig =
63			    new QueueDatabaseConfig();
64			primaryDBConfig.Creation = CreatePolicy.IF_NEEDED;
65			QueueDatabase primaryDB;
66
67			/*
68			 * If secondary database name is given, the primary
69			 * database is also opened with database name.
70			 */
71			primaryDB = QueueDatabase.Open(dbFileName,
72			    primaryDBConfig);
73
74			try
75			{
76				// Open a new secondary database.
77				SecondaryQueueDatabaseConfig secQueueDBConfig =
78				    new SecondaryQueueDatabaseConfig(
79				    primaryDB, null);
80				SecondaryQueueDatabaseConfigTest.Config(
81				    xmlElem, ref secQueueDBConfig, false);
82				secQueueDBConfig.Creation =
83				    CreatePolicy.IF_NEEDED;
84
85				SecondaryQueueDatabase secQueueDB;
86				secQueueDB = SecondaryQueueDatabase.Open(
87				    dbSecFileName, secQueueDBConfig);
88
89				// Close the secondary database.
90				secQueueDB.Close();
91
92				// Open the existing secondary database.
93				SecondaryDatabaseConfig secDBConfig =
94				    new SecondaryQueueDatabaseConfig(
95				    primaryDB, null);
96
97				SecondaryDatabase secDB;
98				secDB = SecondaryQueueDatabase.Open(
99				    dbSecFileName, secDBConfig);
100
101				// Close secondary database.
102				secDB.Close();
103			}
104			catch (DatabaseException)
105			{
106				throw new TestException();
107			}
108			finally
109			{
110				// Close primary database.
111				primaryDB.Close();
112			}
113		}
114
115		[Test]
116		public void TestOpenWithinTxn()
117		{
118			testName = "TestOpenWithinTxn";
119			testHome = testFixtureHome + "/" + testName;
120			string dbFileName = testName + ".db";
121			string dbSecFileName = testName + "_sec.db";
122
123			Configuration.ClearDir(testHome);
124
125			OpenSecQueueDBWithinTxn(testFixtureName,
126			    "TestOpen", testHome, dbFileName,
127			    dbSecFileName);
128		}
129
130		[Test]
131		public void TestOpenDBNameWithinTxn()
132		{
133			testName = "TestOpenDBNameWithinTxn";
134			testHome = testFixtureHome + "/" + testName;
135			string dbFileName = testName + ".db";
136			string dbSecFileName = testName + "_sec.db";
137
138			Configuration.ClearDir(testHome);
139
140			OpenSecQueueDBWithinTxn(testFixtureName,
141			    "TestOpen", testHome, dbFileName,
142			    dbSecFileName);
143		}
144
145		public void OpenSecQueueDBWithinTxn(string className,
146		    string funName, string home, string dbFileName,
147		    string dbSecFileName)
148		{
149			XmlElement xmlElem = Configuration.TestSetUp(
150			    className, funName);
151
152			// Open an environment.
153			DatabaseEnvironmentConfig envConfig =
154			    new DatabaseEnvironmentConfig();
155			envConfig.Create = true;
156			envConfig.UseTxns = true;
157			envConfig.UseMPool = true;
158			envConfig.UseLogging = true;
159			DatabaseEnvironment env = DatabaseEnvironment.Open(
160			    home, envConfig);
161
162			// Open a primary queue database.
163			Transaction openDBTxn = env.BeginTransaction();
164			QueueDatabaseConfig dbConfig =
165			    new QueueDatabaseConfig();
166			dbConfig.Creation = CreatePolicy.IF_NEEDED;
167			dbConfig.Env = env;
168			QueueDatabase db = QueueDatabase.Open(
169			    dbFileName, dbConfig, openDBTxn);
170			openDBTxn.Commit();
171
172			// Open a secondary queue database.
173			Transaction openSecTxn = env.BeginTransaction();
174			SecondaryQueueDatabaseConfig secDBConfig =
175			    new SecondaryQueueDatabaseConfig(db,
176			    new SecondaryKeyGenDelegate(SecondaryKeyGen));
177			SecondaryQueueDatabaseConfigTest.Config(xmlElem,
178			    ref secDBConfig, true);
179			secDBConfig.Env = env;
180			SecondaryQueueDatabase secDB;
181			secDB = SecondaryQueueDatabase.Open(
182			    dbSecFileName, secDBConfig, openSecTxn);
183
184			openSecTxn.Commit();
185
186			// Confirm its flags configured in secDBConfig.
187			Confirm(xmlElem, secDB, true);
188			secDB.Close();
189
190			// Open the existing secondary database.
191			Transaction secTxn = env.BeginTransaction();
192			SecondaryDatabaseConfig secConfig =
193			    new SecondaryDatabaseConfig(db,
194			    new SecondaryKeyGenDelegate(SecondaryKeyGen));
195			secConfig.Env = env;
196
197			SecondaryDatabase secExDB;
198			secExDB = SecondaryQueueDatabase.Open(
199			    dbSecFileName, secConfig, secTxn);
200
201			secExDB.Close();
202			secTxn.Commit();
203
204			db.Close();
205			env.Close();
206		}
207
208		public DatabaseEntry SecondaryKeyGen(
209		    DatabaseEntry key, DatabaseEntry data)
210		{
211			DatabaseEntry dbtGen;
212			dbtGen = new DatabaseEntry(data.Data);
213			return dbtGen;
214		}
215
216		public static void Confirm(XmlElement xmlElem,
217		    SecondaryQueueDatabase secDB, bool compulsory)
218		{
219			Configuration.ConfirmUint(xmlElem,
220			    "ExtentSize", secDB.ExtentSize, compulsory);
221			Configuration.ConfirmUint(xmlElem, "Length",
222			    secDB.Length, compulsory);
223			Configuration.ConfirmInt(xmlElem, "PadByte",
224			    secDB.PadByte, compulsory);
225		}
226	}
227}
228