blob: 8355766993b3fd9f78da8eb0a67071bffd8a8ad9 [file] [log] [blame]
/*
* 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;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Apache.Ignite.Core.Binary;
using NUnit.Framework;
using Apache.Ignite.Platform.Model;
/// <summary>
/// Tests checks ability to execute service method without explicit registration of parameter type.
/// </summary>
public class ServicesTypeAutoResolveTest
{
/** */
protected internal static readonly Employee[] Emps = new[]
{
new Employee {Fio = "Sarah Connor", Salary = 1},
new Employee {Fio = "John Connor", Salary = 2}
};
/** */
protected internal static readonly Parameter[] Param = new[]
{
new Parameter()
{Id = 1, Values = new[] {new ParamValue() {Id = 1, Val = 42}, new ParamValue() {Id = 2, Val = 43}}},
new Parameter()
{Id = 2, Values = new[] {new ParamValue() {Id = 3, Val = 44}, new ParamValue() {Id = 4, Val = 45}}}
};
/** */
private IIgnite _grid1;
[TestFixtureTearDown]
public void FixtureTearDown()
{
StopGrids();
}
/// <summary>
/// Executes before each test.
/// </summary>
[SetUp]
public void SetUp()
{
StartGrids();
}
/// <summary>
/// Executes after each test.
/// </summary>
[TearDown]
public void TearDown()
{
try
{
_grid1.GetServices();
TestUtils.AssertHandleRegistryIsEmpty(1000, _grid1);
}
catch (Exception)
{
// Restart grids to cleanup
StopGrids();
throw;
}
finally
{
if (TestContext.CurrentContext.Test.Name.StartsWith("TestEventTypes"))
StopGrids(); // clean events for other tests
}
}
/// <summary>
/// Tests Java service invocation with dynamic proxy.
/// Types should be resolved implicitly.
/// </summary>
[Test]
public void TestCallJavaServiceDynamicProxy()
{
// Deploy Java service
var javaSvcName = TestUtils.DeployJavaService(_grid1);
var svc = _grid1.GetServices().GetDynamicServiceProxy(javaSvcName, true);
doTestService(new JavaServiceDynamicProxy(svc));
}
/// <summary>
/// Tests Java service invocation.
/// Types should be resolved implicitly.
/// </summary>
[Test]
public void TestCallJavaService()
{
// Deploy Java service
var javaSvcName = TestUtils.DeployJavaService(_grid1);
var svc = _grid1.GetServices().GetServiceProxy<IJavaService>(javaSvcName, false);
doTestService(svc);
Assert.IsNull(svc.testDepartments(null));
var arr = new[] {"HR", "IT"}.Select(x => new Department() {Name = x}).ToArray();
ICollection deps = svc.testDepartments(arr);
Assert.NotNull(deps);
Assert.AreEqual(1, deps.Count);
Assert.AreEqual("Executive", deps.OfType<Department>().Select(d => d.Name).ToArray()[0]);
_grid1.GetServices().Cancel(javaSvcName);
}
/// <summary>
/// Tests java service instance.
/// </summary>
private void doTestService(IJavaService svc)
{
Assert.IsNull(svc.testAddress(null));
Address addr = svc.testAddress(new Address {Zip = "000", Addr = "Moscow"});
Assert.AreEqual("127000", addr.Zip);
Assert.AreEqual("Moscow Akademika Koroleva 12", addr.Addr);
Assert.AreEqual(42, svc.testOverload(2, Emps));
Assert.AreEqual(43, svc.testOverload(2, Param));
Assert.AreEqual(3, svc.testOverload(1, 2));
Assert.AreEqual(5, svc.testOverload(3, 2));
Assert.IsNull(svc.testEmployees(null));
var emps = svc.testEmployees(Emps);
Assert.NotNull(emps);
Assert.AreEqual(1, emps.Length);
Assert.AreEqual("Kyle Reese", emps[0].Fio);
Assert.AreEqual(3, emps[0].Salary);
Assert.IsNull(svc.testMap(null));
var map = new Dictionary<Key, Value>();
map.Add(new Key() {Id = 1}, new Value() {Val = "value1"});
map.Add(new Key() {Id = 2}, new Value() {Val = "value2"});
var res = svc.testMap(map);
Assert.NotNull(res);
Assert.AreEqual(1, res.Count);
Assert.AreEqual("value3", ((Value)res[new Key() {Id = 3}]).Val);
var accs = svc.testAccounts();
Assert.NotNull(accs);
Assert.AreEqual(2, accs.Length);
Assert.AreEqual("123", accs[0].Id);
Assert.AreEqual("321", accs[1].Id);
Assert.AreEqual(42, accs[0].Amount);
Assert.AreEqual(0, accs[1].Amount);
var users = svc.testUsers();
Assert.NotNull(users);
Assert.AreEqual(2, users.Length);
Assert.AreEqual(1, users[0].Id);
Assert.AreEqual(ACL.Allow, users[0].Acl);
Assert.AreEqual("admin", users[0].Role.Name);
Assert.AreEqual(2, users[1].Id);
Assert.AreEqual(ACL.Deny, users[1].Acl);
Assert.AreEqual("user", users[1].Role.Name);
}
/// <summary>
/// Starts the grids.
/// </summary>
private void StartGrids()
{
if (_grid1 != null)
return;
var path = Path.Combine("Config", "Compute", "compute-grid");
_grid1 = Ignition.Start(GetConfiguration(path + "1.xml"));
}
/// <summary>
/// Stops the grids.
/// </summary>
private void StopGrids()
{
_grid1 = null;
Ignition.StopAll(true);
}
/// <summary>
/// Gets the Ignite configuration.
/// </summary>
private IgniteConfiguration GetConfiguration(string springConfigUrl)
{
springConfigUrl = Compute.ComputeApiTestFullFooter.ReplaceFooterSetting(springConfigUrl);
return new IgniteConfiguration(TestUtils.GetTestConfiguration())
{
SpringConfigUrl = springConfigUrl,
BinaryConfiguration = new BinaryConfiguration
{
NameMapper = new BinaryBasicNameMapper {NamespacePrefix = "org.", NamespaceToLower = true}
}
};
}
}
}