forked from rosa/hakurei
This deals with environment variables generally present in every message. Signed-off-by: Ophestra <cat@gensokyo.uk>
93 lines
2.1 KiB
Go
93 lines
2.1 KiB
Go
package kobject_test
|
|
|
|
import (
|
|
"reflect"
|
|
"strconv"
|
|
"testing"
|
|
|
|
"hakurei.app/internal/kobject"
|
|
"hakurei.app/internal/uevent"
|
|
)
|
|
|
|
func TestEvent(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
testCases := []struct {
|
|
name string
|
|
msg uevent.Message
|
|
want kobject.Event
|
|
errs []error
|
|
}{
|
|
{"sample coldboot qemu", uevent.Message{
|
|
Action: uevent.KOBJ_ADD,
|
|
DevPath: "/devices/LNXSYSTM:00/LNXPWRBN:00",
|
|
Env: []string{
|
|
"ACTION=add",
|
|
"DEVPATH=/devices/LNXSYSTM:00/LNXPWRBN:00",
|
|
"SUBSYSTEM=acpi",
|
|
"SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed",
|
|
"MODALIAS=acpi:LNXPWRBN:",
|
|
"SEQNUM=777",
|
|
}}, kobject.Event{
|
|
Action: uevent.KOBJ_ADD,
|
|
DevPath: "/devices/LNXSYSTM:00/LNXPWRBN:00",
|
|
Env: map[string]string{
|
|
"MODALIAS": "acpi:LNXPWRBN:",
|
|
},
|
|
Sequence: 777,
|
|
Synth: &uevent.UUID{
|
|
0xfe, 0x4d, 0x7c, 0x9d,
|
|
0xb8, 0xc6,
|
|
0x4a, 0x70,
|
|
0x9e, 0xf1,
|
|
0x3d, 0x8a, 0x58, 0xd1, 0x8e, 0xed,
|
|
},
|
|
Subsystem: "acpi",
|
|
}, []error{}},
|
|
|
|
{"nil reportErr", uevent.Message{Env: []string{
|
|
"SEQNUM=\x00",
|
|
}}, kobject.Event{Env: map[string]string{
|
|
"SEQNUM": "\x00",
|
|
}}, nil},
|
|
|
|
{"bad SEQNUM SYNTH_UUID", uevent.Message{Env: []string{
|
|
"SEQNUM=\x00",
|
|
"SYNTH_UUID=\x00",
|
|
"SUBSYSTEM=\x00",
|
|
}}, kobject.Event{Subsystem: "\x00", Env: map[string]string{
|
|
"SEQNUM": "\x00",
|
|
"SYNTH_UUID": "\x00",
|
|
}}, []error{strconv.ErrSyntax, uevent.UUIDSizeError(1)}},
|
|
|
|
{"bad sep", uevent.Message{Env: []string{
|
|
"SYNTH_UUID",
|
|
}}, kobject.Event{Env: map[string]string{
|
|
"SYNTH_UUID": "\x00",
|
|
}}, []error{}},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var f func(error)
|
|
gotErrs := make([]error, 0)
|
|
if tc.errs != nil {
|
|
f = func(err error) {
|
|
gotErrs = append(gotErrs, err)
|
|
}
|
|
}
|
|
|
|
var got kobject.Event
|
|
got.Populate(f, &tc.msg)
|
|
|
|
if !reflect.DeepEqual(&got, &tc.want) {
|
|
t.Errorf("Populate: %#v, want %#v", got, tc.want)
|
|
}
|
|
if tc.errs != nil && !reflect.DeepEqual(gotErrs, tc.errs) {
|
|
t.Errorf("Populate: errs = %v, want %v", gotErrs, tc.errs)
|
|
}
|
|
})
|
|
}
|
|
}
|