Make network test compatible with ipv6

This commit is contained in:
shortcutme 2019-01-20 19:07:16 +01:00
parent 468666cdc8
commit 44dc3035a5
No known key found for this signature in database
GPG key ID: 5B63BAE6CB9613AE
5 changed files with 100 additions and 95 deletions

View file

@ -1,4 +1,5 @@
import time import time
import socket
import gevent import gevent
import pytest import pytest
@ -11,19 +12,38 @@ from Config import config
@pytest.mark.usefixtures("resetSettings") @pytest.mark.usefixtures("resetSettings")
class TestConnection: class TestConnection:
def testIpv6(self, file_server6):
assert ":" in file_server6.ip
client = ConnectionServer(file_server6.ip, 1545)
connection = client.getConnection(file_server6.ip, 1544)
assert connection.ping()
# Close connection
connection.close()
client.stop()
time.sleep(0.01)
assert len(file_server6.connections) == 0
# Should not able to reach on ipv4 ip
with pytest.raises(socket.error) as err:
client = ConnectionServer("127.0.0.1", 1545)
connection = client.getConnection("127.0.0.1", 1544)
def testSslConnection(self, file_server): def testSslConnection(self, file_server):
file_server.ip_incoming = {} # Reset flood protection client = ConnectionServer(file_server.ip, 1545)
client = ConnectionServer("127.0.0.1", 1545)
assert file_server != client assert file_server != client
# Connect to myself # Connect to myself
with mock.patch('Config.config.ip_local', return_value=[]): # SSL not used for local ips with mock.patch('Config.config.ip_local', return_value=[]): # SSL not used for local ips
connection = client.getConnection("127.0.0.1", 1544) connection = client.getConnection(file_server.ip, 1544)
assert len(file_server.connections) == 1 assert len(file_server.connections) == 1
assert connection.handshake assert connection.handshake
assert connection.crypt assert connection.crypt
# Close connection # Close connection
connection.close() connection.close()
client.stop() client.stop()
@ -31,17 +51,15 @@ class TestConnection:
assert len(file_server.connections) == 0 assert len(file_server.connections) == 0
def testRawConnection(self, file_server): def testRawConnection(self, file_server):
file_server.ip_incoming = {} # Reset flood protection client = ConnectionServer(file_server.ip, 1545)
client = ConnectionServer("127.0.0.1", 1545)
assert file_server != client assert file_server != client
# Remove all supported crypto # Remove all supported crypto
crypt_supported_bk = CryptConnection.manager.crypt_supported crypt_supported_bk = CryptConnection.manager.crypt_supported
CryptConnection.manager.crypt_supported = [] CryptConnection.manager.crypt_supported = []
print "---"
with mock.patch('Config.config.ip_local', return_value=[]): # SSL not used for local ips with mock.patch('Config.config.ip_local', return_value=[]): # SSL not used for local ips
connection = client.getConnection("127.0.0.1", 1544) connection = client.getConnection(file_server.ip, 1544)
assert len(file_server.connections) == 1 assert len(file_server.connections) == 1
assert not connection.crypt assert not connection.crypt
@ -55,9 +73,8 @@ class TestConnection:
CryptConnection.manager.crypt_supported = crypt_supported_bk CryptConnection.manager.crypt_supported = crypt_supported_bk
def testPing(self, file_server, site): def testPing(self, file_server, site):
file_server.ip_incoming = {} # Reset flood protection client = ConnectionServer(file_server.ip, 1545)
client = ConnectionServer("127.0.0.1", 1545) connection = client.getConnection(file_server.ip, 1544)
connection = client.getConnection("127.0.0.1", 1544)
assert connection.ping() assert connection.ping()
@ -65,38 +82,36 @@ class TestConnection:
client.stop() client.stop()
def testGetConnection(self, file_server): def testGetConnection(self, file_server):
file_server.ip_incoming = {} # Reset flood protection client = ConnectionServer(file_server.ip, 1545)
client = ConnectionServer("127.0.0.1", 1545) connection = client.getConnection(file_server.ip, 1544)
connection = client.getConnection("127.0.0.1", 1544)
# Get connection by ip/port # Get connection by ip/port
connection2 = client.getConnection("127.0.0.1", 1544) connection2 = client.getConnection(file_server.ip, 1544)
assert connection == connection2 assert connection == connection2
# Get connection by peerid # Get connection by peerid
assert not client.getConnection("127.0.0.1", 1544, peer_id="notexists", create=False) assert not client.getConnection(file_server.ip, 1544, peer_id="notexists", create=False)
connection2 = client.getConnection("127.0.0.1", 1544, peer_id=connection.handshake["peer_id"], create=False) connection2 = client.getConnection(file_server.ip, 1544, peer_id=connection.handshake["peer_id"], create=False)
assert connection2 == connection assert connection2 == connection
connection.close() connection.close()
client.stop() client.stop()
def testFloodProtection(self, file_server): def testFloodProtection(self, file_server):
file_server.ip_incoming = {} # Reset flood protection
whitelist = file_server.whitelist # Save for reset whitelist = file_server.whitelist # Save for reset
file_server.whitelist = [] # Disable 127.0.0.1 whitelist file_server.whitelist = [] # Disable 127.0.0.1 whitelist
client = ConnectionServer("127.0.0.1", 1545) client = ConnectionServer(file_server.ip, 1545)
# Only allow 6 connection in 1 minute # Only allow 6 connection in 1 minute
for reconnect in range(6): for reconnect in range(6):
connection = client.getConnection("127.0.0.1", 1544) connection = client.getConnection(file_server.ip, 1544)
assert connection.handshake assert connection.handshake
connection.close() connection.close()
# The 7. one will timeout # The 7. one will timeout
with pytest.raises(gevent.Timeout): with pytest.raises(gevent.Timeout):
with gevent.Timeout(0.1): with gevent.Timeout(0.1):
connection = client.getConnection("127.0.0.1", 1544) connection = client.getConnection(file_server.ip, 1544)
# Reset whitelist # Reset whitelist
file_server.whitelist = whitelist file_server.whitelist = whitelist

View file

@ -13,9 +13,9 @@ from File import FileServer
class TestFileRequest: class TestFileRequest:
def testGetFile(self, file_server, site): def testGetFile(self, file_server, site):
file_server.ip_incoming = {} # Reset flood protection file_server.ip_incoming = {} # Reset flood protection
client = ConnectionServer("127.0.0.1", 1545) client = ConnectionServer(file_server.ip, 1545)
connection = client.getConnection("127.0.0.1", 1544) connection = client.getConnection(file_server.ip, 1544)
file_server.sites[site.address] = site file_server.sites[site.address] = site
# Normal request # Normal request
@ -53,8 +53,8 @@ class TestFileRequest:
def testStreamFile(self, file_server, site): def testStreamFile(self, file_server, site):
file_server.ip_incoming = {} # Reset flood protection file_server.ip_incoming = {} # Reset flood protection
client = ConnectionServer("127.0.0.1", 1545) client = ConnectionServer(file_server.ip, 1545)
connection = client.getConnection("127.0.0.1", 1544) connection = client.getConnection(file_server.ip, 1544)
file_server.sites[site.address] = site file_server.sites[site.address] = site
buff = StringIO.StringIO() buff = StringIO.StringIO()
@ -84,24 +84,24 @@ class TestFileRequest:
def testPex(self, file_server, site, site_temp): def testPex(self, file_server, site, site_temp):
file_server.sites[site.address] = site file_server.sites[site.address] = site
client = FileServer("127.0.0.1", 1545) client = FileServer(file_server.ip, 1545)
client.sites[site_temp.address] = site_temp client.sites[site_temp.address] = site_temp
site_temp.connection_server = client site_temp.connection_server = client
connection = client.getConnection("127.0.0.1", 1544) connection = client.getConnection(file_server.ip, 1544)
# Add new fake peer to site # Add new fake peer to site
fake_peer = site.addPeer("1.2.3.4", 11337, return_peer=True) fake_peer = site.addPeer(file_server.ip_external, 11337, return_peer=True)
# Add fake connection to it # Add fake connection to it
fake_peer.connection = Connection(file_server, "1.2.3.4", 11337) fake_peer.connection = Connection(file_server, file_server.ip_external, 11337)
fake_peer.connection.last_recv_time = time.time() fake_peer.connection.last_recv_time = time.time()
assert fake_peer in site.getConnectablePeers() assert fake_peer in site.getConnectablePeers()
# Add file_server as peer to client # Add file_server as peer to client
peer_file_server = site_temp.addPeer("127.0.0.1", 1544) peer_file_server = site_temp.addPeer(file_server.ip, 1544)
assert "1.2.3.4:11337" not in site_temp.peers assert "%s:11337" % file_server.ip_external not in site_temp.peers
assert peer_file_server.pex() assert peer_file_server.pex()
assert "1.2.3.4:11337" in site_temp.peers assert "%s:11337" % file_server.ip_external in site_temp.peers
# Should not exchange private peers from local network # Should not exchange private peers from local network
fake_peer_private = site.addPeer("192.168.0.1", 11337, return_peer=True) fake_peer_private = site.addPeer("192.168.0.1", 11337, return_peer=True)

View file

@ -13,15 +13,14 @@ import Spy
@pytest.mark.usefixtures("resetTempSettings") @pytest.mark.usefixtures("resetTempSettings")
class TestPeer: class TestPeer:
def testPing(self, file_server, site, site_temp): def testPing(self, file_server, site, site_temp):
file_server.ip_incoming = {} # Reset flood protection
file_server.sites[site.address] = site file_server.sites[site.address] = site
client = FileServer("127.0.0.1", 1545) client = FileServer(file_server.ip, 1545)
client.sites[site_temp.address] = site_temp client.sites[site_temp.address] = site_temp
site_temp.connection_server = client site_temp.connection_server = client
connection = client.getConnection("127.0.0.1", 1544) connection = client.getConnection(file_server.ip, 1544)
# Add file_server as peer to client # Add file_server as peer to client
peer_file_server = site_temp.addPeer("127.0.0.1", 1544) peer_file_server = site_temp.addPeer(file_server.ip, 1544)
assert peer_file_server.ping() is not None assert peer_file_server.ping() is not None
@ -33,15 +32,14 @@ class TestPeer:
client.stop() client.stop()
def testDownloadFile(self, file_server, site, site_temp): def testDownloadFile(self, file_server, site, site_temp):
file_server.ip_incoming = {} # Reset flood protection
file_server.sites[site.address] = site file_server.sites[site.address] = site
client = FileServer("127.0.0.1", 1545) client = FileServer(file_server.ip, 1545)
client.sites[site_temp.address] = site_temp client.sites[site_temp.address] = site_temp
site_temp.connection_server = client site_temp.connection_server = client
connection = client.getConnection("127.0.0.1", 1544) connection = client.getConnection(file_server.ip, 1544)
# Add file_server as peer to client # Add file_server as peer to client
peer_file_server = site_temp.addPeer("127.0.0.1", 1544) peer_file_server = site_temp.addPeer(file_server.ip, 1544)
# Testing streamFile # Testing streamFile
buff = peer_file_server.getFile(site_temp.address, "content.json", streaming=True) buff = peer_file_server.getFile(site_temp.address, "content.json", streaming=True)
@ -79,15 +77,16 @@ class TestPeer:
def testHashfieldExchange(self, file_server, site, site_temp): def testHashfieldExchange(self, file_server, site, site_temp):
server1 = file_server server1 = file_server
server1.ip_incoming = {} # Reset flood protection
server1.sites[site.address] = site server1.sites[site.address] = site
server2 = FileServer("127.0.0.1", 1545) site.connection_server = server1
server2 = FileServer(file_server.ip, 1545)
server2.sites[site_temp.address] = site_temp server2.sites[site_temp.address] = site_temp
site_temp.connection_server = server2 site_temp.connection_server = server2
site.storage.verifyFiles(quick_check=True) # Find what optional files we have site.storage.verifyFiles(quick_check=True) # Find what optional files we have
# Add file_server as peer to client # Add file_server as peer to client
server2_peer1 = site_temp.addPeer("127.0.0.1", 1544) server2_peer1 = site_temp.addPeer(file_server.ip, 1544)
# Check if hashfield has any files # Check if hashfield has any files
assert len(site.content_manager.hashfield) > 0 assert len(site.content_manager.hashfield) > 0
@ -99,7 +98,7 @@ class TestPeer:
# Test force push new hashfield # Test force push new hashfield
site_temp.content_manager.hashfield.appendHash("AABB") site_temp.content_manager.hashfield.appendHash("AABB")
server1_peer2 = site.addPeer("127.0.0.1", 1545, return_peer=True) server1_peer2 = site.addPeer(file_server.ip, 1545, return_peer=True)
with Spy.Spy(FileRequest, "route") as requests: with Spy.Spy(FileRequest, "route") as requests:
assert len(server1_peer2.hashfield) == 0 assert len(server1_peer2.hashfield) == 0
server2_peer1.sendMyHashfield() server2_peer1.sendMyHashfield()
@ -128,19 +127,18 @@ class TestPeer:
server2.stop() server2.stop()
def testFindHash(self, file_server, site, site_temp): def testFindHash(self, file_server, site, site_temp):
file_server.ip_incoming = {} # Reset flood protection
file_server.sites[site.address] = site file_server.sites[site.address] = site
client = FileServer("127.0.0.1", 1545) client = FileServer(file_server.ip, 1545)
client.sites[site_temp.address] = site_temp client.sites[site_temp.address] = site_temp
site_temp.connection_server = client site_temp.connection_server = client
# Add file_server as peer to client # Add file_server as peer to client
peer_file_server = site_temp.addPeer("127.0.0.1", 1544) peer_file_server = site_temp.addPeer(file_server.ip, 1544)
assert peer_file_server.findHashIds([1234]) == {} assert peer_file_server.findHashIds([1234]) == {}
# Add fake peer with requred hash # Add fake peer with requred hash
fake_peer_1 = site.addPeer("1.2.3.4", 1544) fake_peer_1 = site.addPeer(file_server.ip_external, 1544)
fake_peer_1.hashfield.append(1234) fake_peer_1.hashfield.append(1234)
fake_peer_2 = site.addPeer("1.2.3.5", 1545) fake_peer_2 = site.addPeer("1.2.3.5", 1545)
fake_peer_2.hashfield.append(1234) fake_peer_2.hashfield.append(1234)
@ -149,14 +147,13 @@ class TestPeer:
fake_peer_3.hashfield.append(1235) fake_peer_3.hashfield.append(1235)
fake_peer_3.hashfield.append(1236) fake_peer_3.hashfield.append(1236)
assert peer_file_server.findHashIds([1234, 1235]) == { res = peer_file_server.findHashIds([1234, 1235])
1234: [('1.2.3.4', 1544), ('1.2.3.5', 1545)], assert sorted(res[1234]) == sorted([(file_server.ip_external, 1544), ("1.2.3.5", 1545)])
1235: [('1.2.3.5', 1545), ('1.2.3.6', 1546)] assert sorted(res[1235]) == sorted([("1.2.3.5", 1545), ("1.2.3.6", 1546)])
}
# Test my address adding # Test my address adding
site.content_manager.hashfield.append(1234) site.content_manager.hashfield.append(1234)
res = peer_file_server.findHashIds([1234, 1235]) res = peer_file_server.findHashIds([1234, 1235])
assert res[1234] == [('1.2.3.4', 1544), ('1.2.3.5', 1545), ("127.0.0.1", 1544)] assert sorted(res[1234]) == sorted([(file_server.ip_external, 1544), ("1.2.3.5", 1545), (file_server.ip, 1544)])
assert res[1235] == [('1.2.3.5', 1545), ('1.2.3.6', 1546)] assert sorted(res[1235]) == sorted([("1.2.3.5", 1545), ("1.2.3.6", 1546)])

View file

@ -16,8 +16,6 @@ import Spy
@pytest.mark.usefixtures("resetSettings") @pytest.mark.usefixtures("resetSettings")
class TestSiteDownload: class TestSiteDownload:
def testDownload(self, file_server, site, site_temp): def testDownload(self, file_server, site, site_temp):
file_server.ip_incoming = {} # Reset flood protection
assert site.storage.directory == config.data_dir + "/" + site.address assert site.storage.directory == config.data_dir + "/" + site.address
assert site_temp.storage.directory == config.data_dir + "-temp/" + site.address assert site_temp.storage.directory == config.data_dir + "-temp/" + site.address
@ -26,11 +24,11 @@ class TestSiteDownload:
file_server.sites[site.address] = site file_server.sites[site.address] = site
# Init client server # Init client server
client = ConnectionServer("127.0.0.1", 1545) client = ConnectionServer(file_server.ip, 1545)
site_temp.connection_server = client site_temp.connection_server = client
site_temp.announce = mock.MagicMock(return_value=True) # Don't try to find peers from the net site_temp.announce = mock.MagicMock(return_value=True) # Don't try to find peers from the net
site_temp.addPeer("127.0.0.1", 1544) site_temp.addPeer(file_server.ip, 1544)
with Spy.Spy(FileRequest, "route") as requests: with Spy.Spy(FileRequest, "route") as requests:
def boostRequest(inner_path): def boostRequest(inner_path):
# I really want these file # I really want these file
@ -58,19 +56,17 @@ class TestSiteDownload:
[connection.close() for connection in file_server.connections] [connection.close() for connection in file_server.connections]
def testArchivedDownload(self, file_server, site, site_temp): def testArchivedDownload(self, file_server, site, site_temp):
file_server.ip_incoming = {} # Reset flood protection
# Init source server # Init source server
site.connection_server = file_server site.connection_server = file_server
file_server.sites[site.address] = site file_server.sites[site.address] = site
# Init client server # Init client server
client = FileServer("127.0.0.1", 1545) client = FileServer(file_server.ip, 1545)
client.sites[site_temp.address] = site_temp client.sites[site_temp.address] = site_temp
site_temp.connection_server = client site_temp.connection_server = client
# Download normally # Download normally
site_temp.addPeer("127.0.0.1", 1544) site_temp.addPeer(file_server.ip, 1544)
site_temp.download(blind_includes=True).join(timeout=5) site_temp.download(blind_includes=True).join(timeout=5)
bad_files = site_temp.storage.verifyFiles(quick_check=True)["bad_files"] bad_files = site_temp.storage.verifyFiles(quick_check=True)["bad_files"]
@ -108,19 +104,17 @@ class TestSiteDownload:
[connection.close() for connection in file_server.connections] [connection.close() for connection in file_server.connections]
def testArchivedBeforeDownload(self, file_server, site, site_temp): def testArchivedBeforeDownload(self, file_server, site, site_temp):
file_server.ip_incoming = {} # Reset flood protection
# Init source server # Init source server
site.connection_server = file_server site.connection_server = file_server
file_server.sites[site.address] = site file_server.sites[site.address] = site
# Init client server # Init client server
client = FileServer("127.0.0.1", 1545) client = FileServer(file_server.ip, 1545)
client.sites[site_temp.address] = site_temp client.sites[site_temp.address] = site_temp
site_temp.connection_server = client site_temp.connection_server = client
# Download normally # Download normally
site_temp.addPeer("127.0.0.1", 1544) site_temp.addPeer(file_server.ip, 1544)
site_temp.download(blind_includes=True).join(timeout=5) site_temp.download(blind_includes=True).join(timeout=5)
bad_files = site_temp.storage.verifyFiles(quick_check=True)["bad_files"] bad_files = site_temp.storage.verifyFiles(quick_check=True)["bad_files"]
@ -161,18 +155,16 @@ class TestSiteDownload:
# Test when connected peer has the optional file # Test when connected peer has the optional file
def testOptionalDownload(self, file_server, site, site_temp): def testOptionalDownload(self, file_server, site, site_temp):
file_server.ip_incoming = {} # Reset flood protection
# Init source server # Init source server
site.connection_server = file_server site.connection_server = file_server
file_server.sites[site.address] = site file_server.sites[site.address] = site
# Init client server # Init client server
client = ConnectionServer("127.0.0.1", 1545) client = ConnectionServer(file_server.ip, 1545)
site_temp.connection_server = client site_temp.connection_server = client
site_temp.announce = mock.MagicMock(return_value=True) # Don't try to find peers from the net site_temp.announce = mock.MagicMock(return_value=True) # Don't try to find peers from the net
site_temp.addPeer("127.0.0.1", 1544) site_temp.addPeer(file_server.ip, 1544)
# Download site # Download site
site_temp.download(blind_includes=True).join(timeout=5) site_temp.download(blind_includes=True).join(timeout=5)
@ -205,15 +197,13 @@ class TestSiteDownload:
# Test when connected peer does not has the file, so ask him if he know someone who has it # Test when connected peer does not has the file, so ask him if he know someone who has it
def testFindOptional(self, file_server, site, site_temp): def testFindOptional(self, file_server, site, site_temp):
file_server.ip_incoming = {} # Reset flood protection
# Init source server # Init source server
site.connection_server = file_server site.connection_server = file_server
file_server.sites[site.address] = site file_server.sites[site.address] = site
# Init full source server (has optional files) # Init full source server (has optional files)
site_full = Site("1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT") site_full = Site("1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT")
file_server_full = FileServer("127.0.0.1", 1546) file_server_full = FileServer(file_server.ip, 1546)
site_full.connection_server = file_server_full site_full.connection_server = file_server_full
def listen(): def listen():
@ -224,7 +214,7 @@ class TestSiteDownload:
time.sleep(0.001) # Port opening time.sleep(0.001) # Port opening
file_server_full.sites[site_full.address] = site_full # Add site file_server_full.sites[site_full.address] = site_full # Add site
site_full.storage.verifyFiles(quick_check=True) # Check optional files site_full.storage.verifyFiles(quick_check=True) # Check optional files
site_full_peer = site.addPeer("127.0.0.1", 1546) # Add it to source server site_full_peer = site.addPeer(file_server.ip, 1546) # Add it to source server
hashfield = site_full_peer.updateHashfield() # Update hashfield hashfield = site_full_peer.updateHashfield() # Update hashfield
assert len(site_full.content_manager.hashfield) == 8 assert len(site_full.content_manager.hashfield) == 8
assert hashfield assert hashfield
@ -237,8 +227,8 @@ class TestSiteDownload:
site.content_manager.hashfield.remove(hash) site.content_manager.hashfield.remove(hash)
# Init client server # Init client server
site_temp.connection_server = ConnectionServer("127.0.0.1", 1545) site_temp.connection_server = ConnectionServer(file_server.ip, 1545)
site_temp.addPeer("127.0.0.1", 1544) # Add source server site_temp.addPeer(file_server.ip, 1544) # Add source server
# Download normal files # Download normal files
site_temp.log.info("Start Downloading site") site_temp.log.info("Start Downloading site")
@ -272,10 +262,9 @@ class TestSiteDownload:
assert site_temp.storage.deleteFiles() assert site_temp.storage.deleteFiles()
file_server_full.stop() file_server_full.stop()
[connection.close() for connection in file_server.connections] [connection.close() for connection in file_server.connections]
site_full.content_manager.contents.db.close()
def testUpdate(self, file_server, site, site_temp): def testUpdate(self, file_server, site, site_temp):
file_server.ip_incoming = {} # Reset flood protection
assert site.storage.directory == config.data_dir + "/" + site.address assert site.storage.directory == config.data_dir + "/" + site.address
assert site_temp.storage.directory == config.data_dir + "-temp/" + site.address assert site_temp.storage.directory == config.data_dir + "-temp/" + site.address
@ -284,7 +273,7 @@ class TestSiteDownload:
file_server.sites[site.address] = site file_server.sites[site.address] = site
# Init client server # Init client server
client = FileServer("127.0.0.1", 1545) client = FileServer(file_server.ip, 1545)
client.sites[site_temp.address] = site_temp client.sites[site_temp.address] = site_temp
site_temp.connection_server = client site_temp.connection_server = client
@ -293,7 +282,7 @@ class TestSiteDownload:
site_temp.announce = mock.MagicMock(return_value=True) site_temp.announce = mock.MagicMock(return_value=True)
# Connect peers # Connect peers
site_temp.addPeer("127.0.0.1", 1544) site_temp.addPeer(file_server.ip, 1544)
# Download site from site to site_temp # Download site from site to site_temp
site_temp.download(blind_includes=True).join(timeout=5) site_temp.download(blind_includes=True).join(timeout=5)
@ -321,7 +310,7 @@ class TestSiteDownload:
# Close connection to avoid update spam limit # Close connection to avoid update spam limit
site.peers.values()[0].remove() site.peers.values()[0].remove()
site.addPeer("127.0.0.1", 1545) site.addPeer(file_server.ip, 1545)
site_temp.peers.values()[0].ping() # Connect back site_temp.peers.values()[0].ping() # Connect back
time.sleep(0.1) time.sleep(0.1)

View file

@ -1,8 +1,11 @@
import pytest
import time import time
import pytest
import mock
from File import FileServer from File import FileServer
from Crypt import CryptRsa from Crypt import CryptRsa
from Config import config
@pytest.mark.usefixtures("resetSettings") @pytest.mark.usefixtures("resetSettings")
@pytest.mark.usefixtures("resetTempSettings") @pytest.mark.usefixtures("resetTempSettings")
@ -55,25 +58,25 @@ class TestTor:
for retry in range(5): # Wait for hidden service creation for retry in range(5): # Wait for hidden service creation
time.sleep(10) time.sleep(10)
try: try:
connection = file_server.getConnection(address+".onion", 1544) connection = file_server.getConnection(address + ".onion", 1544)
if connection: if connection:
break break
except Exception, err: except Exception as err:
continue continue
assert connection.handshake assert connection.handshake
assert not connection.handshake["peer_id"] # No peer_id for Tor connections assert not connection.handshake["peer_id"] # No peer_id for Tor connections
# Return the same connection without site specified # Return the same connection without site specified
assert file_server.getConnection(address+".onion", 1544) == connection assert file_server.getConnection(address + ".onion", 1544) == connection
# No reuse for different site # No reuse for different site
assert file_server.getConnection(address+".onion", 1544, site=site) != connection assert file_server.getConnection(address + ".onion", 1544, site=site) != connection
assert file_server.getConnection(address+".onion", 1544, site=site) == file_server.getConnection(address+".onion", 1544, site=site) assert file_server.getConnection(address + ".onion", 1544, site=site) == file_server.getConnection(address + ".onion", 1544, site=site)
site_temp.address = "1OTHERSITE" site_temp.address = "1OTHERSITE"
assert file_server.getConnection(address+".onion", 1544, site=site) != file_server.getConnection(address+".onion", 1544, site=site_temp) assert file_server.getConnection(address + ".onion", 1544, site=site) != file_server.getConnection(address + ".onion", 1544, site=site_temp)
# Only allow to query from the locked site # Only allow to query from the locked site
file_server.sites[site.address] = site file_server.sites[site.address] = site
connection_locked = file_server.getConnection(address+".onion", 1544, site=site) connection_locked = file_server.getConnection(address + ".onion", 1544, site=site)
assert "body" in connection_locked.request("getFile", {"site": site.address, "inner_path": "content.json", "location": 0}) assert "body" in connection_locked.request("getFile", {"site": site.address, "inner_path": "content.json", "location": 0})
assert connection_locked.request("getFile", {"site": "1OTHERSITE", "inner_path": "content.json", "location": 0})["error"] == "Invalid site" assert connection_locked.request("getFile", {"site": "1OTHERSITE", "inner_path": "content.json", "location": 0})["error"] == "Invalid site"
@ -82,12 +85,12 @@ class TestTor:
site.connection_server = file_server site.connection_server = file_server
file_server.sites[site.address] = site file_server.sites[site.address] = site
# Create a new file server to emulate new peer connecting to our peer # Create a new file server to emulate new peer connecting to our peer
file_server_temp = FileServer("127.0.0.1", 1545) file_server_temp = FileServer(file_server.ip, 1545)
site_temp.connection_server = file_server_temp site_temp.connection_server = file_server_temp
file_server_temp.sites[site_temp.address] = site_temp file_server_temp.sites[site_temp.address] = site_temp
# We will request peers from this # We will request peers from this
peer_source = site_temp.addPeer("127.0.0.1", 1544) peer_source = site_temp.addPeer(file_server.ip, 1544)
# Get ip4 peers from source site # Get ip4 peers from source site
site.addPeer("1.2.3.4", 1555) # Add peer to source site site.addPeer("1.2.3.4", 1555) # Add peer to source site
@ -106,12 +109,12 @@ class TestTor:
file_server.sites[site.address] = site file_server.sites[site.address] = site
file_server.tor_manager = tor_manager file_server.tor_manager = tor_manager
client = FileServer("127.0.0.1", 1545) client = FileServer(file_server.ip, 1545)
client.sites[site_temp.address] = site_temp client.sites[site_temp.address] = site_temp
site_temp.connection_server = client site_temp.connection_server = client
# Add file_server as peer to client # Add file_server as peer to client
peer_file_server = site_temp.addPeer("127.0.0.1", 1544) peer_file_server = site_temp.addPeer(file_server.ip, 1544)
assert peer_file_server.findHashIds([1234]) == {} assert peer_file_server.findHashIds([1234]) == {}
@ -132,12 +135,13 @@ class TestTor:
# Test my address adding # Test my address adding
site.content_manager.hashfield.append(1234) site.content_manager.hashfield.append(1234)
my_onion_address = tor_manager.getOnion(site_temp.address)+".onion" my_onion_address = tor_manager.getOnion(site_temp.address) + ".onion"
res = peer_file_server.findHashIds([1234, 1235]) res = peer_file_server.findHashIds([1234, 1235])
assert res[1234] == [('1.2.3.5', 1545), ("bka4ht2bzxchy44r.onion", 1544), (my_onion_address, 1544)] assert res[1234] == [('1.2.3.5', 1545), ("bka4ht2bzxchy44r.onion", 1544), (my_onion_address, 1544)]
assert res[1235] == [('1.2.3.6', 1546), ('1.2.3.5', 1545)] assert res[1235] == [('1.2.3.6', 1546), ('1.2.3.5', 1545)]
def testSiteOnion(self, tor_manager): def testSiteOnion(self, tor_manager):
assert tor_manager.getOnion("address1") != tor_manager.getOnion("address2") with mock.patch.object(config, "tor", "always"):
assert tor_manager.getOnion("address1") == tor_manager.getOnion("address1") assert tor_manager.getOnion("address1") != tor_manager.getOnion("address2")
assert tor_manager.getOnion("address1") == tor_manager.getOnion("address1")