aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/uevent/uevent_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-03-30 23:49:16 +0900
committerOphestra <cat@gensokyo.uk>2026-03-31 00:10:14 +0900
commit91a2d4d6e1c0039f6b442c8c97b1aa809e09e33b (patch)
treedef78a3c6d20ec072b917a19538cf4d2af735304 /internal/uevent/uevent_test.go
parenta854719b9f11fea48e7221eeff50d4cdb3801052 (diff)
internal/uevent: integrate error handling in event loop
There are many subtleties when recovering from errors in the event loop, and coldboot requires internals to drain the receive buffer as synthetic uevents are being arranged. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/uevent/uevent_test.go')
-rw-r--r--internal/uevent/uevent_test.go19
1 files changed, 15 insertions, 4 deletions
diff --git a/internal/uevent/uevent_test.go b/internal/uevent/uevent_test.go
index 9b986ff3..6420eea1 100644
--- a/internal/uevent/uevent_test.go
+++ b/internal/uevent/uevent_test.go
@@ -10,6 +10,7 @@ import (
"testing"
"time"
+ "hakurei.app/fhs"
"hakurei.app/internal/uevent"
)
@@ -155,13 +156,23 @@ func TestDialConsume(t *testing.T) {
ctx, cancel := context.WithCancel(t.Context())
defer cancel()
+ consume := func(c *uevent.Conn, ctx context.Context) error {
+ return c.Consume(ctx, fhs.Sys, events, false, func(path string) {
+ t.Log("coldboot visited", path)
+ }, func(err error) bool {
+ t.Log(err)
+ _, ok := err.(uevent.NeedsColdboot)
+ return !ok
+ }, nil)
+ }
+
wg.Go(func() {
- if err = c.Consume(ctx, events); err != context.Canceled {
+ if err = consume(c, ctx); err != context.Canceled {
panic(err)
}
})
wg.Go(func() {
- if err0 = c0.Consume(ctx, events); err0 != context.Canceled {
+ if err0 = consume(c0, ctx); err0 != context.Canceled {
panic(err0)
}
})
@@ -185,11 +196,11 @@ func TestDialConsume(t *testing.T) {
exclExit := make(chan struct{})
wg.Go(func() {
defer func() { exclExit <- struct{}{} }()
- errs[0] = c.Consume(ctx, events)
+ errs[0] = consume(c, ctx)
})
wg.Go(func() {
defer func() { exclExit <- struct{}{} }()
- errs[1] = c.Consume(ctx, events)
+ errs[1] = consume(c, ctx)
})
<-exclExit
cancel()