86 lines
2.2 KiB
Go
86 lines
2.2 KiB
Go
|
package journal
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestAttrKeyValid(t *testing.T) {
|
||
|
for _, testcase := range []struct {
|
||
|
name, key string
|
||
|
valid bool
|
||
|
reason InvalidAttrKeyReason
|
||
|
}{
|
||
|
{"short", "MESSAGE", true, -1},
|
||
|
{"underscore", "MESSAGE_", true, -1},
|
||
|
{"numeric", "12345", true, -1},
|
||
|
{"long", strings.Repeat("Z", 255), true, -1},
|
||
|
{"too_long", strings.Repeat("Z", 256), false, AttrKeyLength},
|
||
|
{"empty", "", false, AttrKeyEmpty},
|
||
|
{"trusted", "_MESSAGE", false, AttrKeyTrusted},
|
||
|
{"punctuation", "MESSAGE-2", false, AttrKeyInvalidChars},
|
||
|
{"lowercase", "message", false, AttrKeyInvalidChars},
|
||
|
{"space", "MESS AGE", false, AttrKeyInvalidChars},
|
||
|
{"newline", "MESS\nAGE", false, AttrKeyInvalidChars},
|
||
|
{"NUL", "\x00", false, AttrKeyInvalidChars},
|
||
|
} {
|
||
|
if testcase.valid {
|
||
|
t.Run("valid/"+testcase.name, func(t *testing.T) {
|
||
|
if err := AttrKeyValid(testcase.key); err != nil {
|
||
|
t.Errorf("unexpected error: %v", err)
|
||
|
}
|
||
|
})
|
||
|
} else {
|
||
|
t.Run("invalid/"+testcase.name, func(t *testing.T) {
|
||
|
err := AttrKeyValid(testcase.key)
|
||
|
var iak *InvalidAttrKey
|
||
|
switch {
|
||
|
case err == nil:
|
||
|
t.Error("unexpectedly succeeded")
|
||
|
case errors.As(err, &iak):
|
||
|
if iak.Key != testcase.key {
|
||
|
t.Errorf("InvalidAttrKey error has wrong key %q", iak.Key)
|
||
|
}
|
||
|
if iak.Reason != testcase.reason {
|
||
|
t.Errorf("InvalidAttrKey error has wrong reason %v", iak.Reason)
|
||
|
}
|
||
|
default:
|
||
|
t.Errorf("unexpected error type %T: %v", err, err)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNewAttrKeyValid(t *testing.T) {
|
||
|
k, err := NewAttrKey("MESSAGE")
|
||
|
if err != nil {
|
||
|
t.Errorf("unexpected error: %v", err)
|
||
|
}
|
||
|
if k.key != "MESSAGE" {
|
||
|
t.Errorf(".key does not match expected: %q", k.key)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNewAttrKeyInvalid(t *testing.T) {
|
||
|
k, err := NewAttrKey("_MESSAGE")
|
||
|
var iak *InvalidAttrKey
|
||
|
switch {
|
||
|
case err == nil:
|
||
|
t.Error("unexpectedly succeeded")
|
||
|
case errors.As(err, &iak):
|
||
|
if iak.Key != "_MESSAGE" {
|
||
|
t.Errorf("InvalidAttrKey error has wrong key %q", iak.Key)
|
||
|
}
|
||
|
if iak.Reason != AttrKeyTrusted {
|
||
|
t.Errorf("InvalidAttrKey error has wrong reason %v", iak.Reason)
|
||
|
}
|
||
|
default:
|
||
|
t.Errorf("unexpected error type %T: %v", err, err)
|
||
|
}
|
||
|
if k.key != "" {
|
||
|
t.Errorf(".key not empty: %q", k.key)
|
||
|
}
|
||
|
}
|