Пример #1
0
        /// <summary>
        /// Tests the offsets.
        /// </summary>
        private static void TestOffsets(Func <Marshaller> getMarsh)
        {
            // Corner cases are byte/sbyte/short/ushort max values.
            foreach (var i in new[] { 1, sbyte.MaxValue, byte.MaxValue, short.MaxValue, ushort.MaxValue })
            {
                foreach (var j in new[] { -1, 0, 1 })
                {
                    var arrSize = i + j;

                    var dt = new OffsetTest
                    {
                        Arr = Enumerable.Range(0, arrSize).Select(x => (byte)x).ToArray(),
                        Int = arrSize
                    };

                    var bytes = getMarsh().Marshal(dt);

                    var res         = getMarsh().Unmarshal <OffsetTest>(bytes);
                    var binRes      = getMarsh().Unmarshal <IBinaryObject>(bytes, BinaryMode.ForceBinary);
                    var binFieldRes = new OffsetTest
                    {
                        Arr = binRes.GetField <byte[]>("arr"),
                        Int = binRes.GetField <int>("int")
                    };

                    foreach (var r in new[] { res, binRes.Deserialize <OffsetTest>(), binFieldRes })
                    {
                        Assert.AreEqual(dt.Arr, r.Arr);
                        Assert.AreEqual(dt.Int, r.Int);
                    }

                    TestSql(dt, getMarsh());
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Tests SQL query, which verifies Java side of things.
        /// </summary>
        private static void TestSql(OffsetTest dt, Marshaller marsh)
        {
            var ignite = marsh.Ignite;

            if (ignite == null)
            {
                return;
            }

            var cache = ignite.GetOrCreateCache <int, OffsetTest>(
                new CacheConfiguration("offs", new QueryEntity(typeof(int), typeof(OffsetTest))));

            // Cache operation.
            cache[1] = dt;
            Assert.AreEqual(dt.Int, cache[1].Int);
            Assert.AreEqual(dt.Arr, cache[1].Arr);

            // SQL: read field on Java side to ensure correct offset handling.
            var res = cache.QueryFields(new SqlFieldsQuery("select int from OffsetTest")).GetAll()[0][0];

            Assert.AreEqual(dt.Int, (int)res);
        }