github.com/argoproj/argo-events@v1.9.1/eventbus/kafka/base/utils_test.go (about)

     1  package base
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestBatchDurationReached(t *testing.T) {
    11  	in := make(chan int)
    12  	defer close(in)
    13  
    14  	out := Batch(5, 1*time.Second, in)
    15  
    16  	t0 := time.Now()
    17  	in <- 0
    18  	assert.Equal(t, []int{0}, <-out)
    19  	assert.Equal(t, time.Second, time.Since(t0).Truncate(time.Second))
    20  
    21  	t1 := time.Now()
    22  	in <- 1
    23  	in <- 2
    24  	assert.Equal(t, []int{1, 2}, <-out)
    25  	assert.Equal(t, time.Second, time.Since(t1).Truncate(time.Second))
    26  
    27  	t2 := time.Now()
    28  	in <- 3
    29  	in <- 4
    30  	in <- 5
    31  	assert.Equal(t, []int{3, 4, 5}, <-out)
    32  	assert.Equal(t, time.Second, time.Since(t2).Truncate(time.Second))
    33  }
    34  
    35  func TestBatchSizeReached(t *testing.T) {
    36  	in := make(chan int)
    37  	defer close(in)
    38  
    39  	out := Batch(2, 1*time.Second, in)
    40  
    41  	t0 := time.Now()
    42  	in <- 0
    43  	in <- 1
    44  	assert.Equal(t, <-out, []int{0, 1})
    45  	assert.Equal(t, time.Duration(0), time.Since(t0).Truncate(time.Second))
    46  
    47  	t1 := time.Now()
    48  	in <- 2
    49  	in <- 3
    50  	in <- 4
    51  	in <- 5
    52  	assert.Equal(t, []int{2, 3}, <-out)
    53  	assert.Equal(t, []int{4, 5}, <-out)
    54  	assert.Equal(t, time.Duration(0), time.Since(t1).Truncate(time.Second))
    55  }
    56  
    57  func TestBatchMaintainsOrder(t *testing.T) {
    58  	in := make(chan string)
    59  	defer close(in)
    60  
    61  	out := Batch(10, 1*time.Second, in)
    62  
    63  	in <- "a"
    64  	in <- "b"
    65  	in <- "c"
    66  	in <- "d"
    67  	in <- "e"
    68  	in <- "f"
    69  	in <- "g"
    70  	in <- "h"
    71  	in <- "i"
    72  	in <- "j"
    73  	assert.Equal(t, []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"}, <-out)
    74  }
    75  
    76  func TestBatchChannelCleanedUp(t *testing.T) {
    77  	in := make(chan string)
    78  	out := Batch(10, 1*time.Second, in)
    79  
    80  	close(in)
    81  	assert.Equal(t, []string(nil), <-out)
    82  }