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.Generic; 9using System.IO; 10using System.Text; 11using System.Xml; 12using System.Xml.XPath; 13using BerkeleyDB; 14using NUnit.Framework; 15 16namespace CsharpAPITest 17{ 18 [TestFixture] 19 public class DatabaseEnvironmentConfigTest 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 = "DatabaseEnvironmentConfigTest"; 30 testFixtureHome = "./TestOut/" + testFixtureName; 31 32 Configuration.ClearDir(testFixtureHome); 33 } 34 35 [Test] 36 public void TestConfig() 37 { 38 testName = "TestConfig"; 39 XmlElement xmlElem = Configuration.TestSetUp( 40 testFixtureName, testName); 41 DatabaseEnvironmentConfig envConfig = 42 new DatabaseEnvironmentConfig(); 43 Config(xmlElem, ref envConfig, true); 44 Confirm(xmlElem, envConfig, true); 45 } 46 47 public static void Confirm(XmlElement xmlElement, 48 DatabaseEnvironmentConfig envConfig, bool compulsory) 49 { 50 Configuration.ConfirmBool(xmlElement, "AutoCommit", 51 envConfig.AutoCommit, compulsory); 52 Configuration.ConfirmBool(xmlElement, "CDB_ALLDB", 53 envConfig.CDB_ALLDB, compulsory); 54 Configuration.ConfirmBool(xmlElement, "Create", 55 envConfig.Create, compulsory); 56 Configuration.ConfirmStringList(xmlElement, "DataDirs", 57 envConfig.DataDirs, compulsory); 58 Configuration.ConfirmString(xmlElement, "ErrorPrefix", 59 envConfig.ErrorPrefix, compulsory); 60 Configuration.ConfirmBool(xmlElement, "ForceFlush", 61 envConfig.ForceFlush, compulsory); 62 Configuration.ConfirmBool(xmlElement, "FreeThreaded", 63 envConfig.FreeThreaded, compulsory); 64 Configuration.ConfirmBool(xmlElement, "InitRegions", 65 envConfig.InitRegions, compulsory); 66 Configuration.ConfirmString(xmlElement, 67 "IntermediateDirMode", 68 envConfig.IntermediateDirMode, compulsory); 69 Configuration.ConfirmBool(xmlElement, "Lockdown", 70 envConfig.Lockdown, compulsory); 71 Configuration.ConfirmUint(xmlElement, "LockTimeout", 72 envConfig.LockTimeout, compulsory); 73 Configuration.ConfirmUint(xmlElement, "MaxTransactions", 74 envConfig.MaxTransactions, compulsory); 75 Configuration.ConfirmBool(xmlElement, "NoBuffer", 76 envConfig.NoBuffer, compulsory); 77 Configuration.ConfirmBool(xmlElement, "NoLocking", 78 envConfig.NoLocking, compulsory); 79 Configuration.ConfirmBool(xmlElement, "NoMMap", 80 envConfig.NoMMap, compulsory); 81 Configuration.ConfirmBool(xmlElement, "NoLocking", 82 envConfig.NoLocking, compulsory); 83 Configuration.ConfirmBool(xmlElement, "NoPanic", 84 envConfig.NoPanic, compulsory); 85 Configuration.ConfirmBool(xmlElement, "Overwrite", 86 envConfig.Overwrite, compulsory); 87 Configuration.ConfirmBool(xmlElement, "Private", 88 envConfig.Private, compulsory); 89 Configuration.ConfirmBool(xmlElement, "Register", 90 envConfig.Register, compulsory); 91 Configuration.ConfirmBool(xmlElement, "RunFatalRecovery", 92 envConfig.RunFatalRecovery, compulsory); 93 Configuration.ConfirmBool(xmlElement, "RunRecovery", 94 envConfig.RunRecovery, compulsory); 95 Configuration.ConfirmBool(xmlElement, "SystemMemory", 96 envConfig.SystemMemory, compulsory); 97 Configuration.ConfirmString(xmlElement, "TempDir", 98 envConfig.TempDir, compulsory); 99 Configuration.ConfirmBool(xmlElement, "TimeNotGranted", 100 envConfig.TimeNotGranted, compulsory); 101 Configuration.ConfirmBool(xmlElement, "TxnNoSync", 102 envConfig.TxnNoSync, compulsory); 103 Configuration.ConfirmBool(xmlElement, "TxnNoWait", 104 envConfig.TxnNoWait, compulsory); 105 Configuration.ConfirmBool(xmlElement, "TxnSnapshot", 106 envConfig.TxnSnapshot, compulsory); 107 Configuration.ConfirmDateTime(xmlElement,"TxnTimestamp", 108 envConfig.TxnTimestamp, compulsory); 109 Configuration.ConfirmBool(xmlElement, "TxnWriteNoSync", 110 envConfig.TxnWriteNoSync, compulsory); 111 Configuration.ConfirmBool(xmlElement, "UseCDB", 112 envConfig.UseCDB, compulsory); 113 Configuration.ConfirmBool(xmlElement, "UseLocking", 114 envConfig.UseLocking, compulsory); 115 Configuration.ConfirmBool(xmlElement, "UseLogging", 116 envConfig.UseLogging, compulsory); 117 Configuration.ConfirmBool(xmlElement, "UseMPool", 118 envConfig.UseMPool, compulsory); 119 Configuration.ConfirmBool(xmlElement, "UseMVCC", 120 envConfig.UseMVCC, compulsory); 121 Configuration.ConfirmBool(xmlElement, "UseReplication", 122 envConfig.UseReplication, compulsory); 123 Configuration.ConfirmBool(xmlElement, "UseTxns", 124 envConfig.UseTxns, compulsory); 125 envConfig.Verbosity = new VerboseMessages(); 126 Configuration.ConfirmVerboseMessages(xmlElement, 127 "Verbosity", envConfig.Verbosity, compulsory); 128 Configuration.ConfirmBool(xmlElement, "YieldCPU", 129 envConfig.YieldCPU, compulsory); 130 } 131 132 public static void Config(XmlElement xmlElement, 133 ref DatabaseEnvironmentConfig envConfig, bool compulsory) 134 { 135 uint value = new uint(); 136 DateTime time = new DateTime(); 137 138 Configuration.ConfigBool(xmlElement, "AutoCommit", 139 ref envConfig.AutoCommit, compulsory); 140 Configuration.ConfigBool(xmlElement, "CDB_ALLDB", 141 ref envConfig.CDB_ALLDB, compulsory); 142 Configuration.ConfigBool(xmlElement, "Create", 143 ref envConfig.Create, compulsory); 144 Configuration.ConfigString(xmlElement, "CreationDir", 145 ref envConfig.CreationDir, compulsory); 146 Configuration.ConfigStringList(xmlElement, "DataDirs", 147 ref envConfig.DataDirs, compulsory); 148 Configuration.ConfigString(xmlElement, "ErrorPrefix", 149 ref envConfig.ErrorPrefix, compulsory); 150 Configuration.ConfigBool(xmlElement, "ForceFlush", 151 ref envConfig.ForceFlush, compulsory); 152 Configuration.ConfigBool(xmlElement, "FreeThreaded", 153 ref envConfig.FreeThreaded, compulsory); 154 Configuration.ConfigBool(xmlElement, "InitRegions", 155 ref envConfig.InitRegions, compulsory); 156 Configuration.ConfigString(xmlElement, "IntermediateDirMode", 157 ref envConfig.IntermediateDirMode, compulsory); 158 Configuration.ConfigBool(xmlElement, "Lockdown", 159 ref envConfig.Lockdown, compulsory); 160 if (Configuration.ConfigUint(xmlElement, "LockTimeout", 161 ref value, compulsory)) 162 envConfig.LockTimeout = value; 163 if (Configuration.ConfigUint(xmlElement, "MaxTransactions", 164 ref value, compulsory)) 165 envConfig.MaxTransactions = value; 166 Configuration.ConfigBool(xmlElement, "NoBuffer", 167 ref envConfig.NoBuffer, compulsory); 168 Configuration.ConfigBool(xmlElement, "NoLocking", 169 ref envConfig.NoLocking, compulsory); 170 Configuration.ConfigBool(xmlElement, "NoMMap", 171 ref envConfig.NoMMap, compulsory); 172 Configuration.ConfigBool(xmlElement, "NoLocking", 173 ref envConfig.NoLocking, compulsory); 174 Configuration.ConfigBool(xmlElement, "NoPanic", 175 ref envConfig.NoPanic, compulsory); 176 Configuration.ConfigBool(xmlElement, "Overwrite", 177 ref envConfig.Overwrite, compulsory); 178 Configuration.ConfigBool(xmlElement, "Private", 179 ref envConfig.Private, compulsory); 180 Configuration.ConfigBool(xmlElement, "Register", 181 ref envConfig.Register, compulsory); 182 Configuration.ConfigBool(xmlElement, "RunFatalRecovery", 183 ref envConfig.RunFatalRecovery, compulsory); 184 Configuration.ConfigBool(xmlElement, "RunRecovery", 185 ref envConfig.RunRecovery, compulsory); 186 Configuration.ConfigBool(xmlElement, "SystemMemory", 187 ref envConfig.SystemMemory, compulsory); 188 Configuration.ConfigString(xmlElement, "TempDir", 189 ref envConfig.TempDir, compulsory); 190 Configuration.ConfigBool(xmlElement, "TimeNotGranted", 191 ref envConfig.TimeNotGranted, compulsory); 192 Configuration.ConfigBool(xmlElement, "TxnNoSync", 193 ref envConfig.TxnNoSync, compulsory); 194 Configuration.ConfigBool(xmlElement, "TxnNoWait", 195 ref envConfig.TxnNoWait, compulsory); 196 Configuration.ConfigBool(xmlElement, "TxnSnapshot", 197 ref envConfig.TxnSnapshot, compulsory); 198 if (Configuration.ConfigDateTime(xmlElement, "TxnTimestamp", 199 ref time, compulsory)) 200 envConfig.TxnTimestamp = time; 201 Configuration.ConfigBool(xmlElement, "TxnWriteNoSync", 202 ref envConfig.TxnWriteNoSync, compulsory); 203 Configuration.ConfigBool(xmlElement, "UseLocking", 204 ref envConfig.UseLocking, compulsory); 205 Configuration.ConfigBool(xmlElement, "UseLogging", 206 ref envConfig.UseLogging, compulsory); 207 Configuration.ConfigBool(xmlElement, "UseMPool", 208 ref envConfig.UseMPool, compulsory); 209 Configuration.ConfigBool(xmlElement, "UseMVCC", 210 ref envConfig.UseMVCC, compulsory); 211 Configuration.ConfigBool(xmlElement, "UseReplication", 212 ref envConfig.UseReplication, compulsory); 213 Configuration.ConfigBool(xmlElement, "UseTxns", 214 ref envConfig.UseTxns, compulsory); 215 envConfig.Verbosity = new VerboseMessages(); 216 Configuration.ConfigVerboseMessages(xmlElement, 217 "Verbosity", ref envConfig.Verbosity, compulsory); 218 Configuration.ConfigBool(xmlElement, "YieldCPU", 219 ref envConfig.YieldCPU, compulsory); 220 } 221 222 [Test] 223 public void TestConfigLock() 224 { 225 testName = "TestConfigLock"; 226 XmlElement xmlElem = Configuration.TestSetUp( 227 testFixtureName, testName); 228 DatabaseEnvironmentConfig cfg = 229 new DatabaseEnvironmentConfig(); 230 cfg.LockSystemCfg = new LockingConfig(); 231 LockingConfigTest.Config(xmlElem, 232 ref cfg.LockSystemCfg, true); 233 LockingConfigTest.Confirm(xmlElem, 234 cfg.LockSystemCfg, true); 235 } 236 237 [Test] 238 public void TestConfigLog() 239 { 240 testName = "TestConfigLog"; 241 XmlElement xmlElem = Configuration.TestSetUp( 242 testFixtureName, testName); 243 DatabaseEnvironmentConfig cfg = 244 new DatabaseEnvironmentConfig(); 245 cfg.LogSystemCfg = new LogConfig(); 246 LogConfigTest.Config(xmlElem, ref cfg.LogSystemCfg, true); 247 LogConfigTest.Confirm(xmlElem, cfg.LogSystemCfg, true); 248 } 249 250 [Test] 251 public void TestConfigMutex() 252 { 253 testName = "TestConfigMutex"; 254 XmlElement xmlElem = Configuration.TestSetUp( 255 testFixtureName, testName); 256 DatabaseEnvironmentConfig cfg = 257 new DatabaseEnvironmentConfig(); 258 cfg.MutexSystemCfg = new MutexConfig(); 259 MutexConfigTest.Config(xmlElem, ref cfg.MutexSystemCfg, true); 260 MutexConfigTest.Confirm(xmlElem, cfg.MutexSystemCfg, true); 261 } 262 263 [Test] 264 public void TestConfigReplication() 265 { 266 testName = "TestConfigReplication"; 267 XmlElement xmlElem = Configuration.TestSetUp( 268 testFixtureName, testName); 269 DatabaseEnvironmentConfig cfg = 270 new DatabaseEnvironmentConfig(); 271 cfg.RepSystemCfg = new ReplicationConfig(); 272 ReplicationConfigTest.Config(xmlElem, 273 ref cfg.RepSystemCfg, true); 274 ReplicationConfigTest.Confirm(xmlElem, 275 cfg.RepSystemCfg, true); 276 } 277 278 [Test] 279 public void TestSetEncryption() 280 { 281 testName = "TestSetEncryption"; 282 testHome = testFixtureHome + "/" + testName; 283 284 Configuration.ClearDir(testHome); 285 DatabaseEnvironmentConfig envConfig = 286 new DatabaseEnvironmentConfig(); 287 envConfig.Create = true; 288 envConfig.SetEncryption("key", EncryptionAlgorithm.AES); 289 Assert.AreEqual("key", envConfig.EncryptionPassword); 290 Assert.AreEqual(EncryptionAlgorithm.AES, envConfig.EncryptAlgorithm); 291 DatabaseEnvironment env = DatabaseEnvironment.Open( 292 testHome, envConfig); 293 Assert.AreEqual(EncryptionAlgorithm.AES, env.EncryptAlgorithm); 294 env.Close(); 295 } 296 297 } 298} 299 300