Index: content/browser/notifications/notification_database_unittest.cc |
diff --git a/content/browser/notifications/notification_database_unittest.cc b/content/browser/notifications/notification_database_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..69853a0334fd921a87d7f8e9433540b22ab7be69 |
--- /dev/null |
+++ b/content/browser/notifications/notification_database_unittest.cc |
@@ -0,0 +1,104 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "content/browser/notifications/notification_database.h" |
+ |
+#include "base/files/scoped_temp_dir.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace content { |
+ |
+class NotificationDatabaseTest : public ::testing::Test { |
+ protected: |
+ // Creates a new NotificationDatabase instance in memory. |
+ NotificationDatabase* CreateDatabaseInMemory() { |
+ return new NotificationDatabase(base::FilePath()); |
+ } |
+ |
+ // Creates a new NotificationDatabase instance in |path|. |
+ NotificationDatabase* CreateDatabaseOnFileSystem( |
+ const base::FilePath& path) { |
+ return new NotificationDatabase(path); |
+ } |
+ |
+ // Returns if |database| has been opened. |
+ bool IsDatabaseOpen(NotificationDatabase* database) { |
+ return database->IsOpen(); |
+ } |
+ |
+ // Returns if |database| is an in-memory only database. |
+ bool IsInMemoryDatabase(NotificationDatabase* database) { |
+ return database->IsInMemoryDatabase(); |
+ } |
+}; |
+ |
+TEST_F(NotificationDatabaseTest, OpenCloseMemory) { |
+ scoped_ptr<NotificationDatabase> database(CreateDatabaseInMemory()); |
+ |
+ // Should return false because the database does not exist in memory. |
+ EXPECT_EQ(NotificationDatabase::STATUS_ERROR_NOT_FOUND, |
+ database->Open(false /* create_if_missing */)); |
+ |
+ // Should return true, indicating that the database could be created. |
+ EXPECT_EQ(NotificationDatabase::STATUS_OK, |
+ database->Open(true /* create_if_missing */)); |
+ |
+ EXPECT_TRUE(IsDatabaseOpen(database.get())); |
+ EXPECT_TRUE(IsInMemoryDatabase(database.get())); |
+ |
+ // Verify that in-memory databases do not persist when being re-created. |
+ database.reset(CreateDatabaseInMemory()); |
+ |
+ EXPECT_EQ(NotificationDatabase::STATUS_ERROR_NOT_FOUND, |
+ database->Open(false /* create_if_missing */)); |
+} |
+ |
+TEST_F(NotificationDatabaseTest, OpenCloseFileSystem) { |
+ base::ScopedTempDir database_dir; |
+ ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
+ |
+ scoped_ptr<NotificationDatabase> database( |
+ CreateDatabaseOnFileSystem(database_dir.path())); |
+ |
+ // Should return false because the database does not exist on the file system. |
+ EXPECT_EQ(NotificationDatabase::STATUS_ERROR_NOT_FOUND, |
+ database->Open(false /* create_if_missing */)); |
+ |
+ // Should return true, indicating that the database could be created. |
+ EXPECT_EQ(NotificationDatabase::STATUS_OK, |
+ database->Open(true /* create_if_missing */)); |
+ |
+ EXPECT_TRUE(IsDatabaseOpen(database.get())); |
+ EXPECT_FALSE(IsInMemoryDatabase(database.get())); |
+ |
+ // Close the database, and re-open it without attempting to create it because |
+ // the files on the file system should still exist as expected. |
+ database.reset(CreateDatabaseOnFileSystem(database_dir.path())); |
+ EXPECT_EQ(NotificationDatabase::STATUS_OK, |
+ database->Open(false /* create_if_missing */)); |
+} |
+ |
+TEST_F(NotificationDatabaseTest, DestroyDatabase) { |
+ base::ScopedTempDir database_dir; |
+ ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
+ |
+ scoped_ptr<NotificationDatabase> database( |
+ CreateDatabaseOnFileSystem(database_dir.path())); |
+ |
+ EXPECT_EQ(NotificationDatabase::STATUS_OK, |
+ database->Open(true /* create_if_missing */)); |
+ EXPECT_TRUE(IsDatabaseOpen(database.get())); |
+ |
+ // Destroy the database. This will immediately close it as well. |
+ ASSERT_EQ(NotificationDatabase::STATUS_OK, database->Destroy()); |
+ EXPECT_FALSE(IsDatabaseOpen(database.get())); |
+ |
+ // Try to re-open the database (but not re-create it). This should fail as |
+ // the files associated with the database should have been blown away. |
+ database.reset(CreateDatabaseOnFileSystem(database_dir.path())); |
+ EXPECT_EQ(NotificationDatabase::STATUS_ERROR_NOT_FOUND, |
+ database->Open(false /* create_if_missing */)); |
+} |
+ |
+} // namespace content |