...

Source file src/sigs.k8s.io/kustomize/api/konfig/plugins_test.go

Documentation: sigs.k8s.io/kustomize/api/konfig

     1  // Copyright 2019 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package konfig
     5  
     6  import (
     7  	"os"
     8  	"path/filepath"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  	"sigs.k8s.io/kustomize/api/types"
    14  	"sigs.k8s.io/kustomize/kyaml/filesys"
    15  )
    16  
    17  func TestDefaultAbsPluginHome_NoKustomizePluginHomeEnv(t *testing.T) {
    18  	fSys := filesys.MakeFsInMemory()
    19  	keep, isSet := os.LookupEnv(KustomizePluginHomeEnv)
    20  	if isSet {
    21  		unsetenv(t, KustomizePluginHomeEnv)
    22  	}
    23  	_, err := DefaultAbsPluginHome(fSys)
    24  	if isSet {
    25  		setenv(t, KustomizePluginHomeEnv, keep)
    26  	}
    27  	if err == nil {
    28  		t.Fatalf("expected err")
    29  	}
    30  	if !types.IsErrUnableToFind(err) {
    31  		t.Fatalf("unexpected err: %v", err)
    32  	}
    33  	for _, expectedMsg := range []string{
    34  		"unable to find plugin root - tried:",
    35  		"('<no value>'; homed in $KUSTOMIZE_PLUGIN_HOME)",
    36  		"; homed in $XDG_CONFIG_HOME)",
    37  		"/.config/kustomize/plugin'; homed in default value of $XDG_CONFIG_HOME)",
    38  		"/kustomize/plugin'; homed in home directory)",
    39  	} {
    40  		assert.Contains(t, err.Error(), expectedMsg)
    41  	}
    42  }
    43  
    44  func TestDefaultAbsPluginHome_EmptyKustomizePluginHomeEnv(t *testing.T) {
    45  	keep, isSet := os.LookupEnv(KustomizePluginHomeEnv)
    46  	setenv(t, KustomizePluginHomeEnv, "")
    47  
    48  	_, err := DefaultAbsPluginHome(filesys.MakeFsInMemory())
    49  	if !isSet {
    50  		unsetenv(t, KustomizePluginHomeEnv)
    51  	} else {
    52  		setenv(t, KustomizePluginHomeEnv, keep)
    53  	}
    54  	if err == nil {
    55  		t.Fatalf("expected err")
    56  	}
    57  	if !types.IsErrUnableToFind(err) {
    58  		t.Fatalf("unexpected err: %v", err)
    59  	}
    60  	assert.Contains(t, err.Error(), "('<no value>'; homed in $KUSTOMIZE_PLUGIN_HOME)")
    61  }
    62  
    63  func TestDefaultAbsPluginHome_WithKustomizePluginHomeEnv(t *testing.T) {
    64  	fSys := filesys.MakeFsInMemory()
    65  	keep, isSet := os.LookupEnv(KustomizePluginHomeEnv)
    66  	if !isSet {
    67  		keep = "whatever"
    68  		setenv(t, KustomizePluginHomeEnv, keep)
    69  	}
    70  	err := fSys.Mkdir(keep)
    71  	require.NoError(t, err)
    72  	h, err := DefaultAbsPluginHome(fSys)
    73  	if !isSet {
    74  		unsetenv(t, KustomizePluginHomeEnv)
    75  	}
    76  	require.NoError(t, err)
    77  	if h != keep {
    78  		t.Fatalf("unexpected config dir: %s", h)
    79  	}
    80  }
    81  
    82  func TestDefaultAbsPluginHomeWithXdg(t *testing.T) {
    83  	fSys := filesys.MakeFsInMemory()
    84  	keep, isSet := os.LookupEnv(XdgConfigHomeEnv)
    85  	if !isSet {
    86  		keep = "whatever"
    87  		setenv(t, XdgConfigHomeEnv, keep)
    88  	}
    89  	configDir := filepath.Join(keep, ProgramName, RelPluginHome)
    90  	err := fSys.Mkdir(configDir)
    91  	require.NoError(t, err)
    92  	h, err := DefaultAbsPluginHome(fSys)
    93  	if !isSet {
    94  		unsetenv(t, XdgConfigHomeEnv)
    95  	}
    96  	if err != nil {
    97  		t.Fatalf("unexpected err: %v", err)
    98  	}
    99  	if h != configDir {
   100  		t.Fatalf("unexpected config dir: %s", h)
   101  	}
   102  }
   103  
   104  func TestDefaultAbsPluginHomeNoConfig(t *testing.T) {
   105  	fSys := filesys.MakeFsInMemory()
   106  	keep, isSet := os.LookupEnv(XdgConfigHomeEnv)
   107  	if isSet {
   108  		unsetenv(t, XdgConfigHomeEnv)
   109  	}
   110  	_, err := DefaultAbsPluginHome(fSys)
   111  	if isSet {
   112  		setenv(t, XdgConfigHomeEnv, keep)
   113  	}
   114  	if err == nil {
   115  		t.Fatalf("expected err")
   116  	}
   117  	if !types.IsErrUnableToFind(err) {
   118  		t.Fatalf("unexpected err: %v", err)
   119  	}
   120  }
   121  
   122  func TestDefaultAbsPluginHomeEmptyXdgConfig(t *testing.T) {
   123  	keep, isSet := os.LookupEnv(XdgConfigHomeEnv)
   124  	setenv(t, XdgConfigHomeEnv, "")
   125  	if isSet {
   126  		unsetenv(t, XdgConfigHomeEnv)
   127  	}
   128  	_, err := DefaultAbsPluginHome(filesys.MakeFsInMemory())
   129  	if isSet {
   130  		setenv(t, XdgConfigHomeEnv, keep)
   131  	}
   132  	if err == nil {
   133  		t.Fatalf("expected err")
   134  	}
   135  	if !types.IsErrUnableToFind(err) {
   136  		t.Fatalf("unexpected err: %v", err)
   137  	}
   138  	assert.Contains(t, err.Error(), "('<no value>'; homed in $XDG_CONFIG_HOME)")
   139  }
   140  
   141  func TestDefaultAbsPluginHomeNoXdgWithDotConfig(t *testing.T) {
   142  	fSys := filesys.MakeFsInMemory()
   143  	configDir := filepath.Join(
   144  		HomeDir(), XdgConfigHomeEnvDefault, ProgramName, RelPluginHome)
   145  	err := fSys.Mkdir(configDir)
   146  	require.NoError(t, err)
   147  	keep, isSet := os.LookupEnv(XdgConfigHomeEnv)
   148  	if isSet {
   149  		unsetenv(t, XdgConfigHomeEnv)
   150  	}
   151  	s, err := DefaultAbsPluginHome(fSys)
   152  	require.NoError(t, err)
   153  	if isSet {
   154  		setenv(t, XdgConfigHomeEnv, keep)
   155  	}
   156  	if s != configDir {
   157  		t.Fatalf("unexpected config dir: %s", s)
   158  	}
   159  }
   160  
   161  func TestDefaultAbsPluginHomeNoXdgJustHomeDir(t *testing.T) {
   162  	fSys := filesys.MakeFsInMemory()
   163  	configDir := filepath.Join(
   164  		HomeDir(), ProgramName, RelPluginHome)
   165  	err := fSys.Mkdir(configDir)
   166  	require.NoError(t, err)
   167  	keep, isSet := os.LookupEnv(XdgConfigHomeEnv)
   168  	if isSet {
   169  		unsetenv(t, XdgConfigHomeEnv)
   170  	}
   171  	s, err := DefaultAbsPluginHome(fSys)
   172  	require.NoError(t, err)
   173  	if isSet {
   174  		setenv(t, XdgConfigHomeEnv, keep)
   175  	}
   176  	if s != configDir {
   177  		t.Fatalf("unexpected config dir: %s", s)
   178  	}
   179  }
   180  
   181  func setenv(t *testing.T, key, value string) {
   182  	t.Helper()
   183  	require.NoError(t, os.Setenv(key, value))
   184  }
   185  
   186  func unsetenv(t *testing.T, key string) {
   187  	t.Helper()
   188  	require.NoError(t, os.Unsetenv(key))
   189  }
   190  

View as plain text