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; |
| 12 |
| 13 TEST_F(SyncTabNodePoolTest, TabNodeIdIncreases) { |
| 14 // max_used_tab_node_ always increases. |
| 15 TabNodePool pool(NULL); |
| 16 pool.set_machine_tag("tag"); |
| 17 pool.AddOldTabNode(4, 10); |
| 18 EXPECT_EQ(10u, pool.max_used_tab_node_id_); |
| 19 pool.AddOldTabNode(5, 1); |
| 20 EXPECT_EQ(10u, pool.max_used_tab_node_id_); |
| 21 pool.AddOldTabNode(6, 1000); |
| 22 EXPECT_EQ(1000u, pool.max_used_tab_node_id_); |
| 23 // Freeing a tab node does not change max_used_tab_node_id_. |
| 24 pool.FreeTabNode(5); |
| 25 EXPECT_EQ(1000u, pool.max_used_tab_node_id_); |
| 26 pool.FreeUnusedOldSyncNodes(std::set<int64>()); |
| 27 EXPECT_EQ(1000u, pool.max_used_tab_node_id_); |
| 28 for (int i = 0; i < 3; ++i) { |
| 29 pool.GetFreeTabNode(); |
| 30 EXPECT_EQ(1000u, pool.max_used_tab_node_id_); |
| 31 } |
| 32 |
| 33 EXPECT_EQ(1000u, pool.max_used_tab_node_id_); |
| 34 |
| 35 } |
11 namespace { | 36 namespace { |
12 | 37 |
13 typedef testing::Test SyncTabNodePoolTest; | 38 TEST_F(SyncTabNodePoolTest, OldTabNodesAddAndRemove) { |
| 39 // VerifyOldTabNodes are added. |
| 40 TabNodePool pool(NULL); |
| 41 pool.set_machine_tag("tag"); |
| 42 // sync_id =4, tab_node_id = 1 |
| 43 pool.AddOldTabNode(4, 1); |
| 44 // sync_id = 5, tab_node_id = 5 |
| 45 pool.AddOldTabNode(5, 2); |
| 46 EXPECT_EQ(2u, pool.capacity()); |
| 47 EXPECT_TRUE(pool.empty()); |
| 48 // max_used_tab_node_ should be 2. The next tab node should be 3. |
| 49 // old tab node pool should contain old sync nodes. |
| 50 EXPECT_TRUE(pool.RemoveIfOldSyncNodeExists(4)); |
| 51 EXPECT_TRUE(pool.RemoveIfOldSyncNodeExists(5)); |
| 52 EXPECT_TRUE(pool.empty()); |
| 53 |
| 54 // Returning old tab nodes to pool should |
| 55 pool.FreeTabNode(4); |
| 56 pool.FreeTabNode(5); |
| 57 EXPECT_EQ(2u, pool.capacity()); |
| 58 EXPECT_FALSE(pool.empty()); |
| 59 EXPECT_TRUE(pool.full()); |
| 60 EXPECT_EQ(5, pool.GetFreeTabNode()); |
| 61 EXPECT_EQ(4, pool.GetFreeTabNode()); |
| 62 EXPECT_TRUE(pool.empty()); |
| 63 EXPECT_FALSE(pool.full()); |
| 64 } |
| 65 |
| 66 TEST_F(SyncTabNodePoolTest, OldTabNodesRemove) { |
| 67 // VerifyOldTabNodes are removed correctly and added back to free node pool. |
| 68 TabNodePool pool(NULL); |
| 69 pool.set_machine_tag("tag"); |
| 70 // sync_id =4, tab_node_id = 1 |
| 71 pool.AddOldTabNode(4, 1); |
| 72 // sync_id = 5, tab_node_id = 2 |
| 73 pool.AddOldTabNode(5, 2); |
| 74 // sync_id = 5, tab_node_id = 3 |
| 75 pool.AddOldTabNode(6, 3); |
| 76 EXPECT_EQ(3u, pool.capacity()); |
| 77 EXPECT_TRUE(pool.empty()); |
| 78 std::set<int64> used_sync_ids; |
| 79 used_sync_ids.insert(4); |
| 80 used_sync_ids.insert(5); |
| 81 used_sync_ids.insert(6); |
| 82 pool.FreeUnusedOldSyncNodes(used_sync_ids); |
| 83 // All tab nodes are in use, they should not be removed. |
| 84 EXPECT_EQ(3u, pool.capacity()); |
| 85 EXPECT_TRUE(pool.empty()); |
| 86 EXPECT_TRUE(pool.RemoveIfOldSyncNodeExists(4)); |
| 87 // Should no longer be in old tab nodes pool. |
| 88 EXPECT_FALSE(pool.RemoveIfOldSyncNodeExists(4)); |
| 89 used_sync_ids.clear(); |
| 90 // 4 is used, 5 and 6 should be returned to the free node pool. |
| 91 pool.FreeUnusedOldSyncNodes(used_sync_ids); |
| 92 // 5 and 6 should not be in the old nodes pool. |
| 93 EXPECT_FALSE(pool.RemoveIfOldSyncNodeExists(5)); |
| 94 EXPECT_FALSE(pool.RemoveIfOldSyncNodeExists(6)); |
| 95 EXPECT_FALSE(pool.empty()); |
| 96 EXPECT_EQ(3u, pool.capacity()); |
| 97 |
| 98 // Free 4 as well, pool should have all free nodes now. |
| 99 pool.FreeTabNode(4); |
| 100 EXPECT_TRUE(pool.full()); |
| 101 |
| 102 std::set<int64> free_sync_ids; |
| 103 for (int i = 0; i < 3; ++i) { |
| 104 free_sync_ids.insert(pool.GetFreeTabNode()); |
| 105 } |
| 106 |
| 107 EXPECT_TRUE(pool.empty()); |
| 108 EXPECT_EQ(3u, free_sync_ids.size()); |
| 109 EXPECT_EQ(1u, free_sync_ids.count(4)); |
| 110 EXPECT_EQ(1u, free_sync_ids.count(5)); |
| 111 EXPECT_EQ(1u, free_sync_ids.count(6)); |
| 112 } |
14 | 113 |
15 TEST_F(SyncTabNodePoolTest, Init) { | 114 TEST_F(SyncTabNodePoolTest, Init) { |
16 TabNodePool pool(NULL); | 115 TabNodePool pool(NULL); |
17 pool.set_machine_tag("tag"); | 116 pool.set_machine_tag("tag"); |
18 ASSERT_TRUE(pool.empty()); | 117 EXPECT_TRUE(pool.empty()); |
19 ASSERT_TRUE(pool.full()); | 118 EXPECT_TRUE(pool.full()); |
20 } | 119 } |
21 | 120 |
22 TEST_F(SyncTabNodePoolTest, AddGet) { | 121 TEST_F(SyncTabNodePoolTest, AddGet) { |
23 TabNodePool pool(NULL); | 122 TabNodePool pool(NULL); |
24 pool.set_machine_tag("tag"); | 123 pool.set_machine_tag("tag"); |
25 | 124 |
26 pool.AddTabNode(5); | 125 pool.AddOldTabNode(5, 1); |
27 pool.AddTabNode(10); | 126 pool.AddOldTabNode(10, 2); |
28 ASSERT_FALSE(pool.empty()); | 127 pool.FreeUnusedOldSyncNodes(std::set<int64>()); |
29 ASSERT_TRUE(pool.full()); | 128 EXPECT_FALSE(pool.empty()); |
| 129 EXPECT_TRUE(pool.full()); |
30 | 130 |
31 ASSERT_EQ(2U, pool.capacity()); | 131 EXPECT_EQ(2U, pool.capacity()); |
32 ASSERT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab. | 132 EXPECT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab. |
33 ASSERT_FALSE(pool.empty()); | 133 EXPECT_FALSE(pool.empty()); |
34 ASSERT_FALSE(pool.full()); | 134 EXPECT_FALSE(pool.full()); |
35 ASSERT_EQ(2U, pool.capacity()); | 135 EXPECT_EQ(2U, pool.capacity()); |
36 ASSERT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab. | 136 EXPECT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab. |
37 } | 137 } |
38 | 138 |
39 TEST_F(SyncTabNodePoolTest, All) { | 139 TEST_F(SyncTabNodePoolTest, All) { |
40 TabNodePool pool(NULL); | 140 TabNodePool pool(NULL); |
41 pool.set_machine_tag("tag"); | 141 pool.set_machine_tag("tag"); |
42 ASSERT_TRUE(pool.empty()); | 142 EXPECT_TRUE(pool.empty()); |
43 ASSERT_TRUE(pool.full()); | 143 EXPECT_TRUE(pool.full()); |
44 ASSERT_EQ(0U, pool.capacity()); | 144 EXPECT_EQ(0U, pool.capacity()); |
45 pool.AddTabNode(5); | 145 pool.AddOldTabNode(5, 1); |
46 pool.AddTabNode(10); | 146 pool.AddOldTabNode(10, 2); |
47 ASSERT_FALSE(pool.empty()); | 147 pool.FreeUnusedOldSyncNodes(std::set<int64>()); |
48 ASSERT_TRUE(pool.full()); | 148 EXPECT_FALSE(pool.empty()); |
49 ASSERT_EQ(2U, pool.capacity()); | 149 EXPECT_TRUE(pool.full()); |
50 ASSERT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab. | 150 EXPECT_EQ(2U, pool.capacity()); |
51 ASSERT_FALSE(pool.empty()); | 151 EXPECT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab. |
52 ASSERT_FALSE(pool.full()); | 152 EXPECT_FALSE(pool.empty()); |
53 ASSERT_EQ(2U, pool.capacity()); | 153 EXPECT_FALSE(pool.full()); |
54 ASSERT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab. | 154 EXPECT_EQ(2U, pool.capacity()); |
55 ASSERT_TRUE(pool.empty()); | 155 EXPECT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab. |
56 ASSERT_FALSE(pool.full()); | 156 EXPECT_TRUE(pool.empty()); |
57 ASSERT_EQ(2U, pool.capacity()); | 157 EXPECT_FALSE(pool.full()); |
| 158 EXPECT_EQ(2U, pool.capacity()); |
58 // Release them in reverse order. | 159 // Release them in reverse order. |
59 pool.FreeTabNode(10); | 160 pool.FreeTabNode(10); |
60 pool.FreeTabNode(5); | 161 pool.FreeTabNode(5); |
61 ASSERT_EQ(2U, pool.capacity()); | 162 EXPECT_EQ(2U, pool.capacity()); |
62 ASSERT_FALSE(pool.empty()); | 163 EXPECT_FALSE(pool.empty()); |
63 ASSERT_TRUE(pool.full()); | 164 EXPECT_TRUE(pool.full()); |
64 ASSERT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab. | 165 EXPECT_EQ(5, pool.GetFreeTabNode()); // Returns last free tab. |
65 ASSERT_FALSE(pool.empty()); | 166 EXPECT_FALSE(pool.empty()); |
66 ASSERT_FALSE(pool.full()); | 167 EXPECT_FALSE(pool.full()); |
67 ASSERT_EQ(2U, pool.capacity()); | 168 EXPECT_EQ(2U, pool.capacity()); |
68 ASSERT_FALSE(pool.empty()); | 169 EXPECT_FALSE(pool.empty()); |
69 ASSERT_FALSE(pool.full()); | 170 EXPECT_FALSE(pool.full()); |
70 ASSERT_EQ(2U, pool.capacity()); | 171 EXPECT_EQ(2U, pool.capacity()); |
71 ASSERT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab. | 172 EXPECT_EQ(10, pool.GetFreeTabNode()); // Returns last free tab. |
72 ASSERT_TRUE(pool.empty()); | 173 EXPECT_TRUE(pool.empty()); |
73 ASSERT_FALSE(pool.full()); | 174 EXPECT_FALSE(pool.full()); |
74 ASSERT_EQ(2U, pool.capacity()); | 175 EXPECT_EQ(2U, pool.capacity()); |
75 // Release them again. | 176 // Release them again. |
76 pool.FreeTabNode(10); | 177 pool.FreeTabNode(10); |
77 pool.FreeTabNode(5); | 178 pool.FreeTabNode(5); |
78 ASSERT_FALSE(pool.empty()); | 179 EXPECT_FALSE(pool.empty()); |
79 ASSERT_TRUE(pool.full()); | 180 EXPECT_TRUE(pool.full()); |
80 ASSERT_EQ(2U, pool.capacity()); | 181 EXPECT_EQ(2U, pool.capacity()); |
81 pool.clear(); | 182 pool.clear(); |
82 ASSERT_TRUE(pool.empty()); | 183 EXPECT_TRUE(pool.empty()); |
83 ASSERT_TRUE(pool.full()); | 184 EXPECT_TRUE(pool.full()); |
84 ASSERT_EQ(0U, pool.capacity()); | 185 EXPECT_EQ(0U, pool.capacity()); |
85 } | 186 } |
86 | 187 |
87 } // namespace | 188 } // namespace |
88 | 189 |
89 } // namespace browser_sync | 190 } // namespace browser_sync |
OLD | NEW |