github.com/Jeffail/benthos/v3@v3.65.0/lib/processor/sleep_test.go (about) 1 package processor 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/Jeffail/benthos/v3/lib/log" 8 "github.com/Jeffail/benthos/v3/lib/message" 9 "github.com/Jeffail/benthos/v3/lib/metrics" 10 ) 11 12 func TestSleep(t *testing.T) { 13 conf := NewConfig() 14 conf.Type = TypeSleep 15 conf.Sleep.Duration = "1ns" 16 17 slp, err := New(conf, nil, log.Noop(), metrics.Noop()) 18 if err != nil { 19 t.Fatal(err) 20 } 21 22 msgIn := message.New(nil) 23 msgsOut, res := slp.ProcessMessage(msgIn) 24 if res != nil { 25 t.Fatal(res.Error()) 26 } 27 28 if exp, act := msgIn, msgsOut[0]; exp != act { 29 t.Errorf("Wrong message returned: %v != %v", act, exp) 30 } 31 } 32 33 func TestSleepExit(t *testing.T) { 34 conf := NewConfig() 35 conf.Type = TypeSleep 36 conf.Sleep.Duration = "10s" 37 38 slp, err := New(conf, nil, log.Noop(), metrics.Noop()) 39 if err != nil { 40 t.Fatal(err) 41 } 42 43 doneChan := make(chan struct{}) 44 go func() { 45 slp.ProcessMessage(message.New(nil)) 46 close(doneChan) 47 }() 48 49 slp.CloseAsync() 50 slp.CloseAsync() 51 select { 52 case <-doneChan: 53 case <-time.After(time.Second): 54 t.Error("took too long") 55 } 56 } 57 58 func TestSleep200Millisecond(t *testing.T) { 59 conf := NewConfig() 60 conf.Type = TypeSleep 61 conf.Sleep.Duration = "200ms" 62 63 slp, err := New(conf, nil, log.Noop(), metrics.Noop()) 64 if err != nil { 65 t.Fatal(err) 66 } 67 68 tBefore := time.Now() 69 slp.ProcessMessage(message.New(nil)) 70 tAfter := time.Now() 71 72 if dur := tAfter.Sub(tBefore); dur < (time.Millisecond * 200) { 73 t.Errorf("Message didn't take long enough") 74 } 75 } 76 77 func TestSleepInterpolated(t *testing.T) { 78 conf := NewConfig() 79 conf.Type = TypeSleep 80 conf.Sleep.Duration = "${!json(\"foo\")}ms" 81 82 slp, err := New(conf, nil, log.Noop(), metrics.Noop()) 83 if err != nil { 84 t.Fatal(err) 85 } 86 87 tBefore := time.Now() 88 slp.ProcessMessage(message.New([][]byte{ 89 []byte(`{"foo":200}`), 90 })) 91 tAfter := time.Now() 92 93 if dur := tAfter.Sub(tBefore); dur < (time.Millisecond * 200) { 94 t.Errorf("Message didn't take long enough") 95 } 96 }