Imported Upstream version 5.3.21
[platform/upstream/libdb.git] / test / csharp / RecnoDatabaseConfigTest.cs
1 /*-
2  * See the file LICENSE for redistribution information.
3  *
4  * Copyright (c) 2009, 2012 Oracle and/or its affiliates.  All rights reserved.
5  *
6  */
7 using System;
8 using System.Collections.Generic;
9 using System.IO;
10 using System.Text;
11 using System.Xml;
12 using NUnit.Framework;
13 using BerkeleyDB;
14
15 namespace CsharpAPITest
16 {
17         [TestFixture]
18         public class RecnoDatabaseConfigTest : DatabaseConfigTest
19         {
20
21                 [TestFixtureSetUp]
22                 public override void SetUpTestFixture()
23                 {
24                         testFixtureName = "RecnoDatabaseConfigTest";
25                         base.SetUpTestfixture();
26                 }
27
28                 [Test]
29                 override public void TestConfigWithoutEnv()
30                 {
31                         testName = "TestConfigWithoutEnv";
32                         SetUpTest(false);
33                         XmlElement xmlElem = Configuration.TestSetUp(
34                             testFixtureName, testName);
35
36                         RecnoDatabaseConfig recnoDBConfig =
37                             new RecnoDatabaseConfig();
38                         Config(xmlElem, ref recnoDBConfig, true);
39                         Confirm(xmlElem, recnoDBConfig, true);
40                 }
41
42                 [Test]
43                 public void TestAppend()
44                 {
45                         uint recno;
46
47                         testName = "TestAppend";
48                         SetUpTest(true);
49                         string dbFileName = testHome + "/" + testName + ".db";
50
51                         RecnoDatabaseConfig recnoConfig =
52                             new RecnoDatabaseConfig();
53                         recnoConfig.Creation = CreatePolicy.IF_NEEDED;
54                         recnoConfig.Append = new AppendRecordDelegate(
55                             AppendRecord);
56                         RecnoDatabase recnoDB = RecnoDatabase.Open(
57                             dbFileName, recnoConfig);
58                         recno = recnoDB.Append(new DatabaseEntry(
59                             ASCIIEncoding.ASCII.GetBytes("data")));
60
61                         KeyValuePair<DatabaseEntry, DatabaseEntry> pair;
62                         pair = recnoDB.Get(
63                             new DatabaseEntry(BitConverter.GetBytes(recno)));
64                         Assert.AreEqual(ASCIIEncoding.ASCII.GetBytes("data"),
65                             pair.Value.Data);
66
67                         recnoDB.Close();
68                 }
69
70                 public void AppendRecord(DatabaseEntry data, uint recno)
71                 {
72                         data.Data = BitConverter.GetBytes(recno);
73                 }
74
75                 public static void Confirm(XmlElement xmlElement,
76                     RecnoDatabaseConfig recnoDBConfig, bool compulsory)
77                 {
78                         DatabaseConfig dbConfig = recnoDBConfig;
79                         Confirm(xmlElement, dbConfig, compulsory);
80
81                         // Confirm Recno database specific configuration
82                         Configuration.ConfirmString(xmlElement, "BackingFile",
83                             recnoDBConfig.BackingFile, compulsory);
84                         Configuration.ConfirmCreatePolicy(xmlElement,
85                             "Creation", recnoDBConfig.Creation, compulsory);
86                         Configuration.ConfirmInt(xmlElement, "Delimiter",
87                             recnoDBConfig.Delimiter, compulsory);
88                         Configuration.ConfirmUint(xmlElement, "Length",
89                             recnoDBConfig.Length, compulsory);
90                         Configuration.ConfirmInt(xmlElement, "PadByte",
91                             recnoDBConfig.PadByte, compulsory);
92                         Configuration.ConfirmBool(xmlElement, "Renumber",
93                             recnoDBConfig.Renumber, compulsory);
94                         Configuration.ConfirmBool(xmlElement, "Snapshot",
95                             recnoDBConfig.Snapshot, compulsory);
96                 }
97
98                 public static void Config(XmlElement xmlElement,
99                     ref RecnoDatabaseConfig recnoDBConfig, bool compulsory)
100                 {
101                         int intValue = new int();
102                         uint uintValue = new uint();
103                         DatabaseConfig dbConfig = recnoDBConfig;
104                         Config(xmlElement, ref dbConfig, compulsory);
105
106                         // Configure specific fields/properties of Recno database
107                         Configuration.ConfigCreatePolicy(xmlElement, "Creation",
108                             ref recnoDBConfig.Creation, compulsory);
109                         if (Configuration.ConfigInt(xmlElement, "Delimiter",
110                             ref intValue, compulsory))
111                                 recnoDBConfig.Delimiter = intValue;
112                         if (Configuration.ConfigUint(xmlElement, "Length",
113                             ref uintValue, compulsory))
114                                 recnoDBConfig.Length = uintValue;
115                         if (Configuration.ConfigInt(xmlElement, "PadByte",
116                             ref intValue, compulsory))
117                                 recnoDBConfig.PadByte = intValue;
118                         Configuration.ConfigBool(xmlElement, "Renumber",
119                             ref recnoDBConfig.Renumber, compulsory);
120                         Configuration.ConfigBool(xmlElement, "Snapshot",
121                             ref recnoDBConfig.Snapshot, compulsory);
122                 }
123         }
124 }