# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/components.gni")
import("//build/components/fuchsia_unittest_component.gni")

###############################################################################
# EXECUTABLES
###############################################################################
executable("log_message_store_unittest_exe") {
  testonly = true

  sources = [ "log_message_store_unittest.cc" ]

  deps = [
    "//src/developer/forensics/feedback_data:constants",
    "//src/developer/forensics/feedback_data/system_log_recorder:src",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:identity_encoder",
    "//src/developer/forensics/testing:gtest_with_syslog_main",
    "//src/developer/forensics/testing:log_message",
    "//src/developer/forensics/testing:unit_test_fixture",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

executable("lz4_encoding_unittest_exe") {
  testonly = true

  sources = [ "lz4_encoding_unittest.cc" ]

  deps = [
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:identity_decoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:identity_encoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:lz4_decoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:lz4_encoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:lz4_utils",
    "//src/developer/forensics/testing:gtest_with_syslog_main",
    "//src/developer/forensics/testing:unit_test_fixture",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
    "//third_party/re2",
  ]
}

executable("reader_unittest_exe") {
  testonly = true

  sources = [ "reader_unittest.cc" ]

  deps = [
    "//src/developer/forensics/feedback_data/system_log_recorder:reader",
    "//src/developer/forensics/feedback_data/system_log_recorder:src",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:decoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:identity_decoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:identity_encoder",
    "//src/developer/forensics/testing:gtest_with_syslog_main",
    "//src/developer/forensics/testing:log_message",
    "//src/lib/files",
    "//src/lib/fxl",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

executable("system_log_recorder_unittest_exe") {
  testonly = true

  sources = [ "system_log_recorder_unittest.cc" ]

  deps = [
    "//src/developer/forensics/feedback_data:constants",
    "//src/developer/forensics/feedback_data/system_log_recorder:reader",
    "//src/developer/forensics/feedback_data/system_log_recorder:src",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:decoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:identity_decoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:identity_encoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:production",
    "//src/developer/forensics/testing:gtest_with_syslog_main",
    "//src/developer/forensics/testing:unit_test_fixture",
    "//src/developer/forensics/testing/stubs:diagnostics",
    "//src/lib/files",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

executable("writer_unittest_exe") {
  testonly = true

  sources = [ "writer_unittest.cc" ]

  deps = [
    "//src/developer/forensics/feedback_data/system_log_recorder:reader",
    "//src/developer/forensics/feedback_data/system_log_recorder:src",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:decoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:identity_decoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:identity_encoder",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:production",
    "//src/developer/forensics/feedback_data/system_log_recorder/encoding:version",
    "//src/developer/forensics/testing:gtest_with_syslog_main",
    "//src/developer/forensics/testing:log_message",
    "//src/developer/forensics/testing:scoped_memfs_manager",
    "//src/lib/files",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

###############################################################################
# COMPONENTS
###############################################################################
fuchsia_unittest_component("log_message_store_unittest") {
  deps = [ ":log_message_store_unittest_exe" ]
}

fuchsia_unittest_component("lz4_encoding_unittest") {
  deps = [ ":lz4_encoding_unittest_exe" ]
}

fuchsia_unittest_component("reader_unittest") {
  deps = [
    ":reader_unittest_exe",
    "//src/sys/test_runners:tmp_storage",
  ]
}

fuchsia_unittest_component("system_log_recorder_unittest") {
  deps = [
    ":system_log_recorder_unittest_exe",
    "//src/sys/test_runners:tmp_storage",
  ]
}

fuchsia_unittest_component("writer_unittest") {
  deps = [
    ":writer_unittest_exe",
    "//src/sys/test_runners:tmp_storage",
  ]
}

###############################################################################
# PACKAGES
###############################################################################
fuchsia_test_package("system-log-recorder-tests") {
  test_components = [
    ":log_message_store_unittest",
    ":lz4_encoding_unittest",
    ":reader_unittest",
    ":system_log_recorder_unittest",
    ":writer_unittest",
  ]

  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

###############################################################################
# GROUPS
###############################################################################
group("tests") {
  testonly = true

  deps = [ ":system-log-recorder-tests" ]
}
