xref: /aosp_15_r20/build/soong/rust/sanitize_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Workerpackage rust
2*333d2b36SAndroid Build Coastguard Worker
3*333d2b36SAndroid Build Coastguard Workerimport (
4*333d2b36SAndroid Build Coastguard Worker	"fmt"
5*333d2b36SAndroid Build Coastguard Worker	"strings"
6*333d2b36SAndroid Build Coastguard Worker	"testing"
7*333d2b36SAndroid Build Coastguard Worker
8*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
9*333d2b36SAndroid Build Coastguard Worker)
10*333d2b36SAndroid Build Coastguard Worker
11*333d2b36SAndroid Build Coastguard Workertype MemtagNoteType int
12*333d2b36SAndroid Build Coastguard Worker
13*333d2b36SAndroid Build Coastguard Workerconst (
14*333d2b36SAndroid Build Coastguard Worker	None MemtagNoteType = iota + 1
15*333d2b36SAndroid Build Coastguard Worker	Sync
16*333d2b36SAndroid Build Coastguard Worker	Async
17*333d2b36SAndroid Build Coastguard Worker)
18*333d2b36SAndroid Build Coastguard Worker
19*333d2b36SAndroid Build Coastguard Workerfunc (t MemtagNoteType) str() string {
20*333d2b36SAndroid Build Coastguard Worker	switch t {
21*333d2b36SAndroid Build Coastguard Worker	case None:
22*333d2b36SAndroid Build Coastguard Worker		return "none"
23*333d2b36SAndroid Build Coastguard Worker	case Sync:
24*333d2b36SAndroid Build Coastguard Worker		return "sync"
25*333d2b36SAndroid Build Coastguard Worker	case Async:
26*333d2b36SAndroid Build Coastguard Worker		return "async"
27*333d2b36SAndroid Build Coastguard Worker	default:
28*333d2b36SAndroid Build Coastguard Worker		panic("type_note_invalid")
29*333d2b36SAndroid Build Coastguard Worker	}
30*333d2b36SAndroid Build Coastguard Worker}
31*333d2b36SAndroid Build Coastguard Worker
32*333d2b36SAndroid Build Coastguard Workerfunc checkHasMemtagNote(t *testing.T, m android.TestingModule, expected MemtagNoteType) {
33*333d2b36SAndroid Build Coastguard Worker	t.Helper()
34*333d2b36SAndroid Build Coastguard Worker	note_async := "note_memtag_heap_async"
35*333d2b36SAndroid Build Coastguard Worker	note_sync := "note_memtag_heap_sync"
36*333d2b36SAndroid Build Coastguard Worker
37*333d2b36SAndroid Build Coastguard Worker	found := None
38*333d2b36SAndroid Build Coastguard Worker	implicits := m.Rule("rustc").Implicits
39*333d2b36SAndroid Build Coastguard Worker	for _, lib := range implicits {
40*333d2b36SAndroid Build Coastguard Worker		if strings.Contains(lib.Rel(), note_async) {
41*333d2b36SAndroid Build Coastguard Worker			found = Async
42*333d2b36SAndroid Build Coastguard Worker			break
43*333d2b36SAndroid Build Coastguard Worker		} else if strings.Contains(lib.Rel(), note_sync) {
44*333d2b36SAndroid Build Coastguard Worker			found = Sync
45*333d2b36SAndroid Build Coastguard Worker			break
46*333d2b36SAndroid Build Coastguard Worker		}
47*333d2b36SAndroid Build Coastguard Worker	}
48*333d2b36SAndroid Build Coastguard Worker
49*333d2b36SAndroid Build Coastguard Worker	if found != expected {
50*333d2b36SAndroid Build Coastguard Worker		t.Errorf("Wrong Memtag note in target %q: found %q, expected %q", m.Module().(*Module).Name(), found.str(), expected.str())
51*333d2b36SAndroid Build Coastguard Worker	}
52*333d2b36SAndroid Build Coastguard Worker}
53*333d2b36SAndroid Build Coastguard Worker
54*333d2b36SAndroid Build Coastguard Workervar prepareForTestWithMemtagHeap = android.GroupFixturePreparers(
55*333d2b36SAndroid Build Coastguard Worker	android.FixtureModifyMockFS(func(fs android.MockFS) {
56*333d2b36SAndroid Build Coastguard Worker		templateBp := `
57*333d2b36SAndroid Build Coastguard Worker		rust_test {
58*333d2b36SAndroid Build Coastguard Worker			name: "unset_test_%[1]s",
59*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
60*333d2b36SAndroid Build Coastguard Worker		}
61*333d2b36SAndroid Build Coastguard Worker
62*333d2b36SAndroid Build Coastguard Worker		rust_test {
63*333d2b36SAndroid Build Coastguard Worker			name: "no_memtag_test_%[1]s",
64*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
65*333d2b36SAndroid Build Coastguard Worker			sanitize: { memtag_heap: false },
66*333d2b36SAndroid Build Coastguard Worker		}
67*333d2b36SAndroid Build Coastguard Worker
68*333d2b36SAndroid Build Coastguard Worker		rust_test {
69*333d2b36SAndroid Build Coastguard Worker			name: "set_memtag_test_%[1]s",
70*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
71*333d2b36SAndroid Build Coastguard Worker			sanitize: { memtag_heap: true },
72*333d2b36SAndroid Build Coastguard Worker		}
73*333d2b36SAndroid Build Coastguard Worker
74*333d2b36SAndroid Build Coastguard Worker		rust_test {
75*333d2b36SAndroid Build Coastguard Worker			name: "set_memtag_set_async_test_%[1]s",
76*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
77*333d2b36SAndroid Build Coastguard Worker			sanitize: { memtag_heap: true, diag: { memtag_heap: false }  },
78*333d2b36SAndroid Build Coastguard Worker		}
79*333d2b36SAndroid Build Coastguard Worker
80*333d2b36SAndroid Build Coastguard Worker		rust_test {
81*333d2b36SAndroid Build Coastguard Worker			name: "set_memtag_set_sync_test_%[1]s",
82*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
83*333d2b36SAndroid Build Coastguard Worker			sanitize: { memtag_heap: true, diag: { memtag_heap: true }  },
84*333d2b36SAndroid Build Coastguard Worker		}
85*333d2b36SAndroid Build Coastguard Worker
86*333d2b36SAndroid Build Coastguard Worker		rust_test {
87*333d2b36SAndroid Build Coastguard Worker			name: "unset_memtag_set_sync_test_%[1]s",
88*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
89*333d2b36SAndroid Build Coastguard Worker			sanitize: { diag: { memtag_heap: true }  },
90*333d2b36SAndroid Build Coastguard Worker		}
91*333d2b36SAndroid Build Coastguard Worker
92*333d2b36SAndroid Build Coastguard Worker		rust_binary {
93*333d2b36SAndroid Build Coastguard Worker			name: "unset_binary_%[1]s",
94*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
95*333d2b36SAndroid Build Coastguard Worker		}
96*333d2b36SAndroid Build Coastguard Worker
97*333d2b36SAndroid Build Coastguard Worker		rust_binary {
98*333d2b36SAndroid Build Coastguard Worker			name: "no_memtag_binary_%[1]s",
99*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
100*333d2b36SAndroid Build Coastguard Worker			sanitize: { memtag_heap: false },
101*333d2b36SAndroid Build Coastguard Worker		}
102*333d2b36SAndroid Build Coastguard Worker
103*333d2b36SAndroid Build Coastguard Worker		rust_binary {
104*333d2b36SAndroid Build Coastguard Worker			name: "set_memtag_binary_%[1]s",
105*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
106*333d2b36SAndroid Build Coastguard Worker			sanitize: { memtag_heap: true },
107*333d2b36SAndroid Build Coastguard Worker		}
108*333d2b36SAndroid Build Coastguard Worker
109*333d2b36SAndroid Build Coastguard Worker		rust_binary {
110*333d2b36SAndroid Build Coastguard Worker			name: "set_memtag_set_async_binary_%[1]s",
111*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
112*333d2b36SAndroid Build Coastguard Worker			sanitize: { memtag_heap: true, diag: { memtag_heap: false }  },
113*333d2b36SAndroid Build Coastguard Worker		}
114*333d2b36SAndroid Build Coastguard Worker
115*333d2b36SAndroid Build Coastguard Worker		rust_binary {
116*333d2b36SAndroid Build Coastguard Worker			name: "set_memtag_set_sync_binary_%[1]s",
117*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
118*333d2b36SAndroid Build Coastguard Worker			sanitize: { memtag_heap: true, diag: { memtag_heap: true }  },
119*333d2b36SAndroid Build Coastguard Worker		}
120*333d2b36SAndroid Build Coastguard Worker
121*333d2b36SAndroid Build Coastguard Worker		rust_binary {
122*333d2b36SAndroid Build Coastguard Worker			name: "unset_memtag_set_sync_binary_%[1]s",
123*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.rs"],
124*333d2b36SAndroid Build Coastguard Worker			sanitize: { diag: { memtag_heap: true }  },
125*333d2b36SAndroid Build Coastguard Worker		}
126*333d2b36SAndroid Build Coastguard Worker		`
127*333d2b36SAndroid Build Coastguard Worker		subdirNoOverrideBp := fmt.Sprintf(templateBp, "no_override")
128*333d2b36SAndroid Build Coastguard Worker		subdirOverrideDefaultDisableBp := fmt.Sprintf(templateBp, "override_default_disable")
129*333d2b36SAndroid Build Coastguard Worker		subdirSyncBp := fmt.Sprintf(templateBp, "override_default_sync")
130*333d2b36SAndroid Build Coastguard Worker		subdirAsyncBp := fmt.Sprintf(templateBp, "override_default_async")
131*333d2b36SAndroid Build Coastguard Worker
132*333d2b36SAndroid Build Coastguard Worker		fs.Merge(android.MockFS{
133*333d2b36SAndroid Build Coastguard Worker			"subdir_no_override/Android.bp":              []byte(subdirNoOverrideBp),
134*333d2b36SAndroid Build Coastguard Worker			"subdir_override_default_disable/Android.bp": []byte(subdirOverrideDefaultDisableBp),
135*333d2b36SAndroid Build Coastguard Worker			"subdir_sync/Android.bp":                     []byte(subdirSyncBp),
136*333d2b36SAndroid Build Coastguard Worker			"subdir_async/Android.bp":                    []byte(subdirAsyncBp),
137*333d2b36SAndroid Build Coastguard Worker		})
138*333d2b36SAndroid Build Coastguard Worker	}),
139*333d2b36SAndroid Build Coastguard Worker	android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
140*333d2b36SAndroid Build Coastguard Worker		variables.MemtagHeapExcludePaths = []string{"subdir_override_default_disable"}
141*333d2b36SAndroid Build Coastguard Worker		// "subdir_override_default_disable" is covered by both include and override_default_disable paths. override_default_disable wins.
142*333d2b36SAndroid Build Coastguard Worker		variables.MemtagHeapSyncIncludePaths = []string{"subdir_sync", "subdir_override_default_disable"}
143*333d2b36SAndroid Build Coastguard Worker		variables.MemtagHeapAsyncIncludePaths = []string{"subdir_async", "subdir_override_default_disable"}
144*333d2b36SAndroid Build Coastguard Worker	}),
145*333d2b36SAndroid Build Coastguard Worker)
146*333d2b36SAndroid Build Coastguard Worker
147*333d2b36SAndroid Build Coastguard Workerfunc TestSanitizeMemtagHeap(t *testing.T) {
148*333d2b36SAndroid Build Coastguard Worker	variant := "android_arm64_armv8-a"
149*333d2b36SAndroid Build Coastguard Worker
150*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
151*333d2b36SAndroid Build Coastguard Worker		prepareForRustTest,
152*333d2b36SAndroid Build Coastguard Worker		prepareForTestWithMemtagHeap,
153*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
154*333d2b36SAndroid Build Coastguard Worker	ctx := result.TestContext
155*333d2b36SAndroid Build Coastguard Worker
156*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
157*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
158*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
159*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
160*333d2b36SAndroid Build Coastguard Worker
161*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
162*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
163*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
164*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
165*333d2b36SAndroid Build Coastguard Worker
166*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Async)
167*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Async)
168*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Async)
169*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
170*333d2b36SAndroid Build Coastguard Worker
171*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
172*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
173*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
174*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
175*333d2b36SAndroid Build Coastguard Worker
176*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
177*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
178*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
179*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
180*333d2b36SAndroid Build Coastguard Worker
181*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
182*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
183*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
184*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
185*333d2b36SAndroid Build Coastguard Worker
186*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
187*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
188*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
189*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
190*333d2b36SAndroid Build Coastguard Worker
191*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
192*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
193*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
194*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
195*333d2b36SAndroid Build Coastguard Worker
196*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), None)
197*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
198*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
199*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
200*333d2b36SAndroid Build Coastguard Worker
201*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
202*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
203*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
204*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
205*333d2b36SAndroid Build Coastguard Worker
206*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), None)
207*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Async)
208*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
209*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
210*333d2b36SAndroid Build Coastguard Worker
211*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
212*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
213*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
214*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
215*333d2b36SAndroid Build Coastguard Worker}
216*333d2b36SAndroid Build Coastguard Worker
217*333d2b36SAndroid Build Coastguard Workerfunc TestSanitizeMemtagHeapWithSanitizeDevice(t *testing.T) {
218*333d2b36SAndroid Build Coastguard Worker	variant := "android_arm64_armv8-a"
219*333d2b36SAndroid Build Coastguard Worker
220*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
221*333d2b36SAndroid Build Coastguard Worker		prepareForRustTest,
222*333d2b36SAndroid Build Coastguard Worker		prepareForTestWithMemtagHeap,
223*333d2b36SAndroid Build Coastguard Worker		android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
224*333d2b36SAndroid Build Coastguard Worker			variables.SanitizeDevice = []string{"memtag_heap"}
225*333d2b36SAndroid Build Coastguard Worker		}),
226*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
227*333d2b36SAndroid Build Coastguard Worker	ctx := result.TestContext
228*333d2b36SAndroid Build Coastguard Worker
229*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
230*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
231*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
232*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
233*333d2b36SAndroid Build Coastguard Worker
234*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
235*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
236*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
237*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
238*333d2b36SAndroid Build Coastguard Worker
239*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Async)
240*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Async)
241*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Async)
242*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
243*333d2b36SAndroid Build Coastguard Worker
244*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
245*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
246*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
247*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
248*333d2b36SAndroid Build Coastguard Worker
249*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
250*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
251*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
252*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
253*333d2b36SAndroid Build Coastguard Worker
254*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
255*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
256*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
257*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
258*333d2b36SAndroid Build Coastguard Worker
259*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
260*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
261*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
262*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
263*333d2b36SAndroid Build Coastguard Worker
264*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
265*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
266*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
267*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
268*333d2b36SAndroid Build Coastguard Worker
269*333d2b36SAndroid Build Coastguard Worker	// should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
270*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), Sync)
271*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
272*333d2b36SAndroid Build Coastguard Worker	// should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
273*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
274*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
275*333d2b36SAndroid Build Coastguard Worker
276*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
277*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
278*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
279*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
280*333d2b36SAndroid Build Coastguard Worker
281*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), Async)
282*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Async)
283*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
284*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
285*333d2b36SAndroid Build Coastguard Worker
286*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
287*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
288*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
289*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
290*333d2b36SAndroid Build Coastguard Worker}
291*333d2b36SAndroid Build Coastguard Worker
292*333d2b36SAndroid Build Coastguard Workerfunc TestSanitizeMemtagHeapWithSanitizeDeviceDiag(t *testing.T) {
293*333d2b36SAndroid Build Coastguard Worker	variant := "android_arm64_armv8-a"
294*333d2b36SAndroid Build Coastguard Worker
295*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
296*333d2b36SAndroid Build Coastguard Worker		prepareForRustTest,
297*333d2b36SAndroid Build Coastguard Worker		prepareForTestWithMemtagHeap,
298*333d2b36SAndroid Build Coastguard Worker		android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
299*333d2b36SAndroid Build Coastguard Worker			variables.SanitizeDevice = []string{"memtag_heap"}
300*333d2b36SAndroid Build Coastguard Worker			variables.SanitizeDeviceDiag = []string{"memtag_heap"}
301*333d2b36SAndroid Build Coastguard Worker		}),
302*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
303*333d2b36SAndroid Build Coastguard Worker	ctx := result.TestContext
304*333d2b36SAndroid Build Coastguard Worker
305*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
306*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
307*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
308*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
309*333d2b36SAndroid Build Coastguard Worker
310*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
311*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
312*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
313*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
314*333d2b36SAndroid Build Coastguard Worker
315*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Sync)
316*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Sync)
317*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Sync)
318*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
319*333d2b36SAndroid Build Coastguard Worker
320*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
321*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
322*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
323*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
324*333d2b36SAndroid Build Coastguard Worker
325*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
326*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
327*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
328*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
329*333d2b36SAndroid Build Coastguard Worker
330*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
331*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
332*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
333*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
334*333d2b36SAndroid Build Coastguard Worker
335*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
336*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
337*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
338*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
339*333d2b36SAndroid Build Coastguard Worker
340*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
341*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
342*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
343*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
344*333d2b36SAndroid Build Coastguard Worker
345*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), Sync)
346*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
347*333d2b36SAndroid Build Coastguard Worker	// should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
348*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
349*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
350*333d2b36SAndroid Build Coastguard Worker
351*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
352*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
353*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
354*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
355*333d2b36SAndroid Build Coastguard Worker
356*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), Sync)
357*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Sync)
358*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
359*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
360*333d2b36SAndroid Build Coastguard Worker
361*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
362*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
363*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
364*333d2b36SAndroid Build Coastguard Worker	checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
365*333d2b36SAndroid Build Coastguard Worker}
366