blob: 6a5f0798d5655974ea82b6c59c3b53231a152ca5 [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.Client.Cache
{
using System;
using System.IO;
using System.Linq;
using Apache.Ignite.Core.Cache.Configuration;
using Apache.Ignite.Core.Client.Cache;
using Apache.Ignite.Core.Impl.Binary.IO;
using Apache.Ignite.Core.Impl.Client;
using Apache.Ignite.Core.Impl.Client.Cache;
using Apache.Ignite.Core.Tests.Cache;
using NUnit.Framework;
/// <summary>
/// Tests client cache configuration handling.
/// </summary>
public class ClientCacheConfigurationTest
{
/// <summary>
/// Tests the serialization/deserialization of <see cref="CacheConfiguration"/>.
/// </summary>
[Test]
public void TestSerializeDeserialize()
{
// Empty.
TestSerializeDeserialize(new CacheConfiguration("foo"));
// Full config: has unsupported properties.
var cfg = CacheConfigurationTest.GetCustomCacheConfiguration("bar");
cfg.ReadThrough = true;
cfg.WriteBehindEnabled = true;
TestSerializeDeserializeUnspported(cfg, "AffinityFunction");
cfg.AffinityFunction = null;
TestSerializeDeserializeUnspported(cfg, "EvictionPolicy");
cfg.EvictionPolicy = null;
TestSerializeDeserializeUnspported(cfg, "PluginConfigurations");
cfg.PluginConfigurations = null;
TestSerializeDeserializeUnspported(cfg, "CacheStoreFactory");
cfg.CacheStoreFactory = null;
TestSerializeDeserializeUnspported(cfg, "NearConfiguration");
cfg.NearConfiguration = null;
// Store-specific properties.
TestSerializeDeserializeUnspported(cfg, "KeepBinaryInStore");
cfg.KeepBinaryInStore = false;
TestSerializeDeserializeUnspported(cfg, "LoadPreviousValue");
cfg.LoadPreviousValue = false;
TestSerializeDeserializeUnspported(cfg, "ReadThrough");
cfg.ReadThrough = false;
TestSerializeDeserializeUnspported(cfg, "WriteThrough");
cfg.WriteThrough = false;
TestSerializeDeserializeUnspported(cfg, "StoreConcurrentLoadAllThreshold");
cfg.StoreConcurrentLoadAllThreshold = CacheConfiguration.DefaultStoreConcurrentLoadAllThreshold;
TestSerializeDeserializeUnspported(cfg, "WriteBehindBatchSize");
cfg.WriteBehindBatchSize = CacheConfiguration.DefaultWriteBehindBatchSize;
TestSerializeDeserializeUnspported(cfg, "WriteBehindCoalescing");
cfg.WriteBehindCoalescing = CacheConfiguration.DefaultWriteBehindCoalescing;
TestSerializeDeserializeUnspported(cfg, "WriteBehindEnabled");
cfg.WriteBehindEnabled = CacheConfiguration.DefaultWriteBehindEnabled;
TestSerializeDeserializeUnspported(cfg, "WriteBehindFlushFrequency");
cfg.WriteBehindFlushFrequency = CacheConfiguration.DefaultWriteBehindFlushFrequency;
TestSerializeDeserializeUnspported(cfg, "WriteBehindFlushSize");
cfg.WriteBehindFlushSize = CacheConfiguration.DefaultWriteBehindFlushSize;
TestSerializeDeserializeUnspported(cfg, "WriteBehindFlushThreadCount");
cfg.WriteBehindFlushThreadCount = CacheConfiguration.DefaultWriteBehindFlushThreadCount;
// Full config without unsupported properties.
TestSerializeDeserialize(cfg);
}
/// <summary>
/// Tests <see cref="CacheConfiguration"/> to <see cref="CacheClientConfiguration"/> and reverse conversion.
/// </summary>
[Test]
public void TestConfigConversion()
{
// Copy ctor.
var clientCfg = new CacheClientConfiguration(
CacheConfigurationTest.GetCustomCacheConfiguration("z"), true);
ClientTestBase.AssertClientConfigsAreEqual(clientCfg, new CacheClientConfiguration(clientCfg));
// Convert to server cfg.
var serverCfg = clientCfg.ToCacheConfiguration();
ClientTestBase.AssertClientConfigsAreEqual(clientCfg, new CacheClientConfiguration(serverCfg, false));
}
/// <summary>
/// Tests the constructors.
/// </summary>
[Test]
public void TestConstructors()
{
// Default property values.
var clientCfg = new CacheClientConfiguration();
var defCfg = new CacheClientConfiguration(new CacheConfiguration(), false);
ClientTestBase.AssertClientConfigsAreEqual(defCfg, clientCfg);
// Name.
clientCfg = new CacheClientConfiguration("foo");
Assert.AreEqual("foo", clientCfg.Name);
clientCfg.Name = null;
ClientTestBase.AssertClientConfigsAreEqual(defCfg, clientCfg);
// Query entities.
clientCfg = new CacheClientConfiguration("bar", typeof(QueryPerson));
Assert.AreEqual("bar", clientCfg.Name);
var qe = clientCfg.QueryEntities.Single();
Assert.AreEqual(typeof(QueryPerson), qe.ValueType);
Assert.AreEqual("Name", qe.Fields.Single().Name);
clientCfg = new CacheClientConfiguration("baz", new QueryEntity(typeof(QueryPerson)));
qe = clientCfg.QueryEntities.Single();
Assert.AreEqual(typeof(QueryPerson), qe.ValueType);
Assert.AreEqual("Name", qe.Fields.Single().Name);
}
/// <summary>
/// Tests the serialization/deserialization of <see cref="CacheConfiguration"/>.
/// </summary>
private static void TestSerializeDeserializeUnspported(CacheConfiguration cfg, string propName)
{
var ex = Assert.Throws<NotSupportedException>(() => TestSerializeDeserialize(cfg));
Assert.AreEqual(string.Format("{0}.{1} property is not supported in thin client mode.",
typeof(CacheConfiguration).Name, propName), ex.Message);
}
/// <summary>
/// Tests the serialization/deserialization of <see cref="CacheConfiguration"/>.
/// </summary>
private static void TestSerializeDeserialize(CacheConfiguration cfg)
{
var clientCfg = new CacheClientConfiguration(cfg, false);
ClientTestBase.AssertClientConfigsAreEqual(clientCfg, SerializeDeserialize(clientCfg));
}
/// <summary>
/// Serializes and deserializes the config.
/// </summary>
private static CacheClientConfiguration SerializeDeserialize(CacheClientConfiguration cfg)
{
using (var stream = new BinaryHeapStream(128))
{
ClientCacheConfigurationSerializer.Write(stream, cfg, ClientFeatures.CurrentFeatures, true);
stream.Seek(0, SeekOrigin.Begin);
return new CacheClientConfiguration(stream, ClientFeatures.CurrentFeatures);
}
}
private class QueryPerson
{
[QuerySqlField]
// ReSharper disable once UnusedMember.Local
public string Name { get; set; }
}
}
}