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

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

Powered by Google App Engine
This is Rietveld 408576698