xref: /aosp_15_r20/external/toolchain-utils/compiler_wrapper/config_test.go (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
1*760c253cSXin Li// Copyright 2019 The ChromiumOS Authors
2*760c253cSXin Li// Use of this source code is governed by a BSD-style license that can be
3*760c253cSXin Li// found in the LICENSE file.
4*760c253cSXin Li
5*760c253cSXin Lipackage main
6*760c253cSXin Li
7*760c253cSXin Liimport (
8*760c253cSXin Li	"testing"
9*760c253cSXin Li)
10*760c253cSXin Li
11*760c253cSXin Lifunc TestRealConfigWithUseCCacheFlag(t *testing.T) {
12*760c253cSXin Li	resetGlobals()
13*760c253cSXin Li	defer resetGlobals()
14*760c253cSXin Li	ConfigName = "cros.hardened"
15*760c253cSXin Li	UseLlvmNext = "false"
16*760c253cSXin Li
17*760c253cSXin Li	UseCCache = "false"
18*760c253cSXin Li	cfg, err := getRealConfig()
19*760c253cSXin Li	if err != nil {
20*760c253cSXin Li		t.Fatal(err)
21*760c253cSXin Li	}
22*760c253cSXin Li	if cfg.useCCache {
23*760c253cSXin Li		t.Fatal("UseCCache: Expected false got true")
24*760c253cSXin Li	}
25*760c253cSXin Li
26*760c253cSXin Li	UseCCache = "true"
27*760c253cSXin Li	cfg, err = getRealConfig()
28*760c253cSXin Li	if err != nil {
29*760c253cSXin Li		t.Fatal(err)
30*760c253cSXin Li	}
31*760c253cSXin Li	if !cfg.useCCache {
32*760c253cSXin Li		t.Fatal("UseCCache: Expected true got false")
33*760c253cSXin Li	}
34*760c253cSXin Li
35*760c253cSXin Li	UseCCache = "invalid"
36*760c253cSXin Li	if _, err := getRealConfig(); err == nil {
37*760c253cSXin Li		t.Fatalf("UseCCache: Expected an error, got none")
38*760c253cSXin Li	}
39*760c253cSXin Li}
40*760c253cSXin Li
41*760c253cSXin Lifunc TestRealConfigWithUseLLvmFlag(t *testing.T) {
42*760c253cSXin Li	resetGlobals()
43*760c253cSXin Li	defer resetGlobals()
44*760c253cSXin Li	ConfigName = "cros.hardened"
45*760c253cSXin Li	UseCCache = "false"
46*760c253cSXin Li
47*760c253cSXin Li	UseLlvmNext = "false"
48*760c253cSXin Li	cfg, err := getRealConfig()
49*760c253cSXin Li	if err != nil {
50*760c253cSXin Li		t.Fatal(err)
51*760c253cSXin Li	}
52*760c253cSXin Li	if cfg.useLlvmNext {
53*760c253cSXin Li		t.Fatal("UseLLvmNext: Expected not to be used")
54*760c253cSXin Li	}
55*760c253cSXin Li
56*760c253cSXin Li	UseLlvmNext = "true"
57*760c253cSXin Li	cfg, err = getRealConfig()
58*760c253cSXin Li	if err != nil {
59*760c253cSXin Li		t.Fatal(err)
60*760c253cSXin Li	}
61*760c253cSXin Li
62*760c253cSXin Li	if !cfg.useLlvmNext {
63*760c253cSXin Li		t.Fatal("UseLLvmNext: Expected to be used")
64*760c253cSXin Li	}
65*760c253cSXin Li
66*760c253cSXin Li	UseLlvmNext = "invalid"
67*760c253cSXin Li	if _, err := getRealConfig(); err == nil {
68*760c253cSXin Li		t.Fatalf("UseLlvmNext: Expected an error, got none")
69*760c253cSXin Li	}
70*760c253cSXin Li}
71*760c253cSXin Li
72*760c253cSXin Lifunc TestRealConfigWithConfigNameFlag(t *testing.T) {
73*760c253cSXin Li	resetGlobals()
74*760c253cSXin Li	defer resetGlobals()
75*760c253cSXin Li	UseCCache = "false"
76*760c253cSXin Li	UseLlvmNext = "false"
77*760c253cSXin Li
78*760c253cSXin Li	ConfigName = "cros.hardened"
79*760c253cSXin Li	cfg, err := getRealConfig()
80*760c253cSXin Li	if err != nil {
81*760c253cSXin Li		t.Fatal(err)
82*760c253cSXin Li	}
83*760c253cSXin Li	if !isSysrootHardened(cfg) || cfg.isHostWrapper {
84*760c253cSXin Li		t.Fatalf("ConfigName: Expected sysroot hardened config. Got: %#v", cfg)
85*760c253cSXin Li	}
86*760c253cSXin Li
87*760c253cSXin Li	ConfigName = "cros.nonhardened"
88*760c253cSXin Li	cfg, err = getRealConfig()
89*760c253cSXin Li	if err != nil {
90*760c253cSXin Li		t.Fatal(err)
91*760c253cSXin Li	}
92*760c253cSXin Li	if isSysrootHardened(cfg) || cfg.isHostWrapper {
93*760c253cSXin Li		t.Fatalf("ConfigName: Expected sysroot non hardened config. Got: %#v", cfg)
94*760c253cSXin Li	}
95*760c253cSXin Li
96*760c253cSXin Li	ConfigName = "cros.host"
97*760c253cSXin Li	cfg, err = getRealConfig()
98*760c253cSXin Li	if err != nil {
99*760c253cSXin Li		t.Fatal(err)
100*760c253cSXin Li	}
101*760c253cSXin Li	if !cfg.isHostWrapper {
102*760c253cSXin Li		t.Fatalf("ConfigName: Expected clang host config. Got: %#v", cfg)
103*760c253cSXin Li	}
104*760c253cSXin Li
105*760c253cSXin Li	ConfigName = "android"
106*760c253cSXin Li	cfg, err = getRealConfig()
107*760c253cSXin Li	if err != nil {
108*760c253cSXin Li		t.Fatal(err)
109*760c253cSXin Li	}
110*760c253cSXin Li	if !cfg.isAndroidWrapper {
111*760c253cSXin Li		t.Fatalf("ConfigName: Expected clang host config. Got: %#v", cfg)
112*760c253cSXin Li	}
113*760c253cSXin Li
114*760c253cSXin Li	ConfigName = "invalid"
115*760c253cSXin Li	if _, err := getRealConfig(); err == nil {
116*760c253cSXin Li		t.Fatalf("ConfigName: Expected an error, got none")
117*760c253cSXin Li	}
118*760c253cSXin Li}
119*760c253cSXin Li
120*760c253cSXin Lifunc isSysrootHardened(cfg *config) bool {
121*760c253cSXin Li	for _, arg := range cfg.commonFlags {
122*760c253cSXin Li		if arg == "-D_FORTIFY_SOURCE=3" {
123*760c253cSXin Li			return true
124*760c253cSXin Li		}
125*760c253cSXin Li	}
126*760c253cSXin Li	return false
127*760c253cSXin Li}
128*760c253cSXin Li
129*760c253cSXin Lifunc resetGlobals() {
130*760c253cSXin Li	// Set all global variables to a defined state.
131*760c253cSXin Li	UseLlvmNext = "unknown"
132*760c253cSXin Li	ConfigName = "unknown"
133*760c253cSXin Li	UseCCache = "unknown"
134*760c253cSXin Li}
135