github.com/argoproj/argo-cd/v3@v3.2.1/util/cli/cli_test.go (about) 1 package cli 2 3 import ( 4 "errors" 5 "flag" 6 "os" 7 "os/exec" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 12 "github.com/argoproj/argo-cd/v3/common" 13 14 "github.com/stretchr/testify/require" 15 ) 16 17 const pwd = "test-password" 18 19 func TestPromptPassword_Fallback(t *testing.T) { 20 oldStdin := os.Stdin 21 defer func() { 22 os.Stdin = oldStdin 23 }() 24 25 r, w, err := os.Pipe() 26 if err != nil { 27 t.Fatalf("Failed to create pipe: %v", err) 28 } 29 _, err = w.WriteString(pwd + "\n") 30 if err != nil { 31 t.Fatalf("Failed to write to pipe: %v", err) 32 } 33 w.Close() 34 35 os.Stdin = r 36 password := PromptPassword("") 37 require.Equal(t, pwd, password) 38 } 39 40 func TestSetLogFormat(t *testing.T) { 41 tests := []struct { 42 name string 43 logFormat string 44 expected string 45 expectedFatal bool 46 }{ 47 { 48 name: "log format is set to json", 49 logFormat: "json", 50 expected: "json", 51 }, 52 { 53 name: "log format is set to text", 54 logFormat: "text", 55 expected: "text", 56 }, 57 { 58 name: "log format is not set", 59 logFormat: "text", 60 expected: "text", 61 }, 62 { 63 name: "invalid log format", 64 logFormat: "invalid", 65 expected: "", 66 expectedFatal: true, 67 }, 68 } 69 for _, tt := range tests { 70 t.Run(tt.name, func(t *testing.T) { 71 if tt.expectedFatal { 72 if os.Getenv("TEST_FATAL") == "1" { 73 SetLogFormat(tt.logFormat) 74 return 75 } 76 cmd := exec.Command(os.Args[0], "-test.run="+t.Name()) 77 cmd.Env = append(os.Environ(), "TEST_FATAL=1") 78 err := cmd.Run() 79 e := &exec.ExitError{} 80 if errors.As(err, &e) { 81 return 82 } 83 t.Fatalf("expected fatal exit for invalid log format") 84 } else { 85 SetLogFormat(tt.logFormat) 86 assert.Equal(t, tt.expected, os.Getenv(common.EnvLogFormat)) 87 } 88 }) 89 } 90 } 91 92 func TestSetLogLevel(t *testing.T) { 93 tests := []struct { 94 name string 95 level string 96 expected string 97 }{ 98 { 99 name: "log level is set to debug", 100 level: "debug", 101 expected: "debug", 102 }, 103 { 104 name: "log level is set to info", 105 level: "info", 106 expected: "info", 107 }, 108 { 109 name: "log level is set to warn", 110 level: "warn", 111 expected: "warning", 112 }, 113 { 114 name: "log level is set to error", 115 level: "error", 116 expected: "error", 117 }, 118 } 119 for _, tt := range tests { 120 t.Run(tt.name, func(t *testing.T) { 121 SetLogLevel(tt.level) 122 assert.Equal(t, tt.expected, os.Getenv(common.EnvLogLevel)) 123 }) 124 } 125 } 126 127 func TestSetGLogLevel(t *testing.T) { 128 SetGLogLevel(3) 129 130 vFlag := flag.Lookup("v") 131 assert.Equal(t, "3", vFlag.Value.String()) 132 133 logToStderrFlag := flag.Lookup("logtostderr") 134 assert.Equal(t, "true", logToStderrFlag.Value.String()) 135 }