Files
mc-gateway/protocol/mc_test.go
tursom f508ecc1b9
Some checks failed
Go / build (.exe, 386, windows, windows-386) (push) Has been cancelled
Go / build (.exe, amd64, windows, windows-amd64) (push) Has been cancelled
Go / build (.exe, arm64, windows, windows-arm64) (push) Has been cancelled
Go / build (386, freebsd, freebsd-386) (push) Has been cancelled
Go / build (386, linux, linux-386) (push) Has been cancelled
Go / build (386, netbsd, netbsd-386) (push) Has been cancelled
Go / build (386, openbsd, openbsd-386) (push) Has been cancelled
Go / build (386, plan9, plan9-386) (push) Has been cancelled
Go / build (amd64, darwin, darwin-amd64) (push) Has been cancelled
Go / build (amd64, dragonfly, dragonfly-amd64) (push) Has been cancelled
Go / build (amd64, freebsd, freebsd-amd64) (push) Has been cancelled
Go / build (amd64, illumos, illumos-amd64) (push) Has been cancelled
Go / build (amd64, linux, linux-amd64) (push) Has been cancelled
Go / build (amd64, netbsd, netbsd-amd64) (push) Has been cancelled
Go / build (amd64, openbsd, openbsd-amd64) (push) Has been cancelled
Go / build (amd64, plan9, plan9-amd64) (push) Has been cancelled
Go / build (amd64, solaris, solaris-amd64) (push) Has been cancelled
Go / build (arm, 6, linux, linux-armv6) (push) Has been cancelled
Go / build (arm, 7, linux, linux-armv7) (push) Has been cancelled
Go / build (arm, freebsd, freebsd-arm) (push) Has been cancelled
Go / build (arm, netbsd, netbsd-arm) (push) Has been cancelled
Go / build (arm, openbsd, openbsd-arm) (push) Has been cancelled
Go / build (arm, plan9, plan9-arm) (push) Has been cancelled
Go / build (arm64, darwin, darwin-arm64) (push) Has been cancelled
Go / build (arm64, freebsd, freebsd-arm64) (push) Has been cancelled
Go / build (arm64, linux, linux-arm64) (push) Has been cancelled
Go / build (arm64, netbsd, netbsd-arm64) (push) Has been cancelled
Go / build (arm64, openbsd, openbsd-arm64) (push) Has been cancelled
Go / build (loong64, linux, linux-loong64) (push) Has been cancelled
Go / build (mips, linux, linux-mips) (push) Has been cancelled
Go / build (mips64, linux, linux-mips64) (push) Has been cancelled
Go / build (mips64le, linux, linux-mips64le) (push) Has been cancelled
Go / build (mipsle, linux, linux-mipsle) (push) Has been cancelled
Go / build (ppc64, aix, aix-ppc64) (push) Has been cancelled
Go / build (ppc64, linux, linux-ppc64) (push) Has been cancelled
Go / build (ppc64, openbsd, openbsd-ppc64) (push) Has been cancelled
Go / build (ppc64le, linux, linux-ppc64le) (push) Has been cancelled
Go / build (riscv64, freebsd, freebsd-riscv64) (push) Has been cancelled
Go / build (riscv64, linux, linux-riscv64) (push) Has been cancelled
Go / build (riscv64, openbsd, openbsd-riscv64) (push) Has been cancelled
Go / build (s390x, linux, linux-s390x) (push) Has been cancelled
Docker Image / docker (push) Has been cancelled
Go / merge-artifacts (push) Has been cancelled
docs: 补充中文代码注释
2026-06-27 20:15:29 +08:00

116 lines
2.4 KiB
Go

// protocol/mc_test.go 包含用于约束 mc 行为的测试。
package protocol
import (
"bytes"
"testing"
)
func TestGetMcHost(t *testing.T) {
tests := []struct {
name string
buf []byte
want string
}{
{
name: "short packet",
buf: []byte{0x01, 0x02, 0x03, 0x04},
want: "",
},
{
name: "host length exceeds packet",
buf: []byte{0x01, 0x02, 0x03, 0x04, 0x05, 'a'},
want: "",
},
{
name: "plain host",
buf: mcTestPacket("play.example", 0x63, 0x00),
want: "play.example",
},
{
name: "host with null suffix",
buf: mcTestPacket("play.example\x00FML\x00", 0x63, 0x00),
want: "play.example",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := GetMcHost(tt.buf); got != tt.want {
t.Fatalf("GetMcHost() = %q, want %q", got, tt.want)
}
})
}
}
func TestReplaceMcHost(t *testing.T) {
tests := []struct {
name string
buf []byte
host string
want []byte
}{
{
name: "short packet",
buf: []byte{0x01, 0x02, 0x03, 0x04},
host: "new.example",
want: nil,
},
{
name: "host length exceeds packet",
buf: []byte{0x01, 0x02, 0x03, 0x04, 0x05, 'a'},
host: "new.example",
want: nil,
},
{
name: "replace plain host",
buf: mcTestPacket("old.example", 0x63, 0x00),
host: "new.example",
want: mcTestPacket("new.example", 0x63, 0x00),
},
{
name: "preserve null suffix",
buf: mcTestPacket("old.example\x00FML\x00", 0x63, 0x00),
host: "new.example",
want: mcTestPacket("new.example\x00FML\x00", 0x63, 0x00),
},
{
name: "replace with shorter host",
buf: mcTestPacket("long.example", 0x01, 0x02, 0x03),
host: "x",
want: mcTestPacket("x", 0x01, 0x02, 0x03),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := ReplaceMcHost(append([]byte(nil), tt.buf...), tt.host)
if !bytes.Equal(got, tt.want) {
t.Fatalf("ReplaceMcHost() = %v, want %v", got, tt.want)
}
})
}
}
func mcTestPacket(host string, tail ...byte) []byte {
protocolVersion := byte(0x63)
nextState := byte(0x02)
extra := []byte(nil)
if len(tail) > 0 {
protocolVersion = tail[0]
}
if len(tail) > 1 {
nextState = tail[1]
}
if len(tail) > 2 {
extra = tail[2:]
}
payload := []byte{0x00, protocolVersion, byte(len(host))}
payload = append(payload, host...)
payload = append(payload, 0x63, 0xdd, nextState)
payload = append(payload, extra...)
packet := []byte{byte(len(payload))}
return append(packet, payload...)
}