public async Task TestThatStorageExceptionsAreRetried()
        {
            var fetchUpdateSessionStatusStub = StubsUtils.Sequence <Func <Task <UpdateSessionStatus> > >()
                                               .Once(() => AsyncUtils.AsyncTaskThatThrows <UpdateSessionStatus>(new StorageException()))
                                               .Once(() => Task.FromResult(new UpdateSessionStatus(Enumerable.Empty <UpdateDomainEntity>(), null, null)));

            IUpdateSessionTable updateSessionTableStub = new StubIUpdateSessionTable()
                                                         .FetchUpdateSessionStatus((superClusterId) => fetchUpdateSessionStatusStub.Next())
                                                         .TryExecuteTransaction(transaction => Task.FromResult(true))
                                                         .DeleteInstanceEntity((superClusterId, instanceId) => Task.FromResult(true))
                                                         .GetActiveUpdateDomain((superClusterId) => Task.FromResult("1"));

            ContainerBuilder builder = AzureStorageUpdateSessionDiModule.RegisterTypes("superClusterId", "superClusterId",
                                                                                       "instanceId", "1", EmulatorConnectionString, Ttl);

            builder.RegisterInstance(updateSessionTableStub);
            IUpdateSessionManager updateSessionManager = new AzureStorageUpdateSessionDiModule(builder.Build())
                                                         .UpdateSessionManager;

            Assert.True(await updateSessionManager.TryStartUpdateSession());

            await updateSessionManager.EndUpdateSession();

            Assert.Equal(2, fetchUpdateSessionStatusStub.CallCount);
        }
예제 #2
0
        public static IYamsService Create(YamsConfig yamsConfig, string deploymentRepositoryStorageConnectionString,
                                          string updateSessionStorageConnectionString)
        {
            IUpdateSessionManager updateSessionManager = new AzureStorageUpdateSessionDiModule(
                yamsConfig.ClusterId,
                yamsConfig.InstanceId,
                yamsConfig.InstanceUpdateDomain,
                updateSessionStorageConnectionString,
                yamsConfig.UpdateSessionTtl).UpdateSessionManager;

            var deploymentRepository = BlobStorageDeploymentRepository.Create(deploymentRepositoryStorageConnectionString);

            return(new YamsDiModule(yamsConfig, deploymentRepository, deploymentRepository, updateSessionManager).YamsService);
        }