2 * See the file LICENSE for redistribution information.
4 * Copyright (c) 2009, 2012 Oracle and/or its affiliates. All rights reserved.
8 using System.Collections;
9 using System.Collections.Generic;
12 using System.Threading;
14 using NUnit.Framework;
17 namespace CsharpAPITest
20 public class SecondaryRecnoDatabaseTest : CSharpTestFixture
24 public void SetUpTestFixture()
26 testFixtureName = "SecondaryRecnoDatabaseTest";
27 base.SetUpTestfixture();
31 * Tests to all Open() share the same configuration in
35 public void TestOpen()
37 testName = "TestOpen";
39 string dbFileName = testHome + "/" + testName + ".db";
40 string dbSecFileName = testHome + "/" +
43 OpenSecRecnoDB(testFixtureName, "TestOpen",
44 dbFileName, dbSecFileName, false);
48 public void TestOpenWithDBName()
50 testName = "TestOpenWithDBName";
52 string dbFileName = testHome + "/" + testName + ".db";
53 string dbSecFileName = testHome + "/" +
56 OpenSecRecnoDB(testFixtureName, "TestOpen",
57 dbFileName, dbSecFileName, true);
60 public void OpenSecRecnoDB(string className,
61 string funName, string dbFileName, string dbSecFileName,
64 XmlElement xmlElem = Configuration.TestSetUp(
67 // Open a primary recno database.
68 RecnoDatabaseConfig primaryDBConfig =
69 new RecnoDatabaseConfig();
70 primaryDBConfig.Creation = CreatePolicy.IF_NEEDED;
71 RecnoDatabase primaryDB;
74 * If secondary database name is given, the primary
75 * database is also opened with database name.
77 if (ifDBName == false)
78 primaryDB = RecnoDatabase.Open(dbFileName,
81 primaryDB = RecnoDatabase.Open(dbFileName,
82 "primary", primaryDBConfig);
86 // Open a new secondary database.
87 SecondaryRecnoDatabaseConfig secRecnoDBConfig =
88 new SecondaryRecnoDatabaseConfig(
90 SecondaryRecnoDatabaseConfigTest.Config(
91 xmlElem, ref secRecnoDBConfig, false);
92 secRecnoDBConfig.Creation =
93 CreatePolicy.IF_NEEDED;
95 SecondaryRecnoDatabase secRecnoDB;
96 if (ifDBName == false)
97 secRecnoDB = SecondaryRecnoDatabase.Open(
98 dbSecFileName, secRecnoDBConfig);
100 secRecnoDB = SecondaryRecnoDatabase.Open(
101 dbSecFileName, "secondary",
104 // Close the secondary database.
107 // Open the existing secondary database.
108 SecondaryDatabaseConfig secDBConfig =
109 new SecondaryDatabaseConfig(
112 SecondaryDatabase secDB;
113 if (ifDBName == false)
114 secDB = SecondaryRecnoDatabase.Open(
115 dbSecFileName, secDBConfig);
117 secDB = SecondaryRecnoDatabase.Open(
118 dbSecFileName, "secondary", secDBConfig);
120 // Close secondary database.
123 catch (DatabaseException)
125 throw new TestException();
129 // Close primary database.
135 public void TestOpenWithinTxn()
137 testName = "TestOpenWithinTxn";
139 string dbFileName = testName + ".db";
140 string dbSecFileName = testName + "_sec.db";
142 OpenSecRecnoDBWithinTxn(testFixtureName,
143 "TestOpen", testHome, dbFileName,
144 dbSecFileName, false);
148 public void TestOpenDBNameWithinTxn()
150 testName = "TestOpenDBNameWithinTxn";
152 string dbFileName = testName + ".db";
153 string dbSecFileName = testName + "_sec.db";
155 OpenSecRecnoDBWithinTxn(testFixtureName,
156 "TestOpen", testHome, dbFileName,
157 dbSecFileName, true);
160 public void OpenSecRecnoDBWithinTxn(string className,
161 string funName, string home, string dbFileName,
162 string dbSecFileName, bool ifDbName)
164 XmlElement xmlElem = Configuration.TestSetUp(
167 // Open an environment.
168 DatabaseEnvironmentConfig envConfig =
169 new DatabaseEnvironmentConfig();
170 envConfig.Create = true;
171 envConfig.UseTxns = true;
172 envConfig.UseMPool = true;
173 envConfig.UseLogging = true;
174 DatabaseEnvironment env = DatabaseEnvironment.Open(
177 // Open a primary recno database.
178 Transaction openDBTxn = env.BeginTransaction();
179 RecnoDatabaseConfig dbConfig =
180 new RecnoDatabaseConfig();
181 dbConfig.Creation = CreatePolicy.IF_NEEDED;
184 RecnoDatabase db = RecnoDatabase.Open(
185 dbFileName, dbConfig, openDBTxn);
188 // Open a secondary recno database.
189 Transaction openSecTxn = env.BeginTransaction();
190 SecondaryRecnoDatabaseConfig secDBConfig =
191 new SecondaryRecnoDatabaseConfig(db,
192 new SecondaryKeyGenDelegate(SecondaryKeyGen));
193 SecondaryRecnoDatabaseConfigTest.Config(xmlElem,
194 ref secDBConfig, false);
195 secDBConfig.Env = env;
196 SecondaryRecnoDatabase secDB;
197 if (ifDbName == false)
198 secDB = SecondaryRecnoDatabase.Open(
199 dbSecFileName, secDBConfig, openSecTxn);
201 secDB = SecondaryRecnoDatabase.Open(
202 dbSecFileName, "secondary", secDBConfig,
206 // Confirm its flags configured in secDBConfig.
207 Confirm(xmlElem, secDB, true);
210 // Open the existing secondary database.
211 Transaction secTxn = env.BeginTransaction();
212 SecondaryDatabaseConfig secConfig =
213 new SecondaryDatabaseConfig(db,
214 new SecondaryKeyGenDelegate(SecondaryKeyGen));
217 SecondaryDatabase secExDB;
218 if (ifDbName == false)
219 secExDB = SecondaryRecnoDatabase.Open(
220 dbSecFileName, secConfig, secTxn);
222 secExDB = SecondaryRecnoDatabase.Open(
223 dbSecFileName, "secondary", secConfig,
232 public DatabaseEntry SecondaryKeyGen(
233 DatabaseEntry key, DatabaseEntry data)
235 DatabaseEntry dbtGen;
236 dbtGen = new DatabaseEntry(data.Data);
240 public static void Confirm(XmlElement xmlElem,
241 SecondaryRecnoDatabase secDB, bool compulsory)
243 Configuration.ConfirmInt(xmlElem, "Delimiter",
244 secDB.Delimiter, compulsory);
245 Configuration.ConfirmUint(xmlElem, "Length",
246 secDB.Length, compulsory);
247 Configuration.ConfirmInt(xmlElem, "PadByte",
248 secDB.PadByte, compulsory);
249 Configuration.ConfirmBool(xmlElem,
250 "Renumber", secDB.Renumber, compulsory);
251 Configuration.ConfirmBool(xmlElem, "Snapshot",
252 secDB.Snapshot, compulsory);