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  }