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
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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user