mirror of
https://github.com/docker/compose.git
synced 2025-07-26 23:24:05 +02:00
revisit TestDebounceBatching
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
parent
32a22c1f4f
commit
af5b748500
4
go.mod
4
go.mod
@ -9,7 +9,7 @@ require (
|
|||||||
github.com/Microsoft/go-winio v0.6.2
|
github.com/Microsoft/go-winio v0.6.2
|
||||||
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d
|
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d
|
||||||
github.com/buger/goterm v1.0.4
|
github.com/buger/goterm v1.0.4
|
||||||
github.com/compose-spec/compose-go/v2 v2.4.5
|
github.com/compose-spec/compose-go/v2 v2.4.6-0.20241203131247-9a9cc5d9c345
|
||||||
github.com/containerd/containerd v1.7.24
|
github.com/containerd/containerd v1.7.24
|
||||||
github.com/containerd/platforms v0.2.1
|
github.com/containerd/platforms v0.2.1
|
||||||
github.com/davecgh/go-spew v1.1.1
|
github.com/davecgh/go-spew v1.1.1
|
||||||
@ -195,5 +195,3 @@ require (
|
|||||||
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
|
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
|
||||||
sigs.k8s.io/yaml v1.3.0 // indirect
|
sigs.k8s.io/yaml v1.3.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/compose-spec/compose-go/v2 => github.com/ndeloof/compose-go/v2 v2.0.1-0.20241127110655-b1321070b3ab
|
|
||||||
|
4
go.sum
4
go.sum
@ -85,6 +85,8 @@ github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8E
|
|||||||
github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
|
github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
|
||||||
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
|
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
|
||||||
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4=
|
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4=
|
||||||
|
github.com/compose-spec/compose-go/v2 v2.4.6-0.20241203131247-9a9cc5d9c345 h1:oLm7hga9jjaDedg+dqsWiI1GeRrcGLBPxu8W0VfpiKA=
|
||||||
|
github.com/compose-spec/compose-go/v2 v2.4.6-0.20241203131247-9a9cc5d9c345/go.mod h1:lFN0DrMxIncJGYAXTfWuajfwj5haBJqrBkarHcnjJKc=
|
||||||
github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
|
github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
|
||||||
github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0=
|
github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0=
|
||||||
github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0=
|
github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0=
|
||||||
@ -355,8 +357,6 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
|
|||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
|
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
|
||||||
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
|
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
|
||||||
github.com/ndeloof/compose-go/v2 v2.0.1-0.20241127110655-b1321070b3ab h1:3Q4/1sAnPv4nMpak/lIzWsQJjX8X5zKZRkDd6mlf2mc=
|
|
||||||
github.com/ndeloof/compose-go/v2 v2.0.1-0.20241127110655-b1321070b3ab/go.mod h1:lFN0DrMxIncJGYAXTfWuajfwj5haBJqrBkarHcnjJKc=
|
|
||||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU=
|
github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU=
|
||||||
|
@ -344,7 +344,7 @@ func batchDebounceEvents(ctx context.Context, clock clockwork.Clock, delay time.
|
|||||||
out := make(chan []fileEvent)
|
out := make(chan []fileEvent)
|
||||||
go func() {
|
go func() {
|
||||||
defer close(out)
|
defer close(out)
|
||||||
seen := make(map[sync.PathMapping]fileEvent)
|
seen := make(map[string]fileEvent)
|
||||||
flushEvents := func() {
|
flushEvents := func() {
|
||||||
if len(seen) == 0 {
|
if len(seen) == 0 {
|
||||||
return
|
return
|
||||||
@ -354,7 +354,7 @@ func batchDebounceEvents(ctx context.Context, clock clockwork.Clock, delay time.
|
|||||||
events = append(events, e)
|
events = append(events, e)
|
||||||
}
|
}
|
||||||
out <- events
|
out <- events
|
||||||
seen = make(map[sync.PathMapping]fileEvent)
|
seen = make(map[string]fileEvent)
|
||||||
}
|
}
|
||||||
|
|
||||||
t := clock.NewTicker(delay)
|
t := clock.NewTicker(delay)
|
||||||
@ -371,7 +371,7 @@ func batchDebounceEvents(ctx context.Context, clock clockwork.Clock, delay time.
|
|||||||
flushEvents()
|
flushEvents()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
seen[e.PathMapping] = e
|
seen[e.HostPath] = e
|
||||||
t.Reset(delay)
|
t.Reset(delay)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,8 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"slices"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -42,23 +44,32 @@ func TestDebounceBatching(t *testing.T) {
|
|||||||
ctx, stop := context.WithCancel(context.Background())
|
ctx, stop := context.WithCancel(context.Background())
|
||||||
t.Cleanup(stop)
|
t.Cleanup(stop)
|
||||||
|
|
||||||
|
trigger := types.Trigger{
|
||||||
|
Path: "/",
|
||||||
|
}
|
||||||
|
matcher := watch.EmptyMatcher{}
|
||||||
eventBatchCh := batchDebounceEvents(ctx, clock, quietPeriod, ch)
|
eventBatchCh := batchDebounceEvents(ctx, clock, quietPeriod, ch)
|
||||||
for i := 0; i < 100; i++ {
|
for i := 0; i < 100; i++ {
|
||||||
var action types.WatchAction = "a"
|
var path = "/a"
|
||||||
if i%2 == 0 {
|
if i%2 == 0 {
|
||||||
action = "b"
|
path = "/b"
|
||||||
}
|
}
|
||||||
ch <- fileEvent{Trigger: types.Trigger{Action: action}}
|
|
||||||
|
event := maybeFileEvent(trigger, path, matcher)
|
||||||
|
require.NotNil(t, event)
|
||||||
|
ch <- *event
|
||||||
}
|
}
|
||||||
// we sent 100 events + the debouncer
|
// we sent 100 events + the debouncer
|
||||||
clock.BlockUntil(101)
|
clock.BlockUntil(101)
|
||||||
clock.Advance(quietPeriod)
|
clock.Advance(quietPeriod)
|
||||||
select {
|
select {
|
||||||
case batch := <-eventBatchCh:
|
case batch := <-eventBatchCh:
|
||||||
require.ElementsMatch(t, batch, []fileEvent{
|
slices.SortFunc(batch, func(a, b fileEvent) int {
|
||||||
{Trigger: types.Trigger{Action: "a"}},
|
return strings.Compare(a.HostPath, b.HostPath)
|
||||||
{Trigger: types.Trigger{Action: "b"}},
|
|
||||||
})
|
})
|
||||||
|
assert.Equal(t, len(batch), 2)
|
||||||
|
assert.Equal(t, batch[0].HostPath, "/a")
|
||||||
|
assert.Equal(t, batch[1].HostPath, "/b")
|
||||||
case <-time.After(50 * time.Millisecond):
|
case <-time.After(50 * time.Millisecond):
|
||||||
t.Fatal("timed out waiting for events")
|
t.Fatal("timed out waiting for events")
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user