Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Unified Diff: chrome/browser/sync/glue/tab_node_pool_unittest.cc

Issue 16421003: [Sync] Add logic to reassociate tab nodes after restart. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nit. Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/glue/tab_node_pool_unittest.cc
diff --git a/chrome/browser/sync/glue/tab_node_pool_unittest.cc b/chrome/browser/sync/glue/tab_node_pool_unittest.cc
index 43d476829d8e8af510152921c25c5cffc83ff0af..b3ee12f8034221df00765f1665ab2355ca220503 100644
--- a/chrome/browser/sync/glue/tab_node_pool_unittest.cc
+++ b/chrome/browser/sync/glue/tab_node_pool_unittest.cc
@@ -8,80 +8,199 @@
namespace browser_sync {
+class SyncTabNodePoolTest : public testing::Test {
+ protected:
+ SyncTabNodePoolTest() : pool_(NULL) { pool_.SetMachineTag("tag"); }
+
+ size_t GetMaxUsedTabNodeId() const { return pool_.max_used_tab_node_id_; }
+
+ TabNodePool pool_;
+};
+
namespace {
-typedef testing::Test SyncTabNodePoolTest;
+TEST_F(SyncTabNodePoolTest, TabNodeIdIncreases) {
+ // max_used_tab_node_ always increases.
+ SessionID session_id;
+ session_id.set_id(1);
+ pool_.AddTabNode(4, session_id, 10);
+ EXPECT_EQ(10u, GetMaxUsedTabNodeId());
+ session_id.set_id(2);
+ pool_.AddTabNode(5, session_id, 1);
+ EXPECT_EQ(10u, GetMaxUsedTabNodeId());
+ session_id.set_id(3);
+ pool_.AddTabNode(6, session_id, 1000);
+ EXPECT_EQ(1000u, GetMaxUsedTabNodeId());
+ pool_.ReassociateTabNode(6, 500);
+ // Freeing a tab node does not change max_used_tab_node_id_.
+ pool_.FreeTabNode(4);
+ pool_.FreeUnusedTabNodes(std::set<int64>());
+ EXPECT_EQ(1000u, GetMaxUsedTabNodeId());
+ for (int i = 0; i < 3; ++i) {
+ pool_.AssociateTabNode(pool_.GetFreeTabNode(), i + 1);
+ EXPECT_EQ(1000u, GetMaxUsedTabNodeId());
+ }
+
+ EXPECT_EQ(1000u, GetMaxUsedTabNodeId());
+}
+
+TEST_F(SyncTabNodePoolTest, OldTabNodesAddAndRemove) {
+ // VerifyOldTabNodes are added.
+ // sync_id =4, tab_node_id = 1, tab_id = 1
+ SessionID session_id;
+ session_id.set_id(1);
+ pool_.AddTabNode(4, session_id, 1);
+ // sync_id = 5, tab_node_id = 5, tab_id = 2
+ session_id.set_id(2);
+ pool_.AddTabNode(5, session_id, 2);
+ EXPECT_EQ(2u, pool_.Capacity());
+ EXPECT_TRUE(pool_.Empty());
+ EXPECT_TRUE(pool_.ReassociateTabNode(4, 2));
+ EXPECT_TRUE(pool_.ReassociateTabNode(5, 1));
+ EXPECT_TRUE(pool_.Empty());
+ // Check free unused tab nodes returns the node to free node pool_.
+ std::set<int64> used_sync_ids;
+ used_sync_ids.insert(5);
+ pool_.FreeUnusedTabNodes(used_sync_ids);
+ // 4 should be returned to free node pool_.
+ EXPECT_EQ(2u, pool_.Capacity());
+ EXPECT_FALSE(pool_.Empty());
+ // 5 should still be in the associated nodes.
+ EXPECT_FALSE(pool_.Full());
+ pool_.FreeTabNode(5);
+ // 5 should be returned to free nodes pool and pool should be full.
+ EXPECT_TRUE(pool_.Full());
+ EXPECT_EQ(4, pool_.GetFreeTabNode());
+ pool_.AssociateTabNode(4, 1);
+ EXPECT_EQ(5, pool_.GetFreeTabNode());
+ pool_.AssociateTabNode(5, 1);
+ EXPECT_TRUE(pool_.Empty());
+ EXPECT_FALSE(pool_.Full());
+}
+
+TEST_F(SyncTabNodePoolTest, OldTabNodesReassociation) {
+ // VerifyOldTabNodes are reassociated correctly.
+ // sync_id =4, tab_node_id = 1, tab_id = 1
+ SessionID session_id;
+ session_id.set_id(1);
+ pool_.AddTabNode(4, session_id, 1);
+ // sync_id = 5, tab_node_id = 2, tab_id = 2
+ session_id.set_id(2);
+ pool_.AddTabNode(5, session_id, 2);
+ // sync_id = 5, tab_node_id = 3, tab_id =3
+ session_id.set_id(3);
+ pool_.AddTabNode(6, session_id, 3);
+ EXPECT_EQ(3u, pool_.Capacity());
+ EXPECT_TRUE(pool_.Empty());
+ // Free 5 and 6.
+ pool_.FreeTabNode(5);
+ pool_.FreeTabNode(6);
+ // 5 and 6 nodes should not get reassociated.
+ EXPECT_TRUE(pool_.ReassociateTabNode(4, 5));
+ EXPECT_FALSE(pool_.ReassociateTabNode(5, 6));
+ EXPECT_FALSE(pool_.ReassociateTabNode(6, 7));
+ // Free node pool should have 5 and 6.
+ EXPECT_FALSE(pool_.Empty());
+ EXPECT_EQ(3u, pool_.Capacity());
+
+ // Free all nodes
+ pool_.FreeUnusedTabNodes(std::set<int64>());
+ EXPECT_TRUE(pool_.Full());
+ std::set<int64> free_sync_ids;
+ for (int i = 0; i < 3; ++i) {
+ free_sync_ids.insert(pool_.GetFreeTabNode());
+ // GetFreeTabNode will return the same value till the node is
+ // reassociated.
+ pool_.AssociateTabNode(pool_.GetFreeTabNode(), i + 1);
+ }
+
+ EXPECT_TRUE(pool_.Empty());
+ EXPECT_EQ(3u, free_sync_ids.size());
+ EXPECT_EQ(1u, free_sync_ids.count(4));
+ EXPECT_EQ(1u, free_sync_ids.count(5));
+ EXPECT_EQ(1u, free_sync_ids.count(6));
+}
TEST_F(SyncTabNodePoolTest, Init) {
- TabNodePool pool(NULL);
- pool.set_machine_tag("tag");
- ASSERT_TRUE(pool.empty());
- ASSERT_TRUE(pool.full());
+ EXPECT_TRUE(pool_.Empty());
+ EXPECT_TRUE(pool_.Full());
}
TEST_F(SyncTabNodePoolTest, AddGet) {
- TabNodePool pool(NULL);
- pool.set_machine_tag("tag");
-
- pool.AddTabNode(5);
- pool.AddTabNode(10);
- ASSERT_FALSE(pool.empty());
- ASSERT_TRUE(pool.full());
-
- ASSERT_EQ(2U, pool.capacity());
- ASSERT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab.
- ASSERT_FALSE(pool.empty());
- ASSERT_FALSE(pool.full());
- ASSERT_EQ(2U, pool.capacity());
- ASSERT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab.
+ SessionID session_id;
+ session_id.set_id(1);
+ pool_.AddTabNode(5, session_id, 1);
+ session_id.set_id(2);
+ pool_.AddTabNode(10, session_id, 2);
+ pool_.FreeUnusedTabNodes(std::set<int64>());
+ EXPECT_FALSE(pool_.Empty());
+ EXPECT_TRUE(pool_.Full());
+
+ EXPECT_EQ(2U, pool_.Capacity());
+ EXPECT_EQ(5, pool_.GetFreeTabNode());
+ pool_.AssociateTabNode(5, 1);
+ EXPECT_FALSE(pool_.Empty());
+ EXPECT_FALSE(pool_.Full());
+ EXPECT_EQ(2U, pool_.Capacity());
+ // 5 is now used, should return 10.
+ EXPECT_EQ(10, pool_.GetFreeTabNode());
}
TEST_F(SyncTabNodePoolTest, All) {
- TabNodePool pool(NULL);
- pool.set_machine_tag("tag");
- ASSERT_TRUE(pool.empty());
- ASSERT_TRUE(pool.full());
- ASSERT_EQ(0U, pool.capacity());
- pool.AddTabNode(5);
- pool.AddTabNode(10);
- ASSERT_FALSE(pool.empty());
- ASSERT_TRUE(pool.full());
- ASSERT_EQ(2U, pool.capacity());
- ASSERT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab.
- ASSERT_FALSE(pool.empty());
- ASSERT_FALSE(pool.full());
- ASSERT_EQ(2U, pool.capacity());
- ASSERT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab.
- ASSERT_TRUE(pool.empty());
- ASSERT_FALSE(pool.full());
- ASSERT_EQ(2U, pool.capacity());
+ EXPECT_TRUE(pool_.Empty());
+ EXPECT_TRUE(pool_.Full());
+ EXPECT_EQ(0U, pool_.Capacity());
+ SessionID session_id;
+ session_id.set_id(1);
+ pool_.AddTabNode(5, session_id, 1);
+ session_id.set_id(2);
+ pool_.AddTabNode(10, session_id, 2);
+ // Free added nodes.
+ pool_.FreeUnusedTabNodes(std::set<int64>());
+ EXPECT_FALSE(pool_.Empty());
+ EXPECT_TRUE(pool_.Full());
+ EXPECT_EQ(2U, pool_.Capacity());
+ // GetFreeTabNode returns the lowest numbered free node.
+ EXPECT_EQ(5, pool_.GetFreeTabNode());
+ EXPECT_FALSE(pool_.Empty());
+ EXPECT_TRUE(pool_.Full());
+ EXPECT_EQ(2U, pool_.Capacity());
+ // Associate 5, next free node should be 10.
+ pool_.AssociateTabNode(5, 1);
+ EXPECT_EQ(10, pool_.GetFreeTabNode());
+ pool_.AssociateTabNode(10, 2);
+ EXPECT_TRUE(pool_.Empty());
+ EXPECT_FALSE(pool_.Full());
+ EXPECT_EQ(2U, pool_.Capacity());
// Release them in reverse order.
- pool.FreeTabNode(10);
- pool.FreeTabNode(5);
- ASSERT_EQ(2U, pool.capacity());
- ASSERT_FALSE(pool.empty());
- ASSERT_TRUE(pool.full());
- ASSERT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab.
- ASSERT_FALSE(pool.empty());
- ASSERT_FALSE(pool.full());
- ASSERT_EQ(2U, pool.capacity());
- ASSERT_FALSE(pool.empty());
- ASSERT_FALSE(pool.full());
- ASSERT_EQ(2U, pool.capacity());
- ASSERT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab.
- ASSERT_TRUE(pool.empty());
- ASSERT_FALSE(pool.full());
- ASSERT_EQ(2U, pool.capacity());
+ pool_.FreeTabNode(10);
+ pool_.FreeTabNode(5);
+ EXPECT_EQ(2U, pool_.Capacity());
+ EXPECT_FALSE(pool_.Empty());
+ EXPECT_TRUE(pool_.Full());
+ EXPECT_EQ(5, pool_.GetFreeTabNode());
+ EXPECT_FALSE(pool_.Empty());
+ EXPECT_TRUE(pool_.Full());
+ EXPECT_EQ(2U, pool_.Capacity());
+ EXPECT_FALSE(pool_.Empty());
+ EXPECT_TRUE(pool_.Full());
+ pool_.AssociateTabNode(5, 1);
+ EXPECT_EQ(2U, pool_.Capacity());
+ EXPECT_EQ(10, pool_.GetFreeTabNode());
+ pool_.AssociateTabNode(10, 2);
+ EXPECT_TRUE(pool_.Empty());
+ EXPECT_FALSE(pool_.Full());
+ EXPECT_EQ(2U, pool_.Capacity());
// Release them again.
- pool.FreeTabNode(10);
- pool.FreeTabNode(5);
- ASSERT_FALSE(pool.empty());
- ASSERT_TRUE(pool.full());
- ASSERT_EQ(2U, pool.capacity());
- pool.clear();
- ASSERT_TRUE(pool.empty());
- ASSERT_TRUE(pool.full());
- ASSERT_EQ(0U, pool.capacity());
+ pool_.FreeTabNode(10);
+ pool_.FreeTabNode(5);
+ EXPECT_FALSE(pool_.Empty());
+ EXPECT_TRUE(pool_.Full());
+ EXPECT_EQ(2U, pool_.Capacity());
+ pool_.Clear();
+ EXPECT_TRUE(pool_.Empty());
+ EXPECT_TRUE(pool_.Full());
+ EXPECT_EQ(0U, pool_.Capacity());
}
} // namespace
« no previous file with comments | « chrome/browser/sync/glue/tab_node_pool.cc ('k') | chrome/browser/sync/profile_sync_service_session_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698