github.com/wrgl/wrgl@v0.14.0/pkg/conf/helpers/config.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright © 2022 Wrangle Ltd 3 4 package confhelpers 5 6 import ( 7 "os" 8 "path/filepath" 9 "runtime" 10 "testing" 11 12 "github.com/stretchr/testify/require" 13 "github.com/wrgl/wrgl/pkg/testutils" 14 ) 15 16 func MockEnv(t *testing.T, key, val string) func() { 17 t.Helper() 18 orig := os.Getenv(key) 19 require.NoError(t, os.Setenv(key, val)) 20 return func() { 21 require.NoError(t, os.Setenv(key, orig)) 22 } 23 } 24 25 func MockHomeDir(t *testing.T, parent_dir string) (string, func()) { 26 t.Helper() 27 name, err := testutils.TempDir(parent_dir, "test_wrgl_home") 28 require.NoError(t, err) 29 name, err = filepath.EvalSymlinks(name) 30 require.NoError(t, err) 31 env := "HOME" 32 switch runtime.GOOS { 33 case "windows": 34 env = "USERPROFILE" 35 case "plan9": 36 env = "home" 37 } 38 cleanup := MockEnv(t, env, name) 39 return name, func() { 40 cleanup() 41 require.NoError(t, os.RemoveAll(name)) 42 } 43 } 44 45 func MockGlobalConf(t *testing.T, setXDGConfigHome bool) func() { 46 t.Helper() 47 name, err := testutils.TempDir("", "test_wrgl_config") 48 require.NoError(t, err) 49 var cleanup1, cleanup2 func() 50 if setXDGConfigHome { 51 cleanup1 = MockEnv(t, "XDG_CONFIG_HOME", name) 52 } else { 53 cleanup1 = MockEnv(t, "XDG_CONFIG_HOME", "") 54 cleanup2 = MockEnv(t, "HOME", name) 55 } 56 return func() { 57 require.NoError(t, os.RemoveAll(name)) 58 cleanup1() 59 if cleanup2 != nil { 60 cleanup2() 61 } 62 } 63 } 64 65 func MockSystemConf(t *testing.T) func() { 66 t.Helper() 67 dir, err := testutils.TempDir("", "test_wrgl_config") 68 require.NoError(t, err) 69 cleanup := MockEnv(t, "WRGL_SYSTEM_CONFIG_DIR", dir) 70 return func() { 71 require.NoError(t, os.RemoveAll(dir)) 72 cleanup() 73 } 74 }