github.com/decred/dcrlnd@v0.7.6/build/log_test.go (about)

     1  package build_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/decred/dcrlnd/build"
     7  	"github.com/decred/slog"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  type mockSubLogger struct {
    12  	globalLogLevel string
    13  	subLogLevels   map[string]string
    14  }
    15  
    16  func (m *mockSubLogger) SubLoggers() build.SubLoggers {
    17  	return build.SubLoggers{
    18  		"PEER": slog.Disabled,
    19  		"SRVR": slog.Disabled,
    20  	}
    21  }
    22  
    23  func (m *mockSubLogger) SupportedSubsystems() []string {
    24  	return nil
    25  }
    26  
    27  func (m *mockSubLogger) SetLogLevel(subsystemID string, logLevel string) {
    28  	m.subLogLevels[subsystemID] = logLevel
    29  }
    30  
    31  func (m *mockSubLogger) SetLogLevels(logLevel string) {
    32  	m.globalLogLevel = logLevel
    33  }
    34  
    35  // TestParseAndSetDebugLevels tests tha we can properly set the log levels for
    36  // all andspecified subsystems.
    37  func TestParseAndSetDebugLevels(t *testing.T) {
    38  	testCases := []struct {
    39  		name         string
    40  		debugLevel   string
    41  		expErr       string
    42  		expGlobal    string
    43  		expSubLevels map[string]string
    44  	}{
    45  		{
    46  			name:       "empty log level",
    47  			debugLevel: "",
    48  			expErr:     "invalid",
    49  		},
    50  		{
    51  			name:       "invalid global debug level",
    52  			debugLevel: "ddddddebug",
    53  			expErr:     "invalid",
    54  		},
    55  		{
    56  			name:       "global debug level",
    57  			debugLevel: "debug",
    58  			expGlobal:  "debug",
    59  		},
    60  		{
    61  			name:       "invalid global debug level#2",
    62  			debugLevel: "debug,info",
    63  			expErr:     "invalid",
    64  		},
    65  		{
    66  			name:       "invalid subsystem debug level",
    67  			debugLevel: "AAAA=debug",
    68  			expErr:     "invalid",
    69  		},
    70  		{
    71  			name:       "valid subsystem debug level",
    72  			debugLevel: "PEER=info,SRVR=debug",
    73  			expSubLevels: map[string]string{
    74  				"PEER": "info",
    75  				"SRVR": "debug",
    76  			},
    77  		},
    78  		{
    79  			name:       "valid global+subsystem debug level",
    80  			debugLevel: "trace,PEER=info,SRVR=debug",
    81  			expGlobal:  "trace",
    82  			expSubLevels: map[string]string{
    83  				"PEER": "info",
    84  				"SRVR": "debug",
    85  			},
    86  		},
    87  		{
    88  			name:       "invalid global+subsystem debug level",
    89  			debugLevel: "PEER=info,debug,SRVR=debug",
    90  			expErr:     "invalid",
    91  		},
    92  	}
    93  
    94  	for _, test := range testCases {
    95  		test := test
    96  		t.Run(test.name, func(t *testing.T) {
    97  			m := &mockSubLogger{
    98  				subLogLevels: make(map[string]string),
    99  			}
   100  
   101  			// If the subsystem map is empty, make and empty one to ensure
   102  			// the equal test later succeeds.
   103  			if len(test.expSubLevels) == 0 {
   104  				test.expSubLevels = make(map[string]string)
   105  			}
   106  
   107  			err := build.ParseAndSetDebugLevels(test.debugLevel, m)
   108  			if test.expErr != "" {
   109  				require.Contains(t, err.Error(), test.expErr)
   110  				return
   111  			}
   112  			require.NoError(t, err)
   113  
   114  			require.Equal(t, test.expGlobal, m.globalLogLevel)
   115  			require.Equal(t, test.expSubLevels, m.subLogLevels)
   116  		})
   117  	}
   118  }