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(); } } }
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); }
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(); } } }
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); }