示例#1
0
        public void NonSeekableMemoryStream()
        {
            "> NonSeekableMemoryStream:".AsInfo();

            var  bytes = new byte[1000];
            byte b     = 0;

            for (int i = 0; i < bytes.Length; i++)
            {
                bytes[i] = b++;
            }

            const int SKIP     = 100;
            const int TAKE     = 20;
            const int READ     = 77;
            var       readBuff = new byte[READ];

            using (var ms = new NonSeekableMemoryStream(bytes))
                using (var rs = new StreamReductor(ms, SKIP, TAKE))
                {
                    rs.Read(readBuff, 0, READ);

                    for (int i = 0; i < TAKE; i++)
                    {
                        if (readBuff[i] != i)
                        {
                            Passed = false;
                            break;
                        }
                    }

                    for (int i = 0; i < TAKE; i++)
                    {
                        if (readBuff[TAKE + i] != TAKE + SKIP + i)
                        {
                            Passed = false;
                            break;
                        }
                    }

                    if (Passed.HasValue && !Passed.Value)
                    {
                        FailureMessage = "Normal Reduction on seek-able stream failed to read the correct bytes";
                    }
                    else
                    {
                        Passed = true;
                        "[OK] NonSeekableMemoryStream".AsSuccess();
                    }
                }
        }
示例#2
0
        public void SkipKey()
        {
            var version2before = MyMessageV2.TestInstance();

            //Write
            var buffer = MyMessageV2.SerializeToBytes(version2before);

            //Read by older version, lots of values will be skipped
            var noseek   = new NonSeekableMemoryStream(buffer);
            var ps       = new PositionStream(noseek);
            var version1 = MyMessageV1NoPreserve.Deserialize(ps);

            Assert.AreEqual(version2before.FieldA, version1.FieldA);
        }
示例#3
0
        public void OutOfBounds()
        {
            "> OutOfBounds:".AsInfo();
            "Will attempt to take more data than there is after the reduction. The Cut will happen on a TAKE.".AsInnerInfo();

            var  bytes = new byte[100];
            byte b     = 0;

            for (int i = 0; i < bytes.Length; i++)
            {
                bytes[i] = b++;
            }

            const int SKIP     = 20;
            const int TAKE     = 25;
            const int READ     = 100;         // More than there is after the reduction
            var       readBuff = new byte[READ];

            using (var ms = new NonSeekableMemoryStream(bytes))
                using (var rs = new StreamReductor(ms, SKIP, TAKE))
                {
                    rs.Read(readBuff, 0, READ);

                    var nonZero = 0;

                    for (int i = 1; i < readBuff.Length; i++)
                    {
                        if (readBuff[i] != 0)
                        {
                            nonZero++;
                        }
                    }

                    if (nonZero != 59)
                    {
                        FailureMessage = "OutOfBounds read more or less data than it should.";
                        Passed         = false;
                    }

                    if (!Passed.HasValue)
                    {
                        Passed = true;
                    }
                    if (Passed.Value)
                    {
                        "[OK] OutOfBounds".AsSuccess();
                    }
                }
        }
示例#4
0
        public void SkipKeyFail()
        {
            MyMessageV2 version2before = MyMessageV2.TestInstance();

            //Write
            var buffer = MyMessageV2.SerializeToBytes(version2before);

            //Read by older version, lots of values will be skipped
            var noseek = new NonSeekableMemoryStream(buffer);

            //This should trigger a NotSupportedException
            var version1 = MyMessageV1NoPreserve.Deserialize(noseek);

            Assert.AreEqual(version2before.FieldA, version1.FieldA);
        }