You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2016/08/04 09:54:00 UTC
[2/5] ignite git commit: IGNITE-3359 .NET: Added
IgniteConfiguration.ToXml() method. This closes #918.
IGNITE-3359 .NET: Added IgniteConfiguration.ToXml() method. This closes #918.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e087152c
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e087152c
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e087152c
Branch: refs/heads/ignite-3443
Commit: e087152cb86375c3f75d8dbf5f77f974bb3adb45
Parents: c421614
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Thu Aug 4 09:12:14 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Thu Aug 4 09:12:14 2016 +0300
----------------------------------------------------------------------
.../IgniteConfigurationSerializerTest.cs | 145 +++++++++++++++++--
.../Apache.Ignite.Core/IgniteConfiguration.cs | 65 +++++++++
2 files changed, 195 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/e087152c/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
index 73e0047..b9e0236 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
@@ -22,6 +22,7 @@ namespace Apache.Ignite.Core.Tests
using System;
using System.Collections;
using System.Collections.Generic;
+ using System.Configuration;
using System.Globalization;
using System.IO;
using System.Linq;
@@ -111,9 +112,8 @@ namespace Apache.Ignite.Core.Tests
<atomicConfiguration backups='2' cacheMode='Local' atomicSequenceReserveSize='250' />
<transactionConfiguration defaultTransactionConcurrency='Optimistic' defaultTransactionIsolation='RepeatableRead' defaultTimeout='0:1:2' pessimisticTransactionLogSize='15' pessimisticTransactionLogLinger='0:0:33' />
</igniteConfig>";
- var reader = XmlReader.Create(new StringReader(xml));
- var cfg = IgniteConfigurationXmlSerializer.Deserialize(reader);
+ var cfg = IgniteConfiguration.FromXml(xml);
Assert.AreEqual("c:", cfg.WorkDirectory);
Assert.AreEqual("127.1.1.1", cfg.Localhost);
@@ -279,6 +279,132 @@ namespace Apache.Ignite.Core.Tests
}
/// <summary>
+ /// Tests the XML conversion.
+ /// </summary>
+ [Test]
+ public void TestToXml()
+ {
+ // Empty config
+ Assert.AreEqual("<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<igniteConfiguration " +
+ "xmlns=\"http://ignite.apache.org/schema/dotnet/IgniteConfigurationSection\" />",
+ new IgniteConfiguration().ToXml());
+
+ // Some properties
+ var cfg = new IgniteConfiguration
+ {
+ GridName = "myGrid",
+ ClientMode = true,
+ CacheConfiguration = new[]
+ {
+ new CacheConfiguration("myCache")
+ {
+ CacheMode = CacheMode.Replicated,
+ QueryEntities = new[]
+ {
+ new QueryEntity(typeof(int)),
+ new QueryEntity(typeof(int), typeof(string))
+ }
+ }
+ },
+ IncludedEventTypes = new[]
+ {
+ EventType.CacheEntryCreated,
+ EventType.CacheNodesLeft
+ }
+ };
+
+ Assert.AreEqual(FixLineEndings(@"<?xml version=""1.0"" encoding=""utf-16""?>
+<igniteConfiguration gridName=""myGrid"" clientMode=""true"" xmlns=""http://ignite.apache.org/schema/dotnet/IgniteConfigurationSection"">
+ <cacheConfiguration>
+ <cacheConfiguration name=""myCache"" cacheMode=""Replicated"">
+ <queryEntities>
+ <queryEntity valueTypeName=""java.lang.Integer"" valueType=""System.Int32"" />
+ <queryEntity keyTypeName=""java.lang.Integer"" keyType=""System.Int32"" valueTypeName=""java.lang.String"" valueType=""System.String"" />
+ </queryEntities>
+ </cacheConfiguration>
+ </cacheConfiguration>
+ <includedEventTypes>
+ <int>CacheEntryCreated</int>
+ <int>CacheNodesLeft</int>
+ </includedEventTypes>
+</igniteConfiguration>"), cfg.ToXml());
+
+ // Custom section name and indent
+ var sb = new StringBuilder();
+
+ var settings = new XmlWriterSettings
+ {
+ Indent = true,
+ IndentChars = " "
+ };
+
+ using (var xmlWriter = XmlWriter.Create(sb, settings))
+ {
+ cfg.ToXml(xmlWriter, "igCfg");
+ }
+
+ Assert.AreEqual(FixLineEndings(@"<?xml version=""1.0"" encoding=""utf-16""?>
+<igCfg gridName=""myGrid"" clientMode=""true"" xmlns=""http://ignite.apache.org/schema/dotnet/IgniteConfigurationSection"">
+ <cacheConfiguration>
+ <cacheConfiguration name=""myCache"" cacheMode=""Replicated"">
+ <queryEntities>
+ <queryEntity valueTypeName=""java.lang.Integer"" valueType=""System.Int32"" />
+ <queryEntity keyTypeName=""java.lang.Integer"" keyType=""System.Int32"" valueTypeName=""java.lang.String"" valueType=""System.String"" />
+ </queryEntities>
+ </cacheConfiguration>
+ </cacheConfiguration>
+ <includedEventTypes>
+ <int>CacheEntryCreated</int>
+ <int>CacheNodesLeft</int>
+ </includedEventTypes>
+</igCfg>"), sb.ToString());
+ }
+
+ /// <summary>
+ /// Tests the deserialization.
+ /// </summary>
+ [Test]
+ public void TestFromXml()
+ {
+ // Empty section.
+ var cfg = IgniteConfiguration.FromXml("<x />");
+ AssertReflectionEqual(new IgniteConfiguration(), cfg);
+
+ // Empty section with XML header.
+ cfg = IgniteConfiguration.FromXml("<?xml version=\"1.0\" encoding=\"utf-16\"?><x />");
+ AssertReflectionEqual(new IgniteConfiguration(), cfg);
+
+ // Simple test.
+ cfg = IgniteConfiguration.FromXml(@"<igCfg gridName=""myGrid"" clientMode=""true"" />");
+ AssertReflectionEqual(new IgniteConfiguration {GridName = "myGrid", ClientMode = true}, cfg);
+
+ // Invalid xml.
+ var ex = Assert.Throws<ConfigurationErrorsException>(() =>
+ IgniteConfiguration.FromXml(@"<igCfg foo=""bar"" />"));
+
+ Assert.AreEqual("Invalid IgniteConfiguration attribute 'foo=bar', there is no such property " +
+ "on 'Apache.Ignite.Core.IgniteConfiguration'", ex.Message);
+
+ // Xml reader.
+ using (var xmlReader = XmlReader.Create(
+ new StringReader(@"<igCfg gridName=""myGrid"" clientMode=""true"" />")))
+ {
+ cfg = IgniteConfiguration.FromXml(xmlReader);
+ }
+ AssertReflectionEqual(new IgniteConfiguration { GridName = "myGrid", ClientMode = true }, cfg);
+ }
+
+ /// <summary>
+ /// Ensures windows-style \r\n line endings in a string literal.
+ /// Git settings may cause string literals in both styles.
+ /// </summary>
+ private static string FixLineEndings(string s)
+ {
+ return s.Split('\n').Select(x => x.TrimEnd('\r'))
+ .Aggregate((acc, x) => string.Format("{0}\r\n{1}", acc, x));
+ }
+
+ /// <summary>
/// Checks the schema validation.
/// </summary>
private static void CheckSchemaValidation()
@@ -325,20 +451,9 @@ namespace Apache.Ignite.Core.Tests
/// </summary>
private static IgniteConfiguration SerializeDeserialize(IgniteConfiguration cfg)
{
- var sb = new StringBuilder();
+ var xml = cfg.ToXml();
- using (var xmlWriter = XmlWriter.Create(sb))
- {
- IgniteConfigurationXmlSerializer.Serialize(cfg, xmlWriter, "igniteConfig");
- }
-
- var xml = sb.ToString();
-
- using (var xmlReader = XmlReader.Create(new StringReader(xml)))
- {
- xmlReader.MoveToContent();
- return IgniteConfigurationXmlSerializer.Deserialize(xmlReader);
- }
+ return IgniteConfiguration.FromXml(xml);
}
/// <summary>
http://git-wip-us.apache.org/repos/asf/ignite/blob/e087152c/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
index 6bdf1ab..e033ce0 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
@@ -24,6 +24,8 @@
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
+ using System.Text;
+ using System.Xml;
using Apache.Ignite.Core.Binary;
using Apache.Ignite.Core.Cache;
using Apache.Ignite.Core.Cache.Configuration;
@@ -678,5 +680,68 @@
get { return _isLateAffinityAssignment ?? DefaultIsLateAffinityAssignment; }
set { _isLateAffinityAssignment = value; }
}
+
+ /// <summary>
+ /// Serializes this instance to the specified XML writer.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="rootElementName">Name of the root element.</param>
+ public void ToXml(XmlWriter writer, string rootElementName)
+ {
+ IgniteArgumentCheck.NotNull(writer, "writer");
+ IgniteArgumentCheck.NotNullOrEmpty(rootElementName, "rootElementName");
+
+ IgniteConfigurationXmlSerializer.Serialize(this, writer, rootElementName);
+ }
+
+ /// <summary>
+ /// Serializes this instance to an XML string.
+ /// </summary>
+ public string ToXml()
+ {
+ var sb = new StringBuilder();
+
+ var settings = new XmlWriterSettings
+ {
+ Indent = true
+ };
+
+ using (var xmlWriter = XmlWriter.Create(sb, settings))
+ {
+ ToXml(xmlWriter, "igniteConfiguration");
+ }
+
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Deserializes IgniteConfiguration from the XML reader.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ /// <returns>Deserialized instance.</returns>
+ public static IgniteConfiguration FromXml(XmlReader reader)
+ {
+ IgniteArgumentCheck.NotNull(reader, "reader");
+
+ return IgniteConfigurationXmlSerializer.Deserialize(reader);
+ }
+
+ /// <summary>
+ /// Deserializes IgniteConfiguration from the XML string.
+ /// </summary>
+ /// <param name="xml">Xml string.</param>
+ /// <returns>Deserialized instance.</returns>
+ public static IgniteConfiguration FromXml(string xml)
+ {
+ IgniteArgumentCheck.NotNullOrEmpty(xml, "xml");
+
+ using (var xmlReader = XmlReader.Create(new StringReader(xml)))
+ {
+ // Skip XML header.
+ xmlReader.MoveToContent();
+
+ return FromXml(xmlReader);
+ }
+ }
}
}