Skip to content

Commit

Permalink
Fixed test, and provider for stopwatch to get correct timestamp
Browse files Browse the repository at this point in the history
  • Loading branch information
phatboyg committed Jun 25, 2015
1 parent 0b659b2 commit a4de0c1
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 35 deletions.
2 changes: 1 addition & 1 deletion .semver
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
:major: 2
:minor: 1
:patch: 2
:patch: 3
:special: ''
:metadata: ''
40 changes: 32 additions & 8 deletions src/NewId.Tests/Provider_Specs.cs
Original file line number Diff line number Diff line change
@@ -1,25 +1,49 @@
using System;
using System.Threading;
using MassTransit.NewIdProviders;
using NUnit.Framework;

namespace MassTransit.NewIdTests
{
using System;
using System.Threading;
using NewIdProviders;
using NUnit.Framework;


[TestFixture]
public class StopwatchTickProvider_Specs
{
[Test, Explicit]
public void Should_keep_accurate_time()
{
TimeSpan timeDelta = TimeSpan.FromSeconds(3);

var timestamp = DateTime.UtcNow;
var provider = new StopwatchTickProvider();
long start = provider.Ticks;
Thread.Sleep(timeDelta);
long stop = provider.Ticks;

var startTime = new DateTime(start);
Console.WriteLine("Start time: {0}, Original: {1}", startTime, timestamp);


long deltaTicks = Math.Abs(stop - start);
// 0.01% acceptable delta
var acceptableDelta = (long)(timeDelta.Ticks);

Assert.Less(deltaTicks, acceptableDelta);
}

[Test, Explicit]
public void Should_not_lag_time()
{
TimeSpan timeDelta = TimeSpan.FromMinutes(1);

StopwatchTickProvider startProvider = new StopwatchTickProvider();
var startProvider = new StopwatchTickProvider();
Thread.Sleep(timeDelta);
StopwatchTickProvider endProvider = new StopwatchTickProvider();
var endProvider = new StopwatchTickProvider();


long deltaTicks = Math.Abs(endProvider.Ticks - startProvider.Ticks);
// 0.01% acceptable delta
long acceptableDelta = (long)(timeDelta.Ticks * 0.0001);
var acceptableDelta = (long)(timeDelta.Ticks * 0.0001);

Assert.Less(deltaTicks, acceptableDelta);
}
Expand Down
27 changes: 1 addition & 26 deletions src/NewId/NewIdProviders/StopwatchTickProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ namespace MassTransit.NewIdProviders
public class StopwatchTickProvider :
ITickProvider
{

readonly Stopwatch _stopwatch;
DateTime _start;

Expand All @@ -17,33 +16,9 @@ public StopwatchTickProvider()
_stopwatch = Stopwatch.StartNew();
}

private static readonly double StopwatchTickFrequency;

static StopwatchTickProvider()
{
if (Stopwatch.IsHighResolution)
{
StopwatchTickFrequency = TimeSpan.TicksPerSecond / (double)Stopwatch.Frequency;
}
else
{
StopwatchTickFrequency = 1.0;
}
}

public long Ticks
{
get { return _start.AddTicks(GetStopwatchTicksAsTimespanTicks()).Ticks; }
}

// Stopwatch and Timespan ticks are not the same
long GetStopwatchTicksAsTimespanTicks()
{
long rawTicks = _stopwatch.ElapsedTicks;
if (Stopwatch.IsHighResolution)
return (long)(rawTicks * StopwatchTickFrequency);
else
return rawTicks;
get { return (_start.AddTicks(_stopwatch.Elapsed.Ticks)).Ticks; }
}
}
}

0 comments on commit a4de0c1

Please sign in to comment.