github.com/docker/compose-on-kubernetes@v0.5.0/internal/deduplication/stringchannel_test.go (about)

     1  package deduplication
     2  
     3  import (
     4  	"fmt"
     5  	"math/rand"
     6  	"sync"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestDeduplicateCorrectly(t *testing.T) {
    14  	c := NewStringChan(5)
    15  	c.In() <- "test"
    16  	c.In() <- "test"
    17  	c.In() <- "test"
    18  	c.In() <- "test"
    19  	c.In() <- "test"
    20  	c.Close()
    21  	count := 0
    22  	for v := range c.Out() {
    23  		assert.Equal(t, "test", v)
    24  		count++
    25  	}
    26  	assert.True(t, count >= 1 && count <= 5)
    27  }
    28  
    29  func TestWithLoadAtLeastOne(t *testing.T) {
    30  	rand.Seed(time.Now().UTC().UnixNano())
    31  	c := NewStringChan(20)
    32  	generated := make(map[string]struct{})
    33  	consumed := make(map[string]struct{})
    34  	var wg sync.WaitGroup
    35  	wg.Add(2)
    36  	go func() {
    37  		defer wg.Done()
    38  		defer c.Close()
    39  		for i := 0; i < 1000000; i++ {
    40  			v := rand.Intn(20)
    41  			testVal := fmt.Sprintf("test %d", v)
    42  			c.In() <- testVal
    43  			generated[testVal] = struct{}{}
    44  		}
    45  	}()
    46  	go func() {
    47  		defer wg.Done()
    48  		for v := range c.Out() {
    49  			consumed[v] = struct{}{}
    50  		}
    51  	}()
    52  	wg.Wait()
    53  	assert.Equal(t, generated, consumed)
    54  }