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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync/glue/tab_node_pool.h" 5 #include "chrome/browser/sync/glue/tab_node_pool.h"
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 namespace browser_sync { 9 namespace browser_sync {
10 10
11 class SyncTabNodePoolTest : public testing::Test {
12 protected:
13 SyncTabNodePoolTest() : pool_(NULL) { pool_.SetMachineTag("tag"); }
14
15 size_t GetMaxUsedTabNodeId() const { return pool_.max_used_tab_node_id_; }
16
17 TabNodePool pool_;
18 };
19
11 namespace { 20 namespace {
12 21
13 typedef testing::Test SyncTabNodePoolTest; 22 TEST_F(SyncTabNodePoolTest, TabNodeIdIncreases) {
23 // max_used_tab_node_ always increases.
24 SessionID session_id;
25 session_id.set_id(1);
26 pool_.AddTabNode(4, session_id, 10);
27 EXPECT_EQ(10u, GetMaxUsedTabNodeId());
28 session_id.set_id(2);
29 pool_.AddTabNode(5, session_id, 1);
30 EXPECT_EQ(10u, GetMaxUsedTabNodeId());
31 session_id.set_id(3);
32 pool_.AddTabNode(6, session_id, 1000);
33 EXPECT_EQ(1000u, GetMaxUsedTabNodeId());
34 pool_.ReassociateTabNode(6, 500);
35 // Freeing a tab node does not change max_used_tab_node_id_.
36 pool_.FreeTabNode(4);
37 pool_.FreeUnusedTabNodes(std::set<int64>());
38 EXPECT_EQ(1000u, GetMaxUsedTabNodeId());
39 for (int i = 0; i < 3; ++i) {
40 pool_.AssociateTabNode(pool_.GetFreeTabNode(), i + 1);
41 EXPECT_EQ(1000u, GetMaxUsedTabNodeId());
42 }
43
44 EXPECT_EQ(1000u, GetMaxUsedTabNodeId());
45 }
46
47 TEST_F(SyncTabNodePoolTest, OldTabNodesAddAndRemove) {
48 // VerifyOldTabNodes are added.
49 // sync_id =4, tab_node_id = 1, tab_id = 1
50 SessionID session_id;
51 session_id.set_id(1);
52 pool_.AddTabNode(4, session_id, 1);
53 // sync_id = 5, tab_node_id = 5, tab_id = 2
54 session_id.set_id(2);
55 pool_.AddTabNode(5, session_id, 2);
56 EXPECT_EQ(2u, pool_.Capacity());
57 EXPECT_TRUE(pool_.Empty());
58 EXPECT_TRUE(pool_.ReassociateTabNode(4, 2));
59 EXPECT_TRUE(pool_.ReassociateTabNode(5, 1));
60 EXPECT_TRUE(pool_.Empty());
61 // Check free unused tab nodes returns the node to free node pool_.
62 std::set<int64> used_sync_ids;
63 used_sync_ids.insert(5);
64 pool_.FreeUnusedTabNodes(used_sync_ids);
65 // 4 should be returned to free node pool_.
66 EXPECT_EQ(2u, pool_.Capacity());
67 EXPECT_FALSE(pool_.Empty());
68 // 5 should still be in the associated nodes.
69 EXPECT_FALSE(pool_.Full());
70 pool_.FreeTabNode(5);
71 // 5 should be returned to free nodes pool and pool should be full.
72 EXPECT_TRUE(pool_.Full());
73 EXPECT_EQ(4, pool_.GetFreeTabNode());
74 pool_.AssociateTabNode(4, 1);
75 EXPECT_EQ(5, pool_.GetFreeTabNode());
76 pool_.AssociateTabNode(5, 1);
77 EXPECT_TRUE(pool_.Empty());
78 EXPECT_FALSE(pool_.Full());
79 }
80
81 TEST_F(SyncTabNodePoolTest, OldTabNodesReassociation) {
82 // VerifyOldTabNodes are reassociated correctly.
83 // sync_id =4, tab_node_id = 1, tab_id = 1
84 SessionID session_id;
85 session_id.set_id(1);
86 pool_.AddTabNode(4, session_id, 1);
87 // sync_id = 5, tab_node_id = 2, tab_id = 2
88 session_id.set_id(2);
89 pool_.AddTabNode(5, session_id, 2);
90 // sync_id = 5, tab_node_id = 3, tab_id =3
91 session_id.set_id(3);
92 pool_.AddTabNode(6, session_id, 3);
93 EXPECT_EQ(3u, pool_.Capacity());
94 EXPECT_TRUE(pool_.Empty());
95 // Free 5 and 6.
96 pool_.FreeTabNode(5);
97 pool_.FreeTabNode(6);
98 // 5 and 6 nodes should not get reassociated.
99 EXPECT_TRUE(pool_.ReassociateTabNode(4, 5));
100 EXPECT_FALSE(pool_.ReassociateTabNode(5, 6));
101 EXPECT_FALSE(pool_.ReassociateTabNode(6, 7));
102 // Free node pool should have 5 and 6.
103 EXPECT_FALSE(pool_.Empty());
104 EXPECT_EQ(3u, pool_.Capacity());
105
106 // Free all nodes
107 pool_.FreeUnusedTabNodes(std::set<int64>());
108 EXPECT_TRUE(pool_.Full());
109 std::set<int64> free_sync_ids;
110 for (int i = 0; i < 3; ++i) {
111 free_sync_ids.insert(pool_.GetFreeTabNode());
112 // GetFreeTabNode will return the same value till the node is
113 // reassociated.
114 pool_.AssociateTabNode(pool_.GetFreeTabNode(), i + 1);
115 }
116
117 EXPECT_TRUE(pool_.Empty());
118 EXPECT_EQ(3u, free_sync_ids.size());
119 EXPECT_EQ(1u, free_sync_ids.count(4));
120 EXPECT_EQ(1u, free_sync_ids.count(5));
121 EXPECT_EQ(1u, free_sync_ids.count(6));
122 }
14 123
15 TEST_F(SyncTabNodePoolTest, Init) { 124 TEST_F(SyncTabNodePoolTest, Init) {
16 TabNodePool pool(NULL); 125 EXPECT_TRUE(pool_.Empty());
17 pool.set_machine_tag("tag"); 126 EXPECT_TRUE(pool_.Full());
18 ASSERT_TRUE(pool.empty());
19 ASSERT_TRUE(pool.full());
20 } 127 }
21 128
22 TEST_F(SyncTabNodePoolTest, AddGet) { 129 TEST_F(SyncTabNodePoolTest, AddGet) {
23 TabNodePool pool(NULL); 130 SessionID session_id;
24 pool.set_machine_tag("tag"); 131 session_id.set_id(1);
132 pool_.AddTabNode(5, session_id, 1);
133 session_id.set_id(2);
134 pool_.AddTabNode(10, session_id, 2);
135 pool_.FreeUnusedTabNodes(std::set<int64>());
136 EXPECT_FALSE(pool_.Empty());
137 EXPECT_TRUE(pool_.Full());
25 138
26 pool.AddTabNode(5); 139 EXPECT_EQ(2U, pool_.Capacity());
27 pool.AddTabNode(10); 140 EXPECT_EQ(5, pool_.GetFreeTabNode());
28 ASSERT_FALSE(pool.empty()); 141 pool_.AssociateTabNode(5, 1);
29 ASSERT_TRUE(pool.full()); 142 EXPECT_FALSE(pool_.Empty());
30 143 EXPECT_FALSE(pool_.Full());
31 ASSERT_EQ(2U, pool.capacity()); 144 EXPECT_EQ(2U, pool_.Capacity());
32 ASSERT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab. 145 // 5 is now used, should return 10.
33 ASSERT_FALSE(pool.empty()); 146 EXPECT_EQ(10, pool_.GetFreeTabNode());
34 ASSERT_FALSE(pool.full());
35 ASSERT_EQ(2U, pool.capacity());
36 ASSERT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab.
37 } 147 }
38 148
39 TEST_F(SyncTabNodePoolTest, All) { 149 TEST_F(SyncTabNodePoolTest, All) {
40 TabNodePool pool(NULL); 150 EXPECT_TRUE(pool_.Empty());
41 pool.set_machine_tag("tag"); 151 EXPECT_TRUE(pool_.Full());
42 ASSERT_TRUE(pool.empty()); 152 EXPECT_EQ(0U, pool_.Capacity());
43 ASSERT_TRUE(pool.full()); 153 SessionID session_id;
44 ASSERT_EQ(0U, pool.capacity()); 154 session_id.set_id(1);
45 pool.AddTabNode(5); 155 pool_.AddTabNode(5, session_id, 1);
46 pool.AddTabNode(10); 156 session_id.set_id(2);
47 ASSERT_FALSE(pool.empty()); 157 pool_.AddTabNode(10, session_id, 2);
48 ASSERT_TRUE(pool.full()); 158 // Free added nodes.
49 ASSERT_EQ(2U, pool.capacity()); 159 pool_.FreeUnusedTabNodes(std::set<int64>());
50 ASSERT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab. 160 EXPECT_FALSE(pool_.Empty());
51 ASSERT_FALSE(pool.empty()); 161 EXPECT_TRUE(pool_.Full());
52 ASSERT_FALSE(pool.full()); 162 EXPECT_EQ(2U, pool_.Capacity());
53 ASSERT_EQ(2U, pool.capacity()); 163 // GetFreeTabNode returns the lowest numbered free node.
54 ASSERT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab. 164 EXPECT_EQ(5, pool_.GetFreeTabNode());
55 ASSERT_TRUE(pool.empty()); 165 EXPECT_FALSE(pool_.Empty());
56 ASSERT_FALSE(pool.full()); 166 EXPECT_TRUE(pool_.Full());
57 ASSERT_EQ(2U, pool.capacity()); 167 EXPECT_EQ(2U, pool_.Capacity());
168 // Associate 5, next free node should be 10.
169 pool_.AssociateTabNode(5, 1);
170 EXPECT_EQ(10, pool_.GetFreeTabNode());
171 pool_.AssociateTabNode(10, 2);
172 EXPECT_TRUE(pool_.Empty());
173 EXPECT_FALSE(pool_.Full());
174 EXPECT_EQ(2U, pool_.Capacity());
58 // Release them in reverse order. 175 // Release them in reverse order.
59 pool.FreeTabNode(10); 176 pool_.FreeTabNode(10);
60 pool.FreeTabNode(5); 177 pool_.FreeTabNode(5);
61 ASSERT_EQ(2U, pool.capacity()); 178 EXPECT_EQ(2U, pool_.Capacity());
62 ASSERT_FALSE(pool.empty()); 179 EXPECT_FALSE(pool_.Empty());
63 ASSERT_TRUE(pool.full()); 180 EXPECT_TRUE(pool_.Full());
64 ASSERT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab. 181 EXPECT_EQ(5, pool_.GetFreeTabNode());
65 ASSERT_FALSE(pool.empty()); 182 EXPECT_FALSE(pool_.Empty());
66 ASSERT_FALSE(pool.full()); 183 EXPECT_TRUE(pool_.Full());
67 ASSERT_EQ(2U, pool.capacity()); 184 EXPECT_EQ(2U, pool_.Capacity());
68 ASSERT_FALSE(pool.empty()); 185 EXPECT_FALSE(pool_.Empty());
69 ASSERT_FALSE(pool.full()); 186 EXPECT_TRUE(pool_.Full());
70 ASSERT_EQ(2U, pool.capacity()); 187 pool_.AssociateTabNode(5, 1);
71 ASSERT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab. 188 EXPECT_EQ(2U, pool_.Capacity());
72 ASSERT_TRUE(pool.empty()); 189 EXPECT_EQ(10, pool_.GetFreeTabNode());
73 ASSERT_FALSE(pool.full()); 190 pool_.AssociateTabNode(10, 2);
74 ASSERT_EQ(2U, pool.capacity()); 191 EXPECT_TRUE(pool_.Empty());
192 EXPECT_FALSE(pool_.Full());
193 EXPECT_EQ(2U, pool_.Capacity());
75 // Release them again. 194 // Release them again.
76 pool.FreeTabNode(10); 195 pool_.FreeTabNode(10);
77 pool.FreeTabNode(5); 196 pool_.FreeTabNode(5);
78 ASSERT_FALSE(pool.empty()); 197 EXPECT_FALSE(pool_.Empty());
79 ASSERT_TRUE(pool.full()); 198 EXPECT_TRUE(pool_.Full());
80 ASSERT_EQ(2U, pool.capacity()); 199 EXPECT_EQ(2U, pool_.Capacity());
81 pool.clear(); 200 pool_.Clear();
82 ASSERT_TRUE(pool.empty()); 201 EXPECT_TRUE(pool_.Empty());
83 ASSERT_TRUE(pool.full()); 202 EXPECT_TRUE(pool_.Full());
84 ASSERT_EQ(0U, pool.capacity()); 203 EXPECT_EQ(0U, pool_.Capacity());
85 } 204 }
86 205
87 } // namespace 206 } // namespace
88 207
89 } // namespace browser_sync 208 } // namespace browser_sync
OLDNEW
« 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