| /* |
| * 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"}); |
| } |
| } |
| } |
| } |