| // Copyright 2026 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package verylongtest |
| |
| import ( |
| "bytes" |
| "flag" |
| "fmt" |
| "internal/testenv" |
| "os" |
| "os/exec" |
| "runtime" |
| "testing" |
| ) |
| |
| func TestMain(m *testing.M) { |
| flag.Parse() |
| if testing.Short() { |
| return |
| } |
| |
| tmpdir, err := os.MkdirTemp("", "verylongtest") |
| if err != nil { |
| fmt.Fprintf(os.Stderr, "failed to create temp gocache: %v\n", err) |
| os.Exit(1) |
| } |
| os.Setenv("GOCACHE", tmpdir) |
| |
| code := m.Run() |
| |
| os.RemoveAll(tmpdir) |
| os.Exit(code) |
| } |
| |
| // Regression test for golang.org/issue/34499: version command should not crash |
| // when executed in a deleted directory on Linux. |
| func TestExecInDeletedDir(t *testing.T) { |
| switch runtime.GOOS { |
| case "windows", "plan9", |
| "aix", // Fails with "device busy". |
| "solaris", "illumos": // Fails with "invalid argument". |
| t.Skipf("%v does not support removing the current working directory", runtime.GOOS) |
| } |
| gotool := testenv.GoToolPath(t) |
| |
| tmpdir := t.TempDir() |
| t.Chdir(tmpdir) |
| |
| if err := os.Remove(tmpdir); err != nil { |
| t.Fatal(err) |
| } |
| |
| // `go version` should not fail |
| var stdout, stderr bytes.Buffer |
| cmd := exec.Command(gotool, "version") |
| cmd.Env = append(os.Environ(), "GO111MODULE=off") // This behavior doesn't apply with GO111MODULE != off because we need to know the module to check the version. |
| cmd.Stdout = &stdout |
| cmd.Stderr = &stderr |
| if err := cmd.Run(); err != nil { |
| t.Fatalf("running go version: %v\n[stdout]: %s\n[stderr]: %s", err, stdout.Bytes(), stderr.Bytes()) |
| } |
| } |