public void TestMinimal()
 {
     var info = new SystemProfileInfo
     {
         Timestamp = new DateTime(2011, 10, 7, 0, 0, 0, DateTimeKind.Utc),
         Duration = TimeSpan.FromMilliseconds(123)
     };
     var expected = "{ 'ts' : ISODate('2011-10-07T00:00:00Z'), 'millis' : 123.0 }".Replace("'", "\"");
     Assert.AreEqual(expected, info.ToJson());
 }
 public void TestDeserializeAll()
 {
     var info = new SystemProfileInfo
     {
         Abbreviated = "abbreviated",
         Client = "client",
         Command = new BsonDocument("command", 1),
         CursorId = 1,
         Duration = TimeSpan.FromMilliseconds(2),
         Error = "err",
         Exception = "exception",
         ExceptionCode = 3,
         Exhaust = true,
         FastMod = true,
         FastModInsert = true,
         IdHack = true,
         Info = "info",
         KeyUpdates = 4,
         LockStatistics = new SystemProfileLockStatistics
         {
             TimeAcquiring = new SystemProfileReadWriteLockStatistics
             {
                 DatabaseReadLock = TimeSpan.FromMilliseconds(10),
                 DatabaseWriteLock = TimeSpan.FromMilliseconds(20),
                 GlobalReadLock = TimeSpan.FromMilliseconds(30),
                 GlobalWriteLock = TimeSpan.FromMilliseconds(40)
             },
             TimeLocked = new SystemProfileReadWriteLockStatistics
             {
                 DatabaseReadLock = TimeSpan.FromMilliseconds(50),
                 DatabaseWriteLock = TimeSpan.FromMilliseconds(60),
                 GlobalReadLock = TimeSpan.FromMilliseconds(70),
                 GlobalWriteLock = TimeSpan.FromMilliseconds(80)
             }
         },
         Moved = true,
         Namespace = "ns",
         NumberMoved = 11,
         NumberReturned = 5,
         NumberScanned = 6,
         NumberToReturn = 7,
         NumberToSkip = 8,
         NumberUpdated = 9,
         NumberOfYields = 10,
         Op = "op",
         Query = new BsonDocument("query", 1),
         ResponseLength = 9,
         ScanAndOrder = true,
         Timestamp = new DateTime(2011, 10, 7, 1, 2, 3, DateTimeKind.Utc),
         UpdateObject = new BsonDocument("updateObject", 1),
         Upsert = true,
         User = "******"
     };
     var json = info.ToJson(new JsonWriterSettings { Indent = true });
     var rehydrated = BsonSerializer.Deserialize<SystemProfileInfo>(json);
     Assert.AreEqual(info.Abbreviated, rehydrated.Abbreviated);
     Assert.AreEqual(info.Client, rehydrated.Client);
     Assert.AreEqual(info.Command, rehydrated.Command);
     Assert.AreEqual(info.CursorId, rehydrated.CursorId);
     Assert.AreEqual(info.Duration, rehydrated.Duration);
     Assert.AreEqual(info.Error, rehydrated.Error);
     Assert.AreEqual(info.Exception, rehydrated.Exception);
     Assert.AreEqual(info.ExceptionCode, rehydrated.ExceptionCode);
     Assert.AreEqual(info.Exhaust, rehydrated.Exhaust);
     Assert.AreEqual(info.FastMod, rehydrated.FastMod);
     Assert.AreEqual(info.FastModInsert, rehydrated.FastModInsert);
     Assert.AreEqual(info.IdHack, rehydrated.IdHack);
     Assert.AreEqual(info.Info, rehydrated.Info);
     Assert.AreEqual(info.KeyUpdates, rehydrated.KeyUpdates);
     Assert.AreEqual(info.LockStatistics.RawDocument, rehydrated.LockStatistics.RawDocument);
     Assert.AreEqual(info.LockStatistics.TimeAcquiring.DatabaseReadLock, rehydrated.LockStatistics.TimeAcquiring.DatabaseReadLock);
     Assert.AreEqual(info.LockStatistics.TimeAcquiring.DatabaseWriteLock, rehydrated.LockStatistics.TimeAcquiring.DatabaseWriteLock);
     Assert.AreEqual(info.LockStatistics.TimeAcquiring.GlobalReadLock, rehydrated.LockStatistics.TimeAcquiring.GlobalReadLock);
     Assert.AreEqual(info.LockStatistics.TimeAcquiring.GlobalWriteLock, rehydrated.LockStatistics.TimeAcquiring.GlobalWriteLock);
     Assert.AreEqual(info.LockStatistics.TimeLocked.DatabaseReadLock, rehydrated.LockStatistics.TimeLocked.DatabaseReadLock);
     Assert.AreEqual(info.LockStatistics.TimeLocked.DatabaseWriteLock, rehydrated.LockStatistics.TimeLocked.DatabaseWriteLock);
     Assert.AreEqual(info.LockStatistics.TimeLocked.GlobalReadLock, rehydrated.LockStatistics.TimeLocked.GlobalReadLock);
     Assert.AreEqual(info.LockStatistics.TimeLocked.GlobalWriteLock, rehydrated.LockStatistics.TimeLocked.GlobalWriteLock);
     Assert.AreEqual(info.Moved, rehydrated.Moved);
     Assert.AreEqual(info.Namespace, rehydrated.Namespace);
     Assert.AreEqual(info.NumberMoved, rehydrated.NumberMoved);
     Assert.AreEqual(info.NumberReturned, rehydrated.NumberReturned);
     Assert.AreEqual(info.NumberScanned, rehydrated.NumberScanned);
     Assert.AreEqual(info.NumberToReturn, rehydrated.NumberToReturn);
     Assert.AreEqual(info.NumberToSkip, rehydrated.NumberToSkip);
     Assert.AreEqual(info.NumberUpdated, rehydrated.NumberUpdated);
     Assert.AreEqual(info.NumberOfYields, rehydrated.NumberOfYields);
     Assert.AreEqual(info.Op, rehydrated.Op);
     Assert.AreEqual(info.Query, rehydrated.Query);
     Assert.AreEqual(info.ResponseLength, rehydrated.ResponseLength);
     Assert.AreEqual(info.ScanAndOrder, rehydrated.ScanAndOrder);
     Assert.AreEqual(info.Timestamp, rehydrated.Timestamp);
     Assert.AreEqual(info.UpdateObject, rehydrated.UpdateObject);
     Assert.AreEqual(info.Upsert, rehydrated.Upsert);
     Assert.AreEqual(info.User, rehydrated.User);
 }