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