From f450ef5ff423772d9ce6126568ff45b6ac5cd6ba Mon Sep 17 00:00:00 2001 From: Ammar Askar Date: Sun, 16 Jul 2017 20:02:50 -0700 Subject: [PATCH] Add test for reactors --- minecraft/networking/packets.py | 3 +- tests/test_packets_with_logic.py | 1 + tests/test_reactors.py | 105 +++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 tests/test_reactors.py diff --git a/minecraft/networking/packets.py b/minecraft/networking/packets.py index ac331ae..eaee5ce 100644 --- a/minecraft/networking/packets.py +++ b/minecraft/networking/packets.py @@ -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__() diff --git a/tests/test_packets_with_logic.py b/tests/test_packets_with_logic.py index 073a374..2d50279 100644 --- a/tests/test_packets_with_logic.py +++ b/tests/test_packets_with_logic.py @@ -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" diff --git a/tests/test_reactors.py b/tests/test_reactors.py new file mode 100644 index 0000000..0109364 --- /dev/null +++ b/tests/test_reactors.py @@ -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)