lin
2025-06-05 ed3dd9d3e7519a82bb871d5eedb24a2fa0c91f47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Copyright 2015 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 runtime_test
 
import (
   "runtime"
   "syscall"
   "testing"
)
 
func TestFixedGOROOT(t *testing.T) {
   if runtime.GOOS == "plan9" {
       t.Skipf("skipping plan9, it is inconsistent by allowing GOROOT to be updated by Setenv")
   }
 
   // Restore both the real GOROOT environment variable, and runtime's copies:
   if orig, ok := syscall.Getenv("GOROOT"); ok {
       defer syscall.Setenv("GOROOT", orig)
   } else {
       defer syscall.Unsetenv("GOROOT")
   }
   envs := runtime.Envs()
   oldenvs := append([]string{}, envs...)
   defer runtime.SetEnvs(oldenvs)
 
   // attempt to reuse existing envs backing array.
   want := runtime.GOROOT()
   runtime.SetEnvs(append(envs[:0], "GOROOT="+want))
 
   if got := runtime.GOROOT(); got != want {
       t.Errorf(`initial runtime.GOROOT()=%q, want %q`, got, want)
   }
   if err := syscall.Setenv("GOROOT", "/os"); err != nil {
       t.Fatal(err)
   }
   if got := runtime.GOROOT(); got != want {
       t.Errorf(`after setenv runtime.GOROOT()=%q, want %q`, got, want)
   }
   if err := syscall.Unsetenv("GOROOT"); err != nil {
       t.Fatal(err)
   }
   if got := runtime.GOROOT(); got != want {
       t.Errorf(`after unsetenv runtime.GOROOT()=%q, want %q`, got, want)
   }
}