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  }