github.com/pdmccormick/importable-docker-buildx@v0.0.0-20240426161518-e47091289030/util/waitmap/waitmap_test.go (about) 1 package waitmap 2 3 import ( 4 "context" 5 "errors" 6 "testing" 7 "time" 8 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestGetAfter(t *testing.T) { 13 m := New() 14 15 m.Set("foo", "bar") 16 m.Set("bar", "baz") 17 18 ctx := context.TODO() 19 v, err := m.Get(ctx, "foo", "bar") 20 require.NoError(t, err) 21 22 require.Equal(t, 2, len(v)) 23 require.Equal(t, "bar", v["foo"]) 24 require.Equal(t, "baz", v["bar"]) 25 26 v, err = m.Get(ctx, "foo") 27 require.NoError(t, err) 28 require.Equal(t, 1, len(v)) 29 require.Equal(t, "bar", v["foo"]) 30 } 31 32 func TestTimeout(t *testing.T) { 33 m := New() 34 35 m.Set("foo", "bar") 36 37 ctx, cancel := context.WithTimeout(context.TODO(), 100*time.Millisecond) 38 defer cancel() 39 40 _, err := m.Get(ctx, "bar") 41 require.Error(t, err) 42 require.True(t, errors.Is(err, context.DeadlineExceeded)) 43 } 44 45 func TestBlocking(t *testing.T) { 46 m := New() 47 48 m.Set("foo", "bar") 49 50 go func() { 51 time.Sleep(100 * time.Millisecond) 52 m.Set("bar", "baz") 53 time.Sleep(50 * time.Millisecond) 54 m.Set("baz", "abc") 55 }() 56 57 ctx := context.TODO() 58 v, err := m.Get(ctx, "foo", "bar", "baz") 59 require.NoError(t, err) 60 require.Equal(t, 3, len(v)) 61 require.Equal(t, "bar", v["foo"]) 62 require.Equal(t, "baz", v["bar"]) 63 require.Equal(t, "abc", v["baz"]) 64 }