# Copyright (c) 2022-2024 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("//build/config/features.gni")
import("//build/test.gni")
import("../../../../user_auth_framework.gni")

if (!defined(global_parts_info) ||
    defined(global_parts_info.account_os_account)) {
  has_os_account_part = true
} else {
  has_os_account_part = false
}

ohos_fuzztest("UserAuthServiceFuzzTest") {
  branch_protector_ret = "pac_ret"
  module_out_path = "user_auth_framework/user_auth/concurrent"
  fuzz_config_file = "../userauthservice_fuzzer"
  cflags = [
    "-g",
    "-O0",
    "-Wno-unused-variable",
    "-fno-omit-frame-pointer",
    "-Dprivate=public",
    "-DIAM_TEST_ENABLE",
    "-Dprotected=public",
  ]

  include_dirs = [
    "../inc",
    "../../../../services/base/inc",
    "../../../../services/engine/inc",
    "../../../../services/engine/pub_inc",
    "../../../../services/core/inc",
    "../../../../services/core/src",
    "../../../../services/context/inc",
    "../../../../services/ipc/inc",
    "../../../../services/remote_connect/inc",
    "../../../../services/remote_connect/default/inc",
    "../../../../frameworks/native/ipc/inc",
    "../../../../frameworks/native/ipc/common_defines",
    "../../../../frameworks/common/inc",
    "../../../../common/utils",
    "../../../../common/logs",
    "../../dummy",
  ]

  remove_configs = [ "//build/config/compiler:no_exceptions" ]

  sources = [
    "../../../../frameworks/common/src/user_auth_helper.cpp",
    "../../../../services/base/src/finite_state_machine_builder.cpp",
    "../../../../services/base/src/finite_state_machine_impl.cpp",
    "../../../../services/engine/src/hdi_engine.cpp",
    "../../../../services/engine/src/hdi_type_convert.cpp",
    "../../../../services/base/src/thread_handler_impl.cpp",
    "../../../../services/base/src/thread_handler_singleton_impl.cpp",
    "../../../../services/context/src/auth_widget_helper.cpp",
    "../../../../services/context/src/base_context.cpp",
    "../../../../services/context/src/context_appstate_observer.cpp",
    "../../../../services/context/src/context_callback_impl.cpp",
    "../../../../services/context/src/context_death_recipient.cpp",
    "../../../../services/context/src/context_factory.cpp",
    "../../../../services/context/src/context_helper.cpp",
    "../../../../services/context/src/context_pool_impl.cpp",
    "../../../../services/context/src/delete_context.cpp",
    "../../../../services/context/src/enroll_context.cpp",
    "../../../../services/context/src/identify_context.cpp",
    "../../../../services/context/src/local_remote_auth_context.cpp",
    "../../../../services/context/src/remote_auth_context.cpp",
    "../../../../services/context/src/remote_auth_invoker_context.cpp",
    "../../../../services/context/src/remote_auth_service.cpp",
    "../../../../services/context/src/remote_executor_stub.cpp",
    "../../../../services/context/src/remote_iam_callback.cpp",
    "../../../../services/context/src/schedule_holder_context.cpp",
    "../../../../services/context/src/set_widget_param_callback_service.cpp",
    "../../../../services/context/src/simple_auth_context.cpp",
    "../../../../services/context/src/trace.cpp",
    "../../../../services/context/src/ui_extension_ability_connection.cpp",
    "../../../../services/context/src/widget_context_callback_impl.cpp",
    "../../../../services/context/src/widget_json.cpp",
    "../../../../services/core/src/authentication_impl.cpp",
    "../../../../services/core/src/credential_info_impl.cpp",
    "../../../../services/core/src/credential_updated_manager.cpp",
    "../../../../services/core/src/delete_impl.cpp",
    "../../../../services/core/src/engine_state_manager.cpp",
    "../../../../services/core/src/enrolled_info_impl.cpp",
    "../../../../services/core/src/enrollment_impl.cpp",
    "../../../../services/core/src/event_listener_manager.cpp",
    "../../../../services/core/src/identification_impl.cpp",
    "../../../../services/core/src/publish_event_adapter_mock.cpp",
    "../../../../services/core/src/remote_auth_callback_manager.cpp",
    "../../../../services/core/src/remote_executor_proxy.cpp",
    "../../../../services/core/src/remote_msg_util.cpp",
    "../../../../services/core/src/resource_node_impl.cpp",
    "../../../../services/core/src/resource_node_pool_impl.cpp",
    "../../../../services/core/src/resource_node_utils.cpp",
    "../../../../services/core/src/risk_event_manager.cpp",
    "../../../../services/core/src/schedule_node_builder.cpp",
    "../../../../services/core/src/schedule_node_helper.cpp",
    "../../../../services/core/src/schedule_node_impl.cpp",
    "../../../../services/core/src/schedule_resource_node_listener.cpp",
    "../../../../services/core/src/screenlock_status_listener.cpp",
    "../../../../services/core/src/secure_user_info_impl.cpp",
    "../../../../services/core/src/update_pin_param_impl.cpp",
    "../../../../services/core/src/user_idm_database_impl.cpp",
    "../../../../services/core/src/user_info_impl.cpp",
    "../../../../services/core/src/widget_schedule_node_impl.cpp",
    "../../../../services/ipc/src/co_auth_service.cpp",
    "../../../../services/ipc/src/executor_messenger_service.cpp",
    "../../../../services/ipc/src/message_callback_service.cpp",
    "../../../../services/ipc/src/service_init_manager.cpp",
    "../../../../services/ipc/src/template_cache_manager.cpp",
    "../../../../services/ipc/src/user_auth_service.cpp",
    "../../../../services/ipc/src/user_idm_service.cpp",
    "../../../../services/load_mode/src/load_mode_handler.cpp",
    "../../../../services/load_mode/src/load_mode_handler_default.cpp",
    "../../dummy/mock_ipc_common.cpp",
    "../../dummy/mock_iuser_auth_interface.cpp",
    "../../dummy/mock_system_ability_listener.cpp",
    "../../dummy/mock_thread_handler_manager.cpp",
    "../../dummy/mock_widget_client.cpp",
    "../../dummy/mock_widget_context.cpp",
    "user_auth_service_fuzzer.cpp",
  ]

  deps = [
    "../../../../frameworks/native/client:userauth_client",
    "../../../../frameworks/native/ipc:userauth_service_ipc_fuzzer",
    "../../common_fuzzer:attributes_fuzzer",
    "../../common_fuzzer:dfx_fuzzer",
    "../../common_fuzzer:iam_test_fuzzer",
    "../../common_fuzzer:iam_utils_fuzzer",
    "../../common_fuzzer:userauth_service_remote_connect_fuzzer",
  ]

  external_deps = [
    "ability_base:base",
    "ability_base:want",
    "ability_base:zuri",
    "ability_runtime:ability_connect_callback_stub",
    "ability_runtime:ability_context_native",
    "ability_runtime:abilitykit_native",
    "ability_runtime:app_manager",
    "ability_runtime:extension_manager",
    "ability_runtime:extensionkit_native",
    "access_token:libaccesstoken_sdk",
    "access_token:libtokenid_sdk",
    "c_utils:utils",
    "config_policy:configpolicy_util",
    "drivers_interface_user_auth:libuser_auth_proxy_4.0",
    "drivers_interface_user_auth:libuser_auth_proxy_4.1",
    "eventhandler:libeventhandler",
    "hdf_core:libhdf_utils",
    "hdf_core:libhdi",
    "hicollie:libhicollie",
    "hilog:libhilog",
    "hitrace:hitrace_meter",
    "init:libbeget_proxy",
    "init:libbegetutil",
    "ipc:ipc_core",
    "ipc:ipc_single",
    "napi:ace_napi",
    "node:node_header_notice",
    "safwk:system_ability_fwk",
    "samgr:samgr_proxy",
  ]

  defines = []
  if (screenlock_client_enable) {
    external_deps += [
      "eventhandler:libeventhandler",
      "ffrt:libffrt",
      "preferences:native_preferences",
      "screenlock_mgr:screenlock_client",
      "window_manager:libdm_lite",
    ]
    sources +=
        [ "../../../../services/core/src/strong_auth_status_manager_impl.cpp" ]
    defines += [ "SCREENLOCK_CLIENT_ENABLE" ]
  } else {
    sources +=
        [ "../../../../services/core/src/strong_auth_status_manager_mock.cpp" ]
  }

  if (has_os_account_part) {
    cflags_cc = [ "-DHAS_OS_ACCOUNT_PART" ]
    external_deps += [ "os_account:os_account_innerkits" ]
    sources += [ "../../../../services/core/src/os_accounts_manager_impl.cpp" ]
  } else {
    sources += [ "../../../../services/core/src/os_accounts_manager_mock.cpp" ]
  }

  public_configs = [
    "../../../../frameworks/native/ipc:userauth_client_ipc_config",
    "../../../../services:userauth_services_config",
  ]

  configs = [
    "../../../../services:userauth_services_config",
    "../../../../common:iam_log_config",
    "../../../../common:iam_utils_config",
  ]

  subsystem_name = "useriam"
  part_name = "user_auth_framework"
}