def test_hash_frame_mismatch_payload(): """ Test that _hash_frame returns different hashes for mismatching source """ hash1 = APRSInterface._hash_frame( APRSMessageFrame( destination='VK4BWI-2', source='VK4MSL-10', addressee='VK4BWI-2', message=b'testing 1', msgid=123, repeaters=['WIDE2-1','WIDE1-1'] ) ) hash2 = APRSInterface._hash_frame( APRSMessageFrame( destination='VK4BWI-2', source='VK4MSL-10', addressee='VK4BWI-2', message=b'testing 2', msgid=123, repeaters=['WIDE2-1','WIDE1-1'] ) ) # These should not be the same assert hash1 != hash2
def test_hash_frame(): """ Test that _hash_frame returns a consistent result regardless of digipeaters """ hash1 = APRSInterface._hash_frame( APRSMessageFrame(destination='VK4BWI-2', source='VK4MSL-10', addressee='VK4BWI-2', message=b'testing', msgid=123, repeaters=['WIDE2-1', 'WIDE1-1'])) hash2 = APRSInterface._hash_frame( APRSMessageFrame(destination='VK4BWI-2', source='VK4MSL-10', addressee='VK4BWI-2', message=b'testing', msgid=123, repeaters=['VK4RZB*', 'WIDE1-1'])) hash3 = APRSInterface._hash_frame( APRSMessageFrame(destination='VK4BWI-2', source='VK4MSL-10', addressee='VK4BWI-2', message=b'testing', msgid=123, repeaters=['VK4RZB*', 'VK4RZA*'])) # These should all be the same eq_(hash1, hash2) eq_(hash1, hash3)
def test_on_receive_dup(): """ Test _on_receive ignores duplicate frames. """ # Create a frame and hash it frame = AX25UnnumberedInformationFrame( destination='VK4BWI-2', source='VK4MSL-10', pid=0xf0, payload=b':VK4BWI-2 :testing{123', repeaters=['WIDE2-1','WIDE1-1'] ) framedigest = APRSInterface._hash_frame(frame) # Create our interface ax25int = DummyAX25Interface() aprsint = APRSInterface(ax25int, 'VK4MSL-10') # Inject the hash now = aprsint._loop.time() aprsint._msg_expiry.update({ framedigest: now + 3 }) # Now pass the frame in as if it were just received aprsint._on_receive(frame) # There should be no calls made eq_(len(ax25int._loop.calls), 0)
def test_test_or_add_frame_expired(): """ Test that _test_or_add_frame returns False for expired repeats """ frame = APRSMessageFrame( destination='VK4BWI-2', source='VK4MSL-10', addressee='VK4BWI-2', message=b'testing', msgid=123, repeaters=['WIDE2-1','WIDE1-1'] ) framedigest = APRSInterface._hash_frame(frame) ax25int = DummyAX25Interface() aprsint = APRSInterface(ax25int, 'VK4MSL-10') # Inject the frame expiry expiry_time = aprsint._loop.time() - 1 aprsint._msg_expiry[framedigest] = expiry_time # Try it out res = aprsint._test_or_add_frame(frame) # We should get 'False' as the response eq_(res, False) # The expiry time should be at least 25 seconds. eq_(len(aprsint._msg_expiry), 1) assert_greater(aprsint._msg_expiry.get(framedigest, 0), ax25int._loop.time() + 25) # A clean-up should have been scheduled. eq_(len(ax25int._loop.calls), 1) (_, callfunc) = ax25int._loop.calls.pop(0) eq_(callfunc, aprsint._schedule_dedup_cleanup)
def test_test_or_add_frame_repeat(): """ Test that _test_or_add_frame returns True for un-expired repeats """ frame = APRSMessageFrame( destination='VK4BWI-2', source='VK4MSL-10', addressee='VK4BWI-2', message=b'testing', msgid=123, repeaters=['WIDE2-1','WIDE1-1'] ) framedigest = APRSInterface._hash_frame(frame) ax25int = DummyAX25Interface() aprsint = APRSInterface(ax25int, 'VK4MSL-10') # Inject the frame expiry expiry_time = aprsint._loop.time() + 1 aprsint._msg_expiry[framedigest] = expiry_time # Try it out res = aprsint._test_or_add_frame(frame) # We should get 'False' as the response eq_(res, True) # Expiry should not have changed eq_(len(aprsint._msg_expiry), 1) eq_(aprsint._msg_expiry[framedigest], expiry_time) # Nothing further should be done. eq_(len(ax25int._loop.calls), 0)