Chromium Code Reviews| Index: components/safe_browsing_db/v4_store_unittest.cc |
| diff --git a/components/safe_browsing_db/v4_store_unittest.cc b/components/safe_browsing_db/v4_store_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..57e9c2b8cec8fb6e1f15e8ad1e1d51766b341a63 |
| --- /dev/null |
| +++ b/components/safe_browsing_db/v4_store_unittest.cc |
| @@ -0,0 +1,138 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "base/files/file_util.h" |
| +#include "base/files/scoped_temp_dir.h" |
| +#include "base/run_loop.h" |
| +#include "base/test/test_simple_task_runner.h" |
| +#include "base/time/time.h" |
| +#include "components/safe_browsing_db/v4_store.h" |
| +#include "components/safe_browsing_db/v4_store.pb.h" |
| +#include "content/public/test/test_browser_thread_bundle.h" |
| +#include "testing/platform_test.h" |
| + |
| +namespace safe_browsing { |
| + |
| +class V4StoreTest : public PlatformTest { |
| + public: |
| + V4StoreTest() : task_runner_(new base::TestSimpleTaskRunner) {} |
| + |
| + void SetUp() override { |
| + PlatformTest::SetUp(); |
| + |
| + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| + store_path_ = temp_dir_.path().AppendASCII("V4StoreTest.store"); |
| + DVLOG(1) << "store_path_: " << store_path_.value(); |
| + } |
| + |
| + void TearDown() override { |
| + base::DeleteFile(store_path_, false); |
| + PlatformTest::TearDown(); |
| + } |
| + |
| + scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
|
Scott Hess - ex-Googler
2016/06/22 22:58:39
Will task_runner_ destruction pump events? If so,
vakh (use Gerrit instead)
2016/06/23 23:36:21
Thanks! Didn't think about that.
The detail with w
|
| + base::ScopedTempDir temp_dir_; |
| + base::FilePath store_path_; |
| + content::TestBrowserThreadBundle thread_bundle_; |
| +}; |
| + |
| +TEST_F(V4StoreTest, TestReadFromEmptyFile) { |
| + { base::ScopedFILE new_file(base::OpenFile(store_path_, "wb+")); } |
|
Scott Hess - ex-Googler
2016/06/22 22:58:40
I see what you're doing there, but I think the sin
vakh (use Gerrit instead)
2016/06/23 23:36:21
This formatting was done by "git cl format". Doesn
Scott Hess - ex-Googler
2016/06/24 04:14:11
Really? I think that's the first time I've ever s
vakh (use Gerrit instead)
2016/06/24 18:03:50
Done.
|
| + |
| + EXPECT_EQ(FILE_EMPTY_FAILURE, |
| + V4Store(task_runner_, store_path_).ReadFromDisk()); |
| +} |
| + |
| +TEST_F(V4StoreTest, TestReadFromAbsentFile) { |
| + EXPECT_EQ(FILE_UNREADABLE_FAILURE, |
| + V4Store(task_runner_, store_path_).ReadFromDisk()); |
| +} |
|
Scott Hess - ex-Googler
2016/06/22 22:58:39
I like busting out all the cases for testing!
vakh (use Gerrit instead)
2016/06/23 23:36:21
Acknowledged.
|
| + |
| +TEST_F(V4StoreTest, TestReadFromInvalidContentsFile) { |
| + std::string invalid_contents = "Chromium"; |
| + base::WriteFile(store_path_, invalid_contents.c_str(), |
| + invalid_contents.size()); |
|
Scott Hess - ex-Googler
2016/06/22 22:58:40
const kInvalidContents[] = "Chromium";
base::Write
vakh (use Gerrit instead)
2016/06/23 23:36:21
Done. Fits on a line too!
|
| + |
| + EXPECT_EQ(PROTO_PARSING_FAILURE, |
| + V4Store(task_runner_, store_path_).ReadFromDisk()); |
| +} |
| + |
| +TEST_F(V4StoreTest, TestReadFromUnexpectedMagicFile) { |
| + V4StoreFileFormat file_format; |
| + file_format.set_magic_number(111); |
| + std::string file_format_string; |
| + file_format.SerializeToString(&file_format_string); |
| + base::WriteFile(store_path_, file_format_string.c_str(), |
| + file_format_string.size()); |
|
Scott Hess - ex-Googler
2016/06/22 22:58:39
data() rather than c_str().
Right now I'm wishing
vakh (use Gerrit instead)
2016/06/23 23:36:21
It's the same. data and c_str
|
| + EXPECT_EQ(UNEXPECTED_MAGIC_NUMBER_FAILURE, |
| + V4Store(task_runner_, store_path_).ReadFromDisk()); |
| +} |
| + |
| +TEST_F(V4StoreTest, TestReadFromLowVersionFile) { |
| + V4StoreFileFormat file_format; |
| + file_format.set_magic_number(0x600D71FE); |
| + file_format.set_version_number(2); |
| + std::string file_format_string; |
| + file_format.SerializeToString(&file_format_string); |
| + base::WriteFile(store_path_, file_format_string.c_str(), |
| + file_format_string.size()); |
|
Scott Hess - ex-Googler
2016/06/22 22:58:39
data().
vakh (use Gerrit instead)
2016/06/23 23:36:21
See above.
|
| + EXPECT_EQ(FILE_VERSION_INCOMPATIBLE_FAILURE, |
| + V4Store(task_runner_, store_path_).ReadFromDisk()); |
| +} |
| + |
| +TEST_F(V4StoreTest, TestReadFromNoHashPrefixInfoFile) { |
| + V4StoreFileFormat file_format; |
| + file_format.set_magic_number(0x600D71FE); |
| + file_format.set_version_number(9); |
| + std::string file_format_string; |
| + file_format.SerializeToString(&file_format_string); |
| + base::WriteFile(store_path_, file_format_string.c_str(), |
| + file_format_string.size()); |
|
Scott Hess - ex-Googler
2016/06/22 22:58:39
data(). Or an anonymous WriteStringToFile() helpe
vakh (use Gerrit instead)
2016/06/23 23:36:21
Done.
|
| + EXPECT_EQ(HASH_PREFIX_INFO_MISSING_FAILURE, |
| + V4Store(task_runner_, store_path_).ReadFromDisk()); |
| +} |
| + |
| +TEST_F(V4StoreTest, TestReadFromNoHashPrefixesFile) { |
| + V4StoreFileFormat file_format; |
| + file_format.set_magic_number(0x600D71FE); |
| + file_format.set_version_number(9); |
| + ListUpdateResponse* list_update_response = |
| + file_format.mutable_list_update_response(); |
| + list_update_response->set_platform_type(LINUX_PLATFORM); |
| + |
| + std::string file_format_string; |
| + file_format.SerializeToString(&file_format_string); |
| + base::WriteFile(store_path_, file_format_string.c_str(), |
| + file_format_string.size()); |
| + EXPECT_EQ(READ_SUCCESS, V4Store(task_runner_, store_path_).ReadFromDisk()); |
| +} |
| + |
| +TEST_F(V4StoreTest, TestWriteNoResponseType) { |
| + ListUpdateResponse list_update_response; |
| + EXPECT_EQ( |
| + INVALID_RESPONSE_TYPE_FAILURE, |
| + V4Store(task_runner_, store_path_).WriteToDisk(list_update_response)); |
| +} |
|
Scott Hess - ex-Googler
2016/06/22 22:58:40
Hmm. Now my DCHECK suggestions are looking wrong.
vakh (use Gerrit instead)
2016/06/23 23:09:32
Acknowledged.
|
| + |
| +TEST_F(V4StoreTest, TestWritePartialResponseType) { |
| + ListUpdateResponse list_update_response; |
| + list_update_response.set_response_type(ListUpdateResponse::PARTIAL_UPDATE); |
| + EXPECT_EQ( |
| + INVALID_RESPONSE_TYPE_FAILURE, |
| + V4Store(task_runner_, store_path_).WriteToDisk(list_update_response)); |
| +} |
| + |
| +TEST_F(V4StoreTest, TestWriteFullResponseType) { |
| + ListUpdateResponse list_update_response; |
| + list_update_response.set_response_type(ListUpdateResponse::FULL_UPDATE); |
| + list_update_response.set_new_client_state("test_client_state"); |
| + std::unique_ptr<V4Store> write_store(new V4Store(task_runner_, store_path_)); |
|
Scott Hess - ex-Googler
2016/06/22 22:58:39
Could this just be a V4Store without the unique_pt
vakh (use Gerrit instead)
2016/06/23 23:36:21
Done.
|
| + EXPECT_EQ(WRITE_SUCCESS, write_store->WriteToDisk(list_update_response)); |
| + |
| + std::unique_ptr<V4Store> read_store(new V4Store(task_runner_, store_path_)); |
|
Scott Hess - ex-Googler
2016/06/22 22:58:40
Also here?
vakh (use Gerrit instead)
2016/06/23 23:36:21
Done.
|
| + EXPECT_EQ(READ_SUCCESS, read_store->ReadFromDisk()); |
| + EXPECT_EQ("test_client_state", read_store->state_); |
| +} |
| + |
| +} // namespace safe_browsing |