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