// 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.

java_defaults {
    name: "apex_e2e_test_defaults",
    libs: ["tradefed"],
    static_libs: [
        "apex_e2e_base_test",
    ],
}

java_test_host {
    name: "adbd_e2e_tests",
    srcs:  ["src/**/AdbdHostTest.java"],
    defaults: ["apex_e2e_test_defaults"],
    data: [
        ":test_com.android.adbd",
    ],
    test_config: "adbd-e2e-tests.xml",
    test_suites: ["general-tests"],
}

java_test_host {
    name: "timezone_data_e2e_tests",
    srcs:  ["src/**/TimezoneDataHostTest.java"],
    defaults: ["apex_e2e_test_defaults"],
    static_libs: [
        "platformprotos",
    ],
    data: [
        ":test1_com.android.tzdata",
    ],
    test_config: "timezone-data-e2e-tests.xml",
    test_suites: ["general-tests"],
}

java_test_host {
    name: "media_e2e_tests",
    srcs:  ["src/**/MediaHostTest.java"],
    defaults: ["apex_e2e_test_defaults"],
    data: [
        ":test_com.android.media",
    ],
    test_config: "media-e2e-tests.xml",
    test_suites: ["general-tests"],
}

java_test_host {
    name: "media_swcodec_e2e_tests",
    srcs:  ["src/**/MediaSwCodecHostTest.java"],
    defaults: ["apex_e2e_test_defaults"],
    data: [
        ":test_com.android.media.swcodec",
    ],
    test_config: "media-swcodec-e2e-tests.xml",
    test_suites: ["general-tests"],
}

java_test_host {
    name: "conscrypt_e2e_tests",
    srcs:  ["src/**/ConscryptHostTest.java"],
    defaults: ["apex_e2e_test_defaults"],
    data: [
        ":test_com.android.conscrypt",
    ],
    test_config: "conscrypt-e2e-tests.xml",
    test_suites: ["general-tests"],
}

java_test_host {
    name: "neuralnetworks_e2e_tests",
    srcs:  ["src/**/NeuralNetworksHostTest.java"],
    defaults: ["apex_e2e_test_defaults"],
    data: [
        ":test_com.android.neuralnetworks",
    ],
    test_config: "neuralnetworks-e2e-tests.xml",
    test_suites: ["general-tests"],
}

java_test_host {
    name: "ipsec_e2e_tests",
    srcs:  ["src/**/IpSecHostTest.java"],
    defaults: ["apex_e2e_test_defaults"],
    data: [
        ":test_com.android.ipsec",
    ],
    test_config: "ipsec-e2e-tests.xml",
    test_suites: ["general-tests"],
}


java_test_host {
    name: "telephony_e2e_tests",
    srcs:  ["src/**/TelephonyHostTest.java"],
    defaults: ["apex_e2e_test_defaults"],
    data: [
        ":test_com.android.telephony",
    ],
    test_config: "telephony-e2e-tests.xml",
    test_suites: ["general-tests"],
}

java_test_host {
    name: "sdkextensions_e2e_tests",
    srcs:  ["src/**/ApiExtensionsHostTest.java"],
    libs: ["tradefed"],
    static_libs: ["apex_e2e_base_test"],
    data: [
        ":test_com.android.sdkext",
    ],
    test_config: "sdkextensions-e2e-tests.xml",
    test_suites: ["general-tests"],
}

java_test_host {
    name: "apex_targetprep_tests",
    libs: ["tradefed"],
    srcs:  ["src/**/ApexTargetPrepTest.java"],
    data: [":StagedInstallTestApexV2"],
    test_config: "apex-targetprep-tests.xml",
    test_suites: ["general-tests"],
}

java_library_host {
    name: "apex_e2e_base_test",
    srcs: ["src/**/ApexE2EBaseHostTest.java"],
    static_libs: [
        "module_test_util",
    ],
    libs: [
        "tradefed",
    ],
}

java_library_host {
    name: "module_test_util",
    srcs: ["util/**/ModuleTestUtils.java"],
    libs: ["tradefed", "truth-prebuilt"],
}

apex {
    name: "apex.test",
    manifest: "testdata/apex_manifest.json",
    prebuilts: ["sample_prebuilt_file"],
    key: "apex.test.key",
    certificate: ":apex.test.certificate",
    installable: false,
}

apex_key {
    name: "apex.test.key",
    public_key: "testdata/com.android.apex.test.avbpubkey",
    private_key: "testdata/com.android.apex.test.pem",
    installable: false,
}

android_app_certificate {
    name: "apex.test.certificate",
    // will use testcert.pk8 and testcert.x509.pem
    certificate: "testdata/testcert",
}

prebuilt_etc {
    name: "apex.test.ld.config.txt",
    src: "testdata/ld.config.txt",
    filename: "ld.config.txt",
    installable: false,
}

prebuilt_etc {
    name: "sample_prebuilt_file",
    src: "testdata/sample_prebuilt_file",
}

prebuilt_etc {
    name: "apex.test.init.rc",
    src: "testdata/init.rc",
    filename: "init.rc",
    installable: false,
}

cc_binary {
    name: "sample_prefer32_binary",
    srcs: ["sample_prefer32_binary.cc"],
    target: {
        android: {
            compile_multilib: "prefer32",
        },
    },
}

java_test_host {
    name: "apex_rollback_tests",
    srcs:  ["src/**/ApexRollbackTests.java", "src/**/ApexTestUtils.java"],
    libs: ["tradefed", "truth-prebuilt"],
    static_libs: ["module_test_util"],
    test_config: "apex-rollback-tests.xml",
    test_suites: ["general-tests"],

    data: [
        "testdata/trigger_watchdog.rc",
        "testdata/trigger_watchdog.sh",
        ":com.android.apex.cts.shim.v2_prebuilt",
    ],
}

java_test_host {
    name: "apex_remount_tests",
    srcs:  ["src/**/ApexRemountTest.java"],
    libs: ["tradefed"],
    static_libs: [
        "module_test_util",
        "truth-prebuilt",
        "apex_manifest_proto_java",
    ],
    test_config: "apex-remount-tests.xml",

    data: [":com.android.apex.cts.shim.v2_prebuilt"],
}

java_test_host {
    name: "module_test_utils_tests",
    srcs:  ["src/**/ModuleTestUtilsTest.java"],
    libs: ["tradefed", "truth-prebuilt"],
    static_libs: ["module_test_util"],
    test_config: "module-test-utils-tests.xml",
    test_suites: ["general-tests"],
    data: [":com.android.apex.cts.shim.v2_prebuilt"],
}

java_test_host {
    name: "apexd_host_tests",
    srcs:  ["src/**/ApexdHostTest.java"],
    libs: ["tradefed"],
    static_libs: [
        "module_test_util",
        "truth-prebuilt",
        "apex_manifest_proto_java",
    ],
    test_config: "apexd-host-tests.xml",
    data: [":apex.apexd_test_v2"],
}