TestConnectionServer.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import time
  2. import gevent
  3. import pytest
  4. from Crypt import CryptConnection
  5. from Connection import ConnectionServer
  6. @pytest.mark.usefixtures("resetSettings")
  7. class TestConnection:
  8. def testSslConnection(self, file_server):
  9. file_server.ip_incoming = {} # Reset flood protection
  10. client = ConnectionServer("127.0.0.1", 1545)
  11. assert file_server != client
  12. # Connect to myself
  13. connection = client.getConnection("127.0.0.1", 1544)
  14. assert len(file_server.connections) == 1
  15. assert len(file_server.ips) == 1
  16. assert connection.handshake
  17. assert connection.crypt
  18. # Close connection
  19. connection.close()
  20. client.stop()
  21. time.sleep(0.01)
  22. assert len(file_server.connections) == 0
  23. assert len(file_server.ips) == 0
  24. def testRawConnection(self, file_server):
  25. file_server.ip_incoming = {} # Reset flood protection
  26. client = ConnectionServer("127.0.0.1", 1545)
  27. assert file_server != client
  28. # Remove all supported crypto
  29. crypt_supported_bk = CryptConnection.manager.crypt_supported
  30. CryptConnection.manager.crypt_supported = []
  31. connection = client.getConnection("127.0.0.1", 1544)
  32. assert len(file_server.connections) == 1
  33. assert not connection.crypt
  34. # Close connection
  35. connection.close()
  36. client.stop()
  37. time.sleep(0.01)
  38. assert len(file_server.connections) == 0
  39. # Reset supported crypts
  40. CryptConnection.manager.crypt_supported = crypt_supported_bk
  41. def testPing(self, file_server, site):
  42. file_server.ip_incoming = {} # Reset flood protection
  43. client = ConnectionServer("127.0.0.1", 1545)
  44. connection = client.getConnection("127.0.0.1", 1544)
  45. assert connection.ping()
  46. connection.close()
  47. client.stop()
  48. def testGetConnection(self, file_server):
  49. file_server.ip_incoming = {} # Reset flood protection
  50. client = ConnectionServer("127.0.0.1", 1545)
  51. connection = client.getConnection("127.0.0.1", 1544)
  52. # Get connection by ip/port
  53. connection2 = client.getConnection("127.0.0.1", 1544)
  54. assert connection == connection2
  55. # Get connection by peerid
  56. assert not client.getConnection("127.0.0.1", 1544, peer_id="notexists", create=False)
  57. connection2 = client.getConnection("127.0.0.1", 1544, peer_id=connection.handshake["peer_id"], create=False)
  58. assert connection2 == connection
  59. connection.close()
  60. client.stop()
  61. def testFloodProtection(self, file_server):
  62. file_server.ip_incoming = {} # Reset flood protection
  63. whitelist = file_server.whitelist # Save for reset
  64. file_server.whitelist = [] # Disable 127.0.0.1 whitelist
  65. client = ConnectionServer("127.0.0.1", 1545)
  66. # Only allow 6 connection in 1 minute
  67. for reconnect in range(6):
  68. connection = client.getConnection("127.0.0.1", 1544)
  69. assert connection.handshake
  70. connection.close()
  71. # The 7. one will timeout
  72. with pytest.raises(gevent.Timeout):
  73. with gevent.Timeout(0.1):
  74. connection = client.getConnection("127.0.0.1", 1544)
  75. # Reset whitelist
  76. file_server.whitelist = whitelist