aboutsummaryrefslogtreecommitdiff
path: root/src/os
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2021-11-30 16:33:51 -0500
committerBryan Mills <bcmills@google.com>2021-12-03 14:28:11 +0000
commita174638a5cc88eb4fccaaa699990f5626fbb0e30 (patch)
tree40701baf41ad915a04810d5f790729ea086af4a3 /src/os
parent098599003ba78225152d22984f82f78892221dad (diff)
downloadgo-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.go36
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)
+ }
+ }
+}