Browse Source

Cleanup SystemDateTime and tests

- Remove Now and Today
- Replace delegate by a simple paused value
Olivier Coanet 3 years ago
parent
commit
5b5add761f

+ 1 - 1
src/Abc.Zebus.Directory.Cassandra.Tests/Cql/CqlPeerRepositoryTests.DynamicSubscriptions.cs

@@ -298,7 +298,7 @@ namespace Abc.Zebus.Directory.Cassandra.Tests.Cql
             _repository.AddOrUpdatePeer(peer);
             _repository.AddOrUpdatePeer(peer);
             _repository.AddDynamicSubscriptionsForTypes(peer.PeerId, peer.TimestampUtc.Value.AddMilliseconds(1), new[] { subscriptionsForType });
             _repository.AddDynamicSubscriptionsForTypes(peer.PeerId, peer.TimestampUtc.Value.AddMilliseconds(1), new[] { subscriptionsForType });
 
 
-            using (SystemDateTime.Set(utcNow: DateTime.UtcNow.AddHours(1)))
+            using (SystemDateTime.PauseTime(DateTime.UtcNow.AddHours(1)))
             {
             {
                 _repository.RemoveAllDynamicSubscriptionsForPeer(peer.PeerId, peer.TimestampUtc.Value.AddMilliseconds(2));
                 _repository.RemoveAllDynamicSubscriptionsForPeer(peer.PeerId, peer.TimestampUtc.Value.AddMilliseconds(2));
             }
             }

+ 1 - 1
src/Abc.Zebus.Directory.RocksDb.Tests/RocksDbPeerRepositoryTests.DynamicSubscriptions.cs

@@ -331,7 +331,7 @@ namespace Abc.Zebus.Directory.RocksDb.Tests
             _repository.AddOrUpdatePeer(peer);
             _repository.AddOrUpdatePeer(peer);
             _repository.AddDynamicSubscriptionsForTypes(peer.PeerId, peer.TimestampUtc.Value.AddMilliseconds(1), new[] { subscriptionsForType });
             _repository.AddDynamicSubscriptionsForTypes(peer.PeerId, peer.TimestampUtc.Value.AddMilliseconds(1), new[] { subscriptionsForType });
 
 
-            using (SystemDateTime.Set(utcNow: DateTime.UtcNow.AddHours(1)))
+            using (SystemDateTime.PauseTime(DateTime.UtcNow.AddHours(1)))
             {
             {
                 _repository.RemoveAllDynamicSubscriptionsForPeer(peer.PeerId, peer.TimestampUtc.Value.AddMilliseconds(2));
                 _repository.RemoveAllDynamicSubscriptionsForPeer(peer.PeerId, peer.TimestampUtc.Value.AddMilliseconds(2));
             }
             }

+ 8 - 7
src/Abc.Zebus.Directory.Tests/DeadPeerDetection/DeadPeerDetectorEntryTests.cs

@@ -40,11 +40,12 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
             var pingTimestamp = SystemDateTime.UtcNow;
             var pingTimestamp = SystemDateTime.UtcNow;
             _entry.Ping(pingTimestamp);
             _entry.Ping(pingTimestamp);
 
 
-            using (SystemDateTime.Set(pingTimestamp.AddSeconds(15)))
+            using (SystemDateTime.PauseTime(pingTimestamp.AddSeconds(15)))
             {
             {
                 _entry.HasReachedTimeout().ShouldBeFalse();
                 _entry.HasReachedTimeout().ShouldBeFalse();
             }
             }
-            using (SystemDateTime.Set(pingTimestamp.AddSeconds(501)))
+
+            using (SystemDateTime.PauseTime(pingTimestamp.AddSeconds(501)))
             {
             {
                 _entry.HasReachedTimeout().ShouldBeTrue();
                 _entry.HasReachedTimeout().ShouldBeTrue();
             }
             }
@@ -62,11 +63,11 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
             var pingTimestamp = SystemDateTime.UtcNow;
             var pingTimestamp = SystemDateTime.UtcNow;
             _entry.Ping(pingTimestamp);
             _entry.Ping(pingTimestamp);
 
 
-            using (SystemDateTime.Set(pingTimestamp.AddSeconds(15)))
+            using (SystemDateTime.PauseTime(pingTimestamp.AddSeconds(15)))
             {
             {
                 _entry.HasReachedTimeout().ShouldBeFalse();
                 _entry.HasReachedTimeout().ShouldBeFalse();
             }
             }
-            using (SystemDateTime.Set(pingTimestamp.AddSeconds(501)))
+            using (SystemDateTime.PauseTime(pingTimestamp.AddSeconds(501)))
             {
             {
                 _entry.HasReachedTimeout().ShouldBeTrue();
                 _entry.HasReachedTimeout().ShouldBeTrue();
             }
             }
@@ -83,11 +84,11 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
             var pingTimestamp = SystemDateTime.UtcNow;
             var pingTimestamp = SystemDateTime.UtcNow;
             _entry.Ping(pingTimestamp);
             _entry.Ping(pingTimestamp);
 
 
-            using (SystemDateTime.Set(pingTimestamp.AddSeconds(4)))
+            using (SystemDateTime.PauseTime(pingTimestamp.AddSeconds(4)))
             {
             {
                 _entry.HasReachedTimeout().ShouldBeFalse();
                 _entry.HasReachedTimeout().ShouldBeFalse();
             }
             }
-            using (SystemDateTime.Set(pingTimestamp.AddSeconds(6)))
+            using (SystemDateTime.PauseTime(pingTimestamp.AddSeconds(6)))
             {
             {
                 _entry.HasReachedTimeout().ShouldBeTrue();
                 _entry.HasReachedTimeout().ShouldBeTrue();
             }
             }
@@ -119,4 +120,4 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
             peerRespondingCount.ShouldEqual(1);
             peerRespondingCount.ShouldEqual(1);
         }
         }
     }
     }
-}
+}

+ 38 - 38
src/Abc.Zebus.Directory.Tests/DeadPeerDetection/DeadPeerDetectorTests.cs

@@ -104,17 +104,17 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
 
 
             _detector.KnownPeerIds.ShouldBeEquivalentTo(new[] { _persistentAlivePeer.PeerId });
             _detector.KnownPeerIds.ShouldBeEquivalentTo(new[] { _persistentAlivePeer.PeerId });
         }
         }
-        
+
         [Test]
         [Test]
         public void should_not_ping_until_the_ping_interval_elapsed()
         public void should_not_ping_until_the_ping_interval_elapsed()
         {
         {
             var startTime = SystemDateTime.UtcNow;
             var startTime = SystemDateTime.UtcNow;
-            using (SystemDateTime.Set(utcNow: startTime))
+            using (SystemDateTime.PauseTime(startTime))
             {
             {
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
             }
             }
 
 
-            using (SystemDateTime.Set(startTime + _pingInterval - 1.Second()))
+            using (SystemDateTime.PauseTime(startTime + _pingInterval - 1.Second()))
             {
             {
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
             }
             }
@@ -139,11 +139,11 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand());
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout - 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout - 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout + 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout + 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
             }
             }
@@ -164,17 +164,17 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout - 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout - 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_persistentPeerTimeout - 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_persistentPeerTimeout - 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_persistentPeerTimeout + 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_persistentPeerTimeout + 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectNothing();;
                 _bus.ExpectNothing();;
             }
             }
@@ -186,7 +186,7 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
             SetupPeerRepository(_debugPersistentAlivePeer, _debugTransientAlivePeer);
             SetupPeerRepository(_debugPersistentAlivePeer, _debugTransientAlivePeer);
             SetupPeerResponse(_debugPersistentAlivePeer.PeerId, false, true);
             SetupPeerResponse(_debugPersistentAlivePeer.PeerId, false, true);
             SetupPeerResponse(_debugTransientAlivePeer.PeerId, false, true);
             SetupPeerResponse(_debugTransientAlivePeer.PeerId, false, true);
-            
+
             using (SystemDateTime.PauseTime())
             using (SystemDateTime.PauseTime())
             {
             {
                 var startTime = SystemDateTime.UtcNow;
                 var startTime = SystemDateTime.UtcNow;
@@ -195,12 +195,12 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_debugPeerTimeout - 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_debugPeerTimeout - 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_debugPeerTimeout + 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_debugPeerTimeout + 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectNothing();
                 _bus.ExpectNothing();
             }
             }
@@ -211,7 +211,7 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
         {
         {
             SetupPeerRepository(_transientAlivePeer0);
             SetupPeerRepository(_transientAlivePeer0);
             SetupPeerResponse(_transientAlivePeer0.PeerId, false, false);
             SetupPeerResponse(_transientAlivePeer0.PeerId, false, false);
-           
+
             using (SystemDateTime.PauseTime())
             using (SystemDateTime.PauseTime())
             {
             {
                 var startTime = SystemDateTime.UtcNow;
                 var startTime = SystemDateTime.UtcNow;
@@ -220,17 +220,17 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand());
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout - 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout - 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout + 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout + 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.Expect(new UnregisterPeerCommand(_transientAlivePeer0.Peer, firstPingTimestampUtc));
                 _bus.Expect(new UnregisterPeerCommand(_transientAlivePeer0.Peer, firstPingTimestampUtc));
             }
             }
         }
         }
 
 
-        private static readonly string[] _peersNotToDecommissionExamples = 
+        private static readonly string[] _peersNotToDecommissionExamples =
         {
         {
             "Abc.TransientAlive.0",
             "Abc.TransientAlive.0",
             "Abc.TransientAlive.*",
             "Abc.TransientAlive.*",
@@ -255,12 +255,12 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout - 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout - 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout + 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout + 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new MarkPeerAsNotRespondingCommand(_transientAlivePeer0.Peer.Id, firstPingTimestampUtc));
                 _bus.ExpectExactly(new MarkPeerAsNotRespondingCommand(_transientAlivePeer0.Peer.Id, firstPingTimestampUtc));
             }
             }
@@ -272,7 +272,7 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
             SetupPeerRepository(_persistentAlivePeer, _transientAlivePeer0);
             SetupPeerRepository(_persistentAlivePeer, _transientAlivePeer0);
             SetupPeerResponse(_transientAlivePeer0.PeerId, true, true);
             SetupPeerResponse(_transientAlivePeer0.PeerId, true, true);
             SetupPeerResponse(_persistentAlivePeer.PeerId, false, false);
             SetupPeerResponse(_persistentAlivePeer.PeerId, false, false);
-            
+
             using (SystemDateTime.PauseTime())
             using (SystemDateTime.PauseTime())
             {
             {
                 var startTime = SystemDateTime.UtcNow;
                 var startTime = SystemDateTime.UtcNow;
@@ -281,19 +281,19 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
-            
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout - 1));
+
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout - 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
                 var retryTimestamp = startTime.AddSeconds(_persistentPeerTimeout - 1);
                 var retryTimestamp = startTime.AddSeconds(_persistentPeerTimeout - 1);
-                SystemDateTime.Set(retryTimestamp);
+                SystemDateTime.PauseTime(retryTimestamp);
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
-            
-                SystemDateTime.Set(startTime.AddSeconds(_persistentPeerTimeout + 1));
+
+                SystemDateTime.PauseTime(startTime.AddSeconds(_persistentPeerTimeout + 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new MarkPeerAsNotRespondingCommand(_persistentAlivePeer.Peer.Id, firstPingTimestampUtc));
                 _bus.ExpectExactly(new MarkPeerAsNotRespondingCommand(_persistentAlivePeer.Peer.Id, firstPingTimestampUtc));
             }
             }
@@ -305,7 +305,7 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
             SetupPeerRepository(_directoryPeer, _transientAlivePeer0);
             SetupPeerRepository(_directoryPeer, _transientAlivePeer0);
             SetupPeerResponse(_transientAlivePeer0.PeerId, false, false);
             SetupPeerResponse(_transientAlivePeer0.PeerId, false, false);
             SetupPeerResponse(_directoryPeer.PeerId, false, false);
             SetupPeerResponse(_directoryPeer.PeerId, false, false);
-           
+
             using (SystemDateTime.PauseTime())
             using (SystemDateTime.PauseTime())
             {
             {
                 var startTime = SystemDateTime.UtcNow;
                 var startTime = SystemDateTime.UtcNow;
@@ -315,12 +315,12 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout - 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout - 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout + 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout + 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new UnregisterPeerCommand(_transientAlivePeer0.Peer, firstPingTimestampUtc));
                 _bus.ExpectExactly(new UnregisterPeerCommand(_transientAlivePeer0.Peer, firstPingTimestampUtc));
             }
             }
@@ -342,11 +342,11 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand());
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout - 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout - 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_transientPeerTimeout + 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_transientPeerTimeout + 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
 
 
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
@@ -381,16 +381,16 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 var startTime = SystemDateTime.UtcNow;
                 var startTime = SystemDateTime.UtcNow;
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
 
 
-                SystemDateTime.Set(startTime.Add(_pingInterval - 1.Second()));
+                SystemDateTime.PauseTime(startTime.Add(_pingInterval - 1.Second()));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 missedPings.Count.ShouldEqual(0);
                 missedPings.Count.ShouldEqual(0);
 
 
-                SystemDateTime.Set(startTime.Add(_pingInterval + 1.Second()));
+                SystemDateTime.PauseTime(startTime.Add(_pingInterval + 1.Second()));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 missedPings.Count.ShouldEqual(1);
                 missedPings.Count.ShouldEqual(1);
                 missedPings.First().PeerId.ShouldEqual(_persistentAlivePeer.PeerId);
                 missedPings.First().PeerId.ShouldEqual(_persistentAlivePeer.PeerId);
 
 
-                SystemDateTime.Set(startTime.Add(_pingInterval + _pingInterval + 1.Second()));
+                SystemDateTime.PauseTime(startTime.Add(_pingInterval + _pingInterval + 1.Second()));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 missedPings.Count.ShouldEqual(2);
                 missedPings.Count.ShouldEqual(2);
                 missedPings.All(evt => evt.PeerId == _persistentAlivePeer.PeerId).ShouldBeTrue();
                 missedPings.All(evt => evt.PeerId == _persistentAlivePeer.PeerId).ShouldBeTrue();
@@ -412,12 +412,12 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_persistentPeerTimeout - 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_persistentPeerTimeout - 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_persistentPeerTimeout + 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_persistentPeerTimeout + 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.Expect(new MarkPeerAsNotRespondingCommand(_persistentAlivePeer.Peer.Id, firstPingTimestampUtc));
                 _bus.Expect(new MarkPeerAsNotRespondingCommand(_persistentAlivePeer.Peer.Id, firstPingTimestampUtc));
                 _bus.ClearMessages();
                 _bus.ClearMessages();
@@ -425,12 +425,12 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 // simulate MarkPeerAsNotRespondingCommand handler
                 // simulate MarkPeerAsNotRespondingCommand handler
                 _persistentAlivePeer.Peer.IsResponding = false;
                 _persistentAlivePeer.Peer.IsResponding = false;
 
 
-                SystemDateTime.Set(SystemDateTime.Now.Add(_pingInterval));
+                SystemDateTime.PauseTime(SystemDateTime.UtcNow.Add(_pingInterval));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(SystemDateTime.Now.Add(_pingInterval));
+                SystemDateTime.PauseTime(SystemDateTime.UtcNow.Add(_pingInterval));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.Expect(new MarkPeerAsRespondingCommand(_persistentAlivePeer.Peer.Id, SystemDateTime.UtcNow));
                 _bus.Expect(new MarkPeerAsRespondingCommand(_persistentAlivePeer.Peer.Id, SystemDateTime.UtcNow));
             }
             }
@@ -452,12 +452,12 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_debugPeerTimeout - 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_debugPeerTimeout - 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ExpectExactly(new PingPeerCommand(), new PingPeerCommand());
                 _bus.ClearMessages();
                 _bus.ClearMessages();
 
 
-                SystemDateTime.Set(startTime.AddSeconds(_debugPeerTimeout + 1));
+                SystemDateTime.PauseTime(startTime.AddSeconds(_debugPeerTimeout + 1));
                 _detector.DetectDeadPeers();
                 _detector.DetectDeadPeers();
                 _bus.ExpectExactly(
                 _bus.ExpectExactly(
                     new UnregisterPeerCommand(_debugTransientAlivePeer.Peer, firstPingTimestampUtc),
                     new UnregisterPeerCommand(_debugTransientAlivePeer.Peer, firstPingTimestampUtc),
@@ -510,7 +510,7 @@ namespace Abc.Zebus.Directory.Tests.DeadPeerDetection
                 {
                 {
                     return new TaskCompletionSource<CommandResult>().Task;
                     return new TaskCompletionSource<CommandResult>().Task;
                 }
                 }
-             
+
                 return taskCompletionSource.Task;
                 return taskCompletionSource.Task;
             }
             }
         }
         }

+ 0 - 2
src/Abc.Zebus.Directory.Tests/PeerDirectoryServerTests.cs

@@ -45,7 +45,6 @@ namespace Abc.Zebus.Directory.Tests
         public async Task register_persist_state_and_advertise()
         public async Task register_persist_state_and_advertise()
         {
         {
             using (SystemDateTime.PauseTime())
             using (SystemDateTime.PauseTime())
-            using (SystemDateTime.Set(SystemDateTime.Now))
             {
             {
                 var peerDescriptor = _self.ToPeerDescriptor(false, typeof(FakeCommand));
                 var peerDescriptor = _self.ToPeerDescriptor(false, typeof(FakeCommand));
 
 
@@ -73,7 +72,6 @@ namespace Abc.Zebus.Directory.Tests
         public async Task unregister_should_persist_state_and_advertise()
         public async Task unregister_should_persist_state_and_advertise()
         {
         {
             using (SystemDateTime.PauseTime())
             using (SystemDateTime.PauseTime())
-            using (SystemDateTime.Set(SystemDateTime.Now))
             {
             {
                 var peerDescriptor = _self.ToPeerDescriptor(true, typeof(FakeCommand));
                 var peerDescriptor = _self.ToPeerDescriptor(true, typeof(FakeCommand));
 
 

+ 6 - 6
src/Abc.Zebus.Persistence.Tests/Matching/InMemoryMessageMatcherTests.cs

@@ -92,7 +92,7 @@ namespace Abc.Zebus.Persistence.Tests.Matching
 
 
                 persistedSignal.WaitOne(500.Milliseconds()).ShouldBeFalse();
                 persistedSignal.WaitOne(500.Milliseconds()).ShouldBeFalse();
 
 
-                SystemDateTime.Set(utcNow: SystemDateTime.UtcNow.Add(_delay.GetValueOrDefault()));
+                SystemDateTime.PauseTime(SystemDateTime.UtcNow.Add(_delay.GetValueOrDefault()));
 
 
                 persistedSignal.WaitOne(600.Milliseconds()).ShouldBeTrue();
                 persistedSignal.WaitOne(600.Milliseconds()).ShouldBeTrue();
             }
             }
@@ -140,17 +140,17 @@ namespace Abc.Zebus.Persistence.Tests.Matching
                 // messages for batch 1
                 // messages for batch 1
                 _matcher.EnqueueMessage(_peerId, MessageId.NextId(), new MessageTypeId("Abc.X"), new byte[0]);
                 _matcher.EnqueueMessage(_peerId, MessageId.NextId(), new MessageTypeId("Abc.X"), new byte[0]);
                 _matcher.EnqueueMessage(_peerId, MessageId.NextId(), new MessageTypeId("Abc.X"), new byte[0]);
                 _matcher.EnqueueMessage(_peerId, MessageId.NextId(), new MessageTypeId("Abc.X"), new byte[0]);
-                SystemDateTime.Set(utcNow: SystemDateTime.UtcNow.Add(4.Seconds()));
+                SystemDateTime.PauseTime(SystemDateTime.UtcNow.Add(4.Seconds()));
 
 
                 // message for batch 2
                 // message for batch 2
                 _matcher.EnqueueMessage(_peerId, MessageId.NextId(), new MessageTypeId("Abc.X"), new byte[0]);
                 _matcher.EnqueueMessage(_peerId, MessageId.NextId(), new MessageTypeId("Abc.X"), new byte[0]);
-                SystemDateTime.Set(utcNow: SystemDateTime.UtcNow.Add(3.Seconds()));
+                SystemDateTime.PauseTime(SystemDateTime.UtcNow.Add(3.Seconds()));
 
 
                 _matcher.Start();
                 _matcher.Start();
 
 
                 Wait.Until(() => persistedEntries.Count == 2, 500.Milliseconds());
                 Wait.Until(() => persistedEntries.Count == 2, 500.Milliseconds());
 
 
-                SystemDateTime.Set(utcNow: SystemDateTime.UtcNow.Add(2.Seconds()));
+                SystemDateTime.PauseTime(SystemDateTime.UtcNow.Add(2.Seconds()));
 
 
                 Wait.Until(() => persistedEntries.Count == 3, 500.Milliseconds());
                 Wait.Until(() => persistedEntries.Count == 3, 500.Milliseconds());
             }
             }
@@ -185,7 +185,7 @@ namespace Abc.Zebus.Persistence.Tests.Matching
                 _matcher.EnqueueMessage(_peerId, MessageId.NextId(), new MessageTypeId("Abc.X"), new byte[0]);
                 _matcher.EnqueueMessage(_peerId, MessageId.NextId(), new MessageTypeId("Abc.X"), new byte[0]);
                 _matcher.EnqueueAck(_peerId, messageId);
                 _matcher.EnqueueAck(_peerId, messageId);
 
 
-                SystemDateTime.Set(utcNow: SystemDateTime.UtcNow.Add(_delay.Value));
+                SystemDateTime.PauseTime(SystemDateTime.UtcNow.Add(_delay.Value));
 
 
                 var persistCalled = signal.Wait(1.Second());
                 var persistCalled = signal.Wait(1.Second());
 
 
@@ -219,7 +219,7 @@ namespace Abc.Zebus.Persistence.Tests.Matching
                 _matcher.EnqueueMessage(_otherPeerId, messageId, new MessageTypeId("X"), new byte[0]);
                 _matcher.EnqueueMessage(_otherPeerId, messageId, new MessageTypeId("X"), new byte[0]);
                 _matcher.EnqueueAck(_otherPeerId, messageId);
                 _matcher.EnqueueAck(_otherPeerId, messageId);
 
 
-                SystemDateTime.Set(utcNow: SystemDateTime.UtcNow.Add(_delay.Value));
+                SystemDateTime.PauseTime(SystemDateTime.UtcNow.Add(_delay.Value));
 
 
                 var persistCalled = signal.Wait(1.Second());
                 var persistCalled = signal.Wait(1.Second());
                 persistCalled.ShouldBeTrue();
                 persistCalled.ShouldBeTrue();

+ 3 - 3
src/Abc.Zebus.Persistence.Tests/MessageReplayerTests.cs

@@ -79,13 +79,13 @@ namespace Abc.Zebus.Persistence.Tests
         [Test]
         [Test]
         public void should_replay_messages()
         public void should_replay_messages()
         {
         {
-            var unackedTransportMessages = InsertMessagesInThePast(DateTime.Now, messageCount: 11);
+            var unackedTransportMessages = InsertMessagesInThePast(DateTime.UtcNow, messageCount: 11);
             Thread.Sleep(2);
             Thread.Sleep(2);
 
 
             // make sure we have more than BatchSize messages in the same buckets
             // make sure we have more than BatchSize messages in the same buckets
             for (int i = 0; i < _replayBatchSize; i++)
             for (int i = 0; i < _replayBatchSize; i++)
             {
             {
-                unackedTransportMessages.AddRange(InsertMessagesInThePast(DateTime.Now, messageCount: 2));
+                unackedTransportMessages.AddRange(InsertMessagesInThePast(DateTime.UtcNow, messageCount: 2));
                 Thread.Sleep(2);
                 Thread.Sleep(2);
             }
             }
 
 
@@ -274,7 +274,7 @@ namespace Abc.Zebus.Persistence.Tests
             for (var i = 0; i < messageCount; ++i)
             for (var i = 0; i < messageCount; ++i)
             {
             {
                 TransportMessage transportMessage;
                 TransportMessage transportMessage;
-                using (SystemDateTime.Set(refTime))
+                using (SystemDateTime.PauseTime(refTime))
                 {
                 {
                     transportMessage = new FakeCommand(i).ToTransportMessage(_anotherPeer);
                     transportMessage = new FakeCommand(i).ToTransportMessage(_anotherPeer);
                 }
                 }

+ 3 - 3
src/Abc.Zebus.Tests/Directory/PeerDirectoryClientTests.cs

@@ -192,7 +192,7 @@ namespace Abc.Zebus.Tests.Directory
 
 
             var baseTimestamp = DateTime.UtcNow;
             var baseTimestamp = DateTime.UtcNow;
 
 
-            using (SystemDateTime.Set(utcNow: baseTimestamp))
+            using (SystemDateTime.PauseTime(baseTimestamp))
             {
             {
                 await _directory.RegisterAsync(_bus, _self, Array.Empty<Subscription>());
                 await _directory.RegisterAsync(_bus, _self, Array.Empty<Subscription>());
                 await _directory.UnregisterAsync(_bus);
                 await _directory.UnregisterAsync(_bus);
@@ -201,7 +201,7 @@ namespace Abc.Zebus.Tests.Directory
             _bus.Commands.OfType<RegisterPeerCommand>().ShouldHaveSize(2);
             _bus.Commands.OfType<RegisterPeerCommand>().ShouldHaveSize(2);
 
 
             // Act 1: before delay
             // Act 1: before delay
-            using (SystemDateTime.Set(utcNow: baseTimestamp.AddSeconds(29)))
+            using (SystemDateTime.PauseTime(baseTimestamp.AddSeconds(29)))
             {
             {
                 await _directory.RegisterAsync(_bus, _self, Array.Empty<Subscription>());
                 await _directory.RegisterAsync(_bus, _self, Array.Empty<Subscription>());
                 await _directory.UnregisterAsync(_bus);
                 await _directory.UnregisterAsync(_bus);
@@ -210,7 +210,7 @@ namespace Abc.Zebus.Tests.Directory
             _bus.Commands.OfType<RegisterPeerCommand>().ShouldHaveSize(3);
             _bus.Commands.OfType<RegisterPeerCommand>().ShouldHaveSize(3);
 
 
             // Act 2: after delay
             // Act 2: after delay
-            using (SystemDateTime.Set(utcNow: baseTimestamp.AddSeconds(31))) // Retry delay + timeout
+            using (SystemDateTime.PauseTime(baseTimestamp.AddSeconds(31))) // Retry delay + timeout
             {
             {
                 await _directory.RegisterAsync(_bus, _self, Array.Empty<Subscription>());
                 await _directory.RegisterAsync(_bus, _self, Array.Empty<Subscription>());
                 await _directory.UnregisterAsync(_bus);
                 await _directory.UnregisterAsync(_bus);

+ 0 - 1
src/Abc.Zebus.Tests/MessageIdTests.cs

@@ -113,7 +113,6 @@ namespace Abc.Zebus.Tests
 
 
             var unpausedId = MessageId.NextId();
             var unpausedId = MessageId.NextId();
             unpausedId.Value.ShouldNotEqual(pausedId.Value);
             unpausedId.Value.ShouldNotEqual(pausedId.Value);
-            SystemDateTime.Today.ShouldEqual(DateTime.Today);
         }
         }
 
 
         [Test, Repeat(20)]
         [Test, Repeat(20)]

+ 1 - 1
src/Abc.Zebus.Tests/Transport/ZmqTransportTests.cs

@@ -302,7 +302,7 @@ namespace Abc.Zebus.Tests.Transport
 
 
             senderTransport.OutboundSocketCount.ShouldEqual(1);
             senderTransport.OutboundSocketCount.ShouldEqual(1);
 
 
-            using (SystemDateTime.Set(utcNow: SystemDateTime.UtcNow.Add(30.Seconds())))
+            using (SystemDateTime.PauseTime(SystemDateTime.UtcNow.Add(30.Seconds())))
             {
             {
                 Wait.Until(() => senderTransport.OutboundSocketCount == 0, 1.Seconds(), "Socket should be disconnected");
                 Wait.Until(() => senderTransport.OutboundSocketCount == 0, 1.Seconds(), "Socket should be disconnected");
             }
             }

+ 11 - 56
src/Abc.Zebus.Tests/Util/SystemDateTimeTests.cs

@@ -14,11 +14,7 @@ namespace Abc.Zebus.Tests.Util
         {
         {
             var dateTimeUtcNow = DateTime.UtcNow;
             var dateTimeUtcNow = DateTime.UtcNow;
             var sysDateTimeUtcNow = SystemDateTime.UtcNow;
             var sysDateTimeUtcNow = SystemDateTime.UtcNow;
-            sysDateTimeUtcNow.Subtract(dateTimeUtcNow).ShouldBeLessOrEqualThan(10.Milliseconds());
-
-            var dateTimeNow = DateTime.Now;
-            var sysDateTimeNow = SystemDateTime.Now;
-            sysDateTimeNow.Subtract(dateTimeNow).ShouldBeLessOrEqualThan(10.Milliseconds());
+            sysDateTimeUtcNow.Subtract(dateTimeUtcNow).ShouldBeLessOrEqualThan(50.Milliseconds());
         }
         }
 
 
         [Test]
         [Test]
@@ -27,16 +23,10 @@ namespace Abc.Zebus.Tests.Util
             using (SystemDateTime.PauseTime())
             using (SystemDateTime.PauseTime())
             {
             {
                 var utcNow = SystemDateTime.UtcNow;
                 var utcNow = SystemDateTime.UtcNow;
-                Thread.Sleep(50.Milliseconds());
+                Thread.Sleep(2.Milliseconds());
                 utcNow.ShouldEqual(SystemDateTime.UtcNow);
                 utcNow.ShouldEqual(SystemDateTime.UtcNow);
                 utcNow.ShouldEqual(SystemDateTime.UtcNow);
                 utcNow.ShouldEqual(SystemDateTime.UtcNow);
                 utcNow.ShouldEqual(SystemDateTime.UtcNow);
                 utcNow.ShouldEqual(SystemDateTime.UtcNow);
-
-                var now = SystemDateTime.Now;
-                Thread.Sleep(50.Milliseconds());
-                now.ShouldEqual(SystemDateTime.Now);
-                now.ShouldEqual(SystemDateTime.Now);
-                now.ShouldEqual(SystemDateTime.Now);
             }
             }
         }
         }
 
 
@@ -45,38 +35,24 @@ namespace Abc.Zebus.Tests.Util
         {
         {
             using (SystemDateTime.PauseTime())
             using (SystemDateTime.PauseTime())
             {
             {
-                var now = SystemDateTime.UtcNow;
-                Thread.Sleep(50.Milliseconds());
+                var utcNow = SystemDateTime.UtcNow;
+                Thread.Sleep(2.Milliseconds());
                 SystemDateTime.Reset();
                 SystemDateTime.Reset();
-                Thread.Sleep(50.Milliseconds());
+                Thread.Sleep(2.Milliseconds());
 
 
-                SystemDateTime.UtcNow.ShouldBeGreaterThan(now);
-                SystemDateTime.Now.ShouldBeGreaterThan(now.ToLocalTime());
+                SystemDateTime.UtcNow.ShouldBeGreaterThan(utcNow);
             }
             }
         }
         }
 
 
         [Test]
         [Test]
         public void should_reset_time_when_set()
         public void should_reset_time_when_set()
         {
         {
-            var fakeNow = new DateTime(1995, 1, 1, 1, 2, 3, 4, DateTimeKind.Local);
-            using (SystemDateTime.Set(fakeNow))
+            var fakeUtcNow = new DateTime(1995, 1, 1, 1, 2, 3, 4, DateTimeKind.Utc);
+            using (SystemDateTime.PauseTime(fakeUtcNow))
             {
             {
                 SystemDateTime.Reset();
                 SystemDateTime.Reset();
-                
-                SystemDateTime.UtcNow.ShouldBeGreaterThan(fakeNow);
-                SystemDateTime.Now.ShouldBeGreaterThan(fakeNow);
-            }
-        }
 
 
-        [Test]
-        public void should_set_time_with_fake_local_time()
-        {
-            var fakeNow = new DateTime(1995, 1, 1, 1, 2, 3, 4, DateTimeKind.Local);
-            using (SystemDateTime.Set(fakeNow))
-            {
-                SystemDateTime.Now.ShouldEqual(fakeNow);
-                SystemDateTime.UtcNow.ShouldEqual(fakeNow.ToUniversalTime());
-                SystemDateTime.Today.ShouldEqual(fakeNow.Date);
+                SystemDateTime.UtcNow.ShouldBeGreaterThan(fakeUtcNow);
             }
             }
         }
         }
 
 
@@ -84,31 +60,10 @@ namespace Abc.Zebus.Tests.Util
         public void should_set_time_with_fake_utc_time()
         public void should_set_time_with_fake_utc_time()
         {
         {
             var fakeUtcNow = new DateTime(1995, 1, 1, 1, 2, 3, 4, DateTimeKind.Utc);
             var fakeUtcNow = new DateTime(1995, 1, 1, 1, 2, 3, 4, DateTimeKind.Utc);
-            using (SystemDateTime.Set(null, fakeUtcNow))
+            using (SystemDateTime.PauseTime(fakeUtcNow))
             {
             {
-                SystemDateTime.Now.ShouldEqual(fakeUtcNow.ToLocalTime());
                 SystemDateTime.UtcNow.ShouldEqual(fakeUtcNow);
                 SystemDateTime.UtcNow.ShouldEqual(fakeUtcNow);
-                SystemDateTime.Today.ShouldEqual(fakeUtcNow.ToLocalTime().Date);
             }
             }
         }
         }
-
-        [Test]
-        public void should_set_time_with_fake_local_and_utc_time()
-        {
-            var fakeNow = new DateTime(1995, 1, 1, 1, 2, 3, 4, DateTimeKind.Local);
-            var fakeUtcNow = new DateTime(1995, 1, 1, 1, 2, 3, 4, DateTimeKind.Utc);
-            using (SystemDateTime.Set(fakeNow, fakeUtcNow))
-            {
-                SystemDateTime.Now.ShouldEqual(fakeNow);
-                SystemDateTime.UtcNow.ShouldEqual(fakeUtcNow);
-                SystemDateTime.Today.ShouldEqual(fakeUtcNow.Date);
-            }
-        }
-
-        [Test]
-        public void should_throw_when_setting_nulls()
-        {
-            Assert.Throws<ArgumentNullException>(() => SystemDateTime.Set());
-        }
     }
     }
-}
+}

+ 9 - 19
src/Abc.Zebus/Util/SystemDateTime.cs

@@ -4,35 +4,25 @@ namespace Abc.Zebus.Util
 {
 {
     internal static class SystemDateTime
     internal static class SystemDateTime
     {
     {
-        public static DateTime Now => _nowFunc();
+        public static DateTime UtcNow => _pausedValue ?? DateTime.UtcNow;
 
 
-        public static DateTime UtcNow => _utcNowFunc();
-
-        public static DateTime Today => _nowFunc().Date;
-
-        private static Func<DateTime> _nowFunc = () => DateTime.Now;
-        private static Func<DateTime> _utcNowFunc = () => DateTime.UtcNow;
+        private static DateTime? _pausedValue;
 
 
         public static void Reset()
         public static void Reset()
         {
         {
-            _nowFunc = () => DateTime.Now;
-            _utcNowFunc = () => DateTime.UtcNow;
+            _pausedValue = null;
         }
         }
 
 
-        public static IDisposable Set(DateTime? now = null, DateTime? utcNow = null)
+        public static IDisposable PauseTime()
         {
         {
-            if (now == null && utcNow == null)
-                throw new ArgumentNullException();
-
-            _nowFunc = () => now ?? utcNow.GetValueOrDefault().ToLocalTime();
-            _utcNowFunc = () => utcNow ?? now.GetValueOrDefault().ToUniversalTime();
-            return new Scope();
+            return PauseTime(DateTime.UtcNow);
         }
         }
 
 
-        public static IDisposable PauseTime()
+        public static IDisposable PauseTime(DateTime utcNow)
         {
         {
-            var now = DateTime.Now;
-            return Set(now, now.ToUniversalTime());
+            _pausedValue = utcNow;
+
+            return new Scope();
         }
         }
 
 
         private class Scope : IDisposable
         private class Scope : IDisposable