public void WriteSingleTimestamp() { using (var stream = new MemoryStream()) using (var reader = new BinaryReader(stream)) { var root = new BSONDocument(); var now = new DateTime(635000000000000000).ToUniversalTime(); var stamp = new BSONTimestamp(now, 123); root.Set(new BSONTimestampElement("stamp", stamp)); root.WriteAsBSON(stream); Assert.AreEqual(stream.Position, 20); // ensure document length is 20 bytes stream.Seek(0, SeekOrigin.Begin); CollectionAssert.AreEqual(reader.ReadBytes(4), BitConverter.GetBytes(20)); // content length is 20 Assert.AreEqual(reader.ReadByte(), (byte) BSONElementType.TimeStamp); // element type is TimeStamp 0x11 CollectionAssert.AreEqual(reader.ReadBytes(5), Encoding.UTF8.GetBytes("stamp")); // element name is 'now' Assert.AreEqual(reader.ReadByte(), (byte) 0x00); // string name terminator 0x00 is present CollectionAssert.AreEqual(reader.ReadBytes(4), BitConverter.GetBytes(123)); // increment is correct CollectionAssert.AreEqual(reader.ReadBytes(4), BitConverter.GetBytes((int)now.ToSecondsSinceUnixEpochStart())); // datetime is correct Assert.AreEqual(reader.ReadByte(), (byte) 0x00); // last byte is terminator 0x00 Assert.AreEqual(stream.Position, 20); // ensure whole document readed } }
/// <summary> /// { stamp: <seconds since Unix epoch to DateTime from 635000000000000000 ticks with 123 increment> } /// </summary> public void WriteSingleTimestamp(Stream stream) { var root = new BSONDocument(); var now = new DateTime(635000000000000000, DateTimeKind.Utc); var stamp = new BSONTimestamp(now, 123); root.Set(new BSONTimestampElement("stamp", stamp)); root.WriteAsBSON(stream); }