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)); }
// 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(); }