blob: 9350369f6ac901cf2b6414822623cdd1d982923e [file] [log] [blame]
// 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