# Copyright (c) 2023 Huawei Device Co., Ltd.
# 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("//base/security/device_auth/deps_adapter/deviceauth_hals.gni")
import("//base/security/device_auth/services/deviceauth.gni")
import("../../../unittest/tdd_framework/tdd_framework.gni")

#####################hydra-fuzz###################
import("//build/config/features.gni")
import("//build/ohos.gni")
import("//build/test.gni")
module_output_path = "device_auth/device_auth"

##############################fuzztest##########################################
ohos_fuzztest("GroupOperationCommonFuzzTest") {
  module_out_path = module_output_path
  fuzz_config_file = "${deviceauth_path}/test/fuzztest/group_manage/groupoperationcommon_fuzzer"
  include_dirs = inc_path + hals_inc_path
  include_dirs += [
    ".",
    "${inner_api_path}",
    "${frameworks_path}/inc/standard",
    "${tdd_framework_path}/common/inc",
    "${dev_frameworks_path}/inc/hiview_adapter",
  ]
  include_dirs += identity_manager_inc
  if (support_os_account) {
    include_dirs += [ "${dev_frameworks_path}/inc/account_subscriber" ]
    include_dirs += [ "${dev_frameworks_path}/inc/sa_subscriber" ]
  }
  sources = [ "groupoperationcommon_fuzzer.cpp" ]
  sources += deviceauth_files
  sources += hal_common_files
  sources += hiview_adapter_files
  sources += identity_manager_files
  sources -= soft_bus_channel_files
  sources += soft_bus_channel_mock_files
  if (support_os_account) {
    sources += account_subscriber_files
    sources += sa_subscriber_files
  }
  sources += [
    "${key_management_adapter_path}/impl/src/common/mbedtls_ec_adapter.c",
    "${key_management_adapter_path}/impl/src/huks_adapter.c",
    "${key_management_adapter_path}/impl/src/standard/crypto_hash_to_point.c",
    "${key_management_adapter_path}/impl/src/standard/huks_adapter_diff_impl.c",
    "${os_adapter_path}/impl/src/hc_log.c",
    "${os_adapter_path}/impl/src/linux/hc_condition.c",
    "${os_adapter_path}/impl/src/linux/hc_file.c",
    "${os_adapter_path}/impl/src/linux/hc_init_protection.c",
    "${os_adapter_path}/impl/src/linux/hc_thread.c",
    "${os_adapter_path}/impl/src/linux/hc_types.c",
    "${tdd_framework_path}/common/src/hc_dev_info_mock.c",
  ]
  defines = [
    "DEV_AUTH_FUZZ_TEST",
    "DEV_AUTH_HIVIEW_ENABLE",
  ]
  cflags = [ "-DHILOG_ENABLE" ]
  cflags += [
    "-DDEV_AUTH_WORK_THREAD_STACK_SIZE=${device_auth_hichain_thread_stack_size}",
    "-DMAX_AUTH_SESSION_COUNT=${max_auth_session_count}",
  ]

  deps = []

  external_deps = [
    "cJSON:cjson",
    "c_utils:utils",
    "dsoftbus:softbus_client",
    "hilog:libhilog",
    "hisysevent:libhisysevent",
    "hitrace:hitrace_meter",
    "huks:libhukssdk",
    "mbedtls:mbedtls_shared",
    "openssl:libcrypto_static",
  ]
  if (support_os_account) {
    external_deps += [
      "ability_base:want",
      "common_event_service:cesfwk_innerkits",
      "ipc:ipc_single",
      "json:nlohmann_json_static",
      "os_account:os_account_innerkits",
      "samgr:samgr_proxy",
    ]
  }
}

###############################################################################
group("fuzztest") {
  testonly = true
  deps = []
  deps += [
    # deps file
    ":GroupOperationCommonFuzzTest",
  ]
}
###############################################################################