@@ -42,6 +42,8 @@ type kernelLogWatcher struct {
4242 tomb * tomb.Tomb
4343
4444 kmsgParser kmsgparser.Parser
45+ // newParser creates a kmsgparser. Overridable in tests; defaults to kmsgparser.NewParser.
46+ newParser func () (kmsgparser.Parser , error )
4547}
4648
4749// NewKmsgWatcher creates a watcher which will read messages from /dev/kmsg
@@ -60,7 +62,8 @@ func NewKmsgWatcher(cfg types.WatcherConfig) types.LogWatcher {
6062 startTime : startTime ,
6163 tomb : tomb .NewTomb (),
6264 // Arbitrary capacity
63- logCh : make (chan * logtypes.Log , 100 ),
65+ logCh : make (chan * logtypes.Log , 100 ),
66+ newParser : kmsgparser .NewParser ,
6467 }
6568}
6669
@@ -69,7 +72,7 @@ var _ types.WatcherCreateFunc = NewKmsgWatcher
6972func (k * kernelLogWatcher ) Watch () (<- chan * logtypes.Log , error ) {
7073 if k .kmsgParser == nil {
7174 // nil-check to make mocking easier
72- parser , err := kmsgparser . NewParser ()
75+ parser , err := k . newParser ()
7376 if err != nil {
7477 return nil , fmt .Errorf ("failed to create kmsg parser: %v" , err )
7578 }
@@ -150,7 +153,7 @@ func (k *kernelLogWatcher) watchLoop() {
150153// It returns the new message channel and true on success, or nil and false if stopping was signaled.
151154func (k * kernelLogWatcher ) retryCreateParser () (<- chan kmsgparser.Message , bool ) {
152155 for {
153- parser , err := kmsgparser . NewParser ()
156+ parser , err := k . newParser ()
154157 if err != nil {
155158 klog .Errorf ("Failed to create new kmsg parser, retrying in %v: %v" , retryDelay , err )
156159 } else if seekErr := parser .SeekEnd (); seekErr != nil {
0 commit comments