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

java_defaults {
    name: "CtsNetTestCasesDefaults",
    defaults: ["cts_defaults"],

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

    libs: [
        "voip-common",
        "org.apache.http.legacy",
        "android.test.base",
    ],

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

    srcs: [
        "src/**/*.java",
        "src/**/*.kt",
    ],
    jarjar_rules: "jarjar-rules-shared.txt",
    static_libs: [
        "FrameworksNetCommonTests",
        "TestNetworkStackLib",
        "compatibility-device-util-axt",
        "core-tests-support",
        "cts-net-utils",
        "ctstestrunner-axt",
        "ctstestserver",
        "junit",
        "junit-params",
        "mockwebserver",
        "net-utils-framework-common",
        "truth-prebuilt",
    ],

    // uncomment when b/13249961 is fixed
    // sdk_version: "current",
    platform_apis: true,
}

// 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"],
    test_suites: [
        "cts",
        "vts10",
        "general-tests",
    ],
    test_config_template: "AndroidTestTemplate.xml",
}

// 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: ["CtsNetTestCasesDefaults"],
    jni_uses_sdk_apis: true,
    min_sdk_version: "29",
    target_sdk_version: "30",
    test_suites: [
        "general-tests",
        "mts",
    ],
    test_config_template: "AndroidTestTemplate.xml",
}
