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  }