1 runtime, crypto/x509: add -target flag. 2 3 --- src/crypto/x509/x509_test.go 4 +++ src/crypto/x509/x509_test.go 5 @@ -13,29 +13,32 @@ import ( 6 "crypto/rsa" 7 _ "crypto/sha256" 8 _ "crypto/sha512" 9 "crypto/x509/pkix" 10 "encoding/asn1" 11 "encoding/base64" 12 "encoding/hex" 13 "encoding/pem" 14 + "flag" 15 "fmt" 16 "internal/testenv" 17 "math/big" 18 "net" 19 "net/url" 20 "os/exec" 21 "reflect" 22 "runtime" 23 "strings" 24 "testing" 25 "time" 26 ) 27 28 +var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries") 29 + 30 func TestParsePKCS1PrivateKey(t *testing.T) { 31 block, _ := pem.Decode([]byte(pemPrivateKey)) 32 priv, err := ParsePKCS1PrivateKey(block.Bytes) 33 if err != nil { 34 t.Errorf("Failed to parse private key: %s", err) 35 return 36 } 37 if priv.PublicKey.N.Cmp(rsaPrivateKey.PublicKey.N) != 0 || 38 @@ -1089,17 +1092,23 @@ func TestParsePEMCRL(t *testing.T) { 39 } 40 41 // Can't check the signature here without a package cycle. 42 } 43 44 func TestImports(t *testing.T) { 45 testenv.MustHaveGoRun(t) 46 47 - if err := exec.Command(testenv.GoToolPath(t), "run", "x509_test_import.go").Run(); err != nil { 48 + var cmd *exec.Cmd 49 + if *target == "" { 50 + cmd = exec.Command(testenv.GoToolPath(t), "run", "x509_test_import.go") 51 + } else { 52 + cmd = exec.Command("go_"+*target, "run", "-exec", "go_"+*target+"_exec", "x509_test_import.go") 53 + } 54 + if err := cmd.Run(); err != nil { 55 t.Errorf("failed to run x509_test_import.go: %s", err) 56 } 57 } 58 59 const derCRLBase64 = "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" 60 61 const pemCRLBase64 = "LS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tDQpNSUlCOWpDQ0FWOENBUUV3RFFZSktvWklodmNOQVFFRkJRQXdiREVhTUJnR0ExVUVDaE1SVWxOQklGTmxZM1Z5DQphWFI1SUVsdVl5NHhIakFjQmdOVkJBTVRGVkpUUVNCUWRXSnNhV01nVW05dmRDQkRRU0IyTVRFdU1Dd0dDU3FHDQpTSWIzRFFFSkFSWWZjbk5oYTJWdmJuSnZiM1J6YVdkdVFISnpZWE5sWTNWeWFYUjVMbU52YlJjTk1URXdNakl6DQpNVGt5T0RNd1doY05NVEV3T0RJeU1Ua3lPRE13V2pDQmpEQktBaEVBckRxb2g5RkhKSFhUN09QZ3V1bjQrQmNODQpNRGt4TVRBeU1UUXlOekE1V2pBbU1Bb0dBMVVkRlFRRENnRUpNQmdHQTFVZEdBUVJHQTh5TURBNU1URXdNakUwDQpNalExTlZvd1BnSVJBTEd6blowOTVQQjVhQU9MUGc1N2ZNTVhEVEF5TVRBeU16RTBOVEF4TkZvd0dqQVlCZ05WDQpIUmdFRVJnUE1qQXdNakV3TWpNeE5EVXdNVFJhb0RBd0xqQWZCZ05WSFNNRUdEQVdnQlQxVERGNlVRTS9MTmVMDQpsNWx2cUhHUXEzZzltekFMQmdOVkhSUUVCQUlDQUlRd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQUZVNUFzNk16DQpxNVBSc2lmYW9iUVBHaDFhSkx5QytNczVBZ2MwYld5QTNHQWR4dXI1U3BQWmVSV0NCamlQL01FSEJXSkNsQkhQDQpHUmNxNXlJZDNFakRrYUV5eFJhK2k2N0x6dmhJNmMyOUVlNks5cFNZd2ppLzdSVWhtbW5Qclh0VHhsTDBsckxyDQptUVFKNnhoRFJhNUczUUE0Q21VZHNITnZicnpnbUNZcHZWRT0NCi0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0NCg0K" 62 63 --- src/runtime/crash_cgo_test.go 64 +++ src/runtime/crash_cgo_test.go 65 @@ -279,17 +279,17 @@ func testCgoPprof(t *testing.T, buildArg, runArg string) { 66 } 67 testenv.MustHaveGoRun(t) 68 69 exe, err := buildTestProg(t, "testprogcgo", buildArg) 70 if err != nil { 71 t.Fatal(err) 72 } 73 74 - got, err := testenv.CleanCmdEnv(exec.Command(exe, runArg)).CombinedOutput() 75 + got, err := testenv.CleanCmdEnv(goExecCmd(exe, runArg)).CombinedOutput() 76 if err != nil { 77 if testenv.Builder() == "linux-amd64-alpine" { 78 // See Issue 18243 and Issue 19938. 79 t.Skipf("Skipping failing test on Alpine (golang.org/issue/18243). Ignoring error: %v", err) 80 } 81 t.Fatal(err) 82 } 83 fn := strings.TrimSpace(string(got)) 84 --- src/runtime/crash_test.go 85 +++ src/runtime/crash_test.go 86 @@ -17,16 +17,35 @@ import ( 87 "runtime" 88 "strconv" 89 "strings" 90 "sync" 91 "testing" 92 "time" 93 ) 94 95 +var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries") 96 + 97 +func goCmd(t *testing.T) string { 98 + if *target != "" { 99 + return "go_" + *target 100 + } 101 + return testenv.GoToolPath(t) 102 +} 103 + 104 +func goExecCmd(name string, arg ...string) *exec.Cmd { 105 + var cmd []string 106 + if *target != "" { 107 + cmd = append(cmd, "go_"+*target+"_exec") 108 + } 109 + cmd = append(cmd, name) 110 + cmd = append(cmd, arg...) 111 + return exec.Command(cmd[0], cmd[1:]...) 112 +} 113 + 114 var toRemove []string 115 116 func TestMain(m *testing.M) { 117 status := m.Run() 118 for _, file := range toRemove { 119 os.RemoveAll(file) 120 } 121 os.Exit(status) 122 @@ -50,17 +69,17 @@ func runTestProg(t *testing.T, binary, name string, env ...string) string { 123 124 testenv.MustHaveGoBuild(t) 125 126 exe, err := buildTestProg(t, binary) 127 if err != nil { 128 t.Fatal(err) 129 } 130 131 - cmd := testenv.CleanCmdEnv(exec.Command(exe, name)) 132 + cmd := testenv.CleanCmdEnv(goExecCmd(exe, name)) 133 cmd.Env = append(cmd.Env, env...) 134 if testing.Short() { 135 cmd.Env = append(cmd.Env, "RUNTIME_TEST_SHORT=1") 136 } 137 var b bytes.Buffer 138 cmd.Stdout = &b 139 cmd.Stderr = &b 140 if err := cmd.Start(); err != nil { 141 @@ -125,17 +144,17 @@ func buildTestProg(t *testing.T, binary string, flags ...string) (string, error) 142 name += "_" + strings.Join(flags, "_") 143 } 144 target, ok := testprog.target[name] 145 if ok { 146 return target.exe, target.err 147 } 148 149 exe := filepath.Join(testprog.dir, name+".exe") 150 - cmd := exec.Command(testenv.GoToolPath(t), append([]string{"build", "-o", exe}, flags...)...) 151 + cmd := exec.Command(goCmd(t), append([]string{"build", "-o", exe}, flags...)...) 152 cmd.Dir = "testdata/" + binary 153 out, err := testenv.CleanCmdEnv(cmd).CombinedOutput() 154 if err != nil { 155 target.err = fmt.Errorf("building %s %v: %v\n%s", binary, flags, err, out) 156 testprog.target[name] = target 157 return "", target.err 158 } 159 target.exe = exe 160 @@ -456,17 +475,17 @@ func TestPanicLoop(t *testing.T) { 161 func TestMemPprof(t *testing.T) { 162 testenv.MustHaveGoRun(t) 163 164 exe, err := buildTestProg(t, "testprog") 165 if err != nil { 166 t.Fatal(err) 167 } 168 169 - got, err := testenv.CleanCmdEnv(exec.Command(exe, "MemProf")).CombinedOutput() 170 + got, err := testenv.CleanCmdEnv(goExecCmd(exe, "MemProf")).CombinedOutput() 171 if err != nil { 172 t.Fatal(err) 173 } 174 fn := strings.TrimSpace(string(got)) 175 defer os.Remove(fn) 176 177 for try := 0; try < 2; try++ { 178 cmd := testenv.CleanCmdEnv(exec.Command(testenv.GoToolPath(t), "tool", "pprof", "-alloc_space", "-top")) 179 --- src/runtime/crash_unix_test.go 180 +++ src/runtime/crash_unix_test.go 181 @@ -244,17 +244,17 @@ func testPanicSystemstackInternal() { 182 } 183 184 func TestSignalExitStatus(t *testing.T) { 185 testenv.MustHaveGoBuild(t) 186 exe, err := buildTestProg(t, "testprog") 187 if err != nil { 188 t.Fatal(err) 189 } 190 - err = testenv.CleanCmdEnv(exec.Command(exe, "SignalExitStatus")).Run() 191 + err = testenv.CleanCmdEnv(goExecCmd(exe, "SignalExitStatus")).Run() 192 if err == nil { 193 t.Error("test program succeeded unexpectedly") 194 } else if ee, ok := err.(*exec.ExitError); !ok { 195 t.Errorf("error (%v) has type %T; expected exec.ExitError", err, err) 196 } else if ws, ok := ee.Sys().(syscall.WaitStatus); !ok { 197 t.Errorf("error.Sys (%v) has type %T; expected syscall.WaitStatus", ee.Sys(), ee.Sys()) 198 } else if !ws.Signaled() || ws.Signal() != syscall.SIGTERM { 199 t.Errorf("got %v; expected SIGTERM", ee) 200