Example #1
0
        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);
                }
            }
        }
Example #2
0
 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());
        }
Example #4
0
 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());
     }
 }
Example #5
0
 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());
     }
 }
Example #6
0
        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));
            }
        }
Example #7
0
        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());
            }
        }
Example #8
0
        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));
            }
        }
Example #9
0
 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));
     }
 }
Example #10
0
 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);
 }