public void BsonBinaryReader_should_support_reading_multiple_documents( [Range(0, 3)] int numberOfDocuments) { var document = new BsonDocument("x", 1); var bson = document.ToBson(); var input = Enumerable.Repeat(bson, numberOfDocuments).Aggregate(Enumerable.Empty<byte>(), (a, b) => a.Concat(b)).ToArray(); var expectedResult = Enumerable.Repeat(document, numberOfDocuments); using (var stream = new MemoryStream(input)) using (var binaryReader = new BsonBinaryReader(stream)) { var result = new List<BsonDocument>(); while (!binaryReader.IsAtEndOfFile()) { binaryReader.ReadStartDocument(); var name = binaryReader.ReadName(); var value = binaryReader.ReadInt32(); binaryReader.ReadEndDocument(); var resultDocument = new BsonDocument(name, value); result.Add(resultDocument); } result.Should().Equal(expectedResult); } }
public void BsonBinaryReader_should_support_reading_more_than_2GB() { RequireEnvironmentVariable.IsDefined("EXPLICIT"); var binaryData = new BsonBinaryData(new byte[1024 * 1024]); var tempFileName = Path.GetTempFileName(); try { using (var stream = new FileStream(tempFileName, FileMode.Open)) { using (var binaryWriter = new BsonBinaryWriter(stream)) { while (stream.Position < (long)int.MaxValue * 4) { binaryWriter.WriteStartDocument(); binaryWriter.WriteName("x"); binaryWriter.WriteBinaryData(binaryData); binaryWriter.WriteEndDocument(); } } var endOfFilePosition = stream.Position; stream.Position = 0; using (var binaryReader = new BsonBinaryReader(stream)) { while (!binaryReader.IsAtEndOfFile()) { binaryReader.ReadStartDocument(); var bookmark = binaryReader.GetBookmark(); binaryReader.ReadName("x"); binaryReader.ReturnToBookmark(bookmark); binaryReader.ReadName("x"); var readBinaryData = binaryReader.ReadBinaryData(); Assert.Equal(binaryData.Bytes.Length, readBinaryData.Bytes.Length); binaryReader.ReadEndDocument(); } } Assert.Equal(endOfFilePosition, stream.Position); } } finally { try { File.Delete(tempFileName); } catch { // ignore exceptions } } }
public void TestIsAtEndOfFileWithTwoDocuments() { var expected = new BsonDocument("x", 1); byte[] bson; using (var stream = new MemoryStream()) using (var writer = new BsonBinaryWriter(stream)) { BsonSerializer.Serialize(writer, expected); BsonSerializer.Serialize(writer, expected); bson = stream.ToArray(); } using (var stream = new MemoryStream(bson)) using (var reader = new BsonBinaryReader(stream)) { var count = 0; while (!reader.IsAtEndOfFile()) { var document = BsonSerializer.Deserialize<BsonDocument>(reader); Assert.AreEqual(expected, document); count++; } Assert.AreEqual(2, count); } }