Chromium Code Reviews| 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 |