mirror of
https://github.com/ammaraskar/pyCraft.git
synced 2024-12-23 09:08:36 +01:00
Update tests to match new API.
This commit is contained in:
parent
c8b3e7a809
commit
3ff7662684
@ -1,7 +1,6 @@
|
||||
from __future__ import print_function
|
||||
|
||||
from collections import deque
|
||||
from collections import namedtuple
|
||||
from threading import Lock
|
||||
from zlib import decompress
|
||||
from itertools import *
|
||||
|
@ -401,6 +401,10 @@ class PlayerListItemPacket(Packet):
|
||||
self.uuid = UUID.read(file_object)
|
||||
self._read(file_object)
|
||||
|
||||
def _read(self, file_object):
|
||||
raise NotImplementedError(
|
||||
'This abstract method must be overridden in a subclass.')
|
||||
|
||||
@classmethod
|
||||
def type_from_id(cls, action_id):
|
||||
subcls = {
|
||||
|
@ -84,7 +84,10 @@ class VarInt(Type):
|
||||
def read(file_object):
|
||||
number = 0
|
||||
for i in range(5):
|
||||
byte = ord(file_object.read(1))
|
||||
byte = file_object.read(1)
|
||||
if len(byte) < 1:
|
||||
raise RuntimeError("Unexpected end of message.")
|
||||
byte = ord(byte)
|
||||
number |= (byte & 0x7F) << 7 * i
|
||||
if not byte & 0x80:
|
||||
break
|
||||
|
@ -3,6 +3,9 @@ import unittest
|
||||
import string
|
||||
from zlib import decompress
|
||||
from random import choice
|
||||
|
||||
from minecraft import SUPPORTED_PROTOCOL_VERSIONS
|
||||
from minecraft.networking.connection import ConnectionContext
|
||||
from minecraft.networking.types import VarInt
|
||||
from minecraft.networking.packets import (
|
||||
PacketBuffer, ChatPacket, KeepAlivePacket, PacketListener)
|
||||
@ -11,68 +14,79 @@ from minecraft.networking.packets import (
|
||||
class PacketSerializatonTest(unittest.TestCase):
|
||||
|
||||
def test_packet(self):
|
||||
packet = ChatPacket()
|
||||
packet.message = u"κόσμε"
|
||||
for protocol_version in SUPPORTED_PROTOCOL_VERSIONS:
|
||||
context = ConnectionContext(protocol_version=protocol_version)
|
||||
|
||||
packet_buffer = PacketBuffer()
|
||||
packet.write(packet_buffer)
|
||||
|
||||
packet_buffer.reset_cursor()
|
||||
# Read the length and packet id
|
||||
VarInt.read(packet_buffer)
|
||||
packet_id = VarInt.read(packet_buffer)
|
||||
self.assertEqual(packet_id, packet.id)
|
||||
|
||||
deserialized = ChatPacket()
|
||||
deserialized.read(packet_buffer)
|
||||
|
||||
self.assertEqual(packet.message, deserialized.message)
|
||||
packet = ChatPacket(context)
|
||||
packet.message = u"κόσμε"
|
||||
|
||||
packet_buffer = PacketBuffer()
|
||||
packet.write(packet_buffer)
|
||||
|
||||
packet_buffer.reset_cursor()
|
||||
# Read the length and packet id
|
||||
VarInt.read(packet_buffer)
|
||||
packet_id = VarInt.read(packet_buffer)
|
||||
self.assertEqual(packet_id, packet.id)
|
||||
|
||||
deserialized = ChatPacket(context)
|
||||
deserialized.read(packet_buffer)
|
||||
|
||||
self.assertEqual(packet.message, deserialized.message)
|
||||
|
||||
def test_compressed_packet(self):
|
||||
msg = ''.join(choice(string.ascii_lowercase) for i in range(500))
|
||||
packet = ChatPacket()
|
||||
packet.message = msg
|
||||
for protocol_version in SUPPORTED_PROTOCOL_VERSIONS:
|
||||
context = ConnectionContext(protocol_version=protocol_version)
|
||||
|
||||
self.write_read_packet(packet, 20)
|
||||
self.write_read_packet(packet, -1)
|
||||
msg = ''.join(choice(string.ascii_lowercase) for i in range(500))
|
||||
packet = ChatPacket(context)
|
||||
packet.message = msg
|
||||
|
||||
self.write_read_packet(packet, 20)
|
||||
self.write_read_packet(packet, -1)
|
||||
|
||||
def write_read_packet(self, packet, compression_threshold):
|
||||
for protocol_version in SUPPORTED_PROTOCOL_VERSIONS:
|
||||
context = ConnectionContext(protocol_version=protocol_version)
|
||||
|
||||
packet_buffer = PacketBuffer()
|
||||
packet.write(packet_buffer, compression_threshold)
|
||||
|
||||
packet_buffer.reset_cursor()
|
||||
|
||||
VarInt.read(packet_buffer)
|
||||
compressed_size = VarInt.read(packet_buffer)
|
||||
|
||||
if compressed_size > 0:
|
||||
decompressed = decompress(packet_buffer.read(compressed_size))
|
||||
packet_buffer.reset()
|
||||
packet_buffer.send(decompressed)
|
||||
packet_buffer = PacketBuffer()
|
||||
packet.write(packet_buffer, compression_threshold)
|
||||
|
||||
packet_buffer.reset_cursor()
|
||||
|
||||
packet_id = VarInt.read(packet_buffer)
|
||||
self.assertEqual(packet_id, packet.id)
|
||||
|
||||
deserialized = ChatPacket()
|
||||
deserialized.read(packet_buffer)
|
||||
|
||||
self.assertEqual(packet.message, deserialized.message)
|
||||
|
||||
VarInt.read(packet_buffer)
|
||||
compressed_size = VarInt.read(packet_buffer)
|
||||
|
||||
if compressed_size > 0:
|
||||
decompressed = decompress(packet_buffer.read(compressed_size))
|
||||
packet_buffer.reset()
|
||||
packet_buffer.send(decompressed)
|
||||
packet_buffer.reset_cursor()
|
||||
|
||||
packet_id = VarInt.read(packet_buffer)
|
||||
self.assertEqual(packet_id, packet.id)
|
||||
|
||||
deserialized = ChatPacket(context)
|
||||
deserialized.read(packet_buffer)
|
||||
|
||||
self.assertEqual(packet.message, deserialized.message)
|
||||
|
||||
|
||||
class PacketListenerTest(unittest.TestCase):
|
||||
|
||||
def test_listener(self):
|
||||
message = "hello world"
|
||||
|
||||
def test_packet(chat_packet):
|
||||
self.assertEqual(chat_packet.message, message)
|
||||
|
||||
listener = PacketListener(test_packet, ChatPacket)
|
||||
for protocol_version in SUPPORTED_PROTOCOL_VERSIONS:
|
||||
context = ConnectionContext(protocol_version=protocol_version)
|
||||
|
||||
packet = ChatPacket().set_values(message=message)
|
||||
uncalled_packet = KeepAlivePacket().set_values(keep_alive_id=0)
|
||||
|
||||
listener.call_packet(packet)
|
||||
listener.call_packet(uncalled_packet)
|
||||
listener = PacketListener(test_packet, ChatPacket)
|
||||
|
||||
packet = ChatPacket().set_values(message=message)
|
||||
uncalled_packet = KeepAlivePacket().set_values(keep_alive_id=0)
|
||||
|
||||
listener.call_packet(packet)
|
||||
listener.call_packet(uncalled_packet)
|
||||
|
||||
|
@ -53,8 +53,8 @@ class SerializationTest(unittest.TestCase):
|
||||
base_type.send(None, None)
|
||||
|
||||
empty_socket = PacketBuffer()
|
||||
with self.assertRaises(RuntimeError):
|
||||
VarInt.read_socket(empty_socket)
|
||||
with self.assertRaises(Exception):
|
||||
VarInt.read(empty_socket)
|
||||
|
||||
def test_varint(self):
|
||||
self.assertEqual(VarInt.size(2), 1)
|
||||
@ -64,4 +64,4 @@ class SerializationTest(unittest.TestCase):
|
||||
VarInt.send(50000, packet_buffer)
|
||||
packet_buffer.reset_cursor()
|
||||
|
||||
self.assertEqual(VarInt.read_socket(packet_buffer), 50000)
|
||||
self.assertEqual(VarInt.read(packet_buffer), 50000)
|
||||
|
@ -9,7 +9,9 @@ class VersionTest(unittest.TestCase):
|
||||
SV(minecraft.__version__)
|
||||
|
||||
def test_minecraft_version_is_a_valid_pep_386_strict_version(self):
|
||||
SV(minecraft.MINECRAFT_VERSION)
|
||||
for version in minecraft.SUPPORTED_MINECRAFT_VERSIONS.keys():
|
||||
SV(version)
|
||||
|
||||
def test_protocol_version_is_an_int(self):
|
||||
self.assertTrue(type(minecraft.PROTOCOL_VERSION) is int)
|
||||
for version in minecraft.SUPPORTED_PROTOCOL_VERSIONS:
|
||||
self.assertTrue(type(version) is int)
|
||||
|
17
tox.ini
17
tox.ini
@ -4,7 +4,7 @@
|
||||
# and then run "tox" from this directory.
|
||||
|
||||
[tox]
|
||||
envlist = py27, py33, py34, pypy, cover, flake8, pylint-errors, pylint-full, verify-manifest
|
||||
envlist = py27, py33, py34, py35, pypy, cover, flake8, pylint-errors, pylint-full, verify-manifest
|
||||
|
||||
[testenv]
|
||||
commands = nosetests
|
||||
@ -13,6 +13,7 @@ deps =
|
||||
nose
|
||||
requests
|
||||
cryptography
|
||||
future
|
||||
|
||||
[testenv:py27]
|
||||
deps =
|
||||
@ -25,7 +26,7 @@ deps =
|
||||
mock
|
||||
|
||||
[testenv:cover]
|
||||
basepython = python3.4
|
||||
basepython = python3.5
|
||||
commands =
|
||||
nosetests --with-xunit --with-xcoverage --cover-package=minecraft --nocapture --cover-erase --cover-inclusive --cover-tests --cover-branches --cover-min-percentage=60
|
||||
deps =
|
||||
@ -43,7 +44,7 @@ deps =
|
||||
coveralls
|
||||
|
||||
[testenv:flake8]
|
||||
basepython = python3.4
|
||||
basepython = python3.5
|
||||
commands =
|
||||
flake8 minecraft tests setup.py start.py bin/generate_travis_yml.py
|
||||
deps =
|
||||
@ -51,14 +52,14 @@ deps =
|
||||
flake8
|
||||
|
||||
[testenv:pylint-errors]
|
||||
basepython = python3.4
|
||||
basepython = python3.5
|
||||
deps =
|
||||
{[testenv]deps}
|
||||
pylint
|
||||
commands = pylint minecraft -E
|
||||
|
||||
[testenv:pylint-full]
|
||||
basepython = python3.4
|
||||
basepython = python3.5
|
||||
deps =
|
||||
{[testenv]deps}
|
||||
pylint
|
||||
@ -66,7 +67,7 @@ commands =
|
||||
- pylint minecraft --disable=E
|
||||
|
||||
[testenv:docs]
|
||||
basepython = python3.4
|
||||
basepython = python3.5
|
||||
deps =
|
||||
{[testenv:cover]deps}
|
||||
sphinx
|
||||
@ -75,9 +76,9 @@ commands =
|
||||
{toxinidir}/bin/build_docs
|
||||
|
||||
[testenv:verify-manifest]
|
||||
basepython = python3.4
|
||||
basepython = python3.5
|
||||
deps =
|
||||
check-manifest
|
||||
commands =
|
||||
check-manifest
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user