예제 #1
0
        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));
                }
            }
        }
예제 #2
0
 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;
         }
     }
 }
예제 #3
0
 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;
         }
     }
 }