// 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_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-utils-framework-common",
        "truth-prebuilt",
    ],

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

// 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: "29",
}

// 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",
    ],
}

android_test {
    name: "CtsNetTestCasesMaxTargetSdk31",  // Must match CtsNetTestCasesMaxTargetSdk31 annotation.
    defaults: [
        "CtsNetTestCasesDefaults",
        "CtsNetTestCasesApiStableDefaults",
    ],
    target_sdk_version: "31",
    package_name: "android.net.cts.maxtargetsdk31",  // CTS package names must be unique.
    instrumentation_target_package: "android.net.cts.maxtargetsdk31",
    test_suites: [
        "cts",
        "general-tests",
        "mts-networking",
    ],
}

android_test {
    name: "CtsNetTestCasesMaxTargetSdk30",  // Must match CtsNetTestCasesMaxTargetSdk30 annotation.
    defaults: [
        "CtsNetTestCasesDefaults",
        "CtsNetTestCasesApiStableDefaults",
    ],
    target_sdk_version: "30",
    package_name: "android.net.cts.maxtargetsdk30",  // CTS package names must be unique.
    instrumentation_target_package: "android.net.cts.maxtargetsdk30",
    test_suites: [
        "cts",
        "general-tests",
        "mts-networking",
    ],
}
