Add test for reactors

This commit is contained in:
Ammar Askar 2017-07-16 20:02:50 -07:00
parent d686b6487f
commit f450ef5ff4
No known key found for this signature in database
GPG Key ID: 5466BE9666B54DED
3 changed files with 108 additions and 1 deletions

View File

@ -635,7 +635,8 @@ class MapPacket(Packet):
self.maps_by_id = dict()
def __repr__(self):
return 'MapSet(%s)' % ', '.join(self.maps_by_id.values())
maps = [str(map) for map in self.maps_by_id.values()]
return 'MapSet(%s)' % ', '.join(maps)
def __str__(self):
return self.__repr__()

View File

@ -110,6 +110,7 @@ class MapPacketTest(unittest.TestCase):
map = map_set.maps_by_id[1]
self.assertIn(b"xh", map.pixels)
self.assertIn(b"is", map.pixels)
self.assertIsNotNone(str(map_set))
fake_uuid = "12345678-1234-5678-1234-567812345678"

105
tests/test_reactors.py Normal file
View File

@ -0,0 +1,105 @@
import unittest
try:
from unittest import mock
except ImportError:
import mock
from minecraft.networking.connection import (
LoginReactor, PlayingReactor, ConnectionContext
)
from minecraft.networking.packets import (
EncryptionRequestPacket, PlayerPositionAndLookPacket
)
class LoginReactorTest(unittest.TestCase):
@mock.patch('minecraft.networking.connection.encryption')
def test_encryption_online_server(self, encrypt):
connection = mock.MagicMock()
reactor = LoginReactor(connection)
packet = EncryptionRequestPacket()
packet.server_id = "123"
packet.public_key = b"asdf"
packet.verify_token = b"23"
secret = b"secret"
encrypt.generate_shared_secret.return_value = secret
encrypt.encrypt_token_and_secret.return_value = (b"a", b"b")
encrypt.generate_verification_hash.return_value = b"hash"
reactor.react(packet)
encrypt.encrypt_token_and_secret.assert_called_once_with(
packet.public_key, packet.verify_token, secret
)
connection.auth_token.join.assert_called_once_with(b"hash")
self.assertEqual(connection.write_packet.call_count, 1)
@mock.patch('minecraft.networking.connection.encryption')
def test_encryption_offline_server(self, encrypt):
connection = mock.MagicMock()
reactor = LoginReactor(connection)
packet = EncryptionRequestPacket()
packet.server_id = "-"
packet.public_key = b"asdf"
packet.verify_token = b"23"
secret = b"secret"
encrypt.generate_shared_secret.return_value = secret
encrypt.encrypt_token_and_secret.return_value = (b"a", b"b")
reactor.react(packet)
encrypt.encrypt_token_and_secret.assert_called_once_with(
packet.public_key, packet.verify_token, secret
)
self.assertEqual(connection.auth_token.join.call_count, 0)
self.assertEqual(connection.write_packet.call_count, 1)
class PlayingReactorTest(unittest.TestCase):
def get_position_packet(self):
packet = PlayerPositionAndLookPacket()
packet.x = 1.0
packet.y = 2.0
packet.z = 3.0
packet.yaw = 4.0
packet.pitch = 5.0
packet.teleport_id = 42
return packet
def test_teleport_confirmation_old(self):
connection = mock.MagicMock()
connection.context = ConnectionContext(protocol_version=106)
reactor = PlayingReactor(connection)
packet = self.get_position_packet()
reactor.react(packet)
self.assertEqual(connection.write_packet.call_count, 1)
response_packet = connection.write_packet.call_args[0][0]
self.assertEqual(response_packet.x, 1.0)
self.assertEqual(response_packet.feet_y, 2.0)
self.assertEqual(response_packet.z, 3.0)
self.assertEqual(response_packet.yaw, 4.0)
self.assertEqual(response_packet.pitch, 5.0)
self.assertTrue(response_packet.on_ground)
def test_teleport_confirmation_new(self):
connection = mock.MagicMock()
connection.context = ConnectionContext(protocol_version=107)
reactor = PlayingReactor(connection)
packet = self.get_position_packet()
reactor.react(packet)
self.assertEqual(connection.write_packet.call_count, 1)
response_packet = connection.write_packet.call_args[0][0]
self.assertEqual(response_packet.teleport_id, 42)