| // Copyright 2015 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 "sync/test/directory_backing_store_corruption_testing.h" |
| |
| #include "base/files/file_util.h" |
| #include "base/files/scoped_file.h" |
| |
| namespace syncer { |
| namespace syncable { |
| namespace corruption_testing { |
| |
| // This value needs to be large enough to force the underlying DB to be read |
| // from disk before writing, but small enough so that tests don't take too long |
| // and timeout. The value depend on the underlying DB page size as well as the |
| // DB's cache_size PRAGMA. If test fails, you either increase |
| // kNumEntriesRequiredForCorruption, or increase the size of each entry. |
| const int kNumEntriesRequiredForCorruption = 2000; |
| |
| bool CorruptDatabase(const base::FilePath& backing_file_path) { |
| // Corrupt the DB by write a bunch of zeros at the beginning. |
| // |
| // Because the file may already open for writing, it's important that we open |
| // it in a sharing-compatible way for platforms that have the concept of |
| // shared/exclusive file access (e.g. Windows). |
| base::ScopedFILE db_file(base::OpenFile(backing_file_path, "wb")); |
| if (!db_file.get()) |
| return false; |
| const std::string zeros(4096, '\0'); |
| const int num_written = fwrite(zeros.data(), zeros.size(), 1, db_file.get()); |
| return num_written == 1U; |
| } |
| |
| } // namespace corruption_util |
| } // namespace syncable |
| } // namespace syncer |