//
// Copyright (C) 2020 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: "TetheringIntegrationTestsDefaults",
    defaults: ["framework-connectivity-test-defaults"],
    srcs: [
        "src/**/*.java",
        "src/**/*.kt",
    ],
    min_sdk_version: "30",
    static_libs: [
        "NetworkStackApiStableLib",
        "androidx.test.rules",
        "mockito-target-extended-minus-junit4",
        "net-tests-utils",
        "testables",
    ],
    libs: [
        "android.test.runner",
        "android.test.base",
        "android.test.mock",
    ],
    jni_libs: [
        // For mockito extended
        "libdexmakerjvmtiagent",
        "libstaticjvmtiagent",
    ],
}

// Library including tethering integration tests targeting the latest stable SDK.
// Use with NetworkStackJarJarRules.
android_library {
    name: "TetheringIntegrationTestsLatestSdkLib",
    target_sdk_version: "30",
    platform_apis: true,
    defaults: ["TetheringIntegrationTestsDefaults"],
    visibility: [
        "//packages/modules/Connectivity/tests/cts/tethering",
        "//packages/modules/Connectivity/tests:__subpackages__",
        "//packages/modules/Connectivity/Tethering/tests:__subpackages__",
    ]
}

// Library including tethering integration tests targeting current development SDK.
// Use with NetworkStackJarJarRules.
android_library {
    name: "TetheringIntegrationTestsLib",
    target_sdk_version: "current",
    platform_apis: true,
    defaults: ["TetheringIntegrationTestsDefaults"],
    visibility: [
        "//packages/modules/Connectivity/tests/cts/tethering",
        "//packages/modules/Connectivity/Tethering/tests/mts",
    ]
}

android_test {
    name: "TetheringIntegrationTests",
    platform_apis: true,
    defaults: ["TetheringIntegrationTestsDefaults"],
    test_suites: [
        "device-tests",
        "mts-tethering",
    ],
    compile_multilib: "both",
    jarjar_rules: ":NetworkStackJarJarRules",
}

android_library {
    name: "TetheringCoverageTestsLib",
    min_sdk_version: "30",
    static_libs: [
        "NetdStaticLibTestsLib",
        "NetworkStaticLibTestsLib",
        "NetworkStackTestsLib",
        "TetheringTestsLatestSdkLib",
        "TetheringIntegrationTestsLatestSdkLib",
    ],
    // Jarjar rules should normally be applied on final artifacts and not intermediate libraries as
    // applying different rules on intermediate libraries can cause conflicts when combining them
    // (the resulting artifact can end up with multiple incompatible implementations of the same
    // classes). But this library is used to combine tethering coverage tests with connectivity
    // coverage tests into a single coverage target. The tests need to use the same jarjar rules as
    // covered production code for coverage to be calculated properly, so jarjar is applied
    // separately on each set of tests.
    jarjar_rules: ":TetheringCoverageJarJarRules",
    manifest: "AndroidManifest_coverage.xml",
    visibility: [
        "//packages/modules/Connectivity/tests:__subpackages__"
    ],
}

// Combine NetworkStack and Tethering jarjar rules for coverage target. The jarjar files are
// simply concatenated in the order specified in srcs.
genrule {
    name: "TetheringCoverageJarJarRules",
    srcs: [
        ":TetheringTestsJarJarRules",
        ":NetworkStackJarJarRules",
    ],
    out: ["jarjar-rules-tethering-coverage.txt"],
    cmd: "cat $(in) > $(out)",
    visibility: ["//visibility:private"],
}

// Special version of the tethering tests that includes all tests necessary for code coverage
// purposes. This is currently the union of TetheringTests, TetheringIntegrationTests and
// NetworkStackTests.
// TODO: remove in favor of ConnectivityCoverageTests, which includes below tests and more
android_test {
    name: "TetheringCoverageTests",
    platform_apis: true,
    min_sdk_version: "30",
    target_sdk_version: "30",
    test_suites: ["device-tests", "mts-tethering"],
    test_config: "AndroidTest_Coverage.xml",
    defaults: ["libnetworkstackutilsjni_deps"],
    static_libs: [
        "modules-utils-native-coverage-listener",
        "TetheringCoverageTestsLib",
    ],
    jni_libs: [
        // For mockito extended
        "libdexmakerjvmtiagent",
        "libstaticjvmtiagent",
        // For NetworkStackUtils included in NetworkStackBase
        "libnetworkstackutilsjni",
        "libcom_android_networkstack_tethering_util_jni",
    ],
    compile_multilib: "both",
    manifest: "AndroidManifest_coverage.xml",
}
