| /* |
| * 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 System.IO; |
| using Xunit; |
| using PdxTests; |
| using System.Collections; |
| using System.Collections.Generic; |
| using Xunit.Abstractions; |
| using System.Reflection; |
| using System.Linq; |
| |
| namespace Apache.Geode.Client.IntegrationTests |
| { |
| public class ApartmentLocation |
| { |
| int _aptNumber; |
| string _street; |
| string _city; |
| |
| public ApartmentLocation() |
| { } |
| public override string ToString() |
| { |
| return _aptNumber + " :" + _street + " : " + _city; |
| } |
| public ApartmentLocation(int aptN, string street, string city) |
| { |
| _aptNumber = aptN; |
| _street = street; |
| _city = city; |
| } |
| |
| public override bool Equals(object obj) |
| { |
| if (obj == null) |
| return false; |
| ApartmentLocation other = obj as ApartmentLocation; |
| if (other == null) |
| return false; |
| if (_aptNumber == other._aptNumber |
| && _street == other._street |
| && _city == other._city) |
| return true; |
| return false; |
| } |
| public override int GetHashCode() |
| { |
| return base.GetHashCode(); |
| } |
| } |
| |
| public class PdxTypesReflectionTest |
| { |
| char m_char; |
| bool m_bool; |
| sbyte m_byte; |
| sbyte m_sbyte; |
| short m_int16; |
| short m_uint16; |
| Int32 m_int32; |
| Int32 m_uint32; |
| long m_long; |
| Int64 m_ulong; |
| float m_float; |
| double m_double; |
| |
| string m_string; |
| |
| bool[] m_boolArray; |
| byte[] m_byteArray; |
| byte[] m_sbyteArray; |
| |
| char[] m_charArray; |
| |
| DateTime m_dateTime; |
| |
| Int16[] m_int16Array; |
| Int16[] m_uint16Array; |
| |
| Int32[] m_int32Array; |
| Int32[] m_uint32Array; |
| |
| long[] m_longArray; |
| Int64[] m_ulongArray; |
| |
| float[] m_floatArray; |
| double[] m_doubleArray; |
| |
| byte[][] m_byteByteArray; |
| |
| string[] m_stringArray; |
| |
| List<object> m_arraylist = new List<object>(); |
| IDictionary<object, object> m_map = new Dictionary<object, object>(); |
| Hashtable m_hashtable = new Hashtable(); |
| ArrayList m_vector = new ArrayList(); |
| |
| CacheableHashSet m_chs = CacheableHashSet.Create(); |
| CacheableLinkedHashSet m_clhs = CacheableLinkedHashSet.Create(); |
| |
| byte[] m_byte252 = new byte[252]; |
| byte[] m_byte253 = new byte[253]; |
| byte[] m_byte65535 = new byte[65535]; |
| byte[] m_byte65536 = new byte[65536]; |
| |
| pdxEnumTest m_pdxEnum = pdxEnumTest.pdx3; |
| ApartmentLocation[] m_address = new ApartmentLocation[10]; |
| |
| LinkedList<Object> m_LinkedList = new LinkedList<Object>(); |
| |
| public void Init() |
| { |
| m_char = 'C'; |
| m_bool = true; |
| m_byte = 0x74; |
| m_sbyte = 0x67; |
| m_int16 = 0xab; |
| m_uint16 = 0x2dd5; |
| m_int32 = 0x2345abdc; |
| m_uint32 = 0x2a65c434; |
| m_long = 324897980; |
| m_ulong = 238749898; |
| m_float = 23324.324f; |
| m_double = 3243298498d; |
| |
| m_string = "gfestring"; |
| |
| m_boolArray = new bool[] { true, false, true }; |
| m_byteArray = new byte[] { 0x34, 0x64 }; |
| m_sbyteArray = new byte[] { 0x34, 0x64 }; |
| |
| m_charArray = new char[] { 'c', 'v' }; |
| |
| long ticks = 634460644691540000L; |
| m_dateTime = new DateTime(ticks); |
| |
| m_int16Array = new short[] { 0x2332, 0x4545 }; |
| m_uint16Array = new short[] { 0x3243, 0x3232 }; |
| |
| m_int32Array = new int[] { 23, 676868, 34343, 2323 }; |
| m_uint32Array = new int[] { 435, 234324, 324324, 23432432 }; |
| |
| m_longArray = new long[] { 324324L, 23434545L }; |
| m_ulongArray = new Int64[] { 3245435, 3425435 }; |
| |
| m_floatArray = new float[] { 232.565f, 2343254.67f }; |
| m_doubleArray = new double[] { 23423432d, 4324235435d }; |
| |
| m_byteByteArray = new byte[][]{new byte[] {0x23}, |
| new byte[]{0x34, 0x55} |
| }; |
| |
| m_stringArray = new string[] { "one", "two" }; |
| |
| m_arraylist = new List<object>(); |
| m_arraylist.Add(1); |
| m_arraylist.Add(2); |
| |
| m_LinkedList = new LinkedList<Object>(); |
| m_LinkedList.AddFirst("Item1"); |
| m_LinkedList.AddLast("Item2"); |
| m_LinkedList.AddLast("Item3"); |
| |
| |
| m_map = new Dictionary<object, object>(); |
| m_map.Add(1, 1); |
| m_map.Add(2, 2); |
| |
| m_hashtable = new Hashtable(); |
| m_hashtable.Add(1, "1111111111111111"); |
| m_hashtable.Add(2, "2222222222221111111111111111"); |
| |
| m_vector = new ArrayList(); |
| m_vector.Add(1); |
| m_vector.Add(2); |
| m_vector.Add(3); |
| |
| m_chs.Add(1); |
| m_clhs.Add(1); |
| m_clhs.Add(2); |
| m_pdxEnum = pdxEnumTest.pdx3; |
| |
| m_address = new ApartmentLocation[10]; |
| |
| for (int i = 0; i < m_address.Length; i++) |
| { |
| m_address[i] = new ApartmentLocation(i, "street" + i, "city" + i); |
| } |
| } |
| |
| public PdxTypesReflectionTest() |
| { |
| |
| |
| } |
| |
| public PdxTypesReflectionTest(bool initialize) |
| { |
| if (initialize) |
| Init(); |
| |
| } |
| |
| public override bool Equals(object obj) |
| { |
| if (obj == null) |
| return false; |
| |
| PdxTypesReflectionTest other = obj as PdxTypesReflectionTest; |
| |
| if (other == null) |
| return false; |
| |
| this.checkEquality(other); |
| return true; |
| } |
| public override int GetHashCode() |
| { |
| return base.GetHashCode(); |
| } |
| #region IPdxSerializable Members |
| byte[][] compareByteByteArray(byte[][] baa, byte[][] baa2) |
| { |
| if (baa.Length == baa2.Length) |
| { |
| int i = 0; |
| while (i < baa.Length) |
| { |
| compareByteArray(baa[i], baa2[i]); |
| i++; |
| } |
| if (i == baa2.Length) |
| return baa2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + baa2.GetType().ToString()); |
| } |
| bool compareBool(bool b, bool b2) |
| { |
| if (b == b2) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| bool[] compareBoolArray(bool[] a, bool[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| byte compareByte(byte b, byte b2) |
| { |
| if (b == b2) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| byte[] compareByteArray(byte[] a, byte[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| char[] compareCharArray(char[] a, char[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| List<object> compareCompareCollection(List<object> a, List<object> a2) |
| { |
| if (a.Count == a2.Count) |
| { |
| int i = 0; |
| while (i < a.Count) |
| { |
| if (!a[i].Equals(a2[i])) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Count) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| |
| LinkedList<object> compareCompareCollection(LinkedList<object> a, LinkedList<object> a2) |
| { |
| if (a.Count == a2.Count) |
| { |
| LinkedList<Object>.Enumerator e1 = a.GetEnumerator(); |
| LinkedList<Object>.Enumerator e2 = a2.GetEnumerator(); |
| while (e1.MoveNext() && e2.MoveNext()) |
| { |
| if (!e1.Current.Equals(e2.Current)) |
| break; |
| } |
| return a2; |
| } |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| |
| DateTime compareData(DateTime b, DateTime b2) |
| { |
| //TODO: |
| // return b; |
| if ((b.Ticks / 10000L) == (b2.Ticks / 10000L)) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| Double compareDouble(Double b, Double b2) |
| { |
| if (b == b2) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| double[] compareDoubleArray(double[] a, double[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| float compareFloat(float b, float b2) |
| { |
| if (b == b2) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| float[] compareFloatArray(float[] a, float[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| Int16 compareInt16(Int16 b, Int16 b2) |
| { |
| if (b == b2) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| Int32 compareInt32(Int32 b, Int32 b2) |
| { |
| if (b == b2) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| Int64 compareInt64(Int64 b, Int64 b2) |
| { |
| if (b == b2) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| Int32[] compareIntArray(Int32[] a, Int32[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| long[] compareLongArray(long[] a, long[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| Int16[] compareSHortArray(Int16[] a, Int16[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| sbyte compareSByte(sbyte b, sbyte b2) |
| { |
| if (b == b2) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| sbyte[] compareSByteArray(sbyte[] a, sbyte[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| string[] compareStringArray(string[] a, string[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| UInt16 compareUInt16(UInt16 b, UInt16 b2) |
| { |
| if (b == b2) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| UInt32 compareUInt32(UInt32 b, UInt32 b2) |
| { |
| if (b == b2) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| UInt64 compareUint64(UInt64 b, UInt64 b2) |
| { |
| if (b == b2) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| UInt32[] compareUnsignedIntArray(UInt32[] a, UInt32[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| UInt64[] compareUnsignedLongArray(UInt64[] a, UInt64[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| UInt16[] compareUnsignedShortArray(UInt16[] a, UInt16[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (a[i] != a2[i]) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| |
| T[] GenericCompare<T>(T[] a, T[] a2) |
| { |
| if (a.Length == a2.Length) |
| { |
| int i = 0; |
| while (i < a.Length) |
| { |
| if (!a[i].Equals(a2[i])) |
| break; |
| else |
| i++; |
| } |
| if (i == a2.Length) |
| return a2; |
| } |
| |
| throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); |
| } |
| |
| |
| T GenericValCompare<T>(T b, T b2) |
| { |
| if (b.Equals(b2)) |
| return b; |
| throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); |
| } |
| public void checkEquality(PdxTypesReflectionTest other) |
| { |
| byte[][] baa = other.m_byteByteArray; |
| m_byteByteArray = compareByteByteArray(baa, m_byteByteArray); |
| m_char = GenericValCompare(other.m_char, m_char); |
| |
| m_bool = GenericValCompare(other.m_bool, m_bool); |
| m_boolArray = GenericCompare(other.m_boolArray, m_boolArray); |
| |
| m_byte = GenericValCompare(other.m_byte, m_byte); |
| m_byteArray = GenericCompare(other.m_byteArray, m_byteArray); |
| m_charArray = GenericCompare(other.m_charArray, m_charArray); |
| |
| m_arraylist = compareCompareCollection(other.m_arraylist, m_arraylist); |
| |
| m_LinkedList = compareCompareCollection(other.m_LinkedList, m_LinkedList); |
| |
| IDictionary<object, object> tmpM = other.m_map; |
| if (tmpM.Count != m_map.Count) |
| throw new IllegalStateException("Not got expected value for type: " + m_map.GetType().ToString()); |
| |
| Hashtable tmpH = other.m_hashtable; |
| |
| if (tmpH.Count != m_hashtable.Count) |
| throw new IllegalStateException("Not got expected value for type: " + m_hashtable.GetType().ToString()); |
| |
| ArrayList arrAl = other.m_vector; |
| |
| if (arrAl.Count != m_vector.Count) |
| throw new IllegalStateException("Not got expected value for type: " + m_vector.GetType().ToString()); |
| |
| CacheableHashSet rmpChs = other.m_chs; |
| |
| if (rmpChs.Count != m_chs.Count) |
| throw new IllegalStateException("Not got expected value for type: " + m_chs.GetType().ToString()); |
| |
| CacheableLinkedHashSet rmpClhs = other.m_clhs; |
| |
| if (rmpClhs.Count != m_clhs.Count) |
| throw new IllegalStateException("Not got expected value for type: " + m_clhs.GetType().ToString()); |
| |
| |
| m_string = GenericValCompare(other.m_string, m_string); |
| |
| m_dateTime = compareData(other.m_dateTime, m_dateTime); |
| |
| m_double = GenericValCompare(other.m_double, m_double); |
| |
| m_doubleArray = GenericCompare(other.m_doubleArray, m_doubleArray); |
| m_float = GenericValCompare(other.m_float, m_float); |
| m_floatArray = GenericCompare(other.m_floatArray, m_floatArray); |
| m_int16 = GenericValCompare(other.m_int16, m_int16); |
| m_int32 = GenericValCompare(other.m_int32, m_int32); |
| m_long = GenericValCompare(other.m_long, m_long); |
| m_int32Array = GenericCompare(other.m_int32Array, m_int32Array); |
| m_longArray = GenericCompare(other.m_longArray, m_longArray); |
| m_int16Array = GenericCompare(other.m_int16Array, m_int16Array); |
| m_sbyte = GenericValCompare(other.m_sbyte, m_sbyte); |
| m_sbyteArray = GenericCompare(other.m_sbyteArray, m_sbyteArray); |
| m_stringArray = GenericCompare(other.m_stringArray, m_stringArray); |
| m_uint16 = GenericValCompare(other.m_uint16, m_uint16); |
| m_uint32 = GenericValCompare(other.m_uint32, m_uint32); |
| m_ulong = GenericValCompare(other.m_ulong, m_ulong); |
| m_uint32Array = GenericCompare(other.m_uint32Array, m_uint32Array); |
| m_ulongArray = GenericCompare(other.m_ulongArray, m_ulongArray); |
| m_uint16Array = GenericCompare(other.m_uint16Array, m_uint16Array); |
| |
| byte[] ret = other.m_byte252; |
| if (ret.Length != 252) |
| throw new Exception("Array len 252 not found"); |
| |
| ret = other.m_byte253; |
| if (ret.Length != 253) |
| throw new Exception("Array len 253 not found"); |
| |
| ret = other.m_byte65535; |
| if (ret.Length != 65535) |
| throw new Exception("Array len 65535 not found"); |
| |
| ret = other.m_byte65536; |
| if (ret.Length != 65536) |
| throw new Exception("Array len 65536 not found"); |
| if (other.m_pdxEnum != m_pdxEnum) |
| throw new Exception("Pdx enum is not equal"); |
| |
| ApartmentLocation[] otherA = other.m_address; |
| for (int i = 0; i < m_address.Length; i++) |
| { |
| if (!m_address[i].Equals(otherA[i])) |
| throw new Exception("ApartmentLocation array is not equal " + i); |
| } |
| } |
| #endregion |
| } |
| |
| public class SerializePdx1 |
| { |
| [PdxIdentityField] public int i1; |
| public int i2; |
| public string s1; |
| public string s2; |
| |
| public SerializePdx1() |
| { |
| } |
| |
| public SerializePdx1(bool init) |
| { |
| if (init) |
| { |
| i1 = 1; |
| i2 = 2; |
| s1 = "s1"; |
| s2 = "s2"; |
| } |
| } |
| |
| public override bool Equals(object obj) |
| { |
| if (obj == null) |
| return false; |
| if (obj == this) |
| return true; |
| |
| var other = obj as SerializePdx1; |
| |
| if (other == null) |
| return false; |
| |
| if (i1 == other.i1 |
| && i2 == other.i2 |
| && s1 == other.s1 |
| && s2 == other.s2) |
| return true; |
| |
| return false; |
| } |
| |
| public override int GetHashCode() |
| { |
| return base.GetHashCode(); |
| } |
| } |
| |
| public class UnsupportedTypes |
| { |
| public struct Coords |
| { |
| public Coords(double x, double y) |
| { |
| X = x; |
| Y = y; |
| } |
| |
| public double X { get; set; } |
| public double Y { get; set; } |
| |
| public override bool Equals(object ob) |
| { |
| if (ob is Coords) |
| { |
| Coords c = (Coords)ob; |
| return X == c.X && Y == c.Y; |
| } |
| else |
| { |
| return false; |
| } |
| } |
| |
| public override int GetHashCode() |
| { |
| return X.GetHashCode() ^ Y.GetHashCode(); |
| } |
| } |
| |
| [PdxIdentityField] public int i1; |
| public Coords coordsVal; |
| |
| public UnsupportedTypes() |
| { |
| } |
| |
| public UnsupportedTypes(bool init) |
| { |
| if (init) |
| { |
| i1 = 1; |
| coordsVal = new Coords(1,2); |
| } |
| } |
| |
| public override bool Equals(object obj) |
| { |
| if (obj == null) |
| return false; |
| if (obj == this) |
| return true; |
| |
| var other = obj as UnsupportedTypes; |
| |
| if (other == null) |
| return false; |
| |
| if (i1 == other.i1 |
| && coordsVal.Equals(coordsVal)) |
| return true; |
| |
| return false; |
| } |
| |
| public override int GetHashCode() |
| { |
| return base.GetHashCode(); |
| } |
| } |
| |
| public class SerializePdx2 |
| { |
| public string s0; |
| [PdxIdentityField] public int i1; |
| public int i2; |
| public string s1; |
| public string s2; |
| |
| public SerializePdx2() |
| { |
| } |
| |
| public override string ToString() |
| { |
| return i1 + i2 + s1 + s2; |
| } |
| |
| public SerializePdx2(bool init) |
| { |
| if (init) |
| { |
| s0 = "s9999999999999999999999999999999999"; |
| i1 = 1; |
| i2 = 2; |
| s1 = "s1"; |
| s2 = "s2"; |
| } |
| } |
| |
| public override bool Equals(object obj) |
| { |
| if (obj == null) |
| return false; |
| if (obj == this) |
| return true; |
| |
| var other = obj as SerializePdx2; |
| |
| if (other == null) |
| return false; |
| |
| if (s0 == other.s0 |
| && i1 == other.i1 |
| && i2 == other.i2 |
| && s1 == other.s1 |
| && s2 == other.s2) |
| return true; |
| |
| return false; |
| } |
| |
| public override int GetHashCode() |
| { |
| return base.GetHashCode(); |
| } |
| } |
| |
| public class BaseClass |
| { |
| [NonSerialized] |
| private const int _const = 1003; |
| |
| private int _baseclassmember; |
| |
| public BaseClass() |
| { |
| } |
| |
| public BaseClass(bool init) |
| { |
| if (init) |
| { |
| _baseclassmember = 101; |
| } |
| } |
| |
| public override bool Equals(object obj) |
| { |
| if (obj == null) |
| return false; |
| var bc = obj as BaseClass; |
| if (bc == null) |
| return false; |
| |
| if (bc == this) |
| return true; |
| |
| if (bc._baseclassmember == _baseclassmember) |
| { |
| return true; |
| } |
| |
| return false; |
| } |
| |
| public override int GetHashCode() |
| { |
| return base.GetHashCode(); |
| } |
| |
| public void ToData(IPdxWriter w) |
| { |
| w.WriteInt("_baseclassmember", _baseclassmember); |
| } |
| |
| public void FromData(IPdxReader r) |
| { |
| _baseclassmember = r.ReadInt("_baseclassmember"); |
| } |
| } |
| |
| public class AddressWithGuid |
| { |
| private static Guid oddGuid = new Guid("924243B5-9C2A-41d7-86B1-E0B905C7EED3"); |
| private static Guid evenGuid = new Guid("47AA8F17-FF6B-4a7d-B398-D83790977574"); |
| private string _street; |
| private string _aptName; |
| private int _flatNumber; |
| private Guid _guid; |
| |
| public AddressWithGuid() |
| { |
| } |
| |
| public AddressWithGuid(int id) |
| { |
| _flatNumber = id; |
| _aptName = id.ToString(); |
| _street = id.ToString() + "_street"; |
| if (id % 2 == 0) |
| _guid = evenGuid; |
| else |
| _guid = oddGuid; |
| } |
| |
| public override string ToString() |
| { |
| return _flatNumber + " " + _aptName + " " + _street + " " + _guid.ToString(); |
| } |
| |
| public override bool Equals(object obj) |
| { |
| if (obj == null) |
| return false; |
| var other = obj as AddressWithGuid; |
| |
| if (other == null) |
| return false; |
| |
| if (_street == other._street && |
| _aptName == other._aptName && |
| _flatNumber == other._flatNumber && |
| _guid.Equals(other._guid)) |
| return true; |
| |
| return false; |
| } |
| |
| public override int GetHashCode() |
| { |
| return base.GetHashCode(); |
| } |
| } |
| |
| public class SerializeAllTypes : BaseClass |
| { |
| public enum COLORS { RED, WHITE, BLUE }; |
| |
| [PdxIdentityField] private int identity; |
| |
| private string stringVal; |
| private string[] stringArray; |
| |
| public char charVal; |
| public char[] charArray; |
| |
| public bool boolVal; |
| public bool[] boolArray; |
| |
| public byte byteVal; |
| public byte[] byteArray; |
| |
| public sbyte sbyteVal; |
| public sbyte[] sbyteArray; |
| |
| public short shortVal; |
| public ushort ushortVal; |
| public short[] shortArray; |
| public ushort[] ushortArray; |
| |
| public int intVal; |
| public uint uintVal; |
| public int[] intArray; |
| public uint[] uintArray; |
| |
| public long longVal; |
| public ulong ulongVal; |
| public long[] longArray; |
| public ulong[] ulongArray; |
| |
| public float floatVal; |
| public float[] floatArray; |
| |
| public double doubleVal; |
| public double[] doubleArray; |
| |
| public DateTime dateTimeVal; |
| public DateTime[] dateTimeArray; |
| |
| public string s1; |
| public string s2; |
| private SerializePdx2 nestedObject; |
| private ArrayList _addressList; |
| private AddressWithGuid _address; |
| |
| private Hashtable _hashTable; |
| private Stack _stack; |
| private Queue _queue; |
| |
| public COLORS colorVal; |
| public Guid guid; |
| public Decimal decimalVal; |
| |
| public SerializeAllTypes() |
| : base() |
| { |
| } |
| |
| public SerializeAllTypes(bool init, int nAddress) |
| : base(init) |
| { |
| if (init) |
| { |
| stringVal = "Harry Potter is a gryffindor"; |
| stringArray = new string[] { "Ron", "Hermeine", "Hagrid" }; |
| |
| identity = 1; |
| |
| charVal = 'z'; |
| charArray = new char[] { 'a', 'b', 'c' }; |
| |
| boolVal = true; |
| boolArray = new bool[] { true, false, true }; |
| |
| byteVal = 0xa0; |
| byteArray = new byte[] { (byte)(Byte.MaxValue - 1), (byte)(Byte.MaxValue - 10), (byte)(Byte.MaxValue - 20) }; |
| |
| sbyteVal = 0x10; |
| sbyteArray = new sbyte[] { -5, 2, 0x70 }; |
| |
| shortVal = -2; |
| ushortVal = 2; |
| shortArray = new short[] { 1, 11, 111 }; |
| ushortArray = new ushort[] { (ushort)(UInt16.MaxValue - 1), (ushort)(UInt16.MaxValue - 11), (ushort)(UInt16.MaxValue - 111) }; |
| |
| intVal = -22; |
| uintVal = 22; |
| intArray = new int[] { 10, 110, 1110 }; |
| uintArray = new uint[] { (uint)(UInt32.MaxValue - 10), (uint)(UInt32.MaxValue - 110), (uint)(UInt32.MaxValue - 1110) }; |
| |
| longVal = -222; |
| ulongVal = 222; |
| longArray = new long[] { 100, 1100, 11100 }; |
| ulongArray = new ulong[] { (ulong)(UInt64.MaxValue - 100), (ulong)(UInt64.MaxValue - 1100), (ulong)(UInt64.MaxValue - 11100) }; |
| |
| floatVal = 1.6f; |
| floatArray = new float[] { 1.6f, 1600.1f, 1.2e7f }; |
| |
| doubleVal = 1.6; |
| doubleArray = new double[] { 2.6, 2600.1, 2.2e7 }; |
| |
| dateTimeVal = new DateTime(2009, 8, 1, 0, 0, 0); |
| dateTimeArray = new DateTime[] { dateTimeVal, dateTimeVal.AddDays(1), dateTimeVal.AddHours(1) }; |
| |
| s1 = "s1"; |
| s2 = "s2"; |
| nestedObject = new SerializePdx2(true); |
| |
| _addressList = new ArrayList(); |
| _hashTable = new Hashtable(); |
| _stack = new Stack(); |
| _queue = new Queue(); |
| |
| for (var i = 0; i < 10; i++) |
| { |
| _addressList.Add(new AddressWithGuid(i)); |
| _hashTable.Add(i, new SerializePdx2(true)); |
| _stack.Push(new SerializePdx2(true)); |
| _queue.Enqueue(new SerializePdx2(true)); |
| } |
| |
| _address = new AddressWithGuid(nAddress); |
| colorVal = COLORS.RED; |
| guid = new Guid("924243B5-9C2A-41d7-86B1-E0B905C7EED3"); |
| decimalVal = Decimal.MaxValue; |
| } |
| } |
| |
| public override bool Equals(object obj) |
| { |
| if (obj == null) |
| return false; |
| if (obj == this) |
| return true; |
| |
| var other = obj as SerializeAllTypes; |
| |
| if (other == null) |
| return false; |
| |
| if (stringVal == other.stringVal |
| && stringArray.SequenceEqual(other.stringArray) |
| |
| && identity == other.identity |
| |
| && charVal == other.charVal |
| && charArray.SequenceEqual(other.charArray) |
| |
| && boolVal == other.boolVal |
| && boolArray.SequenceEqual(other.boolArray) |
| |
| && byteVal == other.byteVal |
| && byteArray.SequenceEqual(other.byteArray) |
| |
| && sbyteVal == other.sbyteVal |
| && sbyteArray.SequenceEqual(other.sbyteArray) |
| |
| && shortVal == other.shortVal |
| && ushortVal == other.ushortVal |
| && shortArray.SequenceEqual(other.shortArray) |
| && ushortArray.SequenceEqual(other.ushortArray) |
| |
| && intVal == other.intVal |
| && uintVal == other.uintVal |
| && intArray.SequenceEqual(other.intArray) |
| && uintArray.SequenceEqual(other.uintArray) |
| |
| && longVal == other.longVal |
| && ulongVal == other.ulongVal |
| && longArray.SequenceEqual(other.longArray) |
| && ulongArray.SequenceEqual(other.ulongArray) |
| |
| && floatVal == other.floatVal |
| && floatArray.SequenceEqual(other.floatArray) |
| |
| && doubleVal == other.doubleVal |
| && doubleArray.SequenceEqual(other.doubleArray) |
| |
| && dateTimeVal == other.dateTimeVal |
| && dateTimeArray.SequenceEqual(other.dateTimeArray) |
| |
| && s1 == other.s1 |
| && s2 == other.s2 |
| && colorVal == other.colorVal |
| && guid == other.guid |
| && decimalVal == other.decimalVal) |
| { |
| var ret = nestedObject.Equals(other.nestedObject); |
| |
| if (ret) |
| { |
| if (_addressList.Count == 10 && |
| _addressList.Count == other._addressList.Count |
| ) |
| { |
| for (var i = 0; i < _addressList.Count; i++) |
| { |
| ret = _addressList[i].Equals(other._addressList[i]); |
| if (!ret) |
| return false; |
| } |
| |
| if (_hashTable.Count != other._hashTable.Count) |
| return false; |
| |
| foreach (DictionaryEntry de in _hashTable) |
| { |
| var otherHe = other._hashTable[de.Key]; |
| ret = de.Value.Equals(otherHe); |
| if (!ret) |
| return false; |
| } |
| |
| if (_stack.Count != other._stack.Count) |
| return false; |
| foreach (Object o in _stack) |
| { |
| var otherO = other._stack.Pop(); |
| ret = o.Equals(otherO); |
| if (!ret) |
| return false; |
| } |
| |
| if (_queue.Count != other._queue.Count) |
| return false; |
| foreach (Object o in _queue) |
| { |
| var otherO = other._queue.Dequeue(); |
| ret = o.Equals(otherO); |
| if (!ret) |
| return false; |
| } |
| |
| if (!_address.Equals(other._address)) |
| return false; |
| |
| return base.Equals(other); |
| } |
| } |
| } |
| return false; |
| } |
| |
| public override int GetHashCode() |
| { |
| return base.GetHashCode(); |
| } |
| } |
| |
| public class SerializePdx4 : BaseClass |
| { |
| private string s0; |
| [PdxIdentityField] private int i1; |
| public int i2; |
| public string s1; |
| public string s2; |
| private SerializePdx2 nestedObject; |
| private ArrayList _addressList; |
| |
| private AddressWithGuid[] _addressArray; |
| |
| //private int arrayCount = 10; |
| public SerializePdx4() |
| : base() |
| { |
| } |
| |
| public override string ToString() |
| { |
| return i1 + ":" + i2 + ":" + s1 + ":" + s2 + nestedObject.ToString() + " add: " + _addressList[0].ToString(); |
| } |
| |
| public SerializePdx4(bool init) |
| : base(init) |
| { |
| if (init) |
| { |
| s0 = "s9999999999999999999999999999999999"; |
| i1 = 1; |
| i2 = 2; |
| s1 = "s1"; |
| s2 = "s2"; |
| nestedObject = new SerializePdx2(true); |
| |
| _addressList = new ArrayList(); |
| _addressArray = new AddressWithGuid[10]; |
| |
| for (var i = 0; i < 10; i++) |
| { |
| _addressList.Add(new AddressWithGuid(i)); |
| _addressArray[i] = new AddressWithGuid(i); |
| } |
| } |
| } |
| |
| public override bool Equals(object obj) |
| { |
| if (obj == null) |
| return false; |
| if (obj == this) |
| return true; |
| |
| var other = obj as SerializePdx4; |
| |
| if (other == null) |
| return false; |
| |
| if (s0 == other.s0 |
| && i1 == other.i1 |
| && i2 == other.i2 |
| && s1 == other.s1 |
| && s2 == other.s2) |
| { |
| var ret = nestedObject.Equals(other.nestedObject); |
| if (ret) |
| { |
| if (_addressList.Count == other._addressList.Count && |
| _addressList[0].Equals(other._addressList[0])) |
| { |
| for (var i = 0; i < _addressList.Count; i++) |
| { |
| ret = _addressList[i].Equals(other._addressList[i]); |
| if (!ret) |
| return false; |
| } |
| |
| for (var i = 0; i < _addressArray.Length; i++) |
| { |
| ret = _addressArray[i].Equals(other._addressArray[i]); |
| if (!ret) |
| return false; |
| } |
| |
| return base.Equals(other); |
| } |
| } |
| } |
| |
| return false; |
| } |
| |
| public override int GetHashCode() |
| { |
| return base.GetHashCode(); |
| } |
| } |
| |
| public class PdxFieldTest |
| { |
| private string _notInclude = "default_value"; |
| private int _nameChange; |
| private int _identityField; |
| |
| public PdxFieldTest() |
| { |
| } |
| |
| public string NotInclude |
| { |
| set { _notInclude = value; } |
| } |
| |
| public PdxFieldTest(bool init) |
| { |
| if (init) |
| { |
| _notInclude = "valuechange"; |
| _nameChange = 11213; |
| _identityField = 1038193; |
| } |
| } |
| |
| public override bool Equals(object obj) |
| { |
| if (obj == null) |
| return false; |
| |
| var other = obj as PdxFieldTest; |
| |
| if (other == null) |
| return false; |
| |
| if (_notInclude == other._notInclude |
| && _nameChange == other._nameChange |
| && _identityField == other._identityField) |
| return true; |
| |
| |
| return false; |
| } |
| |
| public override int GetHashCode() |
| { |
| return base.GetHashCode(); |
| } |
| } |
| |
| public class SpecialAutoSerializer : ReflectionBasedAutoSerializer |
| { |
| public override bool IsIdentityField(FieldInfo fi, Type type) |
| { |
| if (fi.Name == "_identityField") |
| return true; |
| return base.IsIdentityField(fi, type); |
| } |
| |
| public override string GetFieldName(FieldInfo fi, Type type) |
| { |
| if (fi.Name == "_nameChange") |
| return fi.Name + "NewName"; |
| |
| return fi.Name; |
| } |
| |
| public override bool IsFieldIncluded(FieldInfo fi, Type type) |
| { |
| if (fi.Name == "_notInclude") |
| return false; |
| return base.IsFieldIncluded(fi, type); |
| } |
| |
| public override FieldType GetFieldType(FieldInfo fi, Type type) |
| { |
| //if (fi.FieldType.Equals(Type.GetType("System.Guid"))) |
| // return FieldType.STRING; |
| return base.GetFieldType(fi, type); |
| } |
| |
| public override object WriteTransform(FieldInfo fi, Type type, object originalValue) |
| { |
| if (fi.FieldType.Equals(Type.GetType("System.Guid"))) |
| { |
| //writer.WriteField(fi.Name, fi.GetValue(o).ToString(), Type.GetType("System.String")); |
| return originalValue.ToString(); |
| } |
| else |
| return base.WriteTransform(fi, type, originalValue); |
| } |
| |
| public override object ReadTransform(FieldInfo fi, Type type, object serializeValue) |
| { |
| if (fi.FieldType.Equals(Type.GetType("System.Guid"))) |
| { |
| var g = new Guid((string)serializeValue); |
| |
| //fi.SetValue(o, g); |
| return g; |
| } |
| else |
| return base.ReadTransform(fi, type, serializeValue); |
| } |
| |
| /*public override void SerializeField(object o, FieldInfo fi, IPdxWriter writer) |
| { |
| if (fi.FieldType.Equals(Type.GetType("System.Guid"))) |
| { |
| writer.WriteField(fi.Name, fi.GetValue(o).ToString(), Type.GetType("System.String")); |
| } |
| else |
| base.SerializeField(o, fi, writer); |
| }*/ |
| |
| /* public override object DeserializeField(object o, FieldInfo fi, IPdxReader reader) |
| { |
| if (fi.FieldType.Equals(Type.GetType("System.Guid"))) |
| { |
| string gStr = (string)reader.ReadField(fi.Name, Type.GetType("System.String")); |
| Guid g = new Guid(gStr); |
| |
| //fi.SetValue(o, g); |
| return g; |
| } |
| else |
| return base.DeserializeField(o, fi, reader); |
| }*/ |
| } |
| |
| [Trait("Category", "Integration")] |
| public class AutoSerializationTests : TestBase |
| { |
| public AutoSerializationTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) |
| { |
| } |
| |
| [Fact] |
| public void AutoPutGet() |
| { |
| using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1)) |
| { |
| Assert.True(cluster.Start()); |
| Assert.Equal(0, cluster.Gfsh.create() |
| |
| .region() |
| .withName("testRegion") |
| .withType("REPLICATE") |
| .execute()); |
| |
| var properties = new Dictionary<string, string>() |
| { |
| { "log-level", "debug" }, |
| { "log-file", "c:/temp/autoserializertest.log" } |
| }; |
| |
| var cache = cluster.CreateCache(properties); |
| |
| var region = cache.CreateRegionFactory(RegionShortcut.PROXY) |
| .SetPoolName("default") |
| .Create<object, object>("testRegion"); |
| Assert.NotNull(region); |
| |
| cache.TypeRegistry.PdxSerializer = new ReflectionBasedAutoSerializer(); |
| |
| for (var i = 0; i < 10; i++) |
| { |
| object put; |
| object ret; |
| |
| Assert.ThrowsAny<Exception>(() => |
| { |
| put = new UnsupportedTypes(true); |
| region[i] = put; |
| var val = region[i]; |
| Console.WriteLine("Shouldn't be able to retrieve an unsupported type"); |
| }); |
| |
| put = new SerializePdx1(true); |
| region[i] = put; |
| ret = region[i]; |
| Assert.Equal(put, ret); |
| |
| put = new SerializePdx2(true); |
| region[i + 10] = put; |
| ret = region[i + 10]; |
| Assert.Equal(put, ret); |
| |
| put = new PdxTypesReflectionTest(true); |
| region[i + 20] = put; |
| ret = region[i + 20]; |
| Assert.Equal(put, ret); |
| |
| put = new SerializeAllTypes(true, i % 2); |
| region[i + 30] = put; |
| ret = region[i + 30]; |
| Assert.Equal(put, ret); |
| |
| put = new SerializePdx4(true); |
| region[i + 40] = put; |
| ret = region[i + 40]; |
| Assert.Equal(put, ret); |
| |
| var p1 = region[i + 30]; |
| var p2 = region[i + 40]; |
| Assert.True(p1 != p2, "Should NOt be equal"); |
| } |
| } |
| } |
| |
| [Fact] |
| public void AutoPutAll() |
| { |
| using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1)) |
| { |
| Assert.True(cluster.Start()); |
| Assert.Equal(0, cluster.Gfsh.create() |
| .region() |
| .withName("testRegion") |
| .withType("REPLICATE") |
| .execute()); |
| |
| var cache = cluster.CreateCache(); |
| |
| var region = cache.CreateRegionFactory(RegionShortcut.PROXY) |
| .SetPoolName("default") |
| .Create<object, object>("testRegion"); |
| Assert.NotNull(region); |
| |
| // Register the reflectionbased serializer |
| cache.TypeRegistry.PdxSerializer = new ReflectionBasedAutoSerializer(); |
| |
| IDictionary<object, object> collection = new Dictionary<object, object>(); |
| collection.Add(100, new SerializeAllTypes(true, 0)); |
| collection.Add(200, new SerializeAllTypes(true, 1)); |
| collection.Add(300, new SerializePdx4(true)); |
| region.PutAll(collection); |
| } |
| } |
| |
| [Fact] |
| public void DerivedAutoSerializer() |
| { |
| using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1)) |
| { |
| Assert.True(cluster.Start()); |
| Assert.Equal(0, cluster.Gfsh.create() |
| .region() |
| .withName("testRegion") |
| .withType("REPLICATE") |
| .execute()); |
| |
| var properties = new Dictionary<string, string>() |
| { |
| { "log-level", "debug" }, |
| { "log-file", "c:/temp/autoserializertest.log" } |
| }; |
| |
| var cache = cluster.CreateCache(properties); |
| |
| var region = cache.CreateRegionFactory(RegionShortcut.PROXY) |
| .SetPoolName("default") |
| .Create<object, object>("testRegion"); |
| Assert.NotNull(region); |
| |
| cache.TypeRegistry.PdxSerializer = new SpecialAutoSerializer(); |
| |
| for (var i = 0; i < 1; i++) |
| { |
| var pft = new PdxFieldTest(true); |
| region[i + 50] = pft; |
| var ret = region[i + 50]; |
| |
| Assert.NotEqual(pft, ret); |
| |
| pft.NotInclude = "default_value"; |
| Assert.Equal(pft, ret); |
| } |
| } |
| } |
| } |
| } |