public async Task KnownExceptionIsThrownAsIs() { var mockStorageAdapter = Mock.Of <IStorageAdapter>(); using (var storage = new Microsoft.AppCenter.Storage.Storage(mockStorageAdapter)) { var exception = new StorageException(); Mock.Get(mockStorageAdapter).Setup(adapter => adapter.CountAsync(It.IsAny <Expression <Func <LogEntry, bool> > >())).Throws(exception); Mock.Get(mockStorageAdapter).Setup(adapter => adapter.InsertAsync(It.IsAny <LogEntry>())).Throws(exception); try { await storage.PutLog(StorageTestChannelName, TestLog.CreateTestLog()); Assert.Fail("Should have thrown exception"); } catch (Exception e) { Assert.AreSame(exception, e); } try { await storage.CountLogsAsync(StorageTestChannelName); Assert.Fail("Should have thrown exception"); } catch (Exception e) { Assert.AreSame(exception, e); } } }
public async Task SetMaxStorageSize() { var mockStorageAdapter = Mock.Of<IStorageAdapter>(); using (var storage = new Microsoft.AppCenter.Storage.Storage(mockStorageAdapter, _databasePath)) { var dbSize = 2 * 1024 * 1024; _ = await storage.SetMaxStorageSizeAsync(dbSize); Mock.Get(mockStorageAdapter).Verify(adapter => adapter.SetMaxStorageSize(dbSize), Times.Once()); } }
public void TestDatabaseIsInitialized() { var mockStorageAdapter = Mock.Of <IStorageAdapter>(); var storage = new Microsoft.AppCenter.Storage.Storage(mockStorageAdapter); storage.WaitOperationsAsync(TimeSpan.FromSeconds(10)).Wait(); // Verify database is initialized as a result of calling constructor. Mock.Get(mockStorageAdapter).Verify(adapter => adapter.CreateTableAsync <Microsoft.AppCenter.Storage.Storage.LogEntry>()); Mock.Get(mockStorageAdapter).Verify(adapter => adapter.InitializeStorageAsync()); }
public async Task DoNotRecreateCorruptedDatabaseOnNotCorruptException() { var mockStorageAdapter = Mock.Of<IStorageAdapter>(); using (var storage = new Microsoft.AppCenter.Storage.Storage(mockStorageAdapter, _databasePath)) { var exception = new Exception("Something else"); Mock.Get(mockStorageAdapter).Setup(adapter => adapter.Insert(It.IsAny<string>(), It.IsAny<string[]>(), It.IsAny<List<object[]>>())).Throws(exception); await Assert.ThrowsExceptionAsync<StorageException>(() => storage.PutLog(StorageTestChannelName, TestLog.CreateTestLog())); Mock.Get(mockStorageAdapter).Verify(adapter => adapter.Dispose(), Times.Never()); Mock.Get(mockStorageAdapter).Verify(adapter => adapter.Initialize(It.IsAny<string>()), Times.Once()); } }
public void UnknownExceptionIsConvertedToStorageException() { var mockStorageAdapter = Mock.Of<IStorageAdapter>(); using (var storage = new Microsoft.AppCenter.Storage.Storage(mockStorageAdapter, _databasePath)) { var exception = new Exception(); Mock.Get(mockStorageAdapter).Setup(adapter => adapter.Count(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>())).Throws(exception); Mock.Get(mockStorageAdapter).Setup(adapter => adapter.Insert(It.IsAny<string>(), It.IsAny<string[]>(), It.IsAny<IList<object[]>>())).Throws(exception); Assert.ThrowsException<StorageException>(() => storage.PutLog(StorageTestChannelName, TestLog.CreateTestLog()).RunNotAsync()); Assert.ThrowsException<StorageException>(() => storage.CountLogsAsync(StorageTestChannelName).RunNotAsync()); } }
public async Task UnknownExceptionIsConvertedToStorageException() { var mockStorageAdapter = Mock.Of <IStorageAdapter>(); using (var storage = new Microsoft.AppCenter.Storage.Storage(mockStorageAdapter)) { var exception = new Exception(); Mock.Get(mockStorageAdapter).Setup(adapter => adapter.CountAsync(It.IsAny <Expression <Func <LogEntry, bool> > >())).Throws(exception); Mock.Get(mockStorageAdapter).Setup(adapter => adapter.InsertAsync(It.IsAny <LogEntry>())).Throws(exception); await Assert.ThrowsExceptionAsync <StorageException>(() => storage.PutLog(StorageTestChannelName, TestLog.CreateTestLog())); await Assert.ThrowsExceptionAsync <StorageException>(() => storage.CountLogsAsync(StorageTestChannelName)); } }
public async Task DontRecreateCorruptedDatabaseOnNotCorruptException() { var mockStorageAdapter = Mock.Of <IStorageAdapter>(); using (var storage = new Microsoft.AppCenter.Storage.Storage(mockStorageAdapter)) { var exception = new Exception("Something else"); Mock.Get(mockStorageAdapter).Setup(adapter => adapter.InsertAsync(It.IsAny <LogEntry>())).Throws(exception); await Assert.ThrowsExceptionAsync <StorageException>(() => storage.PutLog(StorageTestChannelName, TestLog.CreateTestLog())); Mock.Get(mockStorageAdapter).Verify(adapter => adapter.DeleteDatabaseFileAsync(), Times.Never()); Mock.Get(mockStorageAdapter).Verify(adapter => adapter.InitializeStorageAsync(), Times.Once()); } }
public async Task RecreateCorruptedDatabaseOnInnerCorruptException() { var mockStorageAdapter = Mock.Of <IStorageAdapter>(); using (var storage = new Microsoft.AppCenter.Storage.Storage(mockStorageAdapter)) { var exception = new StorageException(SQLiteException.New(SQLite3.Result.Corrupt, "Corrupt")); Mock.Get(mockStorageAdapter).Setup(adapter => adapter.InsertAsync(It.IsAny <LogEntry>())).Throws(exception); await Assert.ThrowsExceptionAsync <StorageException>(() => storage.PutLog(StorageTestChannelName, TestLog.CreateTestLog())); Mock.Get(mockStorageAdapter).Verify(adapter => adapter.DeleteDatabaseFileAsync()); Mock.Get(mockStorageAdapter).Verify(adapter => adapter.InitializeStorageAsync(), Times.Exactly(2)); } }
public async Task RecreateCorruptedDatabaseOnInnerCorruptException() { var mockStorageAdapter = Mock.Of<IStorageAdapter>(); using (var storage = new Microsoft.AppCenter.Storage.Storage(mockStorageAdapter, _databasePath)) { var exception = new StorageCorruptedException("Mock exception"); var testLog = TestLog.CreateTestLog(); var testLogString = LogSerializer.Serialize(testLog); var testLogSize = Encoding.UTF8.GetBytes(testLogString).Length; Mock.Get(mockStorageAdapter).Setup(adapter => adapter.GetMaxStorageSize()).Returns(testLogSize + 1); Mock.Get(mockStorageAdapter).Setup(adapter => adapter.Insert(TableName, It.IsAny<string[]>(), It.IsAny<List<object[]>>())).Throws(exception); await Assert.ThrowsExceptionAsync<StorageCorruptedException>(() => storage.PutLog(StorageTestChannelName, testLog)); Mock.Get(mockStorageAdapter).Verify(adapter => adapter.Dispose()); Mock.Get(mockStorageAdapter).Verify(adapter => adapter.Initialize(It.IsAny<string>()), Times.Exactly(2)); } }
public void FailToGetALog() { // Prepare data. StorageAdapter adapter = new StorageAdapter(); adapter.Initialize(_databasePath); var tables = new[] { ColumnIdName, ColumnChannelName, ColumnLogName }; var types = new[] { "INTEGER PRIMARY KEY AUTOINCREMENT", "TEXT NOT NULL", "TEXT NOT NULL" }; adapter.CreateTable(TableName, tables, types); adapter.Insert(TableName, tables, new List<object[]> { new object[] { 100, StorageTestChannelName, "good luck deserializing me!" } }); var storage = new Microsoft.AppCenter.Storage.Storage(adapter, _databasePath); var logs = new List<Log>(); var batchId = storage.GetLogsAsync(StorageTestChannelName, 4, logs).RunNotAsync(); var count = storage.CountLogsAsync(StorageTestChannelName).RunNotAsync(); Assert.IsNull(batchId); Assert.AreEqual(0, logs.Count); Assert.AreEqual(0, count); }