Expose query through server.query_server()

This commit is contained in:
Nathan Adams
2014-09-07 00:59:29 +02:00
parent 4e52670370
commit 08c368be12
2 changed files with 36 additions and 4 deletions

View File

@@ -1,7 +1,8 @@
import json import json
from mcstatus.pinger import ServerPinger from mcstatus.pinger import ServerPinger
from mcstatus.protocol.connection import TCPSocketConnection from mcstatus.protocol.connection import TCPSocketConnection, UDPSocketConnection
from mcstatus.querier import ServerQuerier
class MinecraftServer: class MinecraftServer:
@@ -13,4 +14,10 @@ class MinecraftServer:
connection = TCPSocketConnection((self.host, self.port)) connection = TCPSocketConnection((self.host, self.port))
pinger = ServerPinger(connection, host=self.host, port=self.port, **kwargs) pinger = ServerPinger(connection, host=self.host, port=self.port, **kwargs)
pinger.handshake() pinger.handshake()
return pinger.read_status(), pinger.test_ping() return pinger.read_status(), pinger.test_ping()
def query_server(self):
connection = UDPSocketConnection((self.host, self.port))
querier = ServerQuerier(connection)
querier.handshake()
return querier.read_query()

View File

@@ -1,6 +1,6 @@
from unittest import TestCase from unittest import TestCase
from mock import patch from mock import patch, Mock
from mcstatus.protocol.connection import Connection from mcstatus.protocol.connection import Connection
from mcstatus.server import MinecraftServer from mcstatus.server import MinecraftServer
@@ -21,4 +21,29 @@ class TestMinecraftServer(TestCase):
self.assertEqual(self.socket.flush(), bytearray.fromhex("0F002F096C6F63616C686F737463DD01010009010000000001C54246")) self.assertEqual(self.socket.flush(), bytearray.fromhex("0F002F096C6F63616C686F737463DD01010009010000000001C54246"))
self.assertEqual(self.socket.remaining(), 0, msg="Data is pending to be read, but should be empty") self.assertEqual(self.socket.remaining(), 0, msg="Data is pending to be read, but should be empty")
self.assertEqual(info.raw, {"description":"A Minecraft Server","players":{"max":20,"online":0},"version":{"name":"1.8","protocol":47}}) self.assertEqual(info.raw, {"description":"A Minecraft Server","players":{"max":20,"online":0},"version":{"name":"1.8","protocol":47}})
self.assertTrue(latency >= 0) self.assertTrue(latency >= 0)
def test_query_server(self):
self.socket.receive(bytearray.fromhex("090000000035373033353037373800"))
self.socket.receive(bytearray.fromhex("00000000000000000000000000000000686f73746e616d650041204d696e656372616674205365727665720067616d657479706500534d500067616d655f6964004d494e4543524146540076657273696f6e00312e3800706c7567696e7300006d617000776f726c64006e756d706c61796572730033006d6178706c617965727300323000686f7374706f727400323535363500686f73746970003139322e3136382e35362e31000001706c617965725f000044696e6e6572626f6e6500446a696e6e69626f6e650053746576650000"))
self.socket.remaining = Mock()
self.socket.remaining.side_effect = [15, 208]
with patch("mcstatus.server.UDPSocketConnection") as connection:
connection.return_value = self.socket
info = self.server.query_server()
self.assertEqual(self.socket.flush(), bytearray.fromhex("FEFD090000000000000000FEFD000000000021FEDCBA00000000"))
self.assertEqual(info.raw, {
"hostname": "A Minecraft Server",
"gametype": "SMP",
"game_id": "MINECRAFT",
"version": "1.8",
"plugins": "",
"map": "world",
"numplayers": "3",
"maxplayers": "20",
"hostport": "25565",
"hostip": "192.168.56.1",
})