blob: 1a8d0b5d5e96f0e6c2dcb8ce29887f1acf6eaf7c [file] [log] [blame]
Paul Duffindb284be2021-03-11 08:07:46 +00001// Copyright 2021 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package java
16
17import (
Spandan Dascc530632024-01-19 00:22:22 +000018 "fmt"
Paul Duffindb284be2021-03-11 08:07:46 +000019 "testing"
Paul Duffinc52bea92021-03-11 08:10:19 +000020
21 "android/soong/android"
Paul Duffindb284be2021-03-11 08:07:46 +000022)
23
Paul Duffin29888b12021-03-29 00:04:10 +010024func getModuleHeaderJarsAsRelativeToTopPaths(result *android.TestResult, moduleNames ...string) []string {
Paul Duffinc52bea92021-03-11 08:10:19 +000025 paths := []string{}
26 for _, moduleName := range moduleNames {
27 module := result.Module(moduleName, "android_common")
Colin Cross5a377182023-12-14 14:46:23 -080028 info, _ := android.SingletonModuleProvider(result, module, JavaInfoProvider)
Paul Duffin29888b12021-03-29 00:04:10 +010029 paths = append(paths, info.HeaderJars.RelativeToTop().Strings()...)
Paul Duffinc52bea92021-03-11 08:10:19 +000030 }
31 return paths
32}
33
34var addSourceSystemModules = android.FixtureAddTextFile("source/Android.bp", `
Paul Duffindb284be2021-03-11 08:07:46 +000035 java_system_modules {
36 name: "system-modules",
37 libs: ["system-module1", "system-module2"],
38 }
39 java_library {
40 name: "system-module1",
41 srcs: ["a.java"],
42 sdk_version: "none",
43 system_modules: "none",
44 }
45 java_library {
46 name: "system-module2",
47 srcs: ["b.java"],
48 sdk_version: "none",
49 system_modules: "none",
50 }
Paul Duffinc52bea92021-03-11 08:10:19 +000051`)
Paul Duffindb284be2021-03-11 08:07:46 +000052
Paul Duffinc52bea92021-03-11 08:10:19 +000053func TestJavaSystemModules(t *testing.T) {
Paul Duffin55e740e2021-03-29 02:06:19 +010054 result := android.GroupFixturePreparers(prepareForJavaTest, addSourceSystemModules).RunTest(t)
Paul Duffindb284be2021-03-11 08:07:46 +000055
Paul Duffinc52bea92021-03-11 08:10:19 +000056 // check the existence of the source module
57 sourceSystemModules := result.ModuleForTests("system-modules", "android_common")
58 sourceInputs := sourceSystemModules.Rule("jarsTosystemModules").Inputs
Paul Duffindb284be2021-03-11 08:07:46 +000059
Paul Duffinc52bea92021-03-11 08:10:19 +000060 // The expected paths are the header jars from the source input modules.
Paul Duffin29888b12021-03-29 00:04:10 +010061 expectedSourcePaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "system-module1", "system-module2")
62 android.AssertArrayString(t, "source system modules inputs", expectedSourcePaths, sourceInputs.RelativeToTop().Strings())
Paul Duffindb284be2021-03-11 08:07:46 +000063}
64
Paul Duffinc52bea92021-03-11 08:10:19 +000065var addPrebuiltSystemModules = android.FixtureAddTextFile("prebuilts/Android.bp", `
Paul Duffindb284be2021-03-11 08:07:46 +000066 java_system_modules_import {
67 name: "system-modules",
68 libs: ["system-module1", "system-module2"],
69 }
70 java_import {
71 name: "system-module1",
72 jars: ["a.jar"],
73 }
74 java_import {
75 name: "system-module2",
76 jars: ["b.jar"],
77 }
Paul Duffinc52bea92021-03-11 08:10:19 +000078`)
Paul Duffindb284be2021-03-11 08:07:46 +000079
Paul Duffinc52bea92021-03-11 08:10:19 +000080func TestJavaSystemModulesImport(t *testing.T) {
Paul Duffin55e740e2021-03-29 02:06:19 +010081 result := android.GroupFixturePreparers(prepareForJavaTest, addPrebuiltSystemModules).RunTest(t)
Paul Duffindb284be2021-03-11 08:07:46 +000082
Paul Duffinc52bea92021-03-11 08:10:19 +000083 // check the existence of the renamed prebuilt module
84 prebuiltSystemModules := result.ModuleForTests("system-modules", "android_common")
85 prebuiltInputs := prebuiltSystemModules.Rule("jarsTosystemModules").Inputs
Paul Duffindb284be2021-03-11 08:07:46 +000086
Paul Duffinc52bea92021-03-11 08:10:19 +000087 // The expected paths are the header jars from the renamed prebuilt input modules.
Paul Duffin29888b12021-03-29 00:04:10 +010088 expectedPrebuiltPaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "system-module1", "system-module2")
89 android.AssertArrayString(t, "renamed prebuilt system modules inputs", expectedPrebuiltPaths, prebuiltInputs.RelativeToTop().Strings())
Paul Duffinc52bea92021-03-11 08:10:19 +000090}
91
92func TestJavaSystemModulesMixSourceAndPrebuilt(t *testing.T) {
Paul Duffin55e740e2021-03-29 02:06:19 +010093 result := android.GroupFixturePreparers(
94 prepareForJavaTest,
Paul Duffinc52bea92021-03-11 08:10:19 +000095 addSourceSystemModules,
96 addPrebuiltSystemModules,
Paul Duffin55e740e2021-03-29 02:06:19 +010097 ).RunTest(t)
Paul Duffinc52bea92021-03-11 08:10:19 +000098
99 // check the existence of the source module
100 sourceSystemModules := result.ModuleForTests("system-modules", "android_common")
101 sourceInputs := sourceSystemModules.Rule("jarsTosystemModules").Inputs
102
103 // The expected paths are the header jars from the source input modules.
Paul Duffin29888b12021-03-29 00:04:10 +0100104 expectedSourcePaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "system-module1", "system-module2")
105 android.AssertArrayString(t, "source system modules inputs", expectedSourcePaths, sourceInputs.RelativeToTop().Strings())
Paul Duffinc52bea92021-03-11 08:10:19 +0000106
107 // check the existence of the renamed prebuilt module
108 prebuiltSystemModules := result.ModuleForTests("prebuilt_system-modules", "android_common")
109 prebuiltInputs := prebuiltSystemModules.Rule("jarsTosystemModules").Inputs
110
111 // The expected paths are the header jars from the renamed prebuilt input modules.
Paul Duffin29888b12021-03-29 00:04:10 +0100112 expectedPrebuiltPaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "prebuilt_system-module1", "prebuilt_system-module2")
113 android.AssertArrayString(t, "prebuilt system modules inputs", expectedPrebuiltPaths, prebuiltInputs.RelativeToTop().Strings())
Paul Duffindb284be2021-03-11 08:07:46 +0000114}
Spandan Dascc530632024-01-19 00:22:22 +0000115
116func TestMultipleSystemModulesPrebuilts(t *testing.T) {
117 bp := `
118 // an rdep
119 java_library {
120 name: "foo",
121 sdk_version: "none",
122 system_modules: "my_system_modules",
123 }
124
125 // multiple variations of java_system_modules
126 // source
127 java_system_modules {
128 name: "my_system_modules",
129 libs: ["bar"],
130 }
131 java_library {
132 name: "bar",
133 srcs: ["bar.java"],
134 }
135 // prebuilt "v1"
136 java_system_modules_import {
137 name: "my_system_modules.v1",
138 source_module_name: "my_system_modules",
139 libs: ["bar.v1"],
140 }
141 java_import {
142 name: "bar.v1",
143 source_module_name: "bar",
144 jars: ["bar.v1.jar"],
145 }
146 // prebuilt "v2"
147 java_system_modules_import {
148 name: "my_system_modules.v2",
149 source_module_name: "my_system_modules",
150 libs: ["bar.v2"],
151 }
152 java_import {
153 name: "bar.v2",
154 source_module_name: "bar",
155 jars: ["bar.v2.jar"],
156 }
157
158 // selectors
159 apex_contributions {
160 name: "myapex_contributions",
161 contents: ["%v"],
162 }
163 `
164 testCases := []struct {
165 desc string
166 selectedDependencyName string
167 }{
168 {
169 desc: "Source system_modules is selected using apex_contributions",
170 selectedDependencyName: "my_system_modules",
171 },
172 {
173 desc: "Prebuilt system_modules v1 is selected using apex_contributions",
174 selectedDependencyName: "prebuilt_my_system_modules.v1",
175 },
176 {
177 desc: "Prebuilt system_modules v2 is selected using apex_contributions",
178 selectedDependencyName: "prebuilt_my_system_modules.v2",
179 },
180 }
181
182 for _, tc := range testCases {
183 res := android.GroupFixturePreparers(
184 prepareForJavaTest,
Colin Crossa66b4632024-08-08 15:50:47 -0700185 android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ADSERVICES", "myapex_contributions"),
Spandan Dascc530632024-01-19 00:22:22 +0000186 ).RunTestWithBp(t, fmt.Sprintf(bp, tc.selectedDependencyName))
187
188 // check that rdep gets the correct variation of system_modules
189 hasDep := CheckModuleHasDependency(t, res.TestContext, "foo", "android_common", tc.selectedDependencyName)
190 android.AssertBoolEquals(t, fmt.Sprintf("expected dependency from foo to %s\n", tc.selectedDependencyName), true, hasDep)
191 }
192}