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  }