package mc import ( "bytes" "testing" ) func TestExtractSlug(t *testing.T) { if got := ExtractSlug("abc.play.example.net", "play.example.net"); got != "abc" { t.Fatalf("got %q want abc", got) } if got := ExtractSlug("other.net", "play.example.net"); got != "" { t.Fatalf("expected empty slug") } } func TestReadHandshake(t *testing.T) { var payload bytes.Buffer writeVarInt(&payload, 0) writeVarInt(&payload, 763) writeString(&payload, "demo.play.example.net") payload.WriteByte(0x63) payload.WriteByte(0xdd) writeVarInt(&payload, 2) var packet bytes.Buffer writeVarInt(&packet, int32(payload.Len())) packet.Write(payload.Bytes()) hs, err := ReadHandshake(&packet) if err != nil { t.Fatalf("read handshake: %v", err) } if hs.ServerAddress != "demo.play.example.net" { t.Fatalf("address %q", hs.ServerAddress) } if hs.ServerPort != 25565 { t.Fatalf("port %d", hs.ServerPort) } } func writeVarInt(buf *bytes.Buffer, value int32) { for { temp := byte(value & 0x7F) value >>= 7 if value != 0 { temp |= 0x80 } buf.WriteByte(temp) if value == 0 { break } } } func writeString(buf *bytes.Buffer, value string) { writeVarInt(buf, int32(len(value))) buf.WriteString(value) }