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