diff options
| author | Bryan C. Mills <bcmills@google.com> | 2021-11-30 16:33:51 -0500 |
|---|---|---|
| committer | Bryan Mills <bcmills@google.com> | 2021-12-03 14:28:11 +0000 |
| commit | a174638a5cc88eb4fccaaa699990f5626fbb0e30 (patch) | |
| tree | 40701baf41ad915a04810d5f790729ea086af4a3 /src/os | |
| parent | 098599003ba78225152d22984f82f78892221dad (diff) | |
| download | go-a174638a5cc88eb4fccaaa699990f5626fbb0e30.tar.xz | |
os: test that LookupEnv reports all keys found in Environ
For #49886
Change-Id: Ie3a7f12a0d30ec719caf375e7be30cc4a5796c3f
Reviewed-on: https://go-review.googlesource.com/c/go/+/367850
Trust: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/os')
| -rw-r--r-- | src/os/env_test.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/os/env_test.go b/src/os/env_test.go index 4b860157b4..11b3b89725 100644 --- a/src/os/env_test.go +++ b/src/os/env_test.go @@ -166,3 +166,39 @@ func TestLookupEnv(t *testing.T) { t.Errorf("smallpox release failed; world remains safe but LookupEnv is broken") } } + +// On Windows, Environ was observed to report keys with a single leading "=". +// Check that they are properly reported by LookupEnv and can be set by SetEnv. +// See https://golang.org/issue/49886. +func TestEnvironConsistency(t *testing.T) { + for _, kv := range Environ() { + i := strings.Index(kv, "=") + if i == 0 { + // We observe in practice keys with a single leading "=" on Windows. + // TODO(#49886): Should we consume only the first leading "=" as part + // of the key, or parse through arbitrarily many of them until a non-=, + // or try each possible key/value boundary until LookupEnv succeeds? + i = strings.Index(kv[1:], "=") + 1 + } + if i < 0 { + t.Errorf("Environ entry missing '=': %q", kv) + } + + k := kv[:i] + v := kv[i+1:] + v2, ok := LookupEnv(k) + if ok && v == v2 { + t.Logf("LookupEnv(%q) = %q, %t", k, v2, ok) + } else { + t.Errorf("Environ contains %q, but LookupEnv(%q) = %q, %t", kv, k, v2, ok) + } + + // Since k=v is already present in the environment, + // setting it should be a no-op. + if err := Setenv(k, v); err == nil { + t.Logf("Setenv(%q, %q)", k, v) + } else { + t.Errorf("Environ contains %q, but SetEnv(%q, %q) = %q", kv, k, v, err) + } + } +} |
