mirror of
https://github.com/soypat/lneto.git
synced 2026-08-14 11:53:43 +00:00
74 lines
2.5 KiB
Go
74 lines
2.5 KiB
Go
package tls_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/soypat/lneto/x/tls"
|
|
)
|
|
|
|
// StringConst must name defined values as String does, GREASE values "GREASE"
|
|
// and everything else "unknown", over the whole range and without allocating.
|
|
// A constant added without extending a StringConst switch fails here.
|
|
func TestStringConst(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
n int
|
|
grease bool // type carries GREASE values
|
|
str func(int) string
|
|
cst func(int) string
|
|
}{
|
|
{"ContentType", 1 << 8, false,
|
|
func(i int) string { return tls.ContentType(i).String() },
|
|
func(i int) string { return tls.ContentType(i).StringConst() }},
|
|
{"HandshakeType", 1 << 8, false,
|
|
func(i int) string { return tls.HandshakeType(i).String() },
|
|
func(i int) string { return tls.HandshakeType(i).StringConst() }},
|
|
{"AlertLevel", 1 << 8, false,
|
|
func(i int) string { return tls.AlertLevel(i).String() },
|
|
func(i int) string { return tls.AlertLevel(i).StringConst() }},
|
|
{"AlertDescription", 1 << 8, false,
|
|
func(i int) string { return tls.AlertDescription(i).String() },
|
|
func(i int) string { return tls.AlertDescription(i).StringConst() }},
|
|
{"ExtensionType", 1 << 16, true,
|
|
func(i int) string { return tls.ExtensionType(i).String() },
|
|
func(i int) string { return tls.ExtensionType(i).StringConst() }},
|
|
{"NamedGroup", 1 << 16, true,
|
|
func(i int) string { return tls.NamedGroup(i).String() },
|
|
func(i int) string { return tls.NamedGroup(i).StringConst() }},
|
|
{"SignatureScheme", 1 << 16, true,
|
|
func(i int) string { return tls.SignatureScheme(i).String() },
|
|
func(i int) string { return tls.SignatureScheme(i).StringConst() }},
|
|
{"CipherSuite", 1 << 16, true,
|
|
func(i int) string { return tls.CipherSuite(i).String() },
|
|
func(i int) string { return tls.CipherSuite(i).StringConst() }},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
for i := range tc.n {
|
|
str, cst := tc.str(i), tc.cst(i)
|
|
if !strings.ContainsRune(str, '(') { // stringer names undefined values "Type(9)".
|
|
if cst != str {
|
|
t.Fatalf("%s(%d)=%q want %q", tc.name, i, cst, str)
|
|
}
|
|
continue
|
|
}
|
|
want := "unknown"
|
|
if tc.grease && tls.IsGREASE(uint16(i)) {
|
|
want = "GREASE"
|
|
}
|
|
if cst != want {
|
|
t.Fatalf("%s(%d)=%q want %q", tc.name, i, cst, want)
|
|
}
|
|
}
|
|
allocs := testing.AllocsPerRun(1, func() {
|
|
for i := range tc.n {
|
|
_ = tc.cst(i)
|
|
}
|
|
})
|
|
if allocs != 0 {
|
|
t.Errorf("%s allocated %v times", tc.name, allocs)
|
|
}
|
|
})
|
|
}
|
|
}
|