def test_gossip_core_stats(self): # Test that stats are set and change as different methods are used core = self._setup(8801) packetdic1 = core.PacketStats.get_stats() msgdic1 = str(core.MessageStats.get_stats()) newNode = self._create_node(8859) core.add_node(newNode) msg = self._create_msg() pak = Packet() pak.add_message(msg, newNode, newNode, 0) # Following methods should update PacketStats core._do_write(pak.pack(), newNode) core._send_ack(pak, newNode) data = pak.pack() # Following method should update MessageStats packetdic2 = core.PacketStats.get_stats() core.datagramReceived(data, "localhost:8801") msgdic2 = str(core.MessageStats.get_stats()) msgdic = core.MessageStats.get_stats(["MessageType"])["MessageType"] self.assertEqual(packetdic2["MessagesAcked"], 1) self.assertNotEqual(packetdic2["BytesSent"], [0, 0]) self.assertNotEqual(packetdic1, packetdic2) self.assertNotEqual(msgdic1, msgdic2) self.assertEqual(msgdic['/gossip.Message/MessageBase'], 1)
def test_gossip_datagram_received(self): # Test that datagramReceived behaves as expected core = self._setup(9500) peer = self._create_node(9501) peer2 = self._create_node(9502) core.add_node(peer) core.add_node(peer2) msg = self._create_msg() pak = Packet() pak.add_message(msg, peer, peer2, 0) data = pak.pack() # Test correct use of datagramReceived core.datagramReceived(data, "localhost:9001") msgType = core.MessageStats.get_stats(["MessageType"]) self.assertIn('/gossip.Message/MessageBase', msgType["MessageType"]) pakStats = core.PacketStats.get_stats(["MessagesAcked"]) self.assertEqual(pakStats["MessagesAcked"], 1) # Test handling of duplicate packets msg2 = shutdown_message.ShutdownMessage({'__SIGNATURE__': "test"}) core.MessageHandledMap[msg2.Identifier] = time.time() pak.add_message(msg2, peer, peer2, 1) data2 = pak.pack() core.datagramReceived(data2, "localhost:9001") pakStats = core.PacketStats.get_stats(["DuplicatePackets"]) self.assertEqual(pakStats["DuplicatePackets"], 1)
def test_gossip_dowrite(self): # Test _dowrite puts a message on the wire core = self._setup(8804) newNode = self._create_node(8805) newNode.is_peer = True core.add_node(newNode) core2 = Gossip pak = Packet() data = "test the pack" pak.Data = data # Test correct sending of bytes status = core._do_write(pak.pack(), newNode) self.assertTrue(status) stats = core.PacketStats.get_stats(["BytesSent"]) self.assertNotEqual(stats["BytesSent"], [0, 0]) # Test failure of message that is too big # This will print out an error core.MaximumPacketSize = 0 status = core._do_write(pak.pack(), newNode) self.assertFalse(status)
def test_gossip_datagram_unknown_peer(self): # Test that nothing is done if the nodes are not known core = self._setup(9007) peer = self._create_node(9008) peer2 = self._create_node(9009) msg = self._create_msg() pak = Packet() pak.add_message(msg, peer, peer2, 0) data = pak.pack() status = core.datagramReceived(data, "localhost:9001") self.assertIsNone(status)
def test_pack_unpack(self): # Test packing a paket and a packed packet can be unpacked correctly pak = Packet() data = "test the pack" pak.Data = data # Store original attributes original = [pak.PackedFormat, pak.TimeToLive, pak.SequenceNumber, pak.IsAcknowledgement, pak.IsReliable, str(pak.SenderID)] packed = pak.pack() # Change the packet to see if it will be returned to original pak.SequenceNumber = 1234 pak.unpack(packed) # Store the attrubites of the unpacked pack new = [pak.PackedFormat, pak.TimeToLive, pak.SequenceNumber, pak.IsAcknowledgement, pak.IsReliable, str(pak.SenderID)] self.assertEquals(original, new) self.assertEquals("test the pack", pak.Data)
def test_pack_unpack(self): # Test packing a paket and a packed packet can be unpacked correctly pak = Packet() data = "test the pack" pak.Data = data # Store original attributes original = [ pak.PackedFormat, pak.TimeToLive, pak.SequenceNumber, pak.IsAcknowledgement, pak.IsReliable, str(pak.SenderID) ] packed = pak.pack() # Change the packet to see if it will be returned to original pak.SequenceNumber = 1234 pak.unpack(packed) # Store the attrubites of the unpacked pack new = [ pak.PackedFormat, pak.TimeToLive, pak.SequenceNumber, pak.IsAcknowledgement, pak.IsReliable, str(pak.SenderID) ] self.assertEqual(original, new) self.assertEqual("test the pack", pak.Data.decode())