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.Xml;
13using NUnit.Framework;
14using BerkeleyDB;
15
16namespace CsharpAPITest
17{
18	[TestFixture]
19	public class ReplicationConfigTest
20	{
21		private string testFixtureName;
22		private string testName;
23
24		[TestFixtureSetUp]
25		public void RunBeforeTests()
26		{
27			testFixtureName = "ReplicationConfigTest";
28		}
29
30		[Test]
31		public void TestConfig()
32		{
33			testName = "TestConfig";
34
35			ReplicationConfig repConfig = new ReplicationConfig();
36			XmlElement xmlElem = Configuration.TestSetUp(
37			    testFixtureName, testName);
38			Config(xmlElem, ref repConfig, true);
39			Confirm(xmlElem, repConfig, true);
40
41			repConfig.Clockskew(102, 100);
42			Assert.AreEqual(102, repConfig.ClockskewFast);
43			Assert.AreEqual(100, repConfig.ClockskewSlow);
44
45			repConfig.TransmitLimit(1, 1024);
46			Assert.AreEqual(1, repConfig.TransmitLimitGBytes);
47			Assert.AreEqual(1024, repConfig.TransmitLimitBytes);
48
49			repConfig.RetransmissionRequest(10, 100);
50			Assert.AreEqual(100, repConfig.RetransmissionRequestMax);
51			Assert.AreEqual(10, repConfig.RetransmissionRequestMin);
52		}
53
54		[Test]
55		public void TestRepMgrLocalSite()
56		{
57			string host = "127.0.0.0";
58			uint port = 8888;
59			testName = "TestRepMgrLocalSite";
60
61			ReplicationConfig repConfig1 = new ReplicationConfig();
62			repConfig1.RepMgrLocalSite = new ReplicationHostAddress();
63			repConfig1.RepMgrLocalSite.Host = host;
64			repConfig1.RepMgrLocalSite.Port = port;
65			Assert.AreEqual(host, repConfig1.RepMgrLocalSite.Host);
66			Assert.AreEqual(port, repConfig1.RepMgrLocalSite.Port);
67
68			ReplicationConfig repConfig2 = new ReplicationConfig();
69			repConfig2.RepMgrLocalSite =
70			    new ReplicationHostAddress(host, port);
71			Assert.AreEqual(host, repConfig2.RepMgrLocalSite.Host);
72			Assert.AreEqual(port, repConfig2.RepMgrLocalSite.Port);
73
74			ReplicationConfig repConfig3 = new ReplicationConfig();
75			repConfig3.RepMgrLocalSite =
76			    new ReplicationHostAddress(host + ":" + port);
77			Assert.AreEqual(host, repConfig3.RepMgrLocalSite.Host);
78			Assert.AreEqual(port, repConfig3.RepMgrLocalSite.Port);
79		}
80
81		[Test]
82		public void TestRepMgrAckPolicy()
83		{
84			testName = "TestRepMgrAckPolicy";
85
86			ReplicationConfig repConfig = new ReplicationConfig();
87			repConfig.RepMgrAckPolicy = AckPolicy.ALL;
88			Assert.AreEqual(AckPolicy.ALL,
89			    repConfig.RepMgrAckPolicy);
90
91			repConfig.RepMgrAckPolicy = AckPolicy.ALL_PEERS;
92			Assert.AreEqual(AckPolicy.ALL_PEERS,
93			    repConfig.RepMgrAckPolicy);
94
95			repConfig.RepMgrAckPolicy = AckPolicy.NONE;
96			Assert.AreEqual(AckPolicy.NONE,
97			    repConfig.RepMgrAckPolicy);
98
99			repConfig.RepMgrAckPolicy = AckPolicy.ONE;
100			Assert.AreEqual(AckPolicy.ONE,
101			    repConfig.RepMgrAckPolicy);
102
103			repConfig.RepMgrAckPolicy = AckPolicy.ONE_PEER;
104			Assert.AreEqual(AckPolicy.ONE_PEER,
105			    repConfig.RepMgrAckPolicy);
106
107			repConfig.RepMgrAckPolicy = AckPolicy.QUORUM;
108			Assert.AreEqual(AckPolicy.QUORUM,
109			    repConfig.RepMgrAckPolicy);
110		}
111
112		public static void Confirm(XmlElement xmlElement,
113		    ReplicationConfig cfg, bool compulsory)
114		{
115			Configuration.ConfirmUint(xmlElement,
116			    "AckTimeout", cfg.AckTimeout,
117			    compulsory);
118			Configuration.ConfirmBool(xmlElement, "BulkTransfer",
119			    cfg.BulkTransfer, compulsory);
120			Configuration.ConfirmUint(xmlElement, "CheckpointDelay",
121			    cfg.CheckpointDelay, compulsory);
122			Configuration.ConfirmUint(xmlElement, "ConnectionRetry",
123			    cfg.ConnectionRetry, compulsory);
124			Configuration.ConfirmBool(xmlElement, "DelayClientSync",
125			    cfg.DelayClientSync, compulsory);
126			Configuration.ConfirmUint(xmlElement, "ElectionRetry",
127			    cfg.ElectionRetry, compulsory);
128			Configuration.ConfirmUint(xmlElement, "ElectionTimeout",
129			    cfg.ElectionTimeout, compulsory);
130			Configuration.ConfirmUint(xmlElement, "FullElectionTimeout",
131			    cfg.FullElectionTimeout, compulsory);
132			Configuration.ConfirmUint(xmlElement, "HeartbeatMonitor",
133			    cfg.HeartbeatMonitor, compulsory);
134			Configuration.ConfirmUint(xmlElement, "HeartbeatSend",
135			    cfg.HeartbeatSend, compulsory);
136			Configuration.ConfirmUint(xmlElement, "LeaseTimeout",
137			    cfg.LeaseTimeout, compulsory);
138			Configuration.ConfirmBool(xmlElement, "NoAutoInit",
139			    cfg.NoAutoInit, compulsory);
140			Configuration.ConfirmBool(xmlElement, "NoBlocking",
141			    cfg.NoBlocking, compulsory);
142			Configuration.ConfirmUint(xmlElement, "NSites",
143			    cfg.NSites, compulsory);
144			Configuration.ConfirmUint(xmlElement, "Priority",
145			    cfg.Priority, compulsory);
146			Configuration.ConfirmAckPolicy(xmlElement,
147			    "RepMgrAckPolicy", cfg.RepMgrAckPolicy, compulsory);
148			Configuration.ConfirmReplicationHostAddress(xmlElement,
149			    "RepMgrLocalSite", cfg.RepMgrLocalSite, compulsory);
150			Configuration.ConfirmBool(xmlElement, "Strict2Site",
151			    cfg.Strict2Site, compulsory);
152			Configuration.ConfirmBool(xmlElement, "UseMasterLeases",
153			    cfg.UseMasterLeases, compulsory);
154		}
155
156		public static void Config(XmlElement xmlElement,
157		    ref ReplicationConfig cfg, bool compulsory)
158		{
159			uint uintValue = new uint();
160
161			if (Configuration.ConfigUint(xmlElement, "AckTimeout",
162			    ref uintValue, compulsory))
163				cfg.AckTimeout = uintValue;
164			Configuration.ConfigBool(xmlElement, "BulkTransfer",
165			    ref cfg.BulkTransfer, compulsory);
166			if (Configuration.ConfigUint(xmlElement, "CheckpointDelay",
167			    ref uintValue, compulsory))
168				cfg.CheckpointDelay = uintValue;
169			if (Configuration.ConfigUint(xmlElement, "ConnectionRetry",
170			    ref uintValue, compulsory))
171				cfg.ConnectionRetry = uintValue;
172			Configuration.ConfigBool(xmlElement, "DelayClientSync",
173			    ref cfg.DelayClientSync, compulsory);
174			if (Configuration.ConfigUint(xmlElement, "ElectionRetry",
175			    ref uintValue, compulsory))
176				cfg.ElectionRetry = uintValue;
177			if (Configuration.ConfigUint(xmlElement, "ElectionTimeout",
178			    ref uintValue, compulsory))
179				cfg.ElectionTimeout = uintValue;
180			if (Configuration.ConfigUint(xmlElement, "FullElectionTimeout",
181			    ref uintValue, compulsory))
182				cfg.FullElectionTimeout = uintValue;
183			if (Configuration.ConfigUint(xmlElement, "HeartbeatMonitor",
184			    ref uintValue, compulsory))
185				cfg.HeartbeatMonitor = uintValue;
186			if (Configuration.ConfigUint(xmlElement, "HeartbeatSend",
187			    ref uintValue, compulsory))
188				cfg.HeartbeatSend = uintValue;
189			if (Configuration.ConfigUint(xmlElement, "LeaseTimeout",
190			    ref uintValue, compulsory))
191				cfg.LeaseTimeout = uintValue;
192			Configuration.ConfigBool(xmlElement, "NoAutoInit",
193			    ref cfg.NoAutoInit, compulsory);
194			Configuration.ConfigBool(xmlElement, "NoBlocking",
195			    ref cfg.NoBlocking, compulsory);
196			if (Configuration.ConfigUint(xmlElement, "NSites",
197			    ref uintValue, compulsory))
198				cfg.NSites = uintValue;
199			if (Configuration.ConfigUint(xmlElement, "Priority",
200			    ref uintValue, compulsory))
201				cfg.Priority = uintValue;
202			Configuration.ConfigAckPolicy(xmlElement,
203			    "RepMgrAckPolicy", ref cfg.RepMgrAckPolicy,
204			    compulsory);
205			cfg.RepMgrLocalSite = new ReplicationHostAddress();
206			Configuration.ConfigReplicationHostAddress(xmlElement,
207			    "RepMgrLocalSite", ref cfg.RepMgrLocalSite, compulsory);
208			Configuration.ConfigBool(xmlElement, "Strict2Site",
209			    ref cfg.Strict2Site, compulsory);
210			Configuration.ConfigBool(xmlElement, "UseMasterLeases",
211			    ref cfg.UseMasterLeases, compulsory);
212		}
213
214	}
215}