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