public void Test20KDocument() { // manufacture an approximately 20K document using 200 strings each 100 characters long // it's enough to cause the document to straddle a chunk boundary var document = new BsonDocument(); var value = new string('x', 100); for (int i = 0; i < 200; i++) { var name = i.ToString(); document.Add(name, value); } // round trip tests var bson = document.ToBson(); var rehydrated = BsonSerializer.Deserialize <BsonDocument>(bson); Assert.IsTrue(bson.SequenceEqual(rehydrated.ToBson())); // test failure mode when 20 bytes are truncated from the buffer using (var buffer = new BsonBuffer()) { buffer.LoadFrom(new MemoryStream(bson)); buffer.Length -= 20; using (var bsonReader = BsonReader.Create(buffer)) { Assert.Throws <EndOfStreamException>(() => BsonSerializer.Deserialize <BsonDocument>(bsonReader)); } } }
internal MongoReplyMessage <TDocument> ReceiveMessage <TDocument>( BsonBinaryReaderSettings readerSettings, IBsonSerializationOptions serializationOptions) { if (_state == MongoConnectionState.Closed) { throw new InvalidOperationException("Connection is closed."); } lock (_connectionLock) { try { using (var buffer = new BsonBuffer()) { var networkStream = GetNetworkStream(); var readTimeout = (int)_serverInstance.Settings.SocketTimeout.TotalMilliseconds; if (readTimeout != 0) { networkStream.ReadTimeout = readTimeout; } buffer.LoadFrom(networkStream); var reply = new MongoReplyMessage <TDocument>(readerSettings); reply.ReadFrom(buffer, serializationOptions); return(reply); } } catch (Exception ex) { HandleException(ex); throw; } } }
internal MongoReplyMessage <TDocument> ReceiveMessage <TDocument>() { if (state == MongoConnectionState.Closed) { throw new InvalidOperationException("Connection is closed"); } lock (connectionLock) { try { using (var buffer = new BsonBuffer()) { var networkStream = GetNetworkStream(); networkStream.ReadTimeout = (int)serverInstance.Server.Settings.SocketTimeout.TotalMilliseconds; buffer.LoadFrom(networkStream); var reply = new MongoReplyMessage <TDocument>(this); reply.ReadFrom(buffer); return(reply); } } catch (Exception ex) { HandleException(ex); throw; } } }