// Copyright (C) 2008 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 {
    default_team: "trendy_team_fwk_core_networking",
    default_applicable_licenses: ["Android-Apache-2.0"],
}

java_defaults {
    name: "CtsNetTestCasesDefaults",
    defaults: [
        "cts_defaults",
        "framework-connectivity-test-defaults",
    ],

    // Include both the 32 and 64 bit versions
    compile_multilib: "both",

    libs: [
        "voip-common",
        "android.test.base",
    ],

    jni_libs: [
        "libcts_jni",
        "libnativedns_jni",
        "libnativemultinetwork_jni",
        "libnativehelper_compat_libc++",
    ],

    srcs: [
        "src/**/*.java",
        "src/**/*.kt",
        ":ike-aes-xcbc",
    ],
    jarjar_rules: "jarjar-rules-shared.txt",
    static_libs: [
        "bouncycastle-unbundled",
        "FrameworksNetCommonTests",
        "core-tests-support",
        "cts-net-utils",
        "CtsNetTestsNonUpdatableLib",
        "ctstestrunner-axt",
        "junit",
        "junit-params",
        "modules-utils-build",
        "net-tests-utils",
        "net-utils-framework-common",
        "truth",
        "TetheringIntegrationTestsBaseLib",
    ],

    // uncomment when b/13249961 is fixed
    // sdk_version: "current",
    platform_apis: true,
    per_testcase_directory: true,
    host_required: ["net-tests-utils-host-common"],
    test_config_template: "AndroidTestTemplate.xml",
    data: [
        ":ConnectivityTestPreparer",
        ":CtsCarrierServicePackage",
    ],
}

// Networking CTS tests for development and release. These tests always target the platform SDK
// version, and are subject to all the restrictions appropriate to that version. Before SDK
// finalization, these tests have a min_sdk_version of 10000, and cannot be installed on release
// devices.
android_test {
    name: "CtsNetTestCases",
    defaults: [
        "CtsNetTestCasesDefaults",
        "ConnectivityNextEnableDefaults",
    ],
    static_libs: [
        "DhcpPacketLib",
        "NetworkStackApiCurrentShims",
    ],
    test_suites: [
        "cts",
        "general-tests",
    ],
}

java_defaults {
    name: "CtsNetTestCasesApiStableDefaults",
    // TODO: CTS should not depend on the entirety of the networkstack code.
    static_libs: [
        "DhcpPacketLib",
        "NetworkStackApiStableShims",
    ],
    jni_uses_sdk_apis: true,
    min_sdk_version: "30",
}

// Networking CTS tests that target the latest released SDK. These tests can be installed on release
// devices at any point in the Android release cycle and are useful for qualifying mainline modules
// on release devices.
android_test {
    name: "CtsNetTestCasesLatestSdk",
    defaults: [
        "ConnectivityTestsLatestSdkDefaults",
        "CtsNetTestCasesDefaults",
        "CtsNetTestCasesApiStableDefaults",
    ],
    test_suites: [
        "general-tests",
        "mts-dnsresolver",
        "mts-networking",
        "mts-tethering",
        "mts-wifi",
    ],
}

java_defaults {
    name: "CtsNetTestCasesMaxTargetSdkDefaults",
    defaults: [
        "CtsNetTestCasesDefaults",
        "CtsNetTestCasesApiStableDefaults",
    ],
    test_suites: [
        "cts",
        "general-tests",
        "mts-tethering",
        "mcts-tethering",
    ],
}

android_test {
    name: "CtsNetTestCasesMaxTargetSdk33", // Must match CtsNetTestCasesMaxTargetSdk33 annotation.
    defaults: ["CtsNetTestCasesMaxTargetSdkDefaults"],
    target_sdk_version: "33",
    package_name: "android.net.cts.maxtargetsdk33",
    instrumentation_target_package: "android.net.cts.maxtargetsdk33",
}

android_test {
    name: "CtsNetTestCasesMaxTargetSdk31", // Must match CtsNetTestCasesMaxTargetSdk31 annotation.
    defaults: ["CtsNetTestCasesMaxTargetSdkDefaults"],
    target_sdk_version: "31",
    package_name: "android.net.cts.maxtargetsdk31", // CTS package names must be unique.
    instrumentation_target_package: "android.net.cts.maxtargetsdk31",
}

android_test {
    name: "CtsNetTestCasesMaxTargetSdk30", // Must match CtsNetTestCasesMaxTargetSdk30 annotation.
    defaults: ["CtsNetTestCasesMaxTargetSdkDefaults"],
    target_sdk_version: "30",
    package_name: "android.net.cts.maxtargetsdk30", // CTS package names must be unique.
    instrumentation_target_package: "android.net.cts.maxtargetsdk30",
}

android_test_helper_app {
    name: "CtsCarrierServicePackage",
    defaults: ["cts_defaults"],
    package_name: "android.net.cts.carrierservicepackage",
    manifest: "carrierservicepackage/AndroidManifest.xml",
    srcs: ["carrierservicepackage/src/**/*.java"],
    min_sdk_version: "30",
    // Tag this module as a cts test artifact
    test_suites: [
        "cts",
        "general-tests",
    ],
}
