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 }