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 NUnit.Framework; 13using BerkeleyDB; 14 15namespace CsharpAPITest 16{ 17 [TestFixture] 18 public class RecnoDatabaseConfigTest : DatabaseConfigTest 19 { 20 private string testFixtureHome; 21 private string testFixtureName; 22 private string testName; 23 private string testHome; 24 25 [TestFixtureSetUp] 26 public void RunBeforeTests() 27 { 28 testFixtureName = "RecnoDatabaseConfigTest"; 29 testFixtureHome = "./TestOut/" + testFixtureName; 30 31 Configuration.ClearDir(testFixtureHome); 32 } 33 34 [Test] 35 override public void TestConfigWithoutEnv() 36 { 37 testName = "TestConfigWithoutEnv"; 38 XmlElement xmlElem = Configuration.TestSetUp( 39 testFixtureName, testName); 40 41 RecnoDatabaseConfig recnoDBConfig = 42 new RecnoDatabaseConfig(); 43 Config(xmlElem, ref recnoDBConfig, true); 44 Confirm(xmlElem, recnoDBConfig, true); 45 } 46 47 [Test] 48 public void TestAppend() 49 { 50 uint recno; 51 52 testName = "TestAppend"; 53 testHome = testFixtureHome + "/" + testName; 54 string dbFileName = testHome + "/" + testName + ".db"; 55 56 Configuration.ClearDir(testHome); 57 58 RecnoDatabaseConfig recnoConfig = 59 new RecnoDatabaseConfig(); 60 recnoConfig.Creation = CreatePolicy.IF_NEEDED; 61 recnoConfig.Append = new AppendRecordDelegate( 62 AppendRecord); 63 RecnoDatabase recnoDB = RecnoDatabase.Open( 64 dbFileName, recnoConfig); 65 recno = recnoDB.Append(new DatabaseEntry( 66 ASCIIEncoding.ASCII.GetBytes("data"))); 67 68 KeyValuePair<DatabaseEntry, DatabaseEntry> pair; 69 pair = recnoDB.Get( 70 new DatabaseEntry(BitConverter.GetBytes(recno))); 71 Assert.AreEqual(ASCIIEncoding.ASCII.GetBytes("data"), 72 pair.Value.Data); 73 74 recnoDB.Close(); 75 } 76 77 public void AppendRecord(DatabaseEntry data, uint recno) 78 { 79 data.Data = BitConverter.GetBytes(recno); 80 } 81 82 public static void Confirm(XmlElement xmlElement, 83 RecnoDatabaseConfig recnoDBConfig, bool compulsory) 84 { 85 DatabaseConfig dbConfig = recnoDBConfig; 86 Confirm(xmlElement, dbConfig, compulsory); 87 88 // Confirm Recno database specific configuration 89 Configuration.ConfirmString(xmlElement, "BackingFile", 90 recnoDBConfig.BackingFile, compulsory); 91 Configuration.ConfirmCreatePolicy(xmlElement, 92 "Creation", recnoDBConfig.Creation, compulsory); 93 Configuration.ConfirmInt(xmlElement, "Delimiter", 94 recnoDBConfig.Delimiter, compulsory); 95 Configuration.ConfirmUint(xmlElement, "Length", 96 recnoDBConfig.Length, compulsory); 97 Configuration.ConfirmInt(xmlElement, "PadByte", 98 recnoDBConfig.PadByte, compulsory); 99 Configuration.ConfirmBool(xmlElement, "Renumber", 100 recnoDBConfig.Renumber, compulsory); 101 Configuration.ConfirmBool(xmlElement, "Snapshot", 102 recnoDBConfig.Snapshot, compulsory); 103 } 104 105 public static void Config(XmlElement xmlElement, 106 ref RecnoDatabaseConfig recnoDBConfig, bool compulsory) 107 { 108 int intValue = new int(); 109 uint uintValue = new uint(); 110 DatabaseConfig dbConfig = recnoDBConfig; 111 Config(xmlElement, ref dbConfig, compulsory); 112 113 // Configure specific fields/properties of Recno database 114 Configuration.ConfigCreatePolicy(xmlElement, "Creation", 115 ref recnoDBConfig.Creation, compulsory); 116 if (Configuration.ConfigInt(xmlElement, "Delimiter", 117 ref intValue, compulsory)) 118 recnoDBConfig.Delimiter = intValue; 119 if (Configuration.ConfigUint(xmlElement, "Length", 120 ref uintValue, compulsory)) 121 recnoDBConfig.Length = uintValue; 122 if (Configuration.ConfigInt(xmlElement, "PadByte", 123 ref intValue, compulsory)) 124 recnoDBConfig.PadByte = intValue; 125 Configuration.ConfigBool(xmlElement, "Renumber", 126 ref recnoDBConfig.Renumber, compulsory); 127 Configuration.ConfigBool(xmlElement, "Snapshot", 128 ref recnoDBConfig.Snapshot, compulsory); 129 } 130 } 131} 132