123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- // Copyright (C) 2021 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 sdk
- import (
- "testing"
- "android/soong/android"
- "android/soong/dexpreopt"
- "android/soong/java"
- )
- func testSnapshotWithSystemServerClasspathFragment(t *testing.T, sdk string, targetBuildRelease string, expectedSdkSnapshot string) {
- result := android.GroupFixturePreparers(
- prepareForSdkTestWithJava,
- java.PrepareForTestWithJavaDefaultModules,
- java.PrepareForTestWithJavaSdkLibraryFiles,
- java.FixtureWithLastReleaseApis("mysdklibrary"),
- dexpreopt.FixtureSetApexSystemServerJars("myapex:mylib", "myapex:mysdklibrary"),
- android.FixtureModifyEnv(func(env map[string]string) {
- if targetBuildRelease != "latest" {
- env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = targetBuildRelease
- }
- }),
- prepareForSdkTestWithApex,
- android.FixtureWithRootAndroidBp(sdk+`
- apex {
- name: "myapex",
- key: "myapex.key",
- min_sdk_version: "2",
- systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
- }
- systemserverclasspath_fragment {
- name: "mysystemserverclasspathfragment",
- apex_available: ["myapex"],
- contents: [
- "mylib",
- "mysdklibrary",
- ],
- }
- java_library {
- name: "mylib",
- apex_available: ["myapex"],
- srcs: ["Test.java"],
- system_modules: "none",
- sdk_version: "none",
- min_sdk_version: "2",
- compile_dex: true,
- permitted_packages: ["mylib"],
- dex_preopt: {
- profile: "art-profile",
- },
- }
- java_sdk_library {
- name: "mysdklibrary",
- apex_available: ["myapex"],
- srcs: ["Test.java"],
- shared_library: false,
- public: {enabled: true},
- min_sdk_version: "2",
- dex_preopt: {
- profile: "art-profile",
- },
- }
- `),
- ).RunTest(t)
- CheckSnapshot(t, result, "mysdk", "",
- checkAndroidBpContents(expectedSdkSnapshot),
- )
- }
- func TestSnapshotWithEmptySystemServerClasspathFragment(t *testing.T) {
- commonSdk := `
- apex {
- name: "myapex",
- key: "myapex.key",
- min_sdk_version: "Tiramisu",
- systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
- }
- systemserverclasspath_fragment {
- name: "mysystemserverclasspathfragment",
- apex_available: ["myapex"],
- contents: ["mysdklibrary"],
- }
- java_sdk_library {
- name: "mysdklibrary",
- apex_available: ["myapex"],
- srcs: ["Test.java"],
- min_sdk_version: "34", // UpsideDownCake
- }
- sdk {
- name: "mysdk",
- apexes: ["myapex"],
- }
- `
- result := android.GroupFixturePreparers(
- prepareForSdkTestWithJava,
- java.PrepareForTestWithJavaDefaultModules,
- java.PrepareForTestWithJavaSdkLibraryFiles,
- java.FixtureWithLastReleaseApis("mysdklibrary"),
- dexpreopt.FixtureSetApexSystemServerJars("myapex:mysdklibrary"),
- android.FixtureModifyEnv(func(env map[string]string) {
- // targeting Tiramisu here means that we won't export mysdklibrary
- env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = "Tiramisu"
- }),
- android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
- variables.Platform_version_active_codenames = []string{"UpsideDownCake"}
- }),
- prepareForSdkTestWithApex,
- android.FixtureWithRootAndroidBp(commonSdk),
- ).RunTest(t)
- CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
- }
- func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) {
- commonSdk := `
- sdk {
- name: "mysdk",
- systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
- java_sdk_libs: [
- // This is not strictly needed as it should be automatically added to the sdk_snapshot as
- // a java_sdk_libs module because it is used in the mysystemserverclasspathfragment's
- // contents property. However, it is specified here to ensure that duplicates are
- // correctly deduped.
- "mysdklibrary",
- ],
- }
- `
- expectedLatestSnapshot := `
- // This is auto-generated. DO NOT EDIT.
- java_sdk_library_import {
- name: "mysdklibrary",
- prefer: false,
- visibility: ["//visibility:public"],
- apex_available: ["myapex"],
- shared_library: false,
- dex_preopt: {
- profile_guided: true,
- },
- public: {
- jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
- stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
- current_api: "sdk_library/public/mysdklibrary.txt",
- removed_api: "sdk_library/public/mysdklibrary-removed.txt",
- sdk_version: "current",
- },
- }
- java_import {
- name: "mylib",
- prefer: false,
- visibility: ["//visibility:public"],
- apex_available: ["myapex"],
- jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
- min_sdk_version: "2",
- permitted_packages: ["mylib"],
- dex_preopt: {
- profile_guided: true,
- },
- }
- prebuilt_systemserverclasspath_fragment {
- name: "mysystemserverclasspathfragment",
- prefer: false,
- visibility: ["//visibility:public"],
- apex_available: ["myapex"],
- contents: [
- "mylib",
- "mysdklibrary",
- ],
- }
- `
- t.Run("target-s", func(t *testing.T) {
- testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "S", `
- // This is auto-generated. DO NOT EDIT.
- java_sdk_library_import {
- name: "mysdklibrary",
- prefer: false,
- visibility: ["//visibility:public"],
- apex_available: ["myapex"],
- shared_library: false,
- public: {
- jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
- stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
- current_api: "sdk_library/public/mysdklibrary.txt",
- removed_api: "sdk_library/public/mysdklibrary-removed.txt",
- sdk_version: "current",
- },
- }
- `)
- })
- t.Run("target-t", func(t *testing.T) {
- testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "Tiramisu", `
- // This is auto-generated. DO NOT EDIT.
- java_sdk_library_import {
- name: "mysdklibrary",
- prefer: false,
- visibility: ["//visibility:public"],
- apex_available: ["myapex"],
- shared_library: false,
- public: {
- jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
- stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
- current_api: "sdk_library/public/mysdklibrary.txt",
- removed_api: "sdk_library/public/mysdklibrary-removed.txt",
- sdk_version: "current",
- },
- }
- java_import {
- name: "mylib",
- prefer: false,
- visibility: ["//visibility:public"],
- apex_available: ["myapex"],
- jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
- min_sdk_version: "2",
- permitted_packages: ["mylib"],
- }
- prebuilt_systemserverclasspath_fragment {
- name: "mysystemserverclasspathfragment",
- prefer: false,
- visibility: ["//visibility:public"],
- apex_available: ["myapex"],
- contents: [
- "mylib",
- "mysdklibrary",
- ],
- }
- `)
- })
- t.Run("target-u", func(t *testing.T) {
- testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "UpsideDownCake", `
- // This is auto-generated. DO NOT EDIT.
- java_sdk_library_import {
- name: "mysdklibrary",
- prefer: false,
- visibility: ["//visibility:public"],
- apex_available: ["myapex"],
- shared_library: false,
- dex_preopt: {
- profile_guided: true,
- },
- public: {
- jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
- stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
- current_api: "sdk_library/public/mysdklibrary.txt",
- removed_api: "sdk_library/public/mysdklibrary-removed.txt",
- sdk_version: "current",
- },
- }
- java_import {
- name: "mylib",
- prefer: false,
- visibility: ["//visibility:public"],
- apex_available: ["myapex"],
- jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
- min_sdk_version: "2",
- permitted_packages: ["mylib"],
- dex_preopt: {
- profile_guided: true,
- },
- }
- prebuilt_systemserverclasspath_fragment {
- name: "mysystemserverclasspathfragment",
- prefer: false,
- visibility: ["//visibility:public"],
- apex_available: ["myapex"],
- contents: [
- "mylib",
- "mysdklibrary",
- ],
- }
- `)
- })
- t.Run("added-directly", func(t *testing.T) {
- testSnapshotWithSystemServerClasspathFragment(t, commonSdk, `latest`, expectedLatestSnapshot)
- })
- t.Run("added-via-apex", func(t *testing.T) {
- testSnapshotWithSystemServerClasspathFragment(t, `
- sdk {
- name: "mysdk",
- apexes: ["myapex"],
- }
- `, `latest`, expectedLatestSnapshot)
- })
- }
|