You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/09/22 09:40:43 UTC
[24/51] [abbrv] [partial] ignite git commit: IGNITE-1513: platform ->
platforms.
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs b/modules/platform/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs
deleted file mode 100644
index fd08116..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests.Process
-{
- using System;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using Apache.Ignite.Core.Impl;
-
- /// <summary>
- /// Defines forked Ignite node.
- /// </summary>
- public class IgniteProcess
- {
- /** Executable file name. */
- private static readonly string ExeName = "Apache.Ignite.exe";
-
- /** Executable process name. */
- private static readonly string ExeProcName = ExeName.Substring(0, ExeName.LastIndexOf('.'));
-
- /** Executable configuration file name. */
- private static readonly string ExeCfgName = ExeName + ".config";
-
- /** Executable backup configuration file name. */
- private static readonly string ExeCfgBakName = ExeCfgName + ".bak";
-
- /** Directory where binaries are stored. */
- private static readonly string ExeDir;
-
- /** Full path to executable. */
- private static readonly string ExePath;
-
- /** Full path to executable configuration file. */
- private static readonly string ExeCfgPath;
-
- /** Full path to executable configuration file backup. */
- private static readonly string ExeCfgBakPath;
-
- /** Default process output reader. */
- private static readonly IIgniteProcessOutputReader DfltOutReader = new IgniteProcessConsoleOutputReader();
-
- /** Process. */
- private readonly Process _proc;
-
- /// <summary>
- /// Static initializer.
- /// </summary>
- static IgniteProcess()
- {
- // 1. Locate executable file and related stuff.
- DirectoryInfo dir = new FileInfo(new Uri(typeof(IgniteProcess).Assembly.CodeBase).LocalPath).Directory;
-
- // ReSharper disable once PossibleNullReferenceException
- ExeDir = dir.FullName;
-
- var exe = dir.GetFiles(ExeName);
-
- if (exe.Length == 0)
- throw new Exception(ExeName + " is not found in test output directory: " + dir.FullName);
-
- ExePath = exe[0].FullName;
-
- var exeCfg = dir.GetFiles(ExeCfgName);
-
- if (exeCfg.Length == 0)
- throw new Exception(ExeCfgName + " is not found in test output directory: " + dir.FullName);
-
- ExeCfgPath = exeCfg[0].FullName;
-
- ExeCfgBakPath = Path.Combine(ExeDir, ExeCfgBakName);
-
- File.Delete(ExeCfgBakPath);
- }
-
- /// <summary>
- /// Save current configuration to backup.
- /// </summary>
- public static void SaveConfigurationBackup()
- {
- File.Copy(ExeCfgPath, ExeCfgBakPath, true);
- }
-
- /// <summary>
- /// Restore configuration from backup.
- /// </summary>
- public static void RestoreConfigurationBackup()
- {
- File.Copy(ExeCfgBakPath, ExeCfgPath, true);
- }
-
- /// <summary>
- /// Replace application configuration with another one.
- /// </summary>
- /// <param name="relPath">Path to config relative to executable directory.</param>
- public static void ReplaceConfiguration(string relPath)
- {
- File.Copy(Path.Combine(ExeDir, relPath), ExeCfgPath, true);
- }
-
- /// <summary>
- /// Kill all Ignite processes.
- /// </summary>
- public static void KillAll()
- {
- foreach (Process proc in Process.GetProcesses())
- {
- if (proc.ProcessName.Equals(ExeProcName))
- {
- proc.Kill();
-
- proc.WaitForExit();
- }
- }
- }
-
- /// <summary>
- /// Construector.
- /// </summary>
- /// <param name="args">Arguments</param>
- public IgniteProcess(params string[] args) : this(DfltOutReader, args) { }
-
- /// <summary>
- /// Construector.
- /// </summary>
- /// <param name="outReader">Output reader.</param>
- /// <param name="args">Arguments.</param>
- public IgniteProcess(IIgniteProcessOutputReader outReader, params string[] args)
- {
- // Add test dll path
- args = args.Concat(new[] {"-assembly=" + GetType().Assembly.Location}).ToArray();
-
- _proc = Start(ExePath, IgniteManager.GetIgniteHome(null), outReader, args);
- }
-
- /// <summary>
- /// Starts a grid process.
- /// </summary>
- /// <param name="exePath">Exe path.</param>
- /// <param name="ggHome">Ignite home.</param>
- /// <param name="outReader">Output reader.</param>
- /// <param name="args">Arguments.</param>
- /// <returns>Started process.</returns>
- public static Process Start(string exePath, string ggHome, IIgniteProcessOutputReader outReader = null,
- params string[] args)
- {
- Debug.Assert(!string.IsNullOrEmpty(exePath));
- Debug.Assert(!string.IsNullOrEmpty(ggHome));
-
- // 1. Define process start configuration.
- var sb = new StringBuilder();
-
- foreach (string arg in args)
- sb.Append('\"').Append(arg).Append("\" ");
-
- var procStart = new ProcessStartInfo
- {
- FileName = exePath,
- Arguments = sb.ToString()
- };
-
- if (!string.IsNullOrEmpty(ggHome))
- procStart.EnvironmentVariables[IgniteManager.EnvIgniteHome] = ggHome;
-
- procStart.EnvironmentVariables[IgniteManager.EnvIgniteNativeTestClasspath] = "true";
-
- procStart.CreateNoWindow = true;
- procStart.UseShellExecute = false;
-
- procStart.RedirectStandardOutput = true;
- procStart.RedirectStandardError = true;
-
- var workDir = Path.GetDirectoryName(exePath);
-
- if (workDir != null)
- procStart.WorkingDirectory = workDir;
-
- Console.WriteLine("About to run Apache.Ignite.exe process [exePath=" + exePath + ", arguments=" + sb + ']');
-
- // 2. Start.
- var proc = Process.Start(procStart);
-
- Debug.Assert(proc != null);
-
- // 3. Attach output readers to avoid hangs.
- outReader = outReader ?? DfltOutReader;
-
- Attach(proc, proc.StandardOutput, outReader, false);
- Attach(proc, proc.StandardError, outReader, true);
-
- return proc;
- }
-
- /// <summary>
- /// Whether the process is still alive.
- /// </summary>
- public bool Alive
- {
- get { return !_proc.HasExited; }
- }
-
- /// <summary>
- /// Kill process.
- /// </summary>
- public void Kill()
- {
- _proc.Kill();
- }
-
- /// <summary>
- /// Join process.
- /// </summary>
- /// <returns>Exit code.</returns>
- public int Join()
- {
- _proc.WaitForExit();
-
- return _proc.ExitCode;
- }
-
- /// <summary>
- /// Join process with timeout.
- /// </summary>
- /// <param name="timeout">Timeout in milliseconds.</param>
- /// <returns><c>True</c> if process exit occurred before timeout.</returns>
- public bool Join(int timeout)
- {
- return _proc.WaitForExit(timeout);
- }
-
- /// <summary>
- /// Join process with timeout.
- /// </summary>
- /// <param name="timeout">Timeout in milliseconds.</param>
- /// <param name="exitCode">Exit code.</param>
- /// <returns><c>True</c> if process exit occurred before timeout.</returns>
- public bool Join(int timeout, out int exitCode)
- {
- if (_proc.WaitForExit(timeout))
- {
- exitCode = _proc.ExitCode;
-
- return true;
- }
- exitCode = 0;
-
- return false;
- }
-
- /// <summary>
- /// Attach output reader to the process.
- /// </summary>
- /// <param name="proc">Process.</param>
- /// <param name="reader">Process stream reader.</param>
- /// <param name="outReader">Output reader.</param>
- /// <param name="err">Whether this is error stream.</param>
- private static void Attach(Process proc, StreamReader reader, IIgniteProcessOutputReader outReader, bool err)
- {
- new Thread(() =>
- {
- while (!proc.HasExited)
- outReader.OnOutput(proc, reader.ReadLine(), err);
- }) {IsBackground = true}.Start();
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcessConsoleOutputReader.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcessConsoleOutputReader.cs b/modules/platform/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcessConsoleOutputReader.cs
deleted file mode 100644
index 00cc040..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcessConsoleOutputReader.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests.Process
-{
- using System;
- using System.Diagnostics;
-
- /// <summary>
- /// Output reader pushing data to the console.
- /// </summary>
- public class IgniteProcessConsoleOutputReader : IIgniteProcessOutputReader
- {
- /** Out message format. */
- private static readonly string OutFormat = ">>> {0} OUT: {1}";
-
- /** Error message format. */
- private static readonly string ErrFormat = ">>> {0} ERR: {1}";
-
- /** <inheritDoc /> */
- public void OnOutput(Process proc, string data, bool err)
- {
- Console.WriteLine(err ? ErrFormat : OutFormat, proc.Id, data);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core.Tests/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Properties/AssemblyInfo.cs b/modules/platform/dotnet/Apache.Ignite.Core.Tests/Properties/AssemblyInfo.cs
deleted file mode 100644
index 1ebcf24..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-[assembly: AssemblyTitle("Apache.Ignite.Core.Tests")]
-[assembly: AssemblyDescription("Apache Ignite .NET Core Tests")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Apache Software Foundation")]
-[assembly: AssemblyProduct("Apache.Ignite.Core.Tests")]
-[assembly: AssemblyCopyright("Copyright © 2015")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-[assembly: ComVisible(false)]
-
-[assembly: Guid("de8dd5cc-7c7f-4a09-80d5-7086d9416a7b")]
-
-[assembly: AssemblyVersion("1.5.0")]
-[assembly: AssemblyFileVersion("1.5.0")]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/ImplicitPortablePerson.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/ImplicitPortablePerson.cs b/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/ImplicitPortablePerson.cs
deleted file mode 100644
index f80c4eb..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/ImplicitPortablePerson.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests.Query
-{
- /// <summary>
- /// Test person.
- /// </summary>
- internal class ImplicitPortablePerson
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="ImplicitPortablePerson"/> class.
- /// </summary>
- /// <param name="name">The name.</param>
- /// <param name="age">The age.</param>
- public ImplicitPortablePerson(string name, int age)
- {
- Name = name;
- Age = age;
- }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- public string Name { get; set; }
-
- /// <summary>
- /// Gets or sets the age.
- /// </summary>
- public int Age { get; set; }
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/NoDefPortablePerson.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/NoDefPortablePerson.cs b/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/NoDefPortablePerson.cs
deleted file mode 100644
index 16bd07d..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/NoDefPortablePerson.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests.Query
-{
- /// <summary>
- /// Test person.
- /// </summary>
- internal class NoDefPortablePerson
- {
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- public string Name { get; set; }
-
- /// <summary>
- /// Gets or sets the age.
- /// </summary>
- public int Age { get; set; }
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/PortablePerson.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/PortablePerson.cs b/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/PortablePerson.cs
deleted file mode 100644
index 1e11001..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Query/PortablePerson.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests.Query
-{
- using Apache.Ignite.Core.Portable;
-
- /// <summary>
- /// Test person.
- /// </summary>
- internal class PortablePerson : IPortableMarshalAware
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="PortablePerson"/> class.
- /// </summary>
- /// <param name="name">The name.</param>
- /// <param name="age">The age.</param>
- public PortablePerson(string name, int age)
- {
- Name = name;
- Age = age;
- }
-
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- public string Name { get; set; }
-
- /// <summary>
- /// Gets or sets the address.
- /// </summary>
- public string Address { get; set; }
-
- /// <summary>
- /// Gets or sets the age.
- /// </summary>
- public int Age { get; set; }
-
- /** <ineritdoc /> */
- public void WritePortable(IPortableWriter writer)
- {
- writer.WriteString("name", Name);
- writer.WriteString("address", Address);
- writer.WriteInt("age", Age);
- }
-
- /** <ineritdoc /> */
- public void ReadPortable(IPortableReader reader)
- {
- Name = reader.ReadString("name");
- Address = reader.ReadString("address");
- Age = reader.ReadInt("age");
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core.Tests/SerializationTest.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core.Tests/SerializationTest.cs b/modules/platform/dotnet/Apache.Ignite.Core.Tests/SerializationTest.cs
deleted file mode 100644
index e1a543e..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core.Tests/SerializationTest.cs
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests
-{
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using System.Reflection.Emit;
- using System.Runtime.Serialization;
- using System.Xml;
- using Apache.Ignite.Core.Cluster;
- using Apache.Ignite.Core.Compute;
- using Apache.Ignite.Core.Impl;
- using NUnit.Framework;
-
- /// <summary>
- /// Tests for native serialization.
- /// </summary>
- public class SerializationTest
- {
- /** Grid name. */
- private const string GridName = "SerializationTest";
-
- /// <summary>
- /// Set up routine.
- /// </summary>
- [TestFixtureSetUp]
- public void SetUp()
- {
- var cfg = new IgniteConfigurationEx
- {
- GridName = GridName,
- JvmClasspath = TestUtils.CreateTestClasspath(),
- JvmOptions = TestUtils.TestJavaOptions(),
- SpringConfigUrl = "config\\native-client-test-cache.xml"
- };
-
- Ignition.Start(cfg);
- }
-
- /// <summary>
- /// Tear down routine.
- /// </summary>
- [TestFixtureTearDown]
- public void TearDown()
- {
- Ignition.StopAll(true);
- }
-
- /// <summary>
- /// Test complex file serialization.
- /// </summary>
- [Test]
- public void TestSerializableXmlDoc()
- {
- var grid = Ignition.GetIgnite(GridName);
- var cache = grid.GetCache<int, SerializableXmlDoc>("replicated");
-
- var doc = new SerializableXmlDoc();
-
- doc.LoadXml("<document><test1>val</test1><test2 attr=\"x\" /></document>");
-
- for (var i = 0; i < 50; i++)
- {
- // Test cache
- cache.Put(i, doc);
-
- var resultDoc = cache.Get(i);
-
- Assert.AreEqual(doc.OuterXml, resultDoc.OuterXml);
-
- // Test task with document arg
- CheckTask(grid, doc);
- }
- }
-
- /// <summary>
- /// Checks task execution.
- /// </summary>
- /// <param name="grid">Grid.</param>
- /// <param name="arg">Task arg.</param>
- private static void CheckTask(IIgnite grid, object arg)
- {
- var jobResult = grid.GetCompute().Execute(new CombineStringsTask(), arg);
-
- var nodeCount = grid.GetCluster().GetNodes().Count;
-
- var expectedRes =
- CombineStringsTask.CombineStrings(Enumerable.Range(0, nodeCount).Select(x => arg.ToString()));
-
- Assert.AreEqual(expectedRes, jobResult.InnerXml);
- }
-
- /// <summary>
- /// Tests custom serialization binder.
- /// </summary>
- [Test]
- public void TestSerializationBinder()
- {
- const int count = 50;
-
- var cache = Ignition.GetIgnite(GridName).GetCache<int, object>("local");
-
- // Put multiple objects from muliple same-named assemblies to cache
- for (var i = 0; i < count; i++)
- {
- dynamic val = Activator.CreateInstance(GenerateDynamicType());
-
- val.Id = i;
- val.Name = "Name_" + i;
-
- cache.Put(i, val);
- }
-
- // Verify correct deserialization
- for (var i = 0; i < count; i++)
- {
- dynamic val = cache.Get(i);
-
- Assert.AreEqual(val.Id, i);
- Assert.AreEqual(val.Name, "Name_" + i);
- }
- }
-
- /// <summary>
- /// Generates a Type in runtime, puts it into a dynamic assembly.
- /// </summary>
- /// <returns></returns>
- public static Type GenerateDynamicType()
- {
- var asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(
- new AssemblyName("GridSerializationTestDynamicAssembly"), AssemblyBuilderAccess.Run);
-
- var moduleBuilder = asmBuilder.DefineDynamicModule("GridSerializationTestDynamicModule");
-
- var typeBuilder = moduleBuilder.DefineType("GridSerializationTestDynamicType",
- TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.Serializable);
-
- typeBuilder.DefineField("Id", typeof (int), FieldAttributes.Public);
-
- typeBuilder.DefineField("Name", typeof (string), FieldAttributes.Public);
-
- return typeBuilder.CreateType();
- }
- }
-
- [Serializable]
- [DataContract]
- public sealed class SerializableXmlDoc : XmlDocument, ISerializable
- {
- /// <summary>
- /// Default ctor.
- /// </summary>
- public SerializableXmlDoc()
- {
- // No-op
- }
-
- /// <summary>
- /// Serialization ctor.
- /// </summary>
- private SerializableXmlDoc(SerializationInfo info, StreamingContext context)
- {
- LoadXml(info.GetString("xmlDocument"));
- }
-
- /** <inheritdoc /> */
- public void GetObjectData(SerializationInfo info, StreamingContext context)
- {
- info.AddValue("xmlDocument", OuterXml, typeof(string));
- }
- }
-
- [Serializable]
- public class CombineStringsTask : IComputeTask<object, string, SerializableXmlDoc>
- {
- public IDictionary<IComputeJob<string>, IClusterNode> Map(IList<IClusterNode> subgrid, object arg)
- {
- return subgrid.ToDictionary(x => (IComputeJob<string>) new ToStringJob {Arg = arg}, x => x);
- }
-
- public ComputeJobResultPolicy Result(IComputeJobResult<string> res, IList<IComputeJobResult<string>> rcvd)
- {
- return ComputeJobResultPolicy.Wait;
- }
-
- public SerializableXmlDoc Reduce(IList<IComputeJobResult<string>> results)
- {
- var result = new SerializableXmlDoc();
-
- result.LoadXml(CombineStrings(results.Select(x => x.Data())));
-
- return result;
- }
-
- public static string CombineStrings(IEnumerable<string> strings)
- {
- var text = string.Concat(strings.Select(x => string.Format("<val>{0}</val>", x)));
-
- return string.Format("<document>{0}</document>", text);
- }
- }
-
- [Serializable]
- public class ToStringJob : IComputeJob<string>
- {
- /// <summary>
- /// Job argument.
- /// </summary>
- public object Arg { get; set; }
-
- /** <inheritdoc /> */
- public string Execute()
- {
- return Arg.ToString();
- }
-
- /** <inheritdoc /> */
- public void Cancel()
- {
- // No-op.
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServiceProxyTest.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServiceProxyTest.cs b/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServiceProxyTest.cs
deleted file mode 100644
index 44e1d71..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServiceProxyTest.cs
+++ /dev/null
@@ -1,741 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests.Services
-{
- using System;
- using System.Diagnostics.CodeAnalysis;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using Apache.Ignite.Core.Impl.Memory;
- using Apache.Ignite.Core.Impl.Portable;
- using Apache.Ignite.Core.Impl.Services;
- using Apache.Ignite.Core.Portable;
- using Apache.Ignite.Core.Services;
- using NUnit.Framework;
-
- /// <summary>
- /// Tests <see cref="ServiceProxySerializer"/> functionality.
- /// </summary>
- public class ServiceProxyTest
- {
- /** */
- private TestIgniteService _svc;
-
- /** */
- private readonly PortableMarshaller _marsh = new PortableMarshaller(new PortableConfiguration
- {
- TypeConfigurations = new[]
- {
- new PortableTypeConfiguration(typeof (TestPortableClass)),
- new PortableTypeConfiguration(typeof (CustomExceptionPortable))
- }
- });
-
- /** */
- protected readonly IPortables Portables;
-
- /** */
- private readonly PlatformMemoryManager _memory = new PlatformMemoryManager(1024);
-
- /** */
- protected bool KeepPortable;
-
- /** */
- protected bool SrvKeepPortable;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="ServiceProxyTest"/> class.
- /// </summary>
- public ServiceProxyTest()
- {
- Portables = new PortablesImpl(_marsh);
- }
-
- /// <summary>
- /// Tests object class methods proxying.
- /// </summary>
- [Test]
- public void TestObjectClassMethods()
- {
- var prx = GetProxy();
-
- prx.IntProp = 12345;
-
- Assert.AreEqual("12345", prx.ToString());
- Assert.AreEqual("12345", _svc.ToString());
- Assert.AreEqual(12345, prx.GetHashCode());
- Assert.AreEqual(12345, _svc.GetHashCode());
- }
-
- /// <summary>
- /// Tests properties proxying.
- /// </summary>
- [Test]
- [SuppressMessage("ReSharper", "PossibleNullReferenceException")]
- public void TestProperties()
- {
- var prx = GetProxy();
-
- prx.IntProp = 10;
- Assert.AreEqual(10, prx.IntProp);
- Assert.AreEqual(10, _svc.IntProp);
-
- _svc.IntProp = 15;
- Assert.AreEqual(15, prx.IntProp);
- Assert.AreEqual(15, _svc.IntProp);
-
- prx.ObjProp = "prop1";
- Assert.AreEqual("prop1", prx.ObjProp);
- Assert.AreEqual("prop1", _svc.ObjProp);
-
- prx.ObjProp = null;
- Assert.IsNull(prx.ObjProp);
- Assert.IsNull(_svc.ObjProp);
-
- prx.ObjProp = new TestClass {Prop = "prop2"};
- Assert.AreEqual("prop2", ((TestClass)prx.ObjProp).Prop);
- Assert.AreEqual("prop2", ((TestClass)_svc.ObjProp).Prop);
- }
-
- /// <summary>
- /// Tests void methods proxying.
- /// </summary>
- [Test]
- public void TestVoidMethods()
- {
- var prx = GetProxy();
-
- prx.VoidMethod();
- Assert.AreEqual("VoidMethod", prx.InvokeResult);
- Assert.AreEqual("VoidMethod", _svc.InvokeResult);
-
- prx.VoidMethod(10);
- Assert.AreEqual(_svc.InvokeResult, prx.InvokeResult);
-
- prx.VoidMethod(10, "string");
- Assert.AreEqual(_svc.InvokeResult, prx.InvokeResult);
-
- prx.VoidMethod(10, "string", "arg");
- Assert.AreEqual(_svc.InvokeResult, prx.InvokeResult);
-
- prx.VoidMethod(10, "string", "arg", "arg1", 2, 3, "arg4");
- Assert.AreEqual(_svc.InvokeResult, prx.InvokeResult);
- }
-
- /// <summary>
- /// Tests object methods proxying.
- /// </summary>
- [Test]
- public void TestObjectMethods()
- {
- var prx = GetProxy();
-
- Assert.AreEqual("ObjectMethod", prx.ObjectMethod());
- Assert.AreEqual("ObjectMethod987", prx.ObjectMethod(987));
- Assert.AreEqual("ObjectMethod987str123", prx.ObjectMethod(987, "str123"));
- Assert.AreEqual("ObjectMethod987str123TestClass", prx.ObjectMethod(987, "str123", new TestClass()));
- Assert.AreEqual("ObjectMethod987str123TestClass34arg5arg6",
- prx.ObjectMethod(987, "str123", new TestClass(), 3, 4, "arg5", "arg6"));
- }
-
- /// <summary>
- /// Tests methods that exist in proxy interface, but do not exist in the actual service.
- /// </summary>
- [Test]
- public void TestMissingMethods()
- {
- var prx = GetProxy();
-
- var ex = Assert.Throws<InvalidOperationException>(() => prx.MissingMethod());
-
- Assert.AreEqual("Failed to invoke proxy: there is no method 'MissingMethod'" +
- " in type 'Apache.Ignite.Core.Tests.Services.ServiceProxyTest+TestIgniteService'", ex.Message);
- }
-
- /// <summary>
- /// Tests ambiguous methods handling (multiple methods with the same signature).
- /// </summary>
- [Test]
- public void TestAmbiguousMethods()
- {
- var prx = GetProxy();
-
- var ex = Assert.Throws<InvalidOperationException>(() => prx.AmbiguousMethod(1));
-
- Assert.AreEqual("Failed to invoke proxy: there are 2 methods 'AmbiguousMethod' in type " +
- "'Apache.Ignite.Core.Tests.Services.ServiceProxyTest+TestIgniteService' with (Int32) arguments, " +
- "can't resolve ambiguity.", ex.Message);
- }
-
- [Test]
- public void TestException()
- {
- var prx = GetProxy();
-
- var err = Assert.Throws<ServiceInvocationException>(prx.ExceptionMethod);
- Assert.AreEqual("Expected exception", err.InnerException.Message);
-
- var ex = Assert.Throws<ServiceInvocationException>(() => prx.CustomExceptionMethod());
- Assert.IsTrue(ex.ToString().Contains("+CustomException"));
- }
-
- [Test]
- public void TestPortableMarshallingException()
- {
- var prx = GetProxy();
-
- var ex = Assert.Throws<ServiceInvocationException>(() => prx.CustomExceptionPortableMethod(false, false));
-
- if (KeepPortable)
- {
- Assert.AreEqual("Proxy method invocation failed with a portable error. " +
- "Examine PortableCause for details.", ex.Message);
-
- Assert.IsNotNull(ex.PortableCause);
- Assert.IsNull(ex.InnerException);
- }
- else
- {
- Assert.AreEqual("Proxy method invocation failed with an exception. " +
- "Examine InnerException for details.", ex.Message);
-
- Assert.IsNull(ex.PortableCause);
- Assert.IsNotNull(ex.InnerException);
- }
-
- ex = Assert.Throws<ServiceInvocationException>(() => prx.CustomExceptionPortableMethod(true, false));
- Assert.IsTrue(ex.ToString().Contains(
- "Call completed with error, but error serialization failed [errType=CustomExceptionPortable, " +
- "serializationErrMsg=Expected exception in CustomExceptionPortable.WritePortable]"));
-
- ex = Assert.Throws<ServiceInvocationException>(() => prx.CustomExceptionPortableMethod(true, true));
- Assert.IsTrue(ex.ToString().Contains(
- "Call completed with error, but error serialization failed [errType=CustomExceptionPortable, " +
- "serializationErrMsg=Expected exception in CustomExceptionPortable.WritePortable]"));
- }
-
- /// <summary>
- /// Creates the proxy.
- /// </summary>
- protected ITestIgniteServiceProxyInterface GetProxy()
- {
- return GetProxy<ITestIgniteServiceProxyInterface>();
- }
-
- /// <summary>
- /// Creates the proxy.
- /// </summary>
- protected T GetProxy<T>()
- {
- _svc = new TestIgniteService(Portables);
-
- var prx = new ServiceProxy<T>(InvokeProxyMethod).GetTransparentProxy();
-
- Assert.IsFalse(ReferenceEquals(_svc, prx));
-
- return prx;
- }
-
- /// <summary>
- /// Invokes the proxy.
- /// </summary>
- /// <param name="method">Method.</param>
- /// <param name="args">Arguments.</param>
- /// <returns>
- /// Invocation result.
- /// </returns>
- private object InvokeProxyMethod(MethodBase method, object[] args)
- {
- using (var inStream = new PlatformMemoryStream(_memory.Allocate()))
- using (var outStream = new PlatformMemoryStream(_memory.Allocate()))
- {
- // 1) Write to a stream
- inStream.WriteBool(SrvKeepPortable); // WriteProxyMethod does not do this, but Java does
-
- ServiceProxySerializer.WriteProxyMethod(_marsh.StartMarshal(inStream), method, args);
-
- inStream.SynchronizeOutput();
-
- inStream.Seek(0, SeekOrigin.Begin);
-
- // 2) call InvokeServiceMethod
- string mthdName;
- object[] mthdArgs;
-
- ServiceProxySerializer.ReadProxyMethod(inStream, _marsh, out mthdName, out mthdArgs);
-
- var result = ServiceProxyInvoker.InvokeServiceMethod(_svc, mthdName, mthdArgs);
-
- ServiceProxySerializer.WriteInvocationResult(outStream, _marsh, result.Key, result.Value);
-
- _marsh.StartMarshal(outStream).WriteString("unused"); // fake Java exception details
-
- outStream.SynchronizeOutput();
-
- outStream.Seek(0, SeekOrigin.Begin);
-
- return ServiceProxySerializer.ReadInvocationResult(outStream, _marsh, KeepPortable);
- }
- }
-
- /// <summary>
- /// Test service interface.
- /// </summary>
- protected interface ITestIgniteServiceProperties
- {
- /** */
- int IntProp { get; set; }
-
- /** */
- object ObjProp { get; set; }
-
- /** */
- string InvokeResult { get; }
- }
-
- /// <summary>
- /// Test service interface to check ambiguity handling.
- /// </summary>
- protected interface ITestIgniteServiceAmbiguity
- {
- /** */
- int AmbiguousMethod(int arg);
- }
-
- /// <summary>
- /// Test service interface.
- /// </summary>
- protected interface ITestIgniteService : ITestIgniteServiceProperties
- {
- /** */
- void VoidMethod();
-
- /** */
- void VoidMethod(int arg);
-
- /** */
- void VoidMethod(int arg, string arg1, object arg2 = null);
-
- /** */
- void VoidMethod(int arg, string arg1, object arg2 = null, params object[] args);
-
- /** */
- object ObjectMethod();
-
- /** */
- object ObjectMethod(int arg);
-
- /** */
- object ObjectMethod(int arg, string arg1, object arg2 = null);
-
- /** */
- object ObjectMethod(int arg, string arg1, object arg2 = null, params object[] args);
-
- /** */
- void ExceptionMethod();
-
- /** */
- void CustomExceptionMethod();
-
- /** */
- void CustomExceptionPortableMethod(bool throwOnWrite, bool throwOnRead);
-
- /** */
- TestPortableClass PortableArgMethod(int arg1, IPortableObject arg2);
-
- /** */
- IPortableObject PortableResultMethod(int arg1, TestPortableClass arg2);
-
- /** */
- IPortableObject PortableArgAndResultMethod(int arg1, IPortableObject arg2);
-
- /** */
- int AmbiguousMethod(int arg);
- }
-
- /// <summary>
- /// Test service interface. Does not derive from actual interface, but has all the same method signatures.
- /// </summary>
- protected interface ITestIgniteServiceProxyInterface
- {
- /** */
- int IntProp { get; set; }
-
- /** */
- object ObjProp { get; set; }
-
- /** */
- string InvokeResult { get; }
-
- /** */
- void VoidMethod();
-
- /** */
- void VoidMethod(int arg);
-
- /** */
- void VoidMethod(int arg, string arg1, object arg2 = null);
-
- /** */
- void VoidMethod(int arg, string arg1, object arg2 = null, params object[] args);
-
- /** */
- object ObjectMethod();
-
- /** */
- object ObjectMethod(int arg);
-
- /** */
- object ObjectMethod(int arg, string arg1, object arg2 = null);
-
- /** */
- object ObjectMethod(int arg, string arg1, object arg2 = null, params object[] args);
-
- /** */
- void ExceptionMethod();
-
- /** */
- void CustomExceptionMethod();
-
- /** */
- void CustomExceptionPortableMethod(bool throwOnWrite, bool throwOnRead);
-
- /** */
- TestPortableClass PortableArgMethod(int arg1, IPortableObject arg2);
-
- /** */
- IPortableObject PortableResultMethod(int arg1, TestPortableClass arg2);
-
- /** */
- IPortableObject PortableArgAndResultMethod(int arg1, IPortableObject arg2);
-
- /** */
- void MissingMethod();
-
- /** */
- int AmbiguousMethod(int arg);
- }
-
- /// <summary>
- /// Test service.
- /// </summary>
- [Serializable]
- private class TestIgniteService : ITestIgniteService, ITestIgniteServiceAmbiguity
- {
- /** */
- private readonly IPortables _portables;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="TestIgniteService"/> class.
- /// </summary>
- /// <param name="portables">The portables.</param>
- public TestIgniteService(IPortables portables)
- {
- _portables = portables;
- }
-
- /** <inheritdoc /> */
- public int IntProp { get; set; }
-
- /** <inheritdoc /> */
- public object ObjProp { get; set; }
-
- /** <inheritdoc /> */
- public string InvokeResult { get; private set; }
-
- /** <inheritdoc /> */
- public void VoidMethod()
- {
- InvokeResult = "VoidMethod";
- }
-
- /** <inheritdoc /> */
- public void VoidMethod(int arg)
- {
- InvokeResult = "VoidMethod" + arg;
- }
-
- /** <inheritdoc /> */
- public void VoidMethod(int arg, string arg1, object arg2 = null)
- {
- InvokeResult = "VoidMethod" + arg + arg1 + arg2;
- }
-
- /** <inheritdoc /> */
- public void VoidMethod(int arg, string arg1, object arg2 = null, params object[] args)
- {
- InvokeResult = "VoidMethod" + arg + arg1 + arg2 + string.Concat(args.Select(x => x.ToString()));
- }
-
- /** <inheritdoc /> */
- public object ObjectMethod()
- {
- return "ObjectMethod";
- }
-
- /** <inheritdoc /> */
- public object ObjectMethod(int arg)
- {
- return "ObjectMethod" + arg;
- }
-
- /** <inheritdoc /> */
- public object ObjectMethod(int arg, string arg1, object arg2 = null)
- {
- return "ObjectMethod" + arg + arg1 + arg2;
- }
-
- /** <inheritdoc /> */
- public object ObjectMethod(int arg, string arg1, object arg2 = null, params object[] args)
- {
- return "ObjectMethod" + arg + arg1 + arg2 + string.Concat(args.Select(x => x.ToString()));
- }
-
- /** <inheritdoc /> */
- public void ExceptionMethod()
- {
- throw new ArithmeticException("Expected exception");
- }
-
- /** <inheritdoc /> */
- public void CustomExceptionMethod()
- {
- throw new CustomException();
- }
-
- /** <inheritdoc /> */
- public void CustomExceptionPortableMethod(bool throwOnWrite, bool throwOnRead)
- {
- throw new CustomExceptionPortable {ThrowOnRead = throwOnRead, ThrowOnWrite = throwOnWrite};
- }
-
- /** <inheritdoc /> */
- public TestPortableClass PortableArgMethod(int arg1, IPortableObject arg2)
- {
- return arg2.Deserialize<TestPortableClass>();
- }
-
- /** <inheritdoc /> */
- public IPortableObject PortableResultMethod(int arg1, TestPortableClass arg2)
- {
- return _portables.ToPortable<IPortableObject>(arg2);
- }
-
- /** <inheritdoc /> */
- public IPortableObject PortableArgAndResultMethod(int arg1, IPortableObject arg2)
- {
- return _portables.ToPortable<IPortableObject>(arg2.Deserialize<TestPortableClass>());
- }
-
- /** <inheritdoc /> */
- public override string ToString()
- {
- return IntProp.ToString();
- }
-
- /** <inheritdoc /> */
- public override int GetHashCode()
- {
- return IntProp.GetHashCode();
- }
-
- /** <inheritdoc /> */
- int ITestIgniteService.AmbiguousMethod(int arg)
- {
- return arg;
- }
-
- /** <inheritdoc /> */
- int ITestIgniteServiceAmbiguity.AmbiguousMethod(int arg)
- {
- return -arg;
- }
- }
-
- /// <summary>
- /// Test serializable class.
- /// </summary>
- [Serializable]
- private class TestClass
- {
- /** */
- public string Prop { get; set; }
-
- /** <inheritdoc /> */
- public override string ToString()
- {
- return "TestClass" + Prop;
- }
- }
-
- /// <summary>
- /// Custom non-serializable exception.
- /// </summary>
- private class CustomException : Exception
- {
-
- }
-
- /// <summary>
- /// Custom non-serializable exception.
- /// </summary>
- private class CustomExceptionPortable : Exception, IPortableMarshalAware
- {
- /** */
- public bool ThrowOnWrite { get; set; }
-
- /** */
- public bool ThrowOnRead { get; set; }
-
- /** <inheritdoc /> */
- public void WritePortable(IPortableWriter writer)
- {
- writer.WriteBoolean("ThrowOnRead", ThrowOnRead);
-
- if (ThrowOnWrite)
- throw new Exception("Expected exception in CustomExceptionPortable.WritePortable");
- }
-
- /** <inheritdoc /> */
- public void ReadPortable(IPortableReader reader)
- {
- ThrowOnRead = reader.ReadBoolean("ThrowOnRead");
-
- if (ThrowOnRead)
- throw new Exception("Expected exception in CustomExceptionPortable.ReadPortable");
- }
- }
-
- /// <summary>
- /// Portable object for method argument/result.
- /// </summary>
- protected class TestPortableClass : IPortableMarshalAware
- {
- /** */
- public string Prop { get; set; }
-
- /** */
- public bool ThrowOnWrite { get; set; }
-
- /** */
- public bool ThrowOnRead { get; set; }
-
- /** <inheritdoc /> */
- public void WritePortable(IPortableWriter writer)
- {
- writer.WriteString("Prop", Prop);
- writer.WriteBoolean("ThrowOnRead", ThrowOnRead);
-
- if (ThrowOnWrite)
- throw new Exception("Expected exception in TestPortableClass.WritePortable");
- }
-
- /** <inheritdoc /> */
- public void ReadPortable(IPortableReader reader)
- {
- Prop = reader.ReadString("Prop");
- ThrowOnRead = reader.ReadBoolean("ThrowOnRead");
-
- if (ThrowOnRead)
- throw new Exception("Expected exception in TestPortableClass.ReadPortable");
- }
- }
- }
-
- /// <summary>
- /// Tests <see cref="ServiceProxySerializer"/> functionality with keepPortable mode enabled on client.
- /// </summary>
- public class ServiceProxyTestKeepPortableClient : ServiceProxyTest
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="ServiceProxyTestKeepPortableClient"/> class.
- /// </summary>
- public ServiceProxyTestKeepPortableClient()
- {
- KeepPortable = true;
- }
-
- [Test]
- public void TestPortableMethods()
- {
- var prx = GetProxy();
-
- var obj = new TestPortableClass { Prop = "PropValue" };
-
- var result = prx.PortableResultMethod(1, obj);
-
- Assert.AreEqual(obj.Prop, result.Deserialize<TestPortableClass>().Prop);
- }
- }
-
- /// <summary>
- /// Tests <see cref="ServiceProxySerializer"/> functionality with keepPortable mode enabled on server.
- /// </summary>
- public class ServiceProxyTestKeepPortableServer : ServiceProxyTest
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="ServiceProxyTestKeepPortableServer"/> class.
- /// </summary>
- public ServiceProxyTestKeepPortableServer()
- {
- SrvKeepPortable = true;
- }
-
- [Test]
- public void TestPortableMethods()
- {
- var prx = GetProxy();
-
- var obj = new TestPortableClass { Prop = "PropValue" };
- var portObj = Portables.ToPortable<IPortableObject>(obj);
-
- var result = prx.PortableArgMethod(1, portObj);
-
- Assert.AreEqual(obj.Prop, result.Prop);
- }
- }
-
- /// <summary>
- /// Tests <see cref="ServiceProxySerializer"/> functionality with keepPortable mode enabled on client and on server.
- /// </summary>
- public class ServiceProxyTestKeepPortableClientServer : ServiceProxyTest
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="ServiceProxyTestKeepPortableClientServer"/> class.
- /// </summary>
- public ServiceProxyTestKeepPortableClientServer()
- {
- KeepPortable = true;
- SrvKeepPortable = true;
- }
-
- [Test]
- public void TestPortableMethods()
- {
- var prx = GetProxy();
-
- var obj = new TestPortableClass { Prop = "PropValue" };
- var portObj = Portables.ToPortable<IPortableObject>(obj);
-
- var result = prx.PortableArgAndResultMethod(1, portObj);
-
- Assert.AreEqual(obj.Prop, result.Deserialize<TestPortableClass>().Prop);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServicesAsyncWrapper.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServicesAsyncWrapper.cs b/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServicesAsyncWrapper.cs
deleted file mode 100644
index ba45dbd..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServicesAsyncWrapper.cs
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests.Services
-{
- using System.Collections.Generic;
- using System.Diagnostics;
- using Apache.Ignite.Core.Cluster;
- using Apache.Ignite.Core.Common;
- using Apache.Ignite.Core.Services;
-
- /// <summary>
- /// Services async wrapper to simplify testing.
- /// </summary>
- public class ServicesAsyncWrapper : IServices
- {
- /** Wrapped async services. */
- private readonly IServices _services;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="ServicesAsyncWrapper"/> class.
- /// </summary>
- /// <param name="services">Services to wrap.</param>
- public ServicesAsyncWrapper(IServices services)
- {
- _services = services.WithAsync();
- }
-
- /** <inheritDoc /> */
- public IServices WithAsync()
- {
- return this;
- }
-
- /** <inheritDoc /> */
- public bool IsAsync
- {
- get { return true; }
- }
-
- /** <inheritDoc /> */
- public IFuture GetFuture()
- {
- Debug.Fail("ServicesAsyncWrapper.Future() should not be called. It always returns null.");
- return null;
- }
-
- /** <inheritDoc /> */
- public IFuture<TResult> GetFuture<TResult>()
- {
- Debug.Fail("ServicesAsyncWrapper.Future() should not be called. It always returns null.");
- return null;
- }
-
- /** <inheritDoc /> */
- public IClusterGroup ClusterGroup
- {
- get { return _services.ClusterGroup; }
- }
-
- /** <inheritDoc /> */
- public void DeployClusterSingleton(string name, IService service)
- {
- _services.DeployClusterSingleton(name, service);
- WaitResult();
- }
-
- /** <inheritDoc /> */
- public void DeployNodeSingleton(string name, IService service)
- {
- _services.DeployNodeSingleton(name, service);
- WaitResult();
- }
-
- /** <inheritDoc /> */
- public void DeployKeyAffinitySingleton<TK>(string name, IService service, string cacheName, TK affinityKey)
- {
- _services.DeployKeyAffinitySingleton(name, service, cacheName, affinityKey);
- WaitResult();
- }
-
- /** <inheritDoc /> */
- public void DeployMultiple(string name, IService service, int totalCount, int maxPerNodeCount)
- {
- _services.DeployMultiple(name, service, totalCount, maxPerNodeCount);
- WaitResult();
- }
-
- /** <inheritDoc /> */
- public void Deploy(ServiceConfiguration configuration)
- {
- _services.Deploy(configuration);
- WaitResult();
- }
-
- /** <inheritDoc /> */
- public void Cancel(string name)
- {
- _services.Cancel(name);
- WaitResult();
- }
-
- /** <inheritDoc /> */
- public void CancelAll()
- {
- _services.CancelAll();
- WaitResult();
- }
-
- /** <inheritDoc /> */
- public ICollection<IServiceDescriptor> GetServiceDescriptors()
- {
- return _services.GetServiceDescriptors();
- }
-
- /** <inheritDoc /> */
- public T GetService<T>(string name)
- {
- return _services.GetService<T>(name);
- }
-
- /** <inheritDoc /> */
- public ICollection<T> GetServices<T>(string name)
- {
- return _services.GetServices<T>(name);
- }
-
- /** <inheritDoc /> */
- public T GetServiceProxy<T>(string name) where T : class
- {
- return _services.GetServiceProxy<T>(name);
- }
-
- /** <inheritDoc /> */
- public T GetServiceProxy<T>(string name, bool sticky) where T : class
- {
- return _services.GetServiceProxy<T>(name, sticky);
- }
-
- /** <inheritDoc /> */
- public IServices WithKeepPortable()
- {
- return new ServicesAsyncWrapper(_services.WithKeepPortable());
- }
-
- /** <inheritDoc /> */
- public IServices WithServerKeepPortable()
- {
- return new ServicesAsyncWrapper(_services.WithServerKeepPortable());
- }
-
- /// <summary>
- /// Waits for the async result.
- /// </summary>
- private void WaitResult()
- {
- _services.GetFuture().Get();
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServicesTest.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServicesTest.cs b/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServicesTest.cs
deleted file mode 100644
index 6b2a7ec..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core.Tests/Services/ServicesTest.cs
+++ /dev/null
@@ -1,823 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests.Services
-{
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading;
- using Apache.Ignite.Core.Cluster;
- using Apache.Ignite.Core.Common;
- using Apache.Ignite.Core.Portable;
- using Apache.Ignite.Core.Resource;
- using Apache.Ignite.Core.Services;
- using NUnit.Framework;
-
- /// <summary>
- /// Services tests.
- /// </summary>
- public class ServicesTest
- {
- /** */
- private const string SvcName = "Service1";
-
- /** */
- private const string CacheName = "cache1";
-
- /** */
- private const int AffKey = 25;
-
- /** */
- protected IIgnite Grid1;
-
- /** */
- protected IIgnite Grid2;
-
- /** */
- protected IIgnite Grid3;
-
- /** */
- protected IIgnite[] Grids;
-
- [TestFixtureTearDown]
- public void FixtureTearDown()
- {
- StopGrids();
- }
-
- /// <summary>
- /// Executes before each test.
- /// </summary>
- [SetUp]
- public void SetUp()
- {
- StartGrids();
- EventsTestHelper.ListenResult = true;
- }
-
- /// <summary>
- /// Executes after each test.
- /// </summary>
- [TearDown]
- public void TearDown()
- {
- try
- {
- Services.Cancel(SvcName);
-
- TestUtils.AssertHandleRegistryIsEmpty(1000, Grid1, Grid2, Grid3);
- }
- catch (Exception)
- {
- // Restart grids to cleanup
- StopGrids();
-
- throw;
- }
- finally
- {
- EventsTestHelper.AssertFailures();
-
- if (TestContext.CurrentContext.Test.Name.StartsWith("TestEventTypes"))
- StopGrids(); // clean events for other tests
- }
- }
-
- /// <summary>
- /// Tests deployment.
- /// </summary>
- [Test]
- public void TestDeploy([Values(true, false)] bool portable)
- {
- var cfg = new ServiceConfiguration
- {
- Name = SvcName,
- MaxPerNodeCount = 3,
- TotalCount = 3,
- NodeFilter = new NodeFilter {NodeId = Grid1.GetCluster().GetLocalNode().Id},
- Service = portable ? new TestIgniteServicePortable() : new TestIgniteServiceSerializable()
- };
-
- Services.Deploy(cfg);
-
- CheckServiceStarted(Grid1, 3);
- }
-
- /// <summary>
- /// Tests cluster singleton deployment.
- /// </summary>
- [Test]
- public void TestDeployClusterSingleton()
- {
- var svc = new TestIgniteServiceSerializable();
-
- Services.DeployClusterSingleton(SvcName, svc);
-
- var svc0 = Services.GetServiceProxy<ITestIgniteService>(SvcName);
-
- // Check that only one node has the service.
- foreach (var grid in Grids)
- {
- if (grid.GetCluster().GetLocalNode().Id == svc0.NodeId)
- CheckServiceStarted(grid);
- else
- Assert.IsNull(grid.GetServices().GetService<TestIgniteServiceSerializable>(SvcName));
- }
- }
-
- /// <summary>
- /// Tests node singleton deployment.
- /// </summary>
- [Test]
- public void TestDeployNodeSingleton()
- {
- var svc = new TestIgniteServiceSerializable();
-
- Services.DeployNodeSingleton(SvcName, svc);
-
- Assert.AreEqual(1, Grid1.GetServices().GetServices<ITestIgniteService>(SvcName).Count);
- Assert.AreEqual(1, Grid2.GetServices().GetServices<ITestIgniteService>(SvcName).Count);
- Assert.AreEqual(1, Grid3.GetServices().GetServices<ITestIgniteService>(SvcName).Count);
- }
-
- /// <summary>
- /// Tests key affinity singleton deployment.
- /// </summary>
- [Test]
- public void TestDeployKeyAffinitySingleton()
- {
- var svc = new TestIgniteServicePortable();
-
- Services.DeployKeyAffinitySingleton(SvcName, svc, CacheName, AffKey);
-
- var affNode = Grid1.GetAffinity(CacheName).MapKeyToNode(AffKey);
-
- var prx = Services.GetServiceProxy<ITestIgniteService>(SvcName);
-
- Assert.AreEqual(affNode.Id, prx.NodeId);
- }
-
- /// <summary>
- /// Tests key affinity singleton deployment.
- /// </summary>
- [Test]
- public void TestDeployKeyAffinitySingletonPortable()
- {
- var services = Services.WithKeepPortable();
-
- var svc = new TestIgniteServicePortable();
-
- var affKey = new PortableObject {Val = AffKey};
-
- services.DeployKeyAffinitySingleton(SvcName, svc, CacheName, affKey);
-
- var prx = services.GetServiceProxy<ITestIgniteService>(SvcName);
-
- Assert.IsTrue(prx.Initialized);
- }
-
- /// <summary>
- /// Tests multiple deployment.
- /// </summary>
- [Test]
- public void TestDeployMultiple()
- {
- var svc = new TestIgniteServiceSerializable();
-
- Services.DeployMultiple(SvcName, svc, Grids.Length * 5, 5);
-
- foreach (var grid in Grids)
- CheckServiceStarted(grid, 5);
- }
-
- /// <summary>
- /// Tests cancellation.
- /// </summary>
- [Test]
- public void TestCancel()
- {
- for (var i = 0; i < 10; i++)
- {
- Services.DeployNodeSingleton(SvcName + i, new TestIgniteServicePortable());
- Assert.IsNotNull(Services.GetService<ITestIgniteService>(SvcName + i));
- }
-
- Services.Cancel(SvcName + 0);
- Services.Cancel(SvcName + 1);
-
- Assert.IsNull(Services.GetService<ITestIgniteService>(SvcName + 0));
- Assert.IsNull(Services.GetService<ITestIgniteService>(SvcName + 1));
-
- for (var i = 2; i < 10; i++)
- Assert.IsNotNull(Services.GetService<ITestIgniteService>(SvcName + i));
-
- Services.CancelAll();
-
- for (var i = 0; i < 10; i++)
- Assert.IsNull(Services.GetService<ITestIgniteService>(SvcName + i));
- }
-
- /// <summary>
- /// Tests service proxy.
- /// </summary>
- [Test]
- public void TestGetServiceProxy([Values(true, false)] bool portable)
- {
- // Test proxy without a service
- var prx = Services.GetServiceProxy<ITestIgniteService>(SvcName);
-
- Assert.IsTrue(prx != null);
-
- var ex = Assert.Throws<ServiceInvocationException>(() => Assert.IsTrue(prx.Initialized)).InnerException;
- Assert.AreEqual("Failed to find deployed service: " + SvcName, ex.Message);
-
- // Deploy to grid2 & grid3
- var svc = portable
- ? new TestIgniteServicePortable {TestProperty = 17}
- : new TestIgniteServiceSerializable {TestProperty = 17};
-
- Grid1.GetCluster().ForNodeIds(Grid2.GetCluster().GetLocalNode().Id, Grid3.GetCluster().GetLocalNode().Id).GetServices()
- .DeployNodeSingleton(SvcName,
- svc);
-
- // Make sure there is no local instance on grid1
- Assert.IsNull(Services.GetService<ITestIgniteService>(SvcName));
-
- // Get proxy
- prx = Services.GetServiceProxy<ITestIgniteService>(SvcName);
-
- // Check proxy properties
- Assert.IsNotNull(prx);
- Assert.AreEqual(prx.GetType(), svc.GetType());
- Assert.AreEqual(prx.ToString(), svc.ToString());
- Assert.AreEqual(17, prx.TestProperty);
- Assert.IsTrue(prx.Initialized);
- Assert.IsTrue(prx.Executed);
- Assert.IsFalse(prx.Cancelled);
- Assert.AreEqual(SvcName, prx.LastCallContextName);
-
- // Check err method
- Assert.Throws<ServiceInvocationException>(() => prx.ErrMethod(123));
-
- // Check local scenario (proxy should not be created for local instance)
- Assert.IsTrue(ReferenceEquals(Grid2.GetServices().GetService<ITestIgniteService>(SvcName),
- Grid2.GetServices().GetServiceProxy<ITestIgniteService>(SvcName)));
-
- // Check sticky = false: call multiple times, check that different nodes get invoked
- var invokedIds = Enumerable.Range(1, 100).Select(x => prx.NodeId).Distinct().ToList();
- Assert.AreEqual(2, invokedIds.Count);
-
- // Check sticky = true: all calls should be to the same node
- prx = Services.GetServiceProxy<ITestIgniteService>(SvcName, true);
- invokedIds = Enumerable.Range(1, 100).Select(x => prx.NodeId).Distinct().ToList();
- Assert.AreEqual(1, invokedIds.Count);
-
- // Proxy does not work for cancelled service.
- Services.CancelAll();
-
- Assert.Throws<ServiceInvocationException>(() => { Assert.IsTrue(prx.Cancelled); });
- }
-
- /// <summary>
- /// Tests the duck typing: proxy interface can be different from actual service interface,
- /// only called method signature should be compatible.
- /// </summary>
- [Test]
- public void TestDuckTyping([Values(true, false)] bool local)
- {
- var svc = new TestIgniteServicePortable {TestProperty = 33};
-
- // Deploy locally or to the remote node
- var nodeId = (local ? Grid1 : Grid2).GetCluster().GetLocalNode().Id;
-
- var cluster = Grid1.GetCluster().ForNodeIds(nodeId);
-
- cluster.GetServices().DeployNodeSingleton(SvcName, svc);
-
- // Get proxy
- var prx = Services.GetServiceProxy<ITestIgniteServiceProxyInterface>(SvcName);
-
- // NodeId signature is the same as in service
- Assert.AreEqual(nodeId, prx.NodeId);
-
- // Method signature is different from service signature (object -> object), but is compatible.
- Assert.AreEqual(15, prx.Method(15));
-
- // TestProperty is object in proxy and int in service, getter works..
- Assert.AreEqual(33, prx.TestProperty);
-
- // .. but setter does not
- var ex = Assert.Throws<ServiceInvocationException>(() => { prx.TestProperty = new object(); });
- Assert.AreEqual("Object of type 'System.Object' cannot be converted to type 'System.Int32'.",
- ex.InnerException.Message);
- }
-
- /// <summary>
- /// Tests service descriptors.
- /// </summary>
- [Test]
- public void TestServiceDescriptors()
- {
- Services.DeployKeyAffinitySingleton(SvcName, new TestIgniteServiceSerializable(), CacheName, 1);
-
- var descriptors = Services.GetServiceDescriptors();
-
- Assert.AreEqual(1, descriptors.Count);
-
- var desc = descriptors.Single();
-
- Assert.AreEqual(SvcName, desc.Name);
- Assert.AreEqual(CacheName, desc.CacheName);
- Assert.AreEqual(1, desc.AffinityKey);
- Assert.AreEqual(1, desc.MaxPerNodeCount);
- Assert.AreEqual(1, desc.TotalCount);
- Assert.AreEqual(typeof(TestIgniteServiceSerializable), desc.Type);
- Assert.AreEqual(Grid1.GetCluster().GetLocalNode().Id, desc.OriginNodeId);
-
- var top = desc.TopologySnapshot;
- var prx = Services.GetServiceProxy<ITestIgniteService>(SvcName);
-
- Assert.AreEqual(1, top.Count);
- Assert.AreEqual(prx.NodeId, top.Keys.Single());
- Assert.AreEqual(1, top.Values.Single());
- }
-
- /// <summary>
- /// Tests the client portable flag.
- /// </summary>
- [Test]
- public void TestWithKeepPortableClient()
- {
- var svc = new TestIgniteServicePortable();
-
- // Deploy to grid2
- Grid1.GetCluster().ForNodeIds(Grid2.GetCluster().GetLocalNode().Id).GetServices().WithKeepPortable()
- .DeployNodeSingleton(SvcName, svc);
-
- // Get proxy
- var prx = Services.WithKeepPortable().GetServiceProxy<ITestIgniteService>(SvcName);
-
- var obj = new PortableObject {Val = 11};
-
- var res = (IPortableObject) prx.Method(obj);
- Assert.AreEqual(11, res.Deserialize<PortableObject>().Val);
-
- res = (IPortableObject) prx.Method(Grid1.GetPortables().ToPortable<IPortableObject>(obj));
- Assert.AreEqual(11, res.Deserialize<PortableObject>().Val);
- }
-
- /// <summary>
- /// Tests the server portable flag.
- /// </summary>
- [Test]
- public void TestWithKeepPortableServer()
- {
- var svc = new TestIgniteServicePortable();
-
- // Deploy to grid2
- Grid1.GetCluster().ForNodeIds(Grid2.GetCluster().GetLocalNode().Id).GetServices().WithServerKeepPortable()
- .DeployNodeSingleton(SvcName, svc);
-
- // Get proxy
- var prx = Services.WithServerKeepPortable().GetServiceProxy<ITestIgniteService>(SvcName);
-
- var obj = new PortableObject { Val = 11 };
-
- var res = (PortableObject) prx.Method(obj);
- Assert.AreEqual(11, res.Val);
-
- res = (PortableObject)prx.Method(Grid1.GetPortables().ToPortable<IPortableObject>(obj));
- Assert.AreEqual(11, res.Val);
- }
-
- /// <summary>
- /// Tests server and client portable flag.
- /// </summary>
- [Test]
- public void TestWithKeepPortableBoth()
- {
- var svc = new TestIgniteServicePortable();
-
- // Deploy to grid2
- Grid1.GetCluster().ForNodeIds(Grid2.GetCluster().GetLocalNode().Id).GetServices().WithKeepPortable().WithServerKeepPortable()
- .DeployNodeSingleton(SvcName, svc);
-
- // Get proxy
- var prx = Services.WithKeepPortable().WithServerKeepPortable().GetServiceProxy<ITestIgniteService>(SvcName);
-
- var obj = new PortableObject { Val = 11 };
-
- var res = (IPortableObject)prx.Method(obj);
- Assert.AreEqual(11, res.Deserialize<PortableObject>().Val);
-
- res = (IPortableObject)prx.Method(Grid1.GetPortables().ToPortable<IPortableObject>(obj));
- Assert.AreEqual(11, res.Deserialize<PortableObject>().Val);
- }
-
- /// <summary>
- /// Tests exception in Initialize.
- /// </summary>
- [Test]
- public void TestInitException()
- {
- var svc = new TestIgniteServiceSerializable { ThrowInit = true };
-
- var ex = Assert.Throws<IgniteException>(() => Services.DeployMultiple(SvcName, svc, Grids.Length, 1));
- Assert.AreEqual("Expected exception", ex.Message);
-
- var svc0 = Services.GetService<TestIgniteServiceSerializable>(SvcName);
-
- Assert.IsNull(svc0);
- }
-
- /// <summary>
- /// Tests exception in Execute.
- /// </summary>
- [Test]
- public void TestExecuteException()
- {
- var svc = new TestIgniteServiceSerializable { ThrowExecute = true };
-
- Services.DeployMultiple(SvcName, svc, Grids.Length, 1);
-
- var svc0 = Services.GetService<TestIgniteServiceSerializable>(SvcName);
-
- // Execution failed, but service exists.
- Assert.IsNotNull(svc0);
- Assert.IsFalse(svc0.Executed);
- }
-
- /// <summary>
- /// Tests exception in Cancel.
- /// </summary>
- [Test]
- public void TestCancelException()
- {
- var svc = new TestIgniteServiceSerializable { ThrowCancel = true };
-
- Services.DeployMultiple(SvcName, svc, Grids.Length, 1);
-
- CheckServiceStarted(Grid1);
-
- Services.CancelAll();
-
- // Cancellation failed, but service is removed.
- foreach (var grid in Grids)
- Assert.IsNull(grid.GetServices().GetService<ITestIgniteService>(SvcName));
- }
-
- [Test]
- public void TestMarshalExceptionOnRead()
- {
- var svc = new TestIgniteServicePortableErr();
-
- var ex = Assert.Throws<IgniteException>(() => Services.DeployMultiple(SvcName, svc, Grids.Length, 1));
- Assert.AreEqual("Expected exception", ex.Message);
-
- var svc0 = Services.GetService<TestIgniteServiceSerializable>(SvcName);
-
- Assert.IsNull(svc0);
- }
-
- [Test]
- public void TestMarshalExceptionOnWrite()
- {
- var svc = new TestIgniteServicePortableErr {ThrowOnWrite = true};
-
- var ex = Assert.Throws<Exception>(() => Services.DeployMultiple(SvcName, svc, Grids.Length, 1));
- Assert.AreEqual("Expected exception", ex.Message);
-
- var svc0 = Services.GetService<TestIgniteServiceSerializable>(SvcName);
-
- Assert.IsNull(svc0);
- }
-
- /// <summary>
- /// Starts the grids.
- /// </summary>
- private void StartGrids()
- {
- if (Grid1 != null)
- return;
-
- Grid1 = Ignition.Start(Configuration("config\\compute\\compute-grid1.xml"));
- Grid2 = Ignition.Start(Configuration("config\\compute\\compute-grid2.xml"));
- Grid3 = Ignition.Start(Configuration("config\\compute\\compute-grid3.xml"));
-
- Grids = new[] { Grid1, Grid2, Grid3 };
- }
-
- /// <summary>
- /// Stops the grids.
- /// </summary>
- private void StopGrids()
- {
- Grid1 = Grid2 = Grid3 = null;
- Grids = null;
-
- Ignition.StopAll(true);
- }
-
- /// <summary>
- /// Checks that service has started on specified grid.
- /// </summary>
- private static void CheckServiceStarted(IIgnite grid, int count = 1)
- {
- var services = grid.GetServices().GetServices<TestIgniteServiceSerializable>(SvcName);
-
- Assert.AreEqual(count, services.Count);
-
- var svc = services.First();
-
- Assert.IsNotNull(svc);
-
- Assert.IsTrue(svc.Initialized);
-
- Thread.Sleep(100); // Service runs in a separate thread, wait for it to execute.
-
- Assert.IsTrue(svc.Executed);
- Assert.IsFalse(svc.Cancelled);
-
- Assert.AreEqual(grid.GetCluster().GetLocalNode().Id, svc.NodeId);
- }
-
- /// <summary>
- /// Gets the Ignite configuration.
- /// </summary>
- private static IgniteConfiguration Configuration(string springConfigUrl)
- {
- return new IgniteConfiguration
- {
- SpringConfigUrl = springConfigUrl,
- JvmClasspath = TestUtils.CreateTestClasspath(),
- JvmOptions = TestUtils.TestJavaOptions(),
- PortableConfiguration = new PortableConfiguration
- {
- TypeConfigurations = new List<PortableTypeConfiguration>
- {
- new PortableTypeConfiguration(typeof(TestIgniteServicePortable)),
- new PortableTypeConfiguration(typeof(TestIgniteServicePortableErr)),
- new PortableTypeConfiguration(typeof(PortableObject))
- }
- }
- };
- }
-
- /// <summary>
- /// Gets the services.
- /// </summary>
- protected virtual IServices Services
- {
- get { return Grid1.GetServices(); }
- }
-
- /// <summary>
- /// Test service interface for proxying.
- /// </summary>
- private interface ITestIgniteService
- {
- int TestProperty { get; set; }
-
- /** */
- bool Initialized { get; }
-
- /** */
- bool Cancelled { get; }
-
- /** */
- bool Executed { get; }
-
- /** */
- Guid NodeId { get; }
-
- /** */
- string LastCallContextName { get; }
-
- /** */
- object Method(object arg);
-
- /** */
- object ErrMethod(object arg);
- }
-
- /// <summary>
- /// Test service interface for proxy usage.
- /// Has some of the original interface members with different signatures.
- /// </summary>
- private interface ITestIgniteServiceProxyInterface
- {
- /** */
- Guid NodeId { get; }
-
- /** */
- object TestProperty { get; set; }
-
- /** */
- int Method(int arg);
- }
-
- #pragma warning disable 649
-
- /// <summary>
- /// Test serializable service.
- /// </summary>
- [Serializable]
- private class TestIgniteServiceSerializable : IService, ITestIgniteService
- {
- /** */
- [InstanceResource]
- private IIgnite _grid;
-
- /** <inheritdoc /> */
- public int TestProperty { get; set; }
-
- /** <inheritdoc /> */
- public bool Initialized { get; private set; }
-
- /** <inheritdoc /> */
- public bool Cancelled { get; private set; }
-
- /** <inheritdoc /> */
- public bool Executed { get; private set; }
-
- /** <inheritdoc /> */
- public Guid NodeId
- {
- get { return _grid.GetCluster().GetLocalNode().Id; }
- }
-
- /** <inheritdoc /> */
- public string LastCallContextName { get; private set; }
-
- /** */
- public bool ThrowInit { get; set; }
-
- /** */
- public bool ThrowExecute { get; set; }
-
- /** */
- public bool ThrowCancel { get; set; }
-
- /** */
- public object Method(object arg)
- {
- return arg;
- }
-
- /** */
- public object ErrMethod(object arg)
- {
- throw new ArgumentNullException("arg", "ExpectedException");
- }
-
- /** <inheritdoc /> */
- public void Init(IServiceContext context)
- {
- if (ThrowInit)
- throw new Exception("Expected exception");
-
- CheckContext(context);
-
- Assert.IsFalse(context.IsCancelled);
- Initialized = true;
- }
-
- /** <inheritdoc /> */
- public void Execute(IServiceContext context)
- {
- if (ThrowExecute)
- throw new Exception("Expected exception");
-
- CheckContext(context);
-
- Assert.IsFalse(context.IsCancelled);
- Assert.IsTrue(Initialized);
- Assert.IsFalse(Cancelled);
-
- Executed = true;
- }
-
- /** <inheritdoc /> */
- public void Cancel(IServiceContext context)
- {
- if (ThrowCancel)
- throw new Exception("Expected exception");
-
- CheckContext(context);
-
- Assert.IsTrue(context.IsCancelled);
-
- Cancelled = true;
- }
-
- /// <summary>
- /// Checks the service context.
- /// </summary>
- private void CheckContext(IServiceContext context)
- {
- LastCallContextName = context.Name;
-
- if (context.AffinityKey != null && !(context.AffinityKey is int))
- {
- var portableObject = context.AffinityKey as IPortableObject;
-
- var key = portableObject != null
- ? portableObject.Deserialize<PortableObject>()
- : (PortableObject) context.AffinityKey;
-
- Assert.AreEqual(AffKey, key.Val);
- }
-
- Assert.IsNotNull(_grid);
-
- Assert.IsTrue(context.Name.StartsWith(SvcName));
- Assert.AreNotEqual(Guid.Empty, context.ExecutionId);
- }
- }
-
- /// <summary>
- /// Test portable service.
- /// </summary>
- private class TestIgniteServicePortable : TestIgniteServiceSerializable, IPortableMarshalAware
- {
- /** <inheritdoc /> */
- public void WritePortable(IPortableWriter writer)
- {
- writer.WriteInt("TestProp", TestProperty);
- }
-
- /** <inheritdoc /> */
- public void ReadPortable(IPortableReader reader)
- {
- TestProperty = reader.ReadInt("TestProp");
- }
- }
-
- /// <summary>
- /// Test portable service with exceptions in marshalling.
- /// </summary>
- private class TestIgniteServicePortableErr : TestIgniteServiceSerializable, IPortableMarshalAware
- {
- /** */
- public bool ThrowOnWrite { get; set; }
-
- /** <inheritdoc /> */
- public void WritePortable(IPortableWriter writer)
- {
- writer.WriteInt("TestProp", TestProperty);
-
- if (ThrowOnWrite)
- throw new Exception("Expected exception");
- }
-
- /** <inheritdoc /> */
- public void ReadPortable(IPortableReader reader)
- {
- TestProperty = reader.ReadInt("TestProp");
-
- throw new Exception("Expected exception");
- }
- }
-
- /// <summary>
- /// Test node filter.
- /// </summary>
- [Serializable]
- private class NodeFilter : IClusterNodeFilter
- {
- /// <summary>
- /// Gets or sets the node identifier.
- /// </summary>
- public Guid NodeId { get; set; }
-
- /** <inheritdoc /> */
- public bool Invoke(IClusterNode node)
- {
- return node.Id == NodeId;
- }
- }
-
- /// <summary>
- /// Portable object.
- /// </summary>
- private class PortableObject
- {
- public int Val { get; set; }
- }
- }
-}