blob: 8eb15416bd39a2e5cde58df83608de60f7ebc1fa [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.
*/
using System;
using Xunit;
namespace Apache.Geode.Client.UnitTests
{
[Trait("Category", "UnitTests")]
public class Tests2 : IDisposable
{
private readonly Cache _cacheOne;
private readonly Cache _cacheTwo;
public Tests2()
{
var cacheFactory = new CacheFactory();
_cacheOne = cacheFactory.Create();
_cacheTwo = cacheFactory.Create();
}
public void Dispose()
{
_cacheOne.Close();
_cacheTwo.Close();
}
[Fact]
public void RegisterSerializerForTwoCaches()
{
Assert.NotEqual(_cacheOne, _cacheTwo);
var dummyPdxSerializerOne = new DummyPdxSerializer();
_cacheOne.TypeRegistry.PdxSerializer = dummyPdxSerializerOne;
var dummyPdxSerializerTwo = new DummyPdxSerializer();
_cacheTwo.TypeRegistry.PdxSerializer = dummyPdxSerializerTwo;
var cacheOnePdxSerializer = _cacheOne.TypeRegistry.PdxSerializer;
var cacheTwoPdxSerializer = _cacheTwo.TypeRegistry.PdxSerializer;
Assert.Same(dummyPdxSerializerOne, cacheOnePdxSerializer);
Assert.Same(dummyPdxSerializerTwo, cacheTwoPdxSerializer);
Assert.NotSame(cacheOnePdxSerializer, cacheTwoPdxSerializer);
}
[Fact]
public void SetPdxTypeMapper()
{
var dummyPdxTypeMapper = new DummyPdxTypeMapper();
_cacheOne.TypeRegistry.PdxTypeMapper = dummyPdxTypeMapper;
Assert.Same(dummyPdxTypeMapper, _cacheOne.TypeRegistry.PdxTypeMapper);
Assert.Null(_cacheTwo.TypeRegistry.PdxTypeMapper);
}
[Fact]
public void GetPdxTypeName()
{
var dummyPdxTypeMapper = new DummyPdxTypeMapper();
_cacheOne.TypeRegistry.PdxTypeMapper = dummyPdxTypeMapper;
var pdxName = _cacheOne.TypeRegistry.GetPdxTypeName("bar");
Assert.Equal("foo", pdxName);
Assert.Equal("bar", _cacheTwo.TypeRegistry.GetPdxTypeName("bar"));
}
[Fact]
public void GetLocalTypeName()
{
var dummyPdxTypeMapper = new DummyPdxTypeMapper();
_cacheOne.TypeRegistry.PdxTypeMapper = dummyPdxTypeMapper;
var localName = _cacheOne.TypeRegistry.GetLocalTypeName("foo");
Assert.Equal("bar", localName);
Assert.Equal("foo", _cacheTwo.TypeRegistry.GetLocalTypeName("foo"));
}
private static bool _pdxDelegate1Called;
private static IPdxSerializable DelegateForPdx1()
{
_pdxDelegate1Called = true;
return Pdx1.CreateDeserializable();
}
private static bool _pdxDelegate2Called;
private static IPdxSerializable DelegateForPdx2()
{
_pdxDelegate2Called = true;
return Pdx2.CreateDeserializable();
}
[Fact]
public void RegisterPdxType()
{
_cacheOne.TypeRegistry.RegisterPdxType(DelegateForPdx1);
_cacheTwo.TypeRegistry.RegisterPdxType(DelegateForPdx2);
_pdxDelegate1Called = false;
var pdx1Type = _cacheOne.TypeRegistry.GetPdxType(typeof(Pdx1).FullName);
Assert.True(_pdxDelegate1Called);
_pdxDelegate2Called = false;
var pdx2Type = _cacheOne.TypeRegistry.GetPdxType(typeof(Pdx2).FullName);
Assert.False(_pdxDelegate2Called);
}
private class DummyPdxSerializer : IPdxSerializer
{
public object FromData(string classname, IPdxReader reader)
{
throw new NotImplementedException();
}
public bool ToData(object o, IPdxWriter writer)
{
throw new NotImplementedException();
}
}
private class DummyPdxTypeMapper : IPdxTypeMapper
{
public string FromPdxTypeName(string pdxTypeName)
{
return "foo".Equals(pdxTypeName) ? "bar" : null;
}
public string ToPdxTypeName(string localTypeName)
{
return "bar".Equals(localTypeName) ? "foo" : null;
}
}
private class Pdx1 : IPdxSerializable
{
// object fields
private int _mId;
private string _mPkid;
private string _mType;
private string _mStatus;
private string[] _mNames;
private byte[] _mNewVal;
private DateTime _mCreationDate;
private byte[] _mArrayZeroSize;
private byte[] _mArrayNull;
public Pdx1()
{
}
public Pdx1(int id, int size, string[] names)
{
_mNames = names;
_mId = id;
_mPkid = id.ToString();
_mStatus = (id % 2 == 0) ? "active" : "inactive";
_mType = "type" + (id % 3);
if (size > 0)
{
_mNewVal = new byte[size];
for (var index = 0; index < size; index++)
{
_mNewVal[index] = (byte) 'B';
}
}
_mCreationDate = DateTime.Now;
_mArrayNull = null;
_mArrayZeroSize = new byte[0];
}
public void FromData(IPdxReader reader)
{
_mId = reader.ReadInt("id");
var isIdentity = reader.IsIdentityField("id");
if (isIdentity == false)
throw new IllegalStateException("Pdx1 id is identity field");
var isId = reader.HasField("id");
if (isId == false)
throw new IllegalStateException("Pdx1 id field not found");
var isNotId = reader.HasField("ID");
if (isNotId)
throw new IllegalStateException("Pdx1 isNotId field found");
_mPkid = reader.ReadString("pkid");
_mType = reader.ReadString("type");
_mStatus = reader.ReadString("status");
_mNames = reader.ReadStringArray("names");
_mNewVal = reader.ReadByteArray("newVal");
_mCreationDate = reader.ReadDate("creationDate");
_mArrayNull = reader.ReadByteArray("arrayNull");
_mArrayZeroSize = reader.ReadByteArray("arrayZeroSize");
}
public void ToData(IPdxWriter writer)
{
writer
.WriteInt("id", _mId)
//identity field
.MarkIdentityField("id")
.WriteString("pkid", _mPkid)
.WriteString("type", _mType)
.WriteString("status", _mStatus)
.WriteStringArray("names", _mNames)
.WriteByteArray("newVal", _mNewVal)
.WriteDate("creationDate", _mCreationDate)
.WriteByteArray("arrayNull", _mArrayNull)
.WriteByteArray("arrayZeroSize", _mArrayZeroSize);
}
public static IPdxSerializable CreateDeserializable()
{
return new Pdx1(777, 100, new[] {"LEAF", "Volt", "Bolt"});
}
}
private class Pdx2 : IPdxSerializable
{
// object fields
private int _mId;
private string _mPkid;
private string _mPkid2;
private string _mType;
private string _mStatus;
private string _mStatus2;
private string[] _mNames;
private string[] _mAddresses;
private byte[] _mNewVal;
private DateTime _mCreationDate;
private byte[] _mArrayZeroSize;
private byte[] _mArrayNull;
public Pdx2()
{
}
public Pdx2(int id, int size, string[] names, string[] addresses)
{
_mNames = names;
_mAddresses = addresses;
_mId = id;
_mPkid = id.ToString();
_mPkid2 = id + "two";
_mStatus = (id % 2 == 0) ? "active" : "inactive";
_mStatus2 = (id % 3 == 0) ? "red" : "green";
_mType = "type" + (id % 3);
if (size > 0)
{
_mNewVal = new byte[size];
for (var index = 0; index < size; index++)
{
_mNewVal[index] = (byte) 'B';
}
}
_mCreationDate = DateTime.Now;
_mArrayNull = null;
_mArrayZeroSize = new byte[0];
}
public void FromData(IPdxReader reader)
{
_mId = reader.ReadInt("id");
var isIdentity = reader.IsIdentityField("id");
if (isIdentity == false)
throw new IllegalStateException("Pdx2 id is identity field");
var isId = reader.HasField("id");
if (isId == false)
throw new IllegalStateException("Pdx2 id field not found");
var isNotId = reader.HasField("ID");
if (isNotId)
throw new IllegalStateException("Pdx2 isNotId field found");
_mPkid = reader.ReadString("pkid");
_mPkid2 = reader.ReadString("pkid2");
_mType = reader.ReadString("type");
_mStatus = reader.ReadString("status");
_mStatus2 = reader.ReadString("status2");
_mNames = reader.ReadStringArray("names");
_mAddresses = reader.ReadStringArray("addresses");
_mNewVal = reader.ReadByteArray("newVal");
_mCreationDate = reader.ReadDate("creationDate");
_mArrayNull = reader.ReadByteArray("arrayNull");
_mArrayZeroSize = reader.ReadByteArray("arrayZeroSize");
}
public void ToData(IPdxWriter writer)
{
writer
.WriteInt("id", _mId)
//identity field
.MarkIdentityField("id")
.WriteString("pkid", _mPkid)
.WriteString("pkid2", _mPkid2)
.WriteString("type", _mType)
.WriteString("status", _mStatus)
.WriteString("status2", _mStatus2)
.WriteStringArray("names", _mNames)
.WriteStringArray("addresses", _mAddresses)
.WriteByteArray("newVal", _mNewVal)
.WriteDate("creationDate", _mCreationDate)
.WriteByteArray("arrayNull", _mArrayNull)
.WriteByteArray("arrayZeroSize", _mArrayZeroSize);
}
public static IPdxSerializable CreateDeserializable()
{
return new Pdx2(777, 100, new[] {"Nissan", "Chevy", "Volvo"},
new[] {"4451 Court St", "1171 Elgin Ave", "721 NW 173rd Pl"});
}
}
}
}