// Copyright (C) 2018 The Android Open Source Project
//
// 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.

package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "bootable_recovery_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["bootable_recovery_license"],
}

cc_defaults {
    name: "recovery_test_defaults",

    defaults: [
        "recovery_defaults",
    ],

    include_dirs: [
        "bootable/recovery",
    ],

    shared_libs: [
        "libbase",
        "libcrypto",
        "libcutils",
        "liblog",
        "libpng",
        "libprocessgroup",
        "libselinux",
        "libziparchive",
    ],

    target: {
        android: {
            shared_libs: [
                "libutils",
                "libvndksupport",
            ],
        },

        host: {
            static_libs: [
                "libutils",
            ],
        },
    },
}

// libapplypatch, libapplypatch_modes
libapplypatch_static_libs = [
    "libapplypatch_modes",
    "libapplypatch",
    "libedify",
    "libotautil",
    "libbsdiff",
    "libbspatch",
    "libdivsufsort",
    "libdivsufsort64",
    "libutils",
    "libbase",
    "libbrotli",
    "libbz",
    "libz_stable",
    "libziparchive",
]

// librecovery_defaults uses many shared libs that we want to avoid using in tests (e.g. we don't
// have 32-bit android.hardware.health@2.0.so or libbootloader_message.so on marlin).
librecovery_static_libs = [
    "librecovery",
    "librecovery_fastboot",
    "libinstall",
    "librecovery_ui",
    "libminui",
    "libfusesideload",
    "libbootloader_message",
    "libotautil",

    "libhealthhalutils",
    "libvintf",

    "android.hardware.health@2.0",
    "android.hardware.health@1.0",
    "libext4_utils",
    "libfs_mgr",
    "libhidl-gen-utils",
    "libhidlbase",
    "liblp",
    "libtinyxml2",
    "libc++fs",
]

// recovery image for unittests.
// ========================================================
genrule {
    name: "recovery_image",
    cmd: "cat $(location testdata/recovery_head) <(cat $(location testdata/recovery_body) | $(location minigzip)) $(location testdata/recovery_tail) > $(out)",
    srcs: [
        "testdata/recovery_head",
        "testdata/recovery_body",
        "testdata/recovery_tail",
    ],
    tools: [
        "minigzip",
    ],
    out: [
        "testdata/recovery.img",
    ],
}

cc_test {
    name: "recovery_unit_test",
    isolated: true,
    require_root: true,

    defaults: [
        "recovery_test_defaults",
        "libupdater_defaults",
        "libupdater_device_defaults",
    ],

    test_suites: ["device-tests"],

    tidy_timeout_srcs: [
        "unit/commands_test.cpp",
    ],

    srcs: [
        "unit/*.cpp",
    ],

    shared_libs: [
        "libbinder_ndk",
    ],

    static_libs: libapplypatch_static_libs + librecovery_static_libs + [
        "android.hardware.health-translate-ndk",
        "android.hardware.health-V1-ndk",
        "libhealthshim",
        "librecovery_ui",
        "libfusesideload",
        "libminui",
        "librecovery_utils",
        "libotautil",
        "libupdater_device",
        "libupdater_core",
        "libupdate_verifier",

        "libprotobuf-cpp-lite",
    ],
    header_libs: [
        "libgtest_prod_headers",
    ],

    data: [
        "testdata/*",
        ":recovery_image",
        ":res-testdata",
    ],
}

cc_test {
    name: "recovery_manual_test",
    isolated: true,

    defaults: [
        "recovery_test_defaults",
    ],

    test_suites: ["device-tests"],

    srcs: [
        "manual/recovery_test.cpp",
    ],
}

cc_test_host {
    name: "recovery_host_test",
    isolated: true,

    defaults: [
        "recovery_test_defaults",
        "libupdater_defaults",
    ],

    tidy_timeout_srcs: [
        "unit/host/imgdiff_test.cpp",
    ],

    srcs: [
        "unit/host/*",
    ],

    static_libs: [
        "libupdater_host",
        "libupdater_core",
        "libimgdiff",
        "libbsdiff",
        "libdivsufsort64",
        "libdivsufsort",
        "libfstab",
        "libc++fs",
    ],

    test_suites: ["general-tests"],
    test_config: "RecoveryHostTest.xml",

    data: ["testdata/*"],

    target: {
        darwin: {
            // libapplypatch in "libupdater_defaults" is not available on the Mac.
            enabled: false,
        },
    },
}

cc_fuzz {
    name: "libinstall_verify_package_fuzzer",
    defaults: [
        "recovery_test_defaults",
    ],

    srcs: ["fuzz/verify_package_fuzzer.cpp"],

    corpus: [
      "testdata/otasigned*.zip",
    ],

    static_libs: [
        "libotautil",
        "libinstall",
        "librecovery_ui",
        "libminui",
    ],
}
