xref: /aosp_15_r20/build/soong/java/fuzz_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2021 The Android Open Source Project
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage java
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"path/filepath"
19*333d2b36SAndroid Build Coastguard Worker	"runtime"
20*333d2b36SAndroid Build Coastguard Worker	"testing"
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
23*333d2b36SAndroid Build Coastguard Worker	"android/soong/cc"
24*333d2b36SAndroid Build Coastguard Worker)
25*333d2b36SAndroid Build Coastguard Worker
26*333d2b36SAndroid Build Coastguard Workervar prepForJavaFuzzTest = android.GroupFixturePreparers(
27*333d2b36SAndroid Build Coastguard Worker	PrepareForTestWithJavaDefaultModules,
28*333d2b36SAndroid Build Coastguard Worker	cc.PrepareForTestWithCcBuildComponents,
29*333d2b36SAndroid Build Coastguard Worker	android.FixtureRegisterWithContext(RegisterJavaFuzzBuildComponents),
30*333d2b36SAndroid Build Coastguard Worker)
31*333d2b36SAndroid Build Coastguard Worker
32*333d2b36SAndroid Build Coastguard Workerfunc TestJavaFuzz(t *testing.T) {
33*333d2b36SAndroid Build Coastguard Worker	result := prepForJavaFuzzTest.RunTestWithBp(t, `
34*333d2b36SAndroid Build Coastguard Worker		java_fuzz {
35*333d2b36SAndroid Build Coastguard Worker			name: "foo",
36*333d2b36SAndroid Build Coastguard Worker			srcs: ["a.java"],
37*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
38*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
39*333d2b36SAndroid Build Coastguard Worker			libs: ["bar"],
40*333d2b36SAndroid Build Coastguard Worker			static_libs: ["baz"],
41*333d2b36SAndroid Build Coastguard Worker            jni_libs: [
42*333d2b36SAndroid Build Coastguard Worker                "libjni",
43*333d2b36SAndroid Build Coastguard Worker            ],
44*333d2b36SAndroid Build Coastguard Worker		}
45*333d2b36SAndroid Build Coastguard Worker
46*333d2b36SAndroid Build Coastguard Worker		java_library_host {
47*333d2b36SAndroid Build Coastguard Worker			name: "bar",
48*333d2b36SAndroid Build Coastguard Worker			srcs: ["b.java"],
49*333d2b36SAndroid Build Coastguard Worker		}
50*333d2b36SAndroid Build Coastguard Worker
51*333d2b36SAndroid Build Coastguard Worker		java_library_host {
52*333d2b36SAndroid Build Coastguard Worker			name: "baz",
53*333d2b36SAndroid Build Coastguard Worker			srcs: ["c.java"],
54*333d2b36SAndroid Build Coastguard Worker		}
55*333d2b36SAndroid Build Coastguard Worker
56*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
57*333d2b36SAndroid Build Coastguard Worker			name: "libjni",
58*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
59*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
60*333d2b36SAndroid Build Coastguard Worker			stl: "none",
61*333d2b36SAndroid Build Coastguard Worker		}
62*333d2b36SAndroid Build Coastguard Worker		`)
63*333d2b36SAndroid Build Coastguard Worker
64*333d2b36SAndroid Build Coastguard Worker	osCommonTarget := result.Config.BuildOSCommonTarget.String()
65*333d2b36SAndroid Build Coastguard Worker
66*333d2b36SAndroid Build Coastguard Worker	javac := result.ModuleForTests("foo", osCommonTarget).Rule("javac")
67*333d2b36SAndroid Build Coastguard Worker	combineJar := result.ModuleForTests("foo", osCommonTarget).Description("for javac")
68*333d2b36SAndroid Build Coastguard Worker
69*333d2b36SAndroid Build Coastguard Worker	if len(javac.Inputs) != 1 || javac.Inputs[0].String() != "a.java" {
70*333d2b36SAndroid Build Coastguard Worker		t.Errorf(`foo inputs %v != ["a.java"]`, javac.Inputs)
71*333d2b36SAndroid Build Coastguard Worker	}
72*333d2b36SAndroid Build Coastguard Worker
73*333d2b36SAndroid Build Coastguard Worker	baz := result.ModuleForTests("baz", osCommonTarget).Rule("javac").Output.String()
74*333d2b36SAndroid Build Coastguard Worker	barOut := filepath.Join("out", "soong", ".intermediates", "bar", osCommonTarget, "javac-header", "bar.jar")
75*333d2b36SAndroid Build Coastguard Worker	bazOut := filepath.Join("out", "soong", ".intermediates", "baz", osCommonTarget, "javac-header", "baz.jar")
76*333d2b36SAndroid Build Coastguard Worker
77*333d2b36SAndroid Build Coastguard Worker	android.AssertStringDoesContain(t, "foo classpath", javac.Args["classpath"], barOut)
78*333d2b36SAndroid Build Coastguard Worker	android.AssertStringDoesContain(t, "foo classpath", javac.Args["classpath"], bazOut)
79*333d2b36SAndroid Build Coastguard Worker
80*333d2b36SAndroid Build Coastguard Worker	if len(combineJar.Inputs) != 2 || combineJar.Inputs[1].String() != baz {
81*333d2b36SAndroid Build Coastguard Worker		t.Errorf("foo combineJar inputs %v does not contain %q", combineJar.Inputs, baz)
82*333d2b36SAndroid Build Coastguard Worker	}
83*333d2b36SAndroid Build Coastguard Worker
84*333d2b36SAndroid Build Coastguard Worker	ctx := result.TestContext
85*333d2b36SAndroid Build Coastguard Worker	foo := ctx.ModuleForTests("foo", osCommonTarget).Module().(*JavaFuzzTest)
86*333d2b36SAndroid Build Coastguard Worker
87*333d2b36SAndroid Build Coastguard Worker	expected := "lib64/libjni.so"
88*333d2b36SAndroid Build Coastguard Worker	if runtime.GOOS == "darwin" {
89*333d2b36SAndroid Build Coastguard Worker		expected = "lib64/libjni.dylib"
90*333d2b36SAndroid Build Coastguard Worker	}
91*333d2b36SAndroid Build Coastguard Worker
92*333d2b36SAndroid Build Coastguard Worker	fooJniFilePaths := foo.jniFilePaths
93*333d2b36SAndroid Build Coastguard Worker	if len(fooJniFilePaths) != 1 || fooJniFilePaths[0].Rel() != expected {
94*333d2b36SAndroid Build Coastguard Worker		t.Errorf(`expected foo test data relative path [%q], got %q`,
95*333d2b36SAndroid Build Coastguard Worker			expected, fooJniFilePaths.Strings())
96*333d2b36SAndroid Build Coastguard Worker	}
97*333d2b36SAndroid Build Coastguard Worker}
98