context: /*-
   * See the file LICENSE for redistribution information.
   *
   * Copyright (c) 2009 Oracle.  All rights reserved.
   *
   */
  using System;
  using System.Collections;
  using System.Collections.Generic;
  using System.IO;
  using System.Text;
  using System.Xml;
  using NUnit.Framework;
  using BerkeleyDB;
  
  namespace CsharpAPITest
  {
      [TestFixture]
      public class ReplicationConfigTest
      {
          private string testFixtureName;
          private string testName;
  
          [TestFixtureSetUp]
          public void RunBeforeTests()
          {
              testFixtureName = "ReplicationConfigTest";
          }
  
          [Test]
          public void TestConfig()
          {
              testName = "TestConfig";
  
              ReplicationConfig repConfig = new ReplicationConfig();
              XmlElement xmlElem = Configuration.TestSetUp(
                  testFixtureName, testName);
              Config(xmlElem, ref repConfig, true);
              Confirm(xmlElem, repConfig, true);
  
              repConfig.Clockskew(102, 100);
              Assert.AreEqual(102, repConfig.ClockskewFast);
              Assert.AreEqual(100, repConfig.ClockskewSlow);
  
              repConfig.TransmitLimit(1, 1024);
              Assert.AreEqual(1, repConfig.TransmitLimitGBytes);
              Assert.AreEqual(1024, repConfig.TransmitLimitBytes);
  
              repConfig.RetransmissionRequest(10, 100);
              Assert.AreEqual(100, repConfig.RetransmissionRequestMax);
              Assert.AreEqual(10, repConfig.RetransmissionRequestMin);
          }
  
          [Test]
          public void TestRepMgrLocalSite()
          {
              string host = "127.0.0.0";
              uint port = 8888;
              testName = "TestRepMgrLocalSite";
  
              ReplicationConfig repConfig1 = new ReplicationConfig();
              repConfig1.RepMgrLocalSite = new ReplicationHostAddress();
              repConfig1.RepMgrLocalSite.Host = host;
              repConfig1.RepMgrLocalSite.Port = port;
              Assert.AreEqual(host, repConfig1.RepMgrLocalSite.Host);
              Assert.AreEqual(port, repConfig1.RepMgrLocalSite.Port);
  
              ReplicationConfig repConfig2 = new ReplicationConfig();
              repConfig2.RepMgrLocalSite =
                  new ReplicationHostAddress(host, port);
              Assert.AreEqual(host, repConfig2.RepMgrLocalSite.Host);
              Assert.AreEqual(port, repConfig2.RepMgrLocalSite.Port);
  
              ReplicationConfig repConfig3 = new ReplicationConfig();
              repConfig3.RepMgrLocalSite =
                  new ReplicationHostAddress(host + ":" + port);
              Assert.AreEqual(host, repConfig3.RepMgrLocalSite.Host);
              Assert.AreEqual(port, repConfig3.RepMgrLocalSite.Port);
          }
          
          [Test]
          public void TestRepMgrAckPolicy()
          {
              testName = "TestRepMgrAckPolicy";
  
              ReplicationConfig repConfig = new ReplicationConfig();
              repConfig.RepMgrAckPolicy = AckPolicy.ALL;
              Assert.AreEqual(AckPolicy.ALL, 
                  repConfig.RepMgrAckPolicy);
  
              repConfig.RepMgrAckPolicy = AckPolicy.ALL_PEERS;
              Assert.AreEqual(AckPolicy.ALL_PEERS,
                  repConfig.RepMgrAckPolicy);
  
              repConfig.RepMgrAckPolicy = AckPolicy.NONE;
              Assert.AreEqual(AckPolicy.NONE,
                  repConfig.RepMgrAckPolicy);
  
              repConfig.RepMgrAckPolicy = AckPolicy.ONE;
              Assert.AreEqual(AckPolicy.ONE,
                  repConfig.RepMgrAckPolicy);
  
              repConfig.RepMgrAckPolicy = AckPolicy.ONE_PEER;
              Assert.AreEqual(AckPolicy.ONE_PEER,
                  repConfig.RepMgrAckPolicy);
  
              repConfig.RepMgrAckPolicy = AckPolicy.QUORUM;
              Assert.AreEqual(AckPolicy.QUORUM,
                  repConfig.RepMgrAckPolicy);
          }
  
          public static void Confirm(XmlElement xmlElement, 
              ReplicationConfig cfg, bool compulsory)
          {
              Configuration.ConfirmUint(xmlElement,
                  "AckTimeout", cfg.AckTimeout,
                  compulsory);
              Configuration.ConfirmBool(xmlElement, "BulkTransfer",
                  cfg.BulkTransfer, compulsory);
              Configuration.ConfirmUint(xmlElement, "CheckpointDelay",
                  cfg.CheckpointDelay, compulsory);
              Configuration.ConfirmUint(xmlElement, "ConnectionRetry",
                  cfg.ConnectionRetry, compulsory);
              Configuration.ConfirmBool(xmlElement, "DelayClientSync",
                  cfg.DelayClientSync, compulsory);
              Configuration.ConfirmUint(xmlElement, "ElectionRetry",
                  cfg.ElectionRetry, compulsory);
              Configuration.ConfirmUint(xmlElement, "ElectionTimeout",
                  cfg.ElectionTimeout, compulsory);
              Configuration.ConfirmUint(xmlElement, "FullElectionTimeout",
                  cfg.FullElectionTimeout, compulsory);
              Configuration.ConfirmUint(xmlElement, "HeartbeatMonitor",
                  cfg.HeartbeatMonitor, compulsory);
              Configuration.ConfirmUint(xmlElement, "HeartbeatSend",
                  cfg.HeartbeatSend, compulsory);
              Configuration.ConfirmUint(xmlElement, "LeaseTimeout",
                  cfg.LeaseTimeout, compulsory);
              Configuration.ConfirmBool(xmlElement, "NoAutoInit",
                  cfg.NoAutoInit, compulsory);
              Configuration.ConfirmBool(xmlElement, "NoBlocking",
                  cfg.NoBlocking, compulsory);
              Configuration.ConfirmUint(xmlElement, "NSites",
                  cfg.NSites, compulsory);
              Configuration.ConfirmUint(xmlElement, "Priority",
                  cfg.Priority, compulsory);
              Configuration.ConfirmAckPolicy(xmlElement, 
                  "RepMgrAckPolicy", cfg.RepMgrAckPolicy, compulsory);
              Configuration.ConfirmReplicationHostAddress(xmlElement,
                  "RepMgrLocalSite", cfg.RepMgrLocalSite, compulsory);
              Configuration.ConfirmBool(xmlElement, "Strict2Site",
                  cfg.Strict2Site, compulsory);
              Configuration.ConfirmBool(xmlElement, "UseMasterLeases",
                  cfg.UseMasterLeases, compulsory);
          }
  
          public static void Config(XmlElement xmlElement,
              ref ReplicationConfig cfg, bool compulsory)
          {
              uint uintValue = new uint();
  
              if (Configuration.ConfigUint(xmlElement, "AckTimeout", 
                  ref uintValue, compulsory))
                  cfg.AckTimeout = uintValue;
              Configuration.ConfigBool(xmlElement, "BulkTransfer",
                  ref cfg.BulkTransfer, compulsory);
              if (Configuration.ConfigUint(xmlElement, "CheckpointDelay",
                  ref uintValue, compulsory))
                  cfg.CheckpointDelay = uintValue;
              if (Configuration.ConfigUint(xmlElement, "ConnectionRetry",
                  ref uintValue, compulsory))
                  cfg.ConnectionRetry = uintValue;
              Configuration.ConfigBool(xmlElement, "DelayClientSync",
                  ref cfg.DelayClientSync, compulsory);
              if (Configuration.ConfigUint(xmlElement, "ElectionRetry",
                  ref uintValue, compulsory))
                  cfg.ElectionRetry = uintValue;
              if (Configuration.ConfigUint(xmlElement, "ElectionTimeout",
                  ref uintValue, compulsory))
                  cfg.ElectionTimeout = uintValue;
              if (Configuration.ConfigUint(xmlElement, "FullElectionTimeout",
                  ref uintValue, compulsory))
                  cfg.FullElectionTimeout = uintValue;
              if (Configuration.ConfigUint(xmlElement, "HeartbeatMonitor",
                  ref uintValue, compulsory))
                  cfg.HeartbeatMonitor = uintValue;
              if (Configuration.ConfigUint(xmlElement, "HeartbeatSend",
                  ref uintValue, compulsory))
                  cfg.HeartbeatSend = uintValue;
              if (Configuration.ConfigUint(xmlElement, "LeaseTimeout",
                  ref uintValue, compulsory))
                  cfg.LeaseTimeout = uintValue;
              Configuration.ConfigBool(xmlElement, "NoAutoInit",
                  ref cfg.NoAutoInit, compulsory);
              Configuration.ConfigBool(xmlElement, "NoBlocking",
                  ref cfg.NoBlocking, compulsory);
              if (Configuration.ConfigUint(xmlElement, "NSites",
                  ref uintValue, compulsory))
                  cfg.NSites = uintValue;
              if (Configuration.ConfigUint(xmlElement, "Priority",
                  ref uintValue, compulsory))
                  cfg.Priority = uintValue;
              Configuration.ConfigAckPolicy(xmlElement,
                  "RepMgrAckPolicy", ref cfg.RepMgrAckPolicy, 
                  compulsory);
  
gt:             cfg.RepMgrLocalSite = new ReplicationHostAddress();