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

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