github.com/apptainer/singularity@v3.1.1+incompatible/internal/pkg/util/env/clean_test.go (about) 1 // Copyright (c) 2018, Sylabs Inc. All rights reserved. 2 // This software is licensed under a 3-clause BSD license. Please consult the 3 // LICENSE.md file distributed with the sources of this project regarding your 4 // rights to use or distribute this software. 5 6 package env 7 8 import ( 9 "fmt" 10 "strings" 11 "testing" 12 13 "github.com/opencontainers/runtime-tools/generate" 14 "github.com/sylabs/singularity/internal/pkg/runtime/engines/config/oci" 15 "github.com/sylabs/singularity/internal/pkg/test" 16 ) 17 18 func TestSetContainerEnv(t *testing.T) { 19 test.DropPrivilege(t) 20 defer test.ResetPrivilege(t) 21 22 ociConfig := &oci.Config{} 23 generator := generate.Generator{Config: &ociConfig.Spec} 24 25 type args struct { 26 env []string 27 cleanEnv bool 28 homeDest string 29 resultEnv []string 30 } 31 tests := []struct { 32 name string 33 args args 34 }{ 35 {name: "NO_SINGULARITYENV_", 36 args: args{[]string{"LD_LIBRARY_PATH=/.singularity.d/libs", "HOME=/home/tester", 37 "PS1=test", "TERM=xterm-256color", "PATH=/usr/games:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 38 "LANG=C", "SINGULARITY_CONTAINER=/tmp/lolcow.sif", "PWD=/tmp", "LC_ALL=C", 39 "SINGULARITY_NAME=lolcow.sif"}, false, "/home/tester", 40 []string{"LD_LIBRARY_PATH=/.singularity.d/libs", "HOME=/home/tester", "PS1=test", 41 "TERM=xterm-256color", "PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin", 42 "LANG=C", "SINGULARITY_CONTAINER=/tmp/lolcow.sif", "PWD=/tmp", "LC_ALL=C", 43 "SINGULARITY_NAME=lolcow.sif"}, 44 }}, 45 {name: "CLEANENV_true", 46 args: args{[]string{"LD_LIBRARY_PATH=/.singularity.d/libs", "HOME=/home/tester", 47 "PS1=test", "TERM=xterm-256color", "PATH=/usr/games:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 48 "LANG=C", "SINGULARITY_CONTAINER=/tmp/lolcow.sif", "PWD=/tmp", "LC_ALL=C", 49 "SINGULARITY_NAME=lolcow.sif", "SINGULARITYENV_FOO=VAR", "CLEANENV=TRUE"}, true, "/home/tester", 50 []string{"LD_LIBRARY_PATH=/.singularity.d/libs", "HOME=/home/tester", "PS1=test", 51 "TERM=xterm-256color", "PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin", 52 "LANG=C", "SINGULARITY_CONTAINER=/tmp/lolcow.sif", "PWD=/tmp", "LC_ALL=C", 53 "SINGULARITY_NAME=lolcow.sif", "FOO=VAR"}, 54 }}, 55 {name: "alwaysPassKeys", 56 args: args{[]string{"LD_LIBRARY_PATH=/.singularity.d/libs", "HOME=/home/tester", 57 "PS1=test", "TERM=xterm-256color", "PATH=/usr/games:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 58 "LANG=C", "SINGULARITY_CONTAINER=/tmp/lolcow.sif", "PWD=/tmp", "LC_ALL=C", 59 "http_proxy=http_proxy", "https_proxy=https_proxy", "no_proxy=no_proxy", "all_proxy=all_proxy", "ftp_proxy=ftp_proxy", 60 "HTTP_PROXY=http_proxy", "HTTPS_PROXY=https_proxy", "NO_PROXY=no_proxy", "ALL_PROXY=all_proxy", "FTP_PROXY=ftp_proxy", 61 "SINGULARITY_NAME=lolcow.sif", "SINGULARITYENV_FOO=VAR", "CLEANENV=TRUE"}, true, "/home/tester", 62 []string{"LD_LIBRARY_PATH=/.singularity.d/libs", "HOME=/home/tester", "PS1=test", "TERM=xterm-256color", "PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin", 63 "LANG=C", "SINGULARITY_CONTAINER=/tmp/lolcow.sif", "PWD=/tmp", "LC_ALL=C", "SINGULARITY_NAME=lolcow.sif", "FOO=VAR", 64 "http_proxy=http_proxy", "https_proxy=https_proxy", "no_proxy=no_proxy", "all_proxy=all_proxy", "ftp_proxy=ftp_proxy", 65 "HTTP_PROXY=http_proxy", "HTTPS_PROXY=https_proxy", "NO_PROXY=no_proxy", "ALL_PROXY=all_proxy", "FTP_PROXY=ftp_proxy"}, 66 }}, 67 } 68 for _, tt := range tests { 69 t.Run(tt.name, func(t *testing.T) { 70 SetContainerEnv(&generator, tt.args.env, tt.args.cleanEnv, tt.args.homeDest) 71 if !equal(ociConfig.Process.Env, tt.args.resultEnv) { 72 fmt.Println(ociConfig.Process.Env) 73 t.Fail() 74 } 75 }) 76 } 77 } 78 79 // equal tells whether a and b contain the same elements. 80 // A nil argument is equivalent to an empty slice. 81 func equal(a, b []string) bool { 82 if len(a) != len(b) { 83 return false 84 } 85 for i, v := range a { 86 fmt.Println(v, b[i]) 87 if c := strings.Compare(v, b[i]); c != 0 { 88 fmt.Println(v, b[i]) 89 return false 90 } 91 } 92 return true 93 }