diff --git a/api/stream/once_test.go b/api/stream/once_test.go new file mode 100644 index 0000000..53ec08d --- /dev/null +++ b/api/stream/once_test.go @@ -0,0 +1,43 @@ +package stream + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +func Test_Execute(t *testing.T) { + executeOnce := once{} + execution := make(chan struct{}) + fExecute := func() { + execution <- struct{}{} + } + go executeOnce.Do(fExecute) + go executeOnce.Do(fExecute) + + select { + case <-execution: + // expected + case <-time.After(100 * time.Millisecond): + t.Fatal("fExecute should be executed once") + } + + select { + case <-execution: + t.Fatal("should only execute once") + case <-time.After(100 * time.Millisecond): + // expected + } + + assert.False(t, executeOnce.mayExecute()) + + go executeOnce.Do(fExecute) + + select { + case <-execution: + t.Fatal("should only execute once") + case <-time.After(100 * time.Millisecond): + // expected + } +}