File: waitmap_test.go

package info (click to toggle)
docker-buildx 0.13.1%2Bds1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,356 kB
  • sloc: sh: 299; makefile: 87
file content (64 lines) | stat: -rw-r--r-- 1,209 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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"])
}