示例#1
0
        public async Task TestInitialize()
        {
            testConversation = new Conversation(new List <string> {
                Guid.NewGuid().ToString(), Guid.NewGuid().ToString()
            });
            testMessage = new Message("Hola", testConversation.Participants[1]);

            testConversation1 = new Conversation(new List <string> {
                testConversation.Participants[0], Guid.NewGuid().ToString()
            });
            testConversation2 = new Conversation(new List <string> {
                Guid.NewGuid().ToString(), Guid.NewGuid().ToString()
            });
            testConversation3 = new Conversation(new List <string>
            {
                testConversation.Participants[0], testConversation.Participants[1]
            });
            testConversation4 = new Conversation(new List <string> {
                testConversation.Participants[0], Guid.NewGuid().ToString()
            });
            testMessage1 = new Message("Hi", testConversation.Participants[0]);

            var messageTable           = new AzureCloudTable(connectionString, "TestMessageTable");
            var userConversationsTable = new AzureCloudTable(connectionString, "TestUserConversationsTable");
            await messageTable.CreateIfNotExistsAsync();

            await userConversationsTable.CreateIfNotExistsAsync();

            store        = new AzureConversationStore(messageTable, userConversationsTable);
            testMessage2 = new Message("Hello", testConversation.Participants[1]);
        }
        public void TestInitialize()
        {
            conversationTableMock = new Mock <ICloudTable>();
            messageTableMock      = new Mock <ICloudTable>();
            store = new AzureConversationStore(messageTableMock.Object, conversationTableMock.Object);

            conversationTableMock.Setup(m => m.ExecuteBatchAsync(It.IsAny <TableBatchOperation>()))
            .ThrowsAsync(new StorageException(new RequestResult {
                HttpStatusCode = 503
            }, "Storage is down", null));
            conversationTableMock.Setup(m =>
                                        m.ExecuteQuerySegmentedAsync(It.IsAny <TableQuery <UserConversationsTimeRowEntity> >(),
                                                                     It.IsAny <TableContinuationToken>()))
            .ThrowsAsync(
                new StorageException(new RequestResult {
                HttpStatusCode = 503
            }, "Storage is down", null));

            messageTableMock.Setup(m => m.ExecuteAsync(It.IsAny <TableOperation>()))
            .ThrowsAsync(new StorageException(new RequestResult {
                HttpStatusCode = 503
            }, "Storage is down", null));

            messageTableMock.Setup(m => m.ExecuteQuerySegmentedAsync(It.IsAny <TableQuery <MessagesTableEntity> >(), It.IsAny <TableContinuationToken>()))
            .ThrowsAsync(new StorageException(new RequestResult {
                HttpStatusCode = 503
            }, "Storage is down", null));
        }
示例#3
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddOptions();
            var azureStorageSettings    = GetSettings <AzureStorageSettings>(Configuration);
            var azureServiceBusSettings = GetSettings <AzureServiceBusSettings>(Configuration);
            var resiliencyParameters    = GetSettings <ResiliencyParameters>(Configuration);

            var profileCloudTable           = new AzureCloudTable(azureStorageSettings.ConnectionString, azureStorageSettings.ProfilesTableName);
            var profileStore                = new AzureTableProfileStore(profileCloudTable);
            var messagesCloudTable          = new AzureCloudTable(azureStorageSettings.ConnectionString, azureStorageSettings.MessagesTable);
            var userConversationsCloudTable = new AzureCloudTable(azureStorageSettings.ConnectionString, azureStorageSettings.UserConversationsTable);
            var conversationStore           = new AzureConversationStore(messagesCloudTable, userConversationsCloudTable);

            services.AddSingleton <IQueueClient>(new QueueClient(azureServiceBusSettings.ConnectionString,
                                                                 azureServiceBusSettings.QueueName));



            services.AddSingleton <INotificationServiceClient>(context =>
                                                               new NotificationClientResiliencyDecorator(
                                                                   new NotificationServiceBusClient(context.GetRequiredService <IQueueClient>()),
                                                                   new PollyResiliencyPolicy <Exception>(resiliencyParameters)));

            services.AddSingleton <IMetricsClient>(context =>
            {
                var metricsClientFactory = new MetricsClientFactory(context.GetRequiredService <ILoggerFactory>(),
                                                                    TimeSpan.FromSeconds(15));
                return(metricsClientFactory.CreateMetricsClient <LoggerMetricsClient>());
            });

            services.AddSingleton <IProfileStore>(context =>
                                                  new ProfileStoreResiliencyDecorator(
                                                      new ProfileStoreMetricDecorator(profileStore, context.GetRequiredService <IMetricsClient>()),
                                                      new PollyResiliencyPolicy <StorageErrorException>(resiliencyParameters)));

            services.AddSingleton <IConversationStore>(context =>
                                                       new ConversationStoreResiliencyDecorator(
                                                           new ConversationStoreMetricDecorator(conversationStore, context.GetRequiredService <IMetricsClient>()),
                                                           new PollyResiliencyPolicy <StorageUnavailableException>(resiliencyParameters)));

            services.AddLogging();
            services.AddMvc();
        }