blob: 4f997aa7d433b4182fc05bc26da5a3c7de57f2fa [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
{
using System;
using System.Threading;
using Apache.Ignite.Core.Cache;
using Apache.Ignite.Core.Cache.Configuration;
using Apache.Ignite.Core.Cache.Store;
using Apache.Ignite.Core.Common;
using Apache.Ignite.Core.Failure;
using Apache.Ignite.Core.Tests.Process;
using NUnit.Framework;
/// <summary>
/// Tests all three failure handlers: <see cref="StopNodeFailureHandler"/>, <see cref="StopNodeOrHaltFailureHandler"/>
/// and <see cref="NoOpFailureHandler"/>. By default in test configuration we use <see cref="NoOpFailureHandler"/>.
/// For others we should start node by <see cref="IgniteProcess"/>.
/// </summary>
public class FailureHandlerTest
{
/// <summary>
/// Grid that uses <see cref="NoOpFailureHandler"/> and therefore can be started without
/// <see cref="IgniteProcess"/>.
/// </summary>
private IIgnite _grid;
/** Part of failed CacheStore Exception message. */
private const string CacheStoreExMessage = "Could not create .NET CacheStore";
/// <summary>
/// Set-up routine.
/// </summary>
[SetUp]
public void SetUp()
{
TestUtils.KillProcesses();
_grid = Ignition.Start(new IgniteConfiguration(TestUtils.GetTestConfiguration()));
Assert.IsTrue(_grid.WaitTopology(1));
}
/// <summary>
/// Tear-down routine.
/// </summary>
[TearDown]
public void TearDown()
{
Ignition.StopAll(true);
TestUtils.KillProcesses();
}
/// <summary>
/// Tests <see cref="StopNodeFailureHandler"/>
/// </summary>
[Test]
[Ignore("IGNITE-10364")]
public void TestStopNodeFailureHandler()
{
TestFailureHandler(typeof(StopNodeFailureHandler));
}
/// <summary>
/// Tests <see cref="StopNodeOrHaltFailureHandler"/>
/// </summary>
[Test]
[Ignore("IGNITE-10364")]
public void TestStopNodeOrHaltFailureHandler()
{
TestFailureHandler(typeof(StopNodeOrHaltFailureHandler));
}
private void TestFailureHandler(Type type)
{
var configFile = "config\\ignite-stophandler-dotnet-cfg.xml";
if (type == typeof(StopNodeOrHaltFailureHandler))
{
configFile = "config\\ignite-halthandler-dotnet-cfg.xml";
}
var proc = new IgniteProcess("-configFileName=" + configFile);
Assert.IsTrue(proc.Alive);
var ccfg = new CacheConfiguration("CacheWithFailedStore")
{
CacheStoreFactory = new FailedCacheStoreFactory(),
ReadThrough = true
};
var ex = Assert.Throws<CacheException>(() => _grid.GetOrCreateCache<int, int>(ccfg));
Assert.IsTrue(ex.Message.Contains(CacheStoreExMessage));
Thread.Sleep(TimeSpan.Parse("0:0:5"));
Assert.IsFalse(proc.Alive);
}
/// <summary>
/// Test factory that fails grid.
/// </summary>
[Serializable]
public class FailedCacheStoreFactory : IFactory<ICacheStore>
{
/// <summary>
/// Creates an instance of the cache store. Throws an exception during creation. This cause grid to fail.
/// </summary>
public ICacheStore CreateInstance()
{
throw new Exception("Failed cache store");
}
}
}
}