internal/uevent: optionally pass UUID during coldboot
All checks were successful
Test / Create distribution (push) Successful in 1m3s
Test / Sandbox (push) Successful in 2m42s
Test / Hakurei (push) Successful in 3m49s
Test / ShareFS (push) Successful in 3m47s
Test / Sandbox (race detector) (push) Successful in 5m12s
Test / Hakurei (race detector) (push) Successful in 6m20s
Test / Flake checks (push) Successful in 1m20s

This enables rejection of non-coldboot synthetic events.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-04-06 11:43:16 +09:00
parent a69273ab2a
commit cd0beeaf8e
4 changed files with 184 additions and 5 deletions

View File

@@ -3,8 +3,10 @@ package uevent_test
import (
"context"
"encoding"
"encoding/hex"
"os"
"reflect"
"strings"
"sync"
"syscall"
"testing"
@@ -23,6 +25,12 @@ func adeT[V any, S interface {
*V
}](t *testing.T, name string, v V, want string, wantErr, wantErrE error) {
t.Helper()
noEncode := strings.HasSuffix(name, "\x00")
if noEncode {
name = name[:len(name)-1]
}
f := func(t *testing.T) {
if name != "" {
t.Parallel()
@@ -46,6 +54,10 @@ func adeT[V any, S interface {
}
})
if noEncode {
return
}
t.Run("encode", func(t *testing.T) {
t.Parallel()
t.Helper()
@@ -114,6 +126,45 @@ func adeB[V any, S interface {
}
}
func TestUUID(t *testing.T) {
t.Parallel()
adeT(t, "sample", uevent.UUID{
0xfe, 0x4d, 0x7c, 0x9d,
0xb8, 0xc6,
0x4a, 0x70,
0x9e, 0xf1,
0x3d, 0x8a, 0x58, 0xd1, 0x8e, 0xed,
}, "fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed", nil, nil)
adeT(t, "auto\x00", uevent.UUID{}, "0", uevent.ErrAutoUUID, nil)
adeT(t, "short\x00", uevent.UUID{}, "1", uevent.UUIDSizeError(1), nil)
adeT(t, "bad0\x00", uevent.UUID{}, "fe4d7c9\x00-b8c6-4a70-9ef1-3d8a58d18eed",
hex.InvalidByteError(0), nil)
adeT(t, "sep0\x00", uevent.UUID{}, "fe4d7c9d\x00b8c6-4a70-9ef1-3d8a58d18eed",
uevent.UUIDSeparatorError(0), nil)
adeT(t, "bad1\x00", uevent.UUID{}, "fe4d7c9d-b8c\x00-4a70-9ef1-3d8a58d18eed",
hex.InvalidByteError(0), nil)
adeT(t, "sep1\x00", uevent.UUID{}, "fe4d7c9d-b8c6\x004a70-9ef1-3d8a58d18eed",
uevent.UUIDSeparatorError(0), nil)
adeT(t, "bad2\x00", uevent.UUID{}, "fe4d7c9d-b8c6-4a7\x00-9ef1-3d8a58d18eed",
hex.InvalidByteError(0), nil)
adeT(t, "sep2\x00", uevent.UUID{}, "fe4d7c9d-b8c6-4a70\x009ef1-3d8a58d18eed",
uevent.UUIDSeparatorError(0), nil)
adeT(t, "bad3\x00", uevent.UUID{}, "fe4d7c9d-b8c6-4a70-9ef\x00-3d8a58d18eed",
hex.InvalidByteError(0), nil)
adeT(t, "sep3\x00", uevent.UUID{}, "fe4d7c9d-b8c6-4a70-9ef1\x003d8a58d18eed",
uevent.UUIDSeparatorError(0), nil)
adeT(t, "bad4\x00", uevent.UUID{}, "fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18ee\x00",
hex.InvalidByteError(0), nil)
}
func TestDialConsume(t *testing.T) {
t.Parallel()
@@ -157,7 +208,7 @@ func TestDialConsume(t *testing.T) {
defer cancel()
consume := func(c *uevent.Conn, ctx context.Context) error {
return c.Consume(ctx, fhs.Sys, events, false, func(path string) {
return c.Consume(ctx, fhs.Sys, nil, events, false, func(path string) {
t.Log("coldboot visited", path)
}, func(err error) bool {
t.Log(err)
@@ -244,6 +295,11 @@ func TestErrors(t *testing.T) {
{"BadPortError", &uevent.BadPortError{
Pid: 1,
}, "unexpected message from port id 1 on NETLINK_KOBJECT_UEVENT"},
{"UUIDSizeError", uevent.UUIDSizeError(0xbad),
"got 2989 bytes instead of 36"},
{"UUIDSeparatorError", uevent.UUIDSeparatorError(0xfd),
"invalid UUID separator: U+00FD 'ý'"},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {