예제 #1
0
        public async Task TestRemoveInstanceId()
        {
            IUpdateBlob updateBlob = await _updateBlobFactory.TryLockUpdateBlob("appId");

            updateBlob.SetUpdateDomain("1");
            updateBlob.AddInstance("instanceId1");
            updateBlob.AddInstance("instanceId2");
            await updateBlob.FlushAndRelease();

            updateBlob = await _updateBlobFactory.TryLockUpdateBlob("appId");
            updateBlob.RemoveInstance("instanceId1");
            await updateBlob.FlushAndRelease();

            await updateBlob.TryLock();
            Assert.Equal("1", updateBlob.GetUpdateDomain());
            AssertUtils.ContainsSameElementsInAnyOrder(new[] { "instanceId2" }, updateBlob.GetInstanceIds());
            await updateBlob.Release();

            updateBlob = await _updateBlobFactory.TryLockUpdateBlob("appId");
            updateBlob.RemoveInstance("instanceId2");
            await updateBlob.FlushAndRelease();

            await updateBlob.TryLock();
            Assert.True(string.IsNullOrEmpty(updateBlob.GetUpdateDomain()));
            Assert.Empty(updateBlob.GetInstanceIds());
        }
예제 #2
0
        public async Task <bool> TryStartUpdateSession(string applicationId)
        {
            using (IUpdateBlob updateBlob = await _updateBlobFactory.TryLockUpdateBlob(applicationId))
            {
                string updateDomain = updateBlob.GetUpdateDomain();

                if (string.IsNullOrEmpty(updateDomain) || _instanceUpdateDomain == updateDomain)
                {
                    updateDomain = _instanceUpdateDomain;
                    Trace.TraceInformation(
                        $"Instance {_instanceId} will attempt to start update session for " +
                        $"ApplicationId = {applicationId}, UpdateDomain = {updateDomain}");

                    updateBlob.SetUpdateDomain(updateDomain);
                    updateBlob.AddInstance(_instanceId);
                    await updateBlob.FlushAndRelease();

                    Trace.TraceInformation(
                        $"Instance {_instanceId} successfully started the update session for " +
                        $"ApplicationId = {applicationId}, UpdateDomain = {updateDomain}");
                    return(true);
                }
            }
            return(false);
        }
예제 #3
0
        public async Task TestThatDisposeReleasesTheLease()
        {
            IUpdateBlob updateBlob = await _updateBlobFactory.TryLockUpdateBlob("appId");

            updateBlob.Dispose();
            Assert.NotNull(await _updateBlobFactory.TryLockUpdateBlob("appId"));
        }
예제 #4
0
        public async Task TestFlushWhenInstanceAreSetButNoUpdateDomain()
        {
            IUpdateBlob updateBlob = await _updateBlobFactory.TryLockUpdateBlob("appId");

            updateBlob.AddInstance("instanceId1");
            await Assert.ThrowsAsync <InvalidOperationException>(async() => await updateBlob.FlushAndRelease());
        }
예제 #5
0
 public async Task TestThatUpdateBlobMustBeLockedBeforeAnyOperation()
 {
     IUpdateBlob updateBlob = await _updateBlobFactory.TryLockUpdateBlob("appId");
     await updateBlob.FlushAndRelease();
     Assert.Throws<InvalidOperationException>(() => updateBlob.GetUpdateDomain());
     Assert.Throws<InvalidOperationException>(() => updateBlob.GetInstanceIds());
     Assert.Throws<InvalidOperationException>(() => updateBlob.AddInstance("1"));
     Assert.Throws<InvalidOperationException>(() => updateBlob.RemoveInstance("1"));
     Assert.Throws<InvalidOperationException>(() => updateBlob.SetUpdateDomain("1"));
     await Assert.ThrowsAsync<InvalidOperationException>(async () => await updateBlob.FlushAndRelease());
 }
예제 #6
0
        public async Task TestAddingMultipleInstanceIds()
        {
            IUpdateBlob updateBlob = await _updateBlobFactory.TryLockUpdateBlob("appId");

            updateBlob.SetUpdateDomain("1");
            updateBlob.AddInstance("instanceId1");
            updateBlob.AddInstance("instanceId2");
            await updateBlob.FlushAndRelease();

            await updateBlob.TryLock();
            Assert.Equal("1", updateBlob.GetUpdateDomain());
            AssertUtils.ContainsSameElementsInAnyOrder(new[] { "instanceId1", "instanceId2" }, updateBlob.GetInstanceIds());
        }
예제 #7
0
        public async Task TestSetDataWhenBlobIsEmpty()
        {
            IUpdateBlob updateBlob = await _updateBlobFactory.TryLockUpdateBlob("appId");

            const string instanceId = "instanceId";
            const string updateDomain = "1";
            updateBlob.SetUpdateDomain(updateDomain);
            updateBlob.AddInstance(instanceId);
            await updateBlob.FlushAndRelease();

            await updateBlob.TryLock();
            Assert.Equal(updateDomain, updateBlob.GetUpdateDomain());
            AssertUtils.ContainsSameElementsInAnyOrder(new[] { instanceId }, updateBlob.GetInstanceIds());
        }
예제 #8
0
        public async Task EndUpdateSession(string applicationId)
        {
            using (IUpdateBlob updateBlob = await _updateBlobFactory.TryLockUpdateBlob(applicationId))
            {
                Trace.TraceInformation(
                    $"Instance {_instanceId} Will attempt to end the update session for " +
                    $"ApplicationId = {applicationId}, " +
                    $"UpdateDomain = {_instanceUpdateDomain}");

                updateBlob.RemoveInstance(_instanceId);
                await updateBlob.FlushAndRelease();

                Trace.TraceInformation(
                    $"Instance {_instanceId} successfully ended the update session for " +
                    $"ApplicationId = {applicationId}, " +
                    $"UpdateDomain = {_instanceUpdateDomain}");
            }
        }
예제 #9
0
 public async Task TestGetInstanceIdsOnEmptyBlob()
 {
     IUpdateBlob updateBlob = await _updateBlobFactory.TryLockUpdateBlob("appId");
     Assert.Empty(updateBlob.GetInstanceIds());
 }
예제 #10
0
 public async Task TestGetUpdateDomainOnEmptyBlob()
 {
     IUpdateBlob updateBlob = await _updateBlobFactory.TryLockUpdateBlob("appId");
     Assert.True(string.IsNullOrEmpty(updateBlob.GetUpdateDomain()));
 }