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 }