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
116 lines
2.4 KiB
Go
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...)
|
|
}
|