public void TestValidatesDuration()
        {
            var builder = new AzureBlobLeaseOptionsBuilder();

            Assert.DoesNotThrow(() => builder.Duration(TimeSpan.FromSeconds(15)));
            Assert.DoesNotThrow(() => builder.Duration(TimeSpan.FromSeconds(60)));
            Assert.DoesNotThrow(() => builder.Duration(Timeout.InfiniteTimeSpan));
            Assert.Throws <ArgumentOutOfRangeException>(() => builder.Duration(TimeSpan.FromSeconds(14)));
            Assert.Throws <ArgumentOutOfRangeException>(() => builder.Duration(TimeSpan.FromSeconds(61)));
        }
        public void TestValidatesRenewalCadence()
        {
            Assert.Throws <ArgumentOutOfRangeException>(() => AzureBlobLeaseOptionsBuilder.GetOptions(o => o.RenewalCadence(TimeSpan.FromSeconds(-1))));
            Assert.DoesNotThrow(() => AzureBlobLeaseOptionsBuilder.GetOptions(o => o.RenewalCadence(TimeSpan.Zero)));

            Assert.Throws <ArgumentOutOfRangeException>(() => AzureBlobLeaseOptionsBuilder.GetOptions(o => o.RenewalCadence(TimeSpan.FromSeconds(30))));
            Assert.DoesNotThrow(() => AzureBlobLeaseOptionsBuilder.GetOptions(o => o.RenewalCadence(TimeSpan.FromSeconds(3))));
            Assert.DoesNotThrow(() => AzureBlobLeaseOptionsBuilder.GetOptions(o => o.RenewalCadence(Timeout.InfiniteTimeSpan)));

            Assert.Throws <ArgumentOutOfRangeException>(() => AzureBlobLeaseOptionsBuilder.GetOptions(o => o.Duration(TimeSpan.FromSeconds(60)).RenewalCadence(TimeSpan.FromSeconds(60.1))));
            Assert.DoesNotThrow(() => AzureBlobLeaseOptionsBuilder.GetOptions(o => o.Duration(TimeSpan.FromSeconds(60)).RenewalCadence(TimeSpan.FromSeconds(59.9))));

            Assert.DoesNotThrow(() => AzureBlobLeaseOptionsBuilder.GetOptions(o => o.Duration(Timeout.InfiniteTimeSpan).RenewalCadence(Timeout.InfiniteTimeSpan)));
        }
        public void TestValidatesBusyWaitSleepTime()
        {
            var builder = new AzureBlobLeaseOptionsBuilder();

            Assert.Throws <ArgumentOutOfRangeException>(() => builder.BusyWaitSleepTime(Timeout.InfiniteTimeSpan, TimeSpan.FromSeconds(1)));
            Assert.Throws <ArgumentOutOfRangeException>(() => builder.BusyWaitSleepTime(TimeSpan.FromSeconds(-1), TimeSpan.FromSeconds(1)));
            Assert.Throws <ArgumentOutOfRangeException>(() => builder.BusyWaitSleepTime(TimeSpan.MaxValue, TimeSpan.FromSeconds(1)));
            Assert.Throws <ArgumentOutOfRangeException>(() => builder.BusyWaitSleepTime(TimeSpan.FromSeconds(1), Timeout.InfiniteTimeSpan));
            Assert.Throws <ArgumentOutOfRangeException>(() => builder.BusyWaitSleepTime(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(-1)));
            Assert.Throws <ArgumentOutOfRangeException>(() => builder.BusyWaitSleepTime(TimeSpan.FromSeconds(1), TimeSpan.MaxValue));

            Assert.Throws <ArgumentOutOfRangeException>(() => builder.BusyWaitSleepTime(TimeSpan.FromSeconds(1.1), TimeSpan.FromSeconds(1)));

            Assert.DoesNotThrow(() => builder.BusyWaitSleepTime(TimeSpan.Zero, TimeSpan.Zero));
            Assert.DoesNotThrow(() => builder.BusyWaitSleepTime(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(4)));
        }
        public void TestDisablesAutoRenewalIfDurationIsInfinite()
        {
            var options = AzureBlobLeaseOptionsBuilder.GetOptions(b => b.Duration(Timeout.InfiniteTimeSpan));

            Assert.IsTrue(options.renewalCadence.IsInfinite);
        }