|  | // Copyright 2017 Google Inc. All rights reserved. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | package build | 
|  |  | 
|  | import ( | 
|  | "reflect" | 
|  | "strings" | 
|  | "testing" | 
|  | ) | 
|  |  | 
|  | func TestEnvUnset(t *testing.T) { | 
|  | initial := &Environment{"TEST=1", "TEST2=0"} | 
|  | initial.Unset("TEST") | 
|  | got := initial.Environ() | 
|  | if len(got) != 1 || got[0] != "TEST2=0" { | 
|  | t.Errorf("Expected [TEST2=0], got: %v", got) | 
|  | } | 
|  | } | 
|  |  | 
|  | func TestEnvUnsetMissing(t *testing.T) { | 
|  | initial := &Environment{"TEST2=0"} | 
|  | initial.Unset("TEST") | 
|  | got := initial.Environ() | 
|  | if len(got) != 1 || got[0] != "TEST2=0" { | 
|  | t.Errorf("Expected [TEST2=0], got: %v", got) | 
|  | } | 
|  | } | 
|  |  | 
|  | func TestEnvSet(t *testing.T) { | 
|  | initial := &Environment{} | 
|  | initial.Set("TEST", "0") | 
|  | got := initial.Environ() | 
|  | if len(got) != 1 || got[0] != "TEST=0" { | 
|  | t.Errorf("Expected [TEST=0], got: %v", got) | 
|  | } | 
|  | } | 
|  |  | 
|  | func TestEnvSetDup(t *testing.T) { | 
|  | initial := &Environment{"TEST=1"} | 
|  | initial.Set("TEST", "0") | 
|  | got := initial.Environ() | 
|  | if len(got) != 1 || got[0] != "TEST=0" { | 
|  | t.Errorf("Expected [TEST=0], got: %v", got) | 
|  | } | 
|  | } | 
|  |  | 
|  | func TestEnvAllow(t *testing.T) { | 
|  | initial := &Environment{"TEST=1", "TEST2=0", "TEST3=2"} | 
|  | initial.Allow("TEST3", "TEST") | 
|  | got := initial.Environ() | 
|  | if len(got) != 2 || got[0] != "TEST=1" || got[1] != "TEST3=2" { | 
|  | t.Errorf("Expected [TEST=1 TEST3=2], got: %v", got) | 
|  | } | 
|  | } | 
|  |  | 
|  | const testKatiEnvFileContents = `#!/bin/sh | 
|  | # Generated by kati unknown | 
|  |  | 
|  | unset 'CLANG' | 
|  | export 'BUILD_ID'='NYC' | 
|  | ` | 
|  |  | 
|  | func TestEnvAppendFromKati(t *testing.T) { | 
|  | initial := &Environment{"CLANG=/usr/bin/clang", "TEST=0"} | 
|  | err := initial.appendFromKati(strings.NewReader(testKatiEnvFileContents)) | 
|  | if err != nil { | 
|  | t.Fatalf("Unexpected error from %v", err) | 
|  | } | 
|  |  | 
|  | got := initial.Environ() | 
|  | expected := []string{"TEST=0", "BUILD_ID=NYC"} | 
|  | if !reflect.DeepEqual(got, expected) { | 
|  | t.Errorf("Environment list does not match") | 
|  | t.Errorf("expected: %v", expected) | 
|  | t.Errorf("     got: %v", got) | 
|  | } | 
|  | } |