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  }