github.com/argoproj/argo-cd/v3@v3.2.1/util/localconfig/localconfig_test.go (about)

     1  //go:build !windows
     2  
     3  package localconfig
     4  
     5  import (
     6  	"errors"
     7  	"os"
     8  	"path"
     9  	"path/filepath"
    10  	"testing"
    11  
    12  	"github.com/argoproj/argo-cd/v3/util/config"
    13  
    14  	"github.com/stretchr/testify/require"
    15  
    16  	"github.com/stretchr/testify/assert"
    17  )
    18  
    19  func TestGetUsername(t *testing.T) {
    20  	assert.Equal(t, "admin", GetUsername("admin:login"))
    21  	assert.Equal(t, "admin", GetUsername("admin"))
    22  	assert.Empty(t, GetUsername(""))
    23  }
    24  
    25  func TestFilePermission(t *testing.T) {
    26  	dirPath := "testfolder/"
    27  
    28  	err := os.MkdirAll(path.Dir(dirPath), 0o700)
    29  	require.NoError(t, err, "Could not create argocd folder with 0700 permission: %v", err)
    30  
    31  	t.Cleanup(func() {
    32  		err := os.RemoveAll(dirPath)
    33  		require.NoError(t, err, "Could not remove directory")
    34  	})
    35  
    36  	for _, c := range []struct {
    37  		name          string
    38  		testfile      string
    39  		perm          os.FileMode
    40  		expectedError error
    41  	}{
    42  		{
    43  			name:          "Test config file with permission 0700",
    44  			testfile:      ".config_0700",
    45  			perm:          0o700,
    46  			expectedError: errors.New("config file has incorrect permission flags -rwx------, change the file permission either to 0400 or 0600"),
    47  		},
    48  		{
    49  			name:          "Test config file with permission 0777",
    50  			testfile:      ".config_0777",
    51  			perm:          0o777,
    52  			expectedError: errors.New("config file has incorrect permission flags -rwxrwxrwx, change the file permission either to 0400 or 0600"),
    53  		},
    54  		{
    55  			name:          "Test config file with permission 0600",
    56  			testfile:      ".config_0600",
    57  			perm:          0o600,
    58  			expectedError: nil,
    59  		},
    60  		{
    61  			name:          "Test config file with permission 0400",
    62  			testfile:      ".config_0400",
    63  			perm:          0o400,
    64  			expectedError: nil,
    65  		},
    66  		{
    67  			name:          "Test config file with permission 0300",
    68  			testfile:      ".config_0300",
    69  			perm:          0o300,
    70  			expectedError: errors.New("config file has incorrect permission flags --wx------, change the file permission either to 0400 or 0600"),
    71  		},
    72  	} {
    73  		t.Run(c.name, func(t *testing.T) {
    74  			filePath := filepath.Join(dirPath, c.testfile)
    75  
    76  			f, err := os.Create(filePath)
    77  			require.NoError(t, err, "Could not write  create config file: %v", err)
    78  			defer func() {
    79  				assert.NoError(t, f.Close())
    80  			}()
    81  
    82  			err = f.Chmod(c.perm)
    83  			require.NoError(t, err, "Could not change the file permission to %s: %v", c.perm, err)
    84  
    85  			fi, err := os.Stat(filePath)
    86  			require.NoError(t, err, "Could not access the fileinfo: %v", err)
    87  
    88  			if err := getFilePermission(fi); err != nil {
    89  				assert.EqualError(t, err, c.expectedError.Error())
    90  			} else {
    91  				require.NoError(t, c.expectedError)
    92  			}
    93  		})
    94  	}
    95  }
    96  
    97  const testConfig = `contexts:
    98  - name: argocd1.example.com:443
    99    server: argocd1.example.com:443
   100    user: argocd1.example.com:443
   101  - name: argocd2.example.com:443
   102    server: argocd2.example.com:443
   103    user: argocd2.example.com:443
   104  - name: localhost:8080
   105    server: localhost:8080
   106    user: localhost:8080
   107  current-context: localhost:8080
   108  servers:
   109  - server: argocd1.example.com:443
   110  - server: argocd2.example.com:443
   111  - plain-text: true
   112    server: localhost:8080
   113  users:
   114  - auth-token: vErrYS3c3tReFRe$hToken
   115    name: argocd1.example.com:443
   116    refresh-token: vErrYS3c3tReFRe$hToken
   117  - auth-token: vErrYS3c3tReFRe$hToken
   118    name: argocd2.example.com:443
   119    refresh-token: vErrYS3c3tReFRe$hToken
   120  - auth-token: vErrYS3c3tReFRe$hToken
   121    name: localhost:8080`
   122  
   123  const testConfigFilePath = "./testdata/local.config"
   124  
   125  func loadOpts(t *testing.T, opts string) {
   126  	t.Helper()
   127  	t.Setenv("ARGOCD_OPTS", opts)
   128  	assert.NoError(t, config.LoadFlags())
   129  }
   130  
   131  func TestGetPromptsEnabled_useCLIOpts_false_localConfigPromptsEnabled_true(t *testing.T) {
   132  	// Write the test config file
   133  	err := os.WriteFile(testConfigFilePath, []byte(testConfig+"\nprompts-enabled: true"), os.ModePerm)
   134  	require.NoError(t, err)
   135  
   136  	defer os.Remove(testConfigFilePath)
   137  
   138  	err = os.Chmod(testConfigFilePath, 0o600)
   139  	require.NoError(t, err, "Could not change the file permission to 0600 %v", err)
   140  
   141  	loadOpts(t, "--config "+testConfigFilePath)
   142  
   143  	assert.True(t, GetPromptsEnabled(false))
   144  }
   145  
   146  func TestGetPromptsEnabled_useCLIOpts_false_localConfigPromptsEnabled_false(t *testing.T) {
   147  	// Write the test config file
   148  	err := os.WriteFile(testConfigFilePath, []byte(testConfig+"\nprompts-enabled: false"), os.ModePerm)
   149  	require.NoError(t, err)
   150  
   151  	defer os.Remove(testConfigFilePath)
   152  
   153  	err = os.Chmod(testConfigFilePath, 0o600)
   154  	require.NoError(t, err, "Could not change the file permission to 0600 %v", err)
   155  
   156  	loadOpts(t, "--config "+testConfigFilePath)
   157  
   158  	assert.False(t, GetPromptsEnabled(false))
   159  }
   160  
   161  func TestGetPromptsEnabled_useCLIOpts_true_forcePromptsEnabled_default(t *testing.T) {
   162  	// Write the test config file
   163  	err := os.WriteFile(testConfigFilePath, []byte(testConfig+"\nprompts-enabled: false"), os.ModePerm)
   164  	require.NoError(t, err)
   165  
   166  	defer os.Remove(testConfigFilePath)
   167  
   168  	err = os.Chmod(testConfigFilePath, 0o600)
   169  	require.NoError(t, err, "Could not change the file permission to 0600 %v", err)
   170  
   171  	loadOpts(t, "--config "+testConfigFilePath+" --prompts-enabled")
   172  
   173  	assert.True(t, GetPromptsEnabled(true))
   174  }
   175  
   176  func TestGetPromptsEnabled_useCLIOpts_true_forcePromptsEnabled_true(t *testing.T) {
   177  	// Write the test config file
   178  	err := os.WriteFile(testConfigFilePath, []byte(testConfig+"\nprompts-enabled: false"), os.ModePerm)
   179  	require.NoError(t, err)
   180  
   181  	defer os.Remove(testConfigFilePath)
   182  
   183  	err = os.Chmod(testConfigFilePath, 0o600)
   184  	require.NoError(t, err, "Could not change the file permission to 0600 %v", err)
   185  
   186  	loadOpts(t, "--config "+testConfigFilePath+" --prompts-enabled=true")
   187  
   188  	assert.True(t, GetPromptsEnabled(true))
   189  }
   190  
   191  func TestGetPromptsEnabled_useCLIOpts_true_forcePromptsEnabled_false(t *testing.T) {
   192  	// Write the test config file
   193  	err := os.WriteFile(testConfigFilePath, []byte(testConfig+"\nprompts-enabled: true"), os.ModePerm)
   194  	require.NoError(t, err)
   195  
   196  	defer os.Remove(testConfigFilePath)
   197  
   198  	err = os.Chmod(testConfigFilePath, 0o600)
   199  	require.NoError(t, err, "Could not change the file permission to 0600 %v", err)
   200  
   201  	loadOpts(t, "--config "+testConfigFilePath+" --prompts-enabled=false")
   202  
   203  	assert.False(t, GetPromptsEnabled(true))
   204  }