blob: 669fd71a2467e31304e577eb421189dff3803c97 [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.Deployment
{
extern alias TestDll2;
using System.Linq;
using Apache.Ignite.Core.Tests.Compute;
using Apache.Ignite.Core.Tests.Process;
using Apache.Ignite.NLog;
using NUnit.Framework;
using Address = TestDll2::Apache.Ignite.Core.Tests.TestDll2.Address;
/// <summary>
/// Tests all APIs that support peer assembly loading.
/// </summary>
[Category(TestUtils.CategoryIntensive)]
public class PeerAssemblyLoadingAllApisTest
{
/// <summary>
/// Tests Compute.Call.
/// </summary>
[Test]
public void TestComputeCall([Values(true, false)] bool async)
{
PeerAssemblyLoadingTest.TestDeployment(remoteCompute =>
{
Assert.AreEqual("Apache.Ignite", async
? remoteCompute.CallAsync(new ProcessNameFunc()).Result
: remoteCompute.Call(new ProcessNameFunc()));
});
}
/// <summary>
/// Tests Compute.Call.
/// </summary>
[Test]
public void TestComputeAffinityCall([Values(true, false)] bool async, [Values(true, false)] bool withPartition)
{
PeerAssemblyLoadingTest.TestDeployment(ignite =>
{
var cache = ignite.GetOrCreateCache<int, int>("myCache");
var key = TestUtils.GetPrimaryKey(ignite, cache.Name, ignite.GetCluster().ForRemotes().GetNode());
var part = ignite.GetAffinity(cache.Name).GetPartition(key);
var res = withPartition
? async
? ignite.GetCompute().AffinityCallAsync(new[] {cache.Name}, part, new ProcessNameFunc()).Result
: ignite.GetCompute().AffinityCall(new[] {cache.Name}, part, new ProcessNameFunc())
: async
? ignite.GetCompute().AffinityCallAsync(cache.Name, key, new ProcessNameFunc()).Result
: ignite.GetCompute().AffinityCall(cache.Name, key, new ProcessNameFunc());
Assert.AreEqual("Apache.Ignite", res);
});
}
/// <summary>
/// Tests Compute.Execute.
/// </summary>
[Test]
public void TestComputeExecute([Values(true, false)] bool async)
{
PeerAssemblyLoadingTest.TestDeployment(remoteCompute =>
{
// Argument is from different assembly and should be peer deployed as well.
var taskArg = new Address("1", 2);
Assert.AreEqual("Apache.Ignite_Address [street=1, zip=2]", async
? remoteCompute.ExecuteAsync(new ProcessNameTask(), taskArg).Result
: remoteCompute.Execute(new ProcessNameTask(), taskArg));
});
}
/// <summary>
/// Tests Compute.Broadcast(IComputeAction).
/// </summary>
[Test]
public void TestComputeBroadcastAction([Values(true, false)] bool async)
{
PeerAssemblyLoadingTest.TestDeployment(remoteCompute =>
{
if (async)
{
remoteCompute.BroadcastAsync(new ComputeAction()).Wait();
}
else
{
remoteCompute.Broadcast(new ComputeAction());
}
});
}
/// <summary>
/// Tests Compute.Broadcast(IComputeFunc{T}).
/// </summary>
[Test]
public void TestComputeBroadcastOutFunc([Values(true, false)] bool async)
{
PeerAssemblyLoadingTest.TestDeployment(remoteCompute =>
{
var results = async
? remoteCompute.BroadcastAsync(new ProcessNameFunc()).Result
: remoteCompute.Broadcast(new ProcessNameFunc());
Assert.AreEqual("Apache.Ignite", results.Single());
});
}
/// <summary>
/// Tests Compute.Broadcast(IComputeFunc{TArg, TRes}).
/// </summary>
[Test]
public void TestComputeBroadcastFunc([Values(true, false)] bool async)
{
PeerAssemblyLoadingTest.TestDeployment(remoteCompute =>
{
// Argument requires additional assembly.
var taskArg = new IgniteNLogLogger();
var results = async
? remoteCompute.BroadcastAsync(new ProcessNameArgFunc(), taskArg).Result
: remoteCompute.Broadcast(new ProcessNameArgFunc(), taskArg);
Assert.AreEqual("Apache.IgniteApache.Ignite.NLog.IgniteNLogLogger", results.Single());
});
}
/// <summary>
/// Tests Compute.Apply.
/// </summary>
[Test]
public void TestComputeApply([Values(true, false)] bool async)
{
PeerAssemblyLoadingTest.TestDeployment(remoteCompute =>
{
// Argument is from different assembly and should be peer deployed as well.
var taskArg = new Address("1", 2);
Assert.AreEqual("Apache.IgniteAddress [street=1, zip=2]", async
? remoteCompute.ApplyAsync(new ProcessNameArgFunc(), taskArg).Result
: remoteCompute.Apply(new ProcessNameArgFunc(), taskArg));
});
}
/// <summary>
/// Tears down the test.
/// </summary>
[TearDown]
public void TearDown()
{
Ignition.StopAll(true);
IgniteProcess.KillAll();
}
}
}