public async Task HasLeaseChanged_WhenLeaseIsAcquiredAndStateChanges_IsFired() { string hostId = Guid.NewGuid().ToString(); string instanceId = Guid.NewGuid().ToString(); var traceWriter = new TestTraceWriter(TraceLevel.Verbose); var resetEvent = new ManualResetEventSlim(); string connectionString = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.Storage); ICloudBlob blob = await GetLockBlobAsync(connectionString, hostId); // Acquire a lease on the host lock blob string leaseId = await blob.AcquireLeaseAsync(TimeSpan.FromSeconds(15)); BlobLeaseManager manager = null; try { manager = await BlobLeaseManager.CreateAsync(connectionString, TimeSpan.FromSeconds(15), hostId, instanceId, traceWriter); manager.HasLeaseChanged += (s, a) => resetEvent.Set(); } finally { await blob.ReleaseLeaseAsync(new AccessCondition { LeaseId = leaseId }); } resetEvent.Wait(TimeSpan.FromSeconds(15)); bool hasLease = manager.HasLease; string actualLeaseId = manager.LeaseId; manager.Dispose(); Assert.True(resetEvent.IsSet); Assert.True(hasLease, $"{nameof(BlobLeaseManager.HasLease)} was not correctly set to 'true' when lease was acquired."); Assert.Equal(instanceId, actualLeaseId); await ClearLeaseBlob(hostId); }