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

#ifndef SQL_TEST_SQL_TEST_BASE_H_
#define SQL_TEST_SQL_TEST_BASE_H_

#include "base/files/file_path.h"
#include "base/files/scoped_temp_dir.h"
#include "base/macros.h"
#include "sql/database.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace sql {

// Base class for SQL tests.
//
// WARNING: We want to run the same gtest based unit test code both against
// chromium (which uses this implementation here), and the mojo code (which
// uses a different class named SQLTestBase). These two classes need to have
// the same interface because we compile time switch them based on a
// #define. We need to have two different implementations because the mojo
// version derives from mojo::test::ApplicationTestBase instead of
// testing::Test.
class SQLTestBase : public testing::Test {
 public:
  SQLTestBase();
  ~SQLTestBase() override;

  enum WriteJunkType {
    TYPE_OVERWRITE_AND_TRUNCATE,
    TYPE_OVERWRITE
  };

  // Returns the path to the database.
  base::FilePath db_path();

  // Returns a connection to the database at db_path().
  sql::Database& db();

  // Closes the current connection to the database and reopens it.
  bool Reopen();

  // Proxying method around base::PathExists.
  bool GetPathExists(const base::FilePath& path);

  // SQLite stores the database size in the header, and if the actual
  // OS-derived size is smaller, the database is considered corrupt.
  // [This case is actually a common form of corruption in the wild.]
  // This helper sets the in-header size to one page larger than the
  // actual file size.  The resulting file will return SQLITE_CORRUPT
  // for most operations unless PRAGMA writable_schema is turned ON.
  //
  // Returns false if any error occurs accessing the file.
  bool CorruptSizeInHeaderOfDB();

  // Writes junk to the start of the file.
  void WriteJunkToDatabase(WriteJunkType type);

  // Sets the database file size to 0.
  void TruncateDatabase();

  // Overridden from testing::Test:
  void SetUp() override;
  void TearDown() override;

 private:
  base::ScopedTempDir temp_dir_;
  sql::Database db_;

  DISALLOW_COPY_AND_ASSIGN(SQLTestBase);
};

}  // namespace sql

#endif  // SQL_TEST_SQL_TEST_BASE_H_
