Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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();
 }
Ejemplo n.º 6
0
        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 SingletonWatcher(SingletonLock singletonLock)
 {
     _singletonLock = singletonLock;
     _log = new SingletonParameterLog();
 }