# Copyright (c) 2020 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build_overrides/build.gni")
import("//build_overrides/chip.gni")
import("//build_overrides/pigweed.gni")
import("${chip_root}/src/controller/flags.gni")
import("${chip_root}/src/lib/lib.gni")

import("${chip_root}/build/chip/chip_test_suite.gni")

chip_test_suite("tests") {
  output_name = "libControllerTests"

  test_sources = []

  # Not supported on efr32.
  if (chip_device_platform != "efr32") {
    test_sources += [ "TestCommissionableNodeController.cpp" ]
  }

  if (chip_device_platform != "esp32") {
    test_sources += [
      "TestEventCaching.cpp",
      "TestEventChunking.cpp",
      "TestEventNumberCaching.cpp",
      "TestReadChunking.cpp",
      "TestServerCommandDispatch.cpp",
    ]

    # At some instances, this Test end ups allocating more than 32 Timers, and since the fake platform doesn`t use the heap, the maximum number of allowed timers is 32.
    # So we get failures because we can't allocate any more timers, in the log it looks like:
    # SendMessage() to UDP:[::1]:5541 failed: b
    # deactivating since the Fake platform is mostly done to test Platform APIs
    if (chip_device_platform != "fake") {
      test_sources += [ "TestWriteChunking.cpp" ]
    }

    # Not supported on efr32.
    if (chip_device_platform != "efr32") {
      test_sources += [
        "TestCommissioningWindowOpener.cpp",
        "TestExampleOperationalCredentialsIssuer.cpp",
      ]
    }
  }

  if (chip_support_commissioning_in_controller && chip_build_controller) {
    test_sources += [ "TestAutoCommissioner.cpp" ]
  }

  test_sources += [ "TestCommissioningDelegate.cpp" ]

  cflags = [ "-Wconversion" ]

  sources = [ "AutoCommissionerTestAccess.h" ]

  public_deps = [
    "${chip_root}/src/app/common:cluster-objects",
    "${chip_root}/src/app/server",
    "${chip_root}/src/app/tests:helpers",
    "${chip_root}/src/controller",
    "${chip_root}/src/controller/data_model",
    "${chip_root}/src/lib/core:string-builder-adapters",
    "${chip_root}/src/lib/support:test_utils",
    "${chip_root}/src/lib/support:testing",
    "${chip_root}/src/messaging/tests:helpers",
    "${chip_root}/src/transport/raw/tests:helpers",
  ]

  if (chip_device_config_enable_joint_fabric) {
    public_deps += [
      "${chip_root}/src/controller/data_model",
      "${chip_root}/src/controller/jcm",
    ]
  }
}
