public void ShouldNotRequireSeeking()
        {
            var model = TypeModel.Create();

            byte[]    raw;
            const int EXPECTED = 830;

            using (var fs = new FakeStream())
            {
                var db = NWindTests.LoadDatabaseFromFile <Database>(model);
                Assert.AreEqual(EXPECTED, db.Orders.Count);
                model.Serialize(fs, db);
                raw = fs.ToArray();
            }
            using (var fs = new FakeStream(raw))
            {
                var db = (Database)model.Deserialize(fs, null, typeof(Database));
                Assert.AreEqual(EXPECTED, db.Orders.Count);
            }
            using (var fs = new FakeStream(raw))
            {
                var db = Serializer.Deserialize <Database>(fs);
                Assert.AreEqual(EXPECTED, db.Orders.Count);
            }
        }
예제 #2
0
        private DatabaseCompat LoadFromDisk(out ReadOnlySpan <byte> contents)
        {
            var path = NWindTests.GetNWindBinPath();

            byte[] arr = File.ReadAllBytes(path);
            Log?.WriteLine($"{arr.Length} bytes loaded from {path}");
            contents            = arr;
            using var readState = ProtoReader.State.Create(arr, RuntimeTypeModel.Default);
            var watch = Stopwatch.StartNew();
            var obj   = (DatabaseCompat)readState.DeserializeRoot <DatabaseCompat>(null);

            watch.Stop();
            Log?.WriteLine($"Deserialized: {watch.ElapsedMilliseconds}ms");
            return(obj);
        }
예제 #3
0
        public void TestOrderLineGetDeserializedAndAttachedToOrder()
        {
            byte[] fileBytes = File.ReadAllBytes(NWindTests.GetNWindBinPath());

            RuntimeTypeModel ordersModel = TypeModel.Create();

            ordersModel.AutoCompile = false;

            Database     database = (Database)ordersModel.Deserialize(new MemoryStream(fileBytes), null, typeof(Database));
            List <Order> orders   = database.Orders;

            DbMetrics("From File", orders);

            var roundTrippedOrders = (List <Order>)ordersModel.DeepClone(orders);

            Assert.NotSame(orders, roundTrippedOrders);
            DbMetrics("Round trip", roundTrippedOrders);
            Assert.Equal(orders.SelectMany(o => o.Lines).Count(),
                         roundTrippedOrders.SelectMany(o => o.Lines).Count()); //, "total count");
        }
예제 #4
0
        public void TestCallTestMethodWithDatabase()
        {
            using (var server = CreateServer())
                using (var client = new BasicServiceHttpClient())
                {
                    server.Start();
                    DAL.Database request  = NWindTests.LoadDatabaseFromFile <DAL.Database>();
                    DAL.Database response = client.TestMethod(request);

                    Assert.IsNotNull(response);
                    Assert.AreNotSame(request, response);

                    Assert.AreEqual(request.Orders.Count, response.Orders.Count, "Orders");
                    Assert.AreEqual(
                        request.Orders.SelectMany(ord => ord.Lines).Count(),
                        response.Orders.SelectMany(ord => ord.Lines).Count(), "Lines");
                    Assert.AreEqual(
                        request.Orders.SelectMany(ord => ord.Lines).Sum(line => line.Quantity),
                        response.Orders.SelectMany(ord => ord.Lines).Sum(line => line.Quantity), "Quantity");
                    Assert.AreEqual(
                        request.Orders.SelectMany(ord => ord.Lines).Sum(line => line.Quantity * line.UnitPrice),
                        response.Orders.SelectMany(ord => ord.Lines).Sum(line => line.Quantity * line.UnitPrice), "Value");
                }
        }