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