private static string Format(SingletonParameterLog log) { Debug.Assert(log != null); StringBuilder builder = new StringBuilder(); if (log.LockAcquired) { builder.AppendLine("Lock acquired."); } else { builder.AppendLine("Waiting for lock..."); } if (log.LockOwner != null) { builder.AppendLine(string.Format(CultureInfo.InvariantCulture, "Lock Owner: {0}.", log.LockOwner)); } if (log.TimeToAcquireLock != null) { builder.AppendLine(string.Format(CultureInfo.InvariantCulture, "Wait time: {0}.", Format(log.TimeToAcquireLock.Value))); } if (log.LockDuration != null) { builder.AppendLine(string.Format(CultureInfo.InvariantCulture, "Lock duration: {0}.", Format(log.LockDuration.Value))); } return(builder.ToString()); }
public async Task SingletonWatcher_GetStatus_ReturnsExpectedValue() { Mock <SingletonManager> mockSingletonManager = new Mock <SingletonManager>(MockBehavior.Strict, null, null, null, null, null, new FixedHostIdProvider(TestHostId), null); mockSingletonManager.Setup(p => p.GetLockOwnerAsync(_attribute, _lockId, CancellationToken.None)).ReturnsAsync("someotherguy"); SingletonValueProvider localValueProvider = new SingletonValueProvider(_method, _attribute.ScopeId, TestInstanceId, _attribute, mockSingletonManager.Object); SingletonLock localSingletonLock = (SingletonLock)(await localValueProvider.GetValueAsync()); // set start time before _minimumWaitForFirstOwnerCheck in SingletonValueProvider DateTime startTime = DateTime.UtcNow - TimeSpan.FromSeconds(11); DateTime endTime = DateTime.UtcNow + TimeSpan.FromSeconds(2); DateTime releaseTime = endTime + TimeSpan.FromSeconds(1); // before lock is called SingletonValueProvider.SingletonWatcher watcher = (SingletonValueProvider.SingletonWatcher)localValueProvider.Watcher; SingletonParameterLog log = (SingletonParameterLog)watcher.GetStatus(); Assert.Null(log.LockOwner); Assert.False(log.LockAcquired); Assert.Null(log.LockDuration); Assert.Null(log.TimeToAcquireLock); // in the process of locking localSingletonLock.AcquireStartTime = startTime; log = (SingletonParameterLog)watcher.GetStatus(); Assert.Equal("someotherguy", log.LockOwner); Assert.False(log.LockAcquired); Assert.Null(log.LockDuration); Assert.NotNull(log.TimeToAcquireLock); // lock acquired but not released localSingletonLock.AcquireEndTime = endTime; log = (SingletonParameterLog)watcher.GetStatus(); Assert.Null(log.LockOwner); Assert.True(log.LockAcquired); Assert.NotNull(log.LockDuration); Assert.Equal(endTime - startTime, log.TimeToAcquireLock); // lock released localSingletonLock.ReleaseTime = releaseTime; log = (SingletonParameterLog)watcher.GetStatus(); Assert.Null(log.LockOwner); Assert.True(log.LockAcquired); Assert.Equal(releaseTime - endTime, log.LockDuration); Assert.Equal(endTime - startTime, log.TimeToAcquireLock); }
public void Format_SingletonParameterLog() { SingletonParameterLog log = new SingletonParameterLog { LockAcquired = false }; StringBuilder expected = new StringBuilder(); expected.AppendLine("Waiting for lock..."); Assert.Equal(expected.ToString(), LogAnalysis.Format(log)); log = new SingletonParameterLog { LockAcquired = false, TimeToAcquireLock = TimeSpan.FromSeconds(4), LockOwner = "8F4DA397-4EF4-428E-9043-FC240376165E" }; expected = new StringBuilder(); expected.AppendLine("Waiting for lock..."); expected.AppendLine("Lock Owner: 8F4DA397-4EF4-428E-9043-FC240376165E."); expected.AppendLine("Wait time: About 4 seconds."); Assert.Equal(expected.ToString(), LogAnalysis.Format(log)); log = new SingletonParameterLog { LockAcquired = true, TimeToAcquireLock = TimeSpan.FromSeconds(4) }; expected = new StringBuilder(); expected.AppendLine("Lock acquired."); expected.AppendLine("Wait time: About 4 seconds."); Assert.Equal(expected.ToString(), LogAnalysis.Format(log)); log = new SingletonParameterLog { LockAcquired = true, TimeToAcquireLock = TimeSpan.FromSeconds(4), LockDuration = TimeSpan.FromSeconds(2) }; expected = new StringBuilder(); expected.AppendLine("Lock acquired."); expected.AppendLine("Wait time: About 4 seconds."); expected.AppendLine("Lock duration: About 2 seconds."); Assert.Equal(expected.ToString(), LogAnalysis.Format(log)); }
internal static string Format(ParameterLog log) { ReadBlobParameterLog readBlobLog = log as ReadBlobParameterLog; if (readBlobLog != null) { return(Format(readBlobLog)); } WriteBlobParameterLog writeBlobLog = log as WriteBlobParameterLog; if (writeBlobLog != null) { return(Format(writeBlobLog)); } TableParameterLog tableLog = log as TableParameterLog; if (tableLog != null) { return(Format(tableLog)); } SingletonParameterLog singletonLog = log as SingletonParameterLog; if (singletonLog != null) { return(Format(singletonLog)); } TextParameterLog textLog = log as TextParameterLog; if (textLog != null) { return(textLog.Value); } return(null); }
public SingletonWatcher(SingletonLock singletonLock) { _singletonLock = singletonLock; _log = new SingletonParameterLog(); }
private static string Format(SingletonParameterLog log) { Debug.Assert(log != null); StringBuilder builder = new StringBuilder(); if (log.LockAcquired) { builder.AppendLine("Lock acquired."); } else { builder.AppendLine("Waiting for lock..."); } if (log.LockOwner != null) { builder.AppendLine(string.Format(CultureInfo.InvariantCulture, "Lock Owner: {0}.", log.LockOwner)); } if (log.TimeToAcquireLock != null) { builder.AppendLine(string.Format(CultureInfo.InvariantCulture, "Wait time: {0}.", Format(log.TimeToAcquireLock.Value))); } if (log.LockDuration != null) { builder.AppendLine(string.Format(CultureInfo.InvariantCulture, "Lock duration: {0}.", Format(log.LockDuration.Value))); } return builder.ToString(); }