mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-07-09 21:17:09 +08:00
util: add waitmap for target synchronization
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
64
util/waitmap/waitmap_test.go
Normal file
64
util/waitmap/waitmap_test.go
Normal file
@ -0,0 +1,64 @@
|
||||
package waitmap
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestGetAfter(t *testing.T) {
|
||||
m := New()
|
||||
|
||||
m.Set("foo", "bar")
|
||||
m.Set("bar", "baz")
|
||||
|
||||
ctx := context.TODO()
|
||||
v, err := m.Get(ctx, "foo", "bar")
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 2, len(v))
|
||||
require.Equal(t, "bar", v["foo"])
|
||||
require.Equal(t, "baz", v["bar"])
|
||||
|
||||
v, err = m.Get(ctx, "foo")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 1, len(v))
|
||||
require.Equal(t, "bar", v["foo"])
|
||||
}
|
||||
|
||||
func TestTimeout(t *testing.T) {
|
||||
m := New()
|
||||
|
||||
m.Set("foo", "bar")
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.TODO(), 100*time.Millisecond)
|
||||
defer cancel()
|
||||
|
||||
_, err := m.Get(ctx, "bar")
|
||||
require.Error(t, err)
|
||||
require.True(t, errors.Is(err, context.DeadlineExceeded))
|
||||
}
|
||||
|
||||
func TestBlocking(t *testing.T) {
|
||||
m := New()
|
||||
|
||||
m.Set("foo", "bar")
|
||||
|
||||
go func() {
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
m.Set("bar", "baz")
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
m.Set("baz", "abc")
|
||||
}()
|
||||
|
||||
ctx := context.TODO()
|
||||
v, err := m.Get(ctx, "foo", "bar", "baz")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 3, len(v))
|
||||
require.Equal(t, "bar", v["foo"])
|
||||
require.Equal(t, "baz", v["bar"])
|
||||
require.Equal(t, "abc", v["baz"])
|
||||
}
|
Reference in New Issue
Block a user