github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/fs/log_test.go (about) 1 package fs 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "strconv" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 // Check it satisfies the interfaces 14 var ( 15 _ flagger = (*LogLevel)(nil) 16 _ flaggerNP = LogLevel(0) 17 _ fmt.Stringer = LogValueItem{} 18 ) 19 20 type withString struct{} 21 22 func (withString) String() string { 23 return "hello" 24 } 25 26 func TestLogValue(t *testing.T) { 27 x := LogValue("x", 1) 28 assert.Equal(t, "1", x.String()) 29 x = LogValue("x", withString{}) 30 assert.Equal(t, "hello", x.String()) 31 x = LogValueHide("x", withString{}) 32 assert.Equal(t, "", x.String()) 33 } 34 35 func TestLogLevelString(t *testing.T) { 36 for _, test := range []struct { 37 in LogLevel 38 want string 39 }{ 40 {LogLevelEmergency, "EMERGENCY"}, 41 {LogLevelDebug, "DEBUG"}, 42 {99, "Unknown(99)"}, 43 } { 44 logLevel := test.in 45 got := logLevel.String() 46 assert.Equal(t, test.want, got, test.in) 47 } 48 } 49 50 func TestLogLevelSet(t *testing.T) { 51 for _, test := range []struct { 52 in string 53 want LogLevel 54 err bool 55 }{ 56 {"EMERGENCY", LogLevelEmergency, false}, 57 {"DEBUG", LogLevelDebug, false}, 58 {"Potato", 100, true}, 59 } { 60 logLevel := LogLevel(100) 61 err := logLevel.Set(test.in) 62 if test.err { 63 require.Error(t, err, test.in) 64 } else { 65 require.NoError(t, err, test.in) 66 } 67 assert.Equal(t, test.want, logLevel, test.in) 68 } 69 } 70 71 func TestLogLevelUnmarshalJSON(t *testing.T) { 72 for _, test := range []struct { 73 in string 74 want LogLevel 75 err bool 76 }{ 77 {`"EMERGENCY"`, LogLevelEmergency, false}, 78 {`"DEBUG"`, LogLevelDebug, false}, 79 {`"Potato"`, 100, true}, 80 {strconv.Itoa(int(LogLevelEmergency)), LogLevelEmergency, false}, 81 {strconv.Itoa(int(LogLevelDebug)), LogLevelDebug, false}, 82 {"Potato", 100, true}, 83 {`99`, 100, true}, 84 {`-99`, 100, true}, 85 } { 86 logLevel := LogLevel(100) 87 err := json.Unmarshal([]byte(test.in), &logLevel) 88 if test.err { 89 require.Error(t, err, test.in) 90 } else { 91 require.NoError(t, err, test.in) 92 } 93 assert.Equal(t, test.want, logLevel, test.in) 94 } 95 }