OLD | NEW |
---|---|
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 |
OLD | NEW |