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