github.com/hernad/nomad@v1.6.112/command/agent/monitor/monitor_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package monitor 5 6 import ( 7 "fmt" 8 "strings" 9 "testing" 10 "time" 11 12 log "github.com/hashicorp/go-hclog" 13 "github.com/hernad/nomad/ci" 14 "github.com/stretchr/testify/require" 15 ) 16 17 func TestMonitor_Start(t *testing.T) { 18 ci.Parallel(t) 19 20 logger := log.NewInterceptLogger(&log.LoggerOptions{ 21 Level: log.Error, 22 }) 23 24 m := New(512, logger, &log.LoggerOptions{ 25 Level: log.Debug, 26 }) 27 28 logCh := m.Start() 29 defer m.Stop() 30 31 go func() { 32 logger.Debug("test log") 33 time.Sleep(10 * time.Millisecond) 34 }() 35 36 for { 37 select { 38 case log := <-logCh: 39 require.Contains(t, string(log), "[DEBUG] test log") 40 return 41 case <-time.After(3 * time.Second): 42 t.Fatal("Expected to receive from log channel") 43 } 44 } 45 } 46 47 // Ensure number of dropped messages are logged 48 func TestMonitor_DroppedMessages(t *testing.T) { 49 ci.Parallel(t) 50 51 logger := log.NewInterceptLogger(&log.LoggerOptions{ 52 Level: log.Warn, 53 }) 54 55 m := new(5, logger, &log.LoggerOptions{ 56 Level: log.Debug, 57 }) 58 m.droppedDuration = 5 * time.Millisecond 59 60 doneCh := make(chan struct{}) 61 defer close(doneCh) 62 63 logCh := m.Start() 64 65 for i := 0; i <= 100; i++ { 66 logger.Debug(fmt.Sprintf("test message %d", i)) 67 } 68 69 received := "" 70 passed := make(chan struct{}) 71 go func() { 72 for { 73 select { 74 case recv := <-logCh: 75 received += string(recv) 76 if strings.Contains(received, "[WARN] Monitor dropped") { 77 close(passed) 78 } 79 } 80 } 81 }() 82 83 TEST: 84 for { 85 select { 86 case <-passed: 87 break TEST 88 case <-time.After(2 * time.Second): 89 require.Fail(t, "expected to see warn dropped messages") 90 } 91 } 92 }