waku-org/go-waku

View on GitHub
waku/v2/api/history/emitters_test.go

Summary

Maintainability
A
0 mins
Test Coverage
package history

import (
    "sync"
    "testing"

    "github.com/stretchr/testify/require"
)

func TestEmitter(t *testing.T) {
    emitter := NewEmitter[int]()

    subscr1 := emitter.Subscribe()
    subscr2 := emitter.Subscribe()

    wg := sync.WaitGroup{}
    wg.Add(3)

    go func() {
        defer wg.Done()
        emitter.Emit(1)
        emitter.Emit(2)
    }()

    go func() {
        defer wg.Done()
        require.Equal(t, 1, <-subscr1)
        require.Equal(t, 2, <-subscr1)
    }()

    go func() {
        defer wg.Done()
        require.Equal(t, 1, <-subscr2)
        require.Equal(t, 2, <-subscr2)
    }()

    wg.Wait()
}

func TestOneShotEmitter(t *testing.T) {
    emitter := NewOneshotEmitter[struct{}]()

    subscr1 := emitter.Subscribe()
    subscr2 := emitter.Subscribe()

    wg := sync.WaitGroup{}
    wg.Add(3)

    go func() {
        defer wg.Done()
        emitter.Emit(struct{}{})
    }()

    go func() {
        defer wg.Done()
        for range subscr1 {
        }
    }()

    go func() {
        defer wg.Done()
        for range subscr2 {
        }
    }()

    wg.Wait()
}