OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/files/file_util.h" | 5 #include "base/files/file_util.h" |
6 #include "base/files/scoped_temp_dir.h" | 6 #include "base/files/scoped_temp_dir.h" |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
9 #include "chrome/browser/sessions/session_backend.h" | 9 #include "chrome/browser/sessions/session_backend.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 base::FilePath path_; | 49 base::FilePath path_; |
50 base::ScopedTempDir temp_dir_; | 50 base::ScopedTempDir temp_dir_; |
51 }; | 51 }; |
52 | 52 |
53 TEST_F(SessionBackendTest, SimpleReadWrite) { | 53 TEST_F(SessionBackendTest, SimpleReadWrite) { |
54 scoped_refptr<SessionBackend> backend( | 54 scoped_refptr<SessionBackend> backend( |
55 new SessionBackend(BaseSessionService::SESSION_RESTORE, path_)); | 55 new SessionBackend(BaseSessionService::SESSION_RESTORE, path_)); |
56 struct TestData data = { 1, "a" }; | 56 struct TestData data = { 1, "a" }; |
57 SessionCommands commands; | 57 SessionCommands commands; |
58 commands.push_back(CreateCommandFromData(data)); | 58 commands.push_back(CreateCommandFromData(data)); |
59 backend->AppendCommands(new ScopedVector<SessionCommand>(commands.Pass()), | 59 backend->AppendCommands(commands.Pass(), false); |
60 false); | |
61 ASSERT_TRUE(commands.empty()); | 60 ASSERT_TRUE(commands.empty()); |
62 | 61 |
63 // Read it back in. | 62 // Read it back in. |
64 backend = NULL; | 63 backend = NULL; |
65 backend = new SessionBackend(BaseSessionService::SESSION_RESTORE, path_); | 64 backend = new SessionBackend(BaseSessionService::SESSION_RESTORE, path_); |
66 backend->ReadLastSessionCommandsImpl(&commands); | 65 backend->ReadLastSessionCommandsImpl(&commands); |
67 | 66 |
68 ASSERT_EQ(1U, commands.size()); | 67 ASSERT_EQ(1U, commands.size()); |
69 AssertCommandEqualsData(data, commands[0]); | 68 AssertCommandEqualsData(data, commands[0]); |
70 | 69 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 new SessionBackend(BaseSessionService::SESSION_RESTORE, path_)); | 103 new SessionBackend(BaseSessionService::SESSION_RESTORE, path_)); |
105 SessionCommands commands; | 104 SessionCommands commands; |
106 if (i != 0) { | 105 if (i != 0) { |
107 // Read previous data. | 106 // Read previous data. |
108 backend->ReadLastSessionCommandsImpl(&commands); | 107 backend->ReadLastSessionCommandsImpl(&commands); |
109 ASSERT_EQ(i, commands.size()); | 108 ASSERT_EQ(i, commands.size()); |
110 for (std::vector<SessionCommand*>::iterator j = commands.begin(); | 109 for (std::vector<SessionCommand*>::iterator j = commands.begin(); |
111 j != commands.end(); ++j) { | 110 j != commands.end(); ++j) { |
112 AssertCommandEqualsData(data[j - commands.begin()], *j); | 111 AssertCommandEqualsData(data[j - commands.begin()], *j); |
113 } | 112 } |
114 backend->AppendCommands(new ScopedVector<SessionCommand>(commands.Pass()), | 113 backend->AppendCommands(commands.Pass(), false); |
115 false); | |
116 } | 114 } |
117 commands.push_back(CreateCommandFromData(data[i])); | 115 commands.push_back(CreateCommandFromData(data[i])); |
118 backend->AppendCommands(new ScopedVector<SessionCommand>(commands.Pass()), | 116 backend->AppendCommands(commands.Pass(), false); |
119 false); | |
120 } | 117 } |
121 } | 118 } |
122 | 119 |
123 TEST_F(SessionBackendTest, BigData) { | 120 TEST_F(SessionBackendTest, BigData) { |
124 struct TestData data[] = { | 121 struct TestData data[] = { |
125 { 1, "a" }, | 122 { 1, "a" }, |
126 { 2, "ab" }, | 123 { 2, "ab" }, |
127 }; | 124 }; |
128 | 125 |
129 scoped_refptr<SessionBackend> backend( | 126 scoped_refptr<SessionBackend> backend( |
130 new SessionBackend(BaseSessionService::SESSION_RESTORE, path_)); | 127 new SessionBackend(BaseSessionService::SESSION_RESTORE, path_)); |
131 ScopedVector<SessionCommand> commands; | 128 ScopedVector<SessionCommand> commands; |
132 | 129 |
133 commands.push_back(CreateCommandFromData(data[0])); | 130 commands.push_back(CreateCommandFromData(data[0])); |
134 const SessionCommand::size_type big_size = | 131 const SessionCommand::size_type big_size = |
135 SessionBackend::kFileReadBufferSize + 100; | 132 SessionBackend::kFileReadBufferSize + 100; |
136 const SessionCommand::id_type big_id = 50; | 133 const SessionCommand::id_type big_id = 50; |
137 SessionCommand* big_command = new SessionCommand(big_id, big_size); | 134 SessionCommand* big_command = new SessionCommand(big_id, big_size); |
138 reinterpret_cast<char*>(big_command->contents())[0] = 'a'; | 135 reinterpret_cast<char*>(big_command->contents())[0] = 'a'; |
139 reinterpret_cast<char*>(big_command->contents())[big_size - 1] = 'z'; | 136 reinterpret_cast<char*>(big_command->contents())[big_size - 1] = 'z'; |
140 commands.push_back(big_command); | 137 commands.push_back(big_command); |
141 commands.push_back(CreateCommandFromData(data[1])); | 138 commands.push_back(CreateCommandFromData(data[1])); |
142 backend->AppendCommands(new ScopedVector<SessionCommand>(commands.Pass()), | 139 backend->AppendCommands(commands.Pass(), false); |
143 false); | |
144 | 140 |
145 backend = NULL; | 141 backend = NULL; |
146 backend = new SessionBackend(BaseSessionService::SESSION_RESTORE, path_); | 142 backend = new SessionBackend(BaseSessionService::SESSION_RESTORE, path_); |
147 | 143 |
148 backend->ReadLastSessionCommandsImpl(&commands); | 144 backend->ReadLastSessionCommandsImpl(&commands); |
149 ASSERT_EQ(3U, commands.size()); | 145 ASSERT_EQ(3U, commands.size()); |
150 AssertCommandEqualsData(data[0], commands[0]); | 146 AssertCommandEqualsData(data[0], commands[0]); |
151 AssertCommandEqualsData(data[1], commands[2]); | 147 AssertCommandEqualsData(data[1], commands[2]); |
152 | 148 |
153 EXPECT_EQ(big_id, commands[1]->id()); | 149 EXPECT_EQ(big_id, commands[1]->id()); |
154 ASSERT_EQ(big_size, commands[1]->size()); | 150 ASSERT_EQ(big_size, commands[1]->size()); |
155 EXPECT_EQ('a', reinterpret_cast<char*>(commands[1]->contents())[0]); | 151 EXPECT_EQ('a', reinterpret_cast<char*>(commands[1]->contents())[0]); |
156 EXPECT_EQ('z', | 152 EXPECT_EQ('z', |
157 reinterpret_cast<char*>(commands[1]->contents())[big_size - 1]); | 153 reinterpret_cast<char*>(commands[1]->contents())[big_size - 1]); |
158 commands.clear(); | 154 commands.clear(); |
159 } | 155 } |
160 | 156 |
161 TEST_F(SessionBackendTest, EmptyCommand) { | 157 TEST_F(SessionBackendTest, EmptyCommand) { |
162 TestData empty_command; | 158 TestData empty_command; |
163 empty_command.command_id = 1; | 159 empty_command.command_id = 1; |
164 scoped_refptr<SessionBackend> backend( | 160 scoped_refptr<SessionBackend> backend( |
165 new SessionBackend(BaseSessionService::SESSION_RESTORE, path_)); | 161 new SessionBackend(BaseSessionService::SESSION_RESTORE, path_)); |
166 SessionCommands* empty_commands = new SessionCommands(); | 162 SessionCommands empty_commands; |
167 empty_commands->push_back(CreateCommandFromData(empty_command)); | 163 empty_commands.push_back(CreateCommandFromData(empty_command)); |
168 backend->AppendCommands(empty_commands, true); | 164 backend->AppendCommands(empty_commands.Pass(), true); |
169 backend->MoveCurrentSessionToLastSession(); | 165 backend->MoveCurrentSessionToLastSession(); |
170 | 166 |
171 SessionCommands commands; | 167 SessionCommands commands; |
172 backend->ReadLastSessionCommandsImpl(&commands); | 168 backend->ReadLastSessionCommandsImpl(&commands); |
173 ASSERT_EQ(1U, commands.size()); | 169 ASSERT_EQ(1U, commands.size()); |
174 AssertCommandEqualsData(empty_command, commands[0]); | 170 AssertCommandEqualsData(empty_command, commands[0]); |
175 commands.clear(); | 171 commands.clear(); |
176 } | 172 } |
177 | 173 |
178 // Writes a command, appends another command with reset to true, then reads | 174 // Writes a command, appends another command with reset to true, then reads |
179 // making sure we only get back the second command. | 175 // making sure we only get back the second command. |
180 TEST_F(SessionBackendTest, Truncate) { | 176 TEST_F(SessionBackendTest, Truncate) { |
181 scoped_refptr<SessionBackend> backend( | 177 scoped_refptr<SessionBackend> backend( |
182 new SessionBackend(BaseSessionService::SESSION_RESTORE, path_)); | 178 new SessionBackend(BaseSessionService::SESSION_RESTORE, path_)); |
183 struct TestData first_data = { 1, "a" }; | 179 struct TestData first_data = { 1, "a" }; |
184 SessionCommands commands; | 180 SessionCommands commands; |
185 commands.push_back(CreateCommandFromData(first_data)); | 181 commands.push_back(CreateCommandFromData(first_data)); |
186 backend->AppendCommands(new ScopedVector<SessionCommand>(commands.Pass()), | 182 backend->AppendCommands(commands.Pass(), false); |
187 false); | |
188 | 183 |
189 // Write another command, this time resetting the file when appending. | 184 // Write another command, this time resetting the file when appending. |
190 struct TestData second_data = { 2, "b" }; | 185 struct TestData second_data = { 2, "b" }; |
191 commands.push_back(CreateCommandFromData(second_data)); | 186 commands.push_back(CreateCommandFromData(second_data)); |
192 backend->AppendCommands(new ScopedVector<SessionCommand>(commands.Pass()), | 187 backend->AppendCommands(commands.Pass(), true); |
193 true); | |
194 | 188 |
195 // Read it back in. | 189 // Read it back in. |
196 backend = NULL; | 190 backend = NULL; |
197 backend = new SessionBackend(BaseSessionService::SESSION_RESTORE, path_); | 191 backend = new SessionBackend(BaseSessionService::SESSION_RESTORE, path_); |
198 backend->ReadLastSessionCommandsImpl(&commands); | 192 backend->ReadLastSessionCommandsImpl(&commands); |
199 | 193 |
200 // And make sure we get back the expected data. | 194 // And make sure we get back the expected data. |
201 ASSERT_EQ(1U, commands.size()); | 195 ASSERT_EQ(1U, commands.size()); |
202 AssertCommandEqualsData(second_data, commands[0]); | 196 AssertCommandEqualsData(second_data, commands[0]); |
203 | 197 |
204 commands.clear(); | 198 commands.clear(); |
205 } | 199 } |
OLD | NEW |