# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")

component("sql") {
  sources = [
    "database.cc",
    "database.h",
    "database_memory_dump_provider.cc",
    "database_memory_dump_provider.h",
    "error_delegate_util.cc",
    "error_delegate_util.h",
    "init_status.h",
    "initialization.cc",
    "initialization.h",
    "internal_api_token.h",
    "meta_table.cc",
    "meta_table.h",
    "recovery.cc",
    "recovery.h",
    "sandboxed_vfs.cc",
    "sandboxed_vfs.h",
    "sandboxed_vfs_file.cc",
    "sandboxed_vfs_file.h",
    "sql_features.cc",
    "sql_features.h",
    "sql_memory_dump_provider.cc",
    "sql_memory_dump_provider.h",
    "sqlite_result_code.cc",
    "sqlite_result_code.h",
    "sqlite_result_code_values.cc",
    "sqlite_result_code_values.h",
    "statement.cc",
    "statement.h",
    "statement_id.cc",
    "statement_id.h",
    "transaction.cc",
    "transaction.h",
    "vfs_wrapper.cc",
    "vfs_wrapper.h",
  ]

  defines = [ "IS_SQL_IMPL" ]

  deps = [
    "//base",
    "//third_party/sqlite",
  ]

  # For vfs_wrapper.cc time-machine exclusions.
  if (is_mac) {
    frameworks = [
      "CoreFoundation.framework",
      "CoreServices.framework",
    ]
  }

  if (is_fuchsia) {
    sources += [
      "vfs_wrapper_fuchsia.cc",
      "vfs_wrapper_fuchsia.h",
    ]
  }
}

static_library("test_support") {
  testonly = true
  sources = [
    "test/scoped_error_expecter.cc",
    "test/scoped_error_expecter.h",
    "test/test_helpers.cc",
    "test/test_helpers.h",
  ]

  public_deps = [ ":sql" ]
  deps = [
    "//base",
    "//testing/gtest",
    "//third_party/sqlite",
  ]
}

bundle_data("sql_unittests_bundle_data") {
  testonly = true
  sources = [ "test/data/recovery_387868" ]
  outputs = [ "{{bundle_resources_dir}}/" +
              "{{source_root_relative_dir}}/{{source_file_part}}" ]
}

test("sql_unittests") {
  sources = [
    "database_options_unittest.cc",
    "database_unittest.cc",
    "meta_table_unittest.cc",
    "recovery_unittest.cc",
    "sql_memory_dump_provider_unittest.cc",
    "sqlite_features_unittest.cc",
    "sqlite_result_code_unittest.cc",
    "statement_id_unittest.cc",
    "statement_unittest.cc",
    "test/paths.cc",
    "test/paths.h",
    "test/run_all_unittests.cc",
    "test/sql_test_suite.cc",
    "test/sql_test_suite.h",
    "transaction_unittest.cc",
  ]

  data = [ "test/data/" ]

  deps = [
    ":sql",
    ":sql_unittests_bundle_data",
    ":test_support",
    "//base/test:test_support",
    "//testing/gtest",
    "//third_party/sqlite",
  ]
}

fuzzer_test("sql_recovery_fuzzer") {
  sources = [ "recovery_fuzzer.cc" ]
  deps = [
    ":sql",
    "//base",
    "//base/test:test_support",
  ]

  libfuzzer_options = [ "rss_limit_mb=4096" ]
}

group("fuzzers") {
  testonly = true
  deps = [ "//sql/fuzzers:sql_recovery_lpm_fuzzer" ]
}
