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 }