Rev477, FindHashId command for optional files, Renaming some variables to make it more clear, Optional files downloading in WorkerManager, Test FindHash, Test Optional download, Test FindOptional
This commit is contained in:
parent
e8ce26587d
commit
a8dae8dd85
9 changed files with 348 additions and 93 deletions
|
@ -8,7 +8,7 @@ from cStringIO import StringIO
|
|||
|
||||
@pytest.mark.usefixtures("resetSettings")
|
||||
@pytest.mark.usefixtures("resetTempSettings")
|
||||
class TestFileRequest:
|
||||
class TestPeer:
|
||||
def testPing(self, file_server, site, site_temp):
|
||||
file_server.ip_incoming = {} # Reset flood protection
|
||||
file_server.sites[site.address] = site
|
||||
|
@ -53,9 +53,13 @@ class TestFileRequest:
|
|||
|
||||
def testHashfield(self, site):
|
||||
sample_hash = site.content_manager.contents["content.json"]["files_optional"].values()[0]["sha512"]
|
||||
|
||||
assert not site.content_manager.hashfield
|
||||
|
||||
site.storage.verifyFiles(quick_check=True) # Find what optional files we have
|
||||
|
||||
# Check if hashfield has any files
|
||||
assert site.content_manager.hashfield
|
||||
assert len(site.content_manager.hashfield) > 0
|
||||
|
||||
# Check exsist hash
|
||||
|
@ -89,8 +93,35 @@ class TestFileRequest:
|
|||
|
||||
# Testing hashfield sync
|
||||
assert len(peer_file_server.hashfield) == 0
|
||||
assert peer_file_server.getHashfield()
|
||||
assert peer_file_server.updateHashfield()
|
||||
assert len(peer_file_server.hashfield) > 0
|
||||
|
||||
connection.close()
|
||||
client.stop()
|
||||
|
||||
def testFindHash(self, file_server, site, site_temp):
|
||||
file_server.ip_incoming = {} # Reset flood protection
|
||||
file_server.sites[site.address] = site
|
||||
client = FileServer("127.0.0.1", 1545)
|
||||
client.sites[site_temp.address] = site_temp
|
||||
site_temp.connection_server = client
|
||||
|
||||
# Add file_server as peer to client
|
||||
peer_file_server = site_temp.addPeer("127.0.0.1", 1544)
|
||||
|
||||
assert peer_file_server.findHashIds([1234]) == {}
|
||||
|
||||
# Add fake peer with requred hash
|
||||
fake_peer_1 = site.addPeer("1.2.3.4", 1544)
|
||||
fake_peer_1.hashfield.append(1234)
|
||||
fake_peer_2 = site.addPeer("1.2.3.5", 1545)
|
||||
fake_peer_2.hashfield.append(1234)
|
||||
fake_peer_2.hashfield.append(1235)
|
||||
fake_peer_3 = site.addPeer("1.2.3.6", 1546)
|
||||
fake_peer_3.hashfield.append(1235)
|
||||
fake_peer_3.hashfield.append(1236)
|
||||
|
||||
assert peer_file_server.findHashIds([1234, 1235]) == {
|
||||
1234: [('1.2.3.4', 1544), ('1.2.3.5', 1545)],
|
||||
1235: [('1.2.3.5', 1545), ('1.2.3.6', 1546)]
|
||||
}
|
||||
|
|
|
@ -1,9 +1,14 @@
|
|||
import time
|
||||
|
||||
import pytest
|
||||
import mock
|
||||
import gevent
|
||||
|
||||
from Connection import ConnectionServer
|
||||
from Config import config
|
||||
from File import FileRequest
|
||||
from File import FileServer
|
||||
from Site import Site
|
||||
import Spy
|
||||
|
||||
|
||||
|
@ -11,7 +16,8 @@ import Spy
|
|||
@pytest.mark.usefixtures("resetSettings")
|
||||
class TestSiteDownload:
|
||||
def testDownload(self, file_server, site, site_temp):
|
||||
client = ConnectionServer("127.0.0.1", 1545)
|
||||
file_server.ip_incoming = {} # Reset flood protection
|
||||
|
||||
assert site.storage.directory == config.data_dir + "/" + site.address
|
||||
assert site_temp.storage.directory == config.data_dir + "-temp/" + site.address
|
||||
|
||||
|
@ -20,6 +26,7 @@ class TestSiteDownload:
|
|||
file_server.sites[site.address] = site
|
||||
|
||||
# Init client server
|
||||
client = ConnectionServer("127.0.0.1", 1545)
|
||||
site_temp.connection_server = client
|
||||
site_temp.announce = mock.MagicMock(return_value=True) # Don't try to find peers from the net
|
||||
|
||||
|
@ -48,7 +55,33 @@ class TestSiteDownload:
|
|||
assert len(site_temp.content_manager.contents) == len(site.content_manager.contents) - 1
|
||||
assert not bad_files
|
||||
|
||||
# Optional file
|
||||
[connection.close() for connection in file_server.connections]
|
||||
|
||||
|
||||
# Test when connected peer has the optional file
|
||||
def testOptionalDownload(self, file_server, site, site_temp):
|
||||
file_server.ip_incoming = {} # Reset flood protection
|
||||
|
||||
# Init source server
|
||||
site.connection_server = file_server
|
||||
file_server.sites[site.address] = site
|
||||
|
||||
# Init client server
|
||||
client = ConnectionServer("127.0.0.1", 1545)
|
||||
site_temp.connection_server = client
|
||||
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)
|
||||
|
||||
# Download site
|
||||
site_temp.download(blind_includes=True).join(timeout=5)
|
||||
|
||||
# Download optional data/optional.txt
|
||||
site.storage.verifyFiles(quick_check=True) # Find what optional files we have
|
||||
optional_file_info = site_temp.content_manager.getFileInfo("data/optional.txt")
|
||||
assert site.content_manager.hashfield.hasHash(optional_file_info["sha512"])
|
||||
assert not site_temp.content_manager.hashfield.hasHash(optional_file_info["sha512"])
|
||||
|
||||
assert not site_temp.storage.isFile("data/optional.txt")
|
||||
assert site.storage.isFile("data/optional.txt")
|
||||
site_temp.needFile("data/optional.txt")
|
||||
|
@ -59,6 +92,7 @@ class TestSiteDownload:
|
|||
optional_file_info = site_temp.content_manager.getFileInfo(
|
||||
"data/users/1CjfbrbwtP8Y2QjPy12vpTATkUT7oSiPQ9/peanut-butter-jelly-time.gif"
|
||||
)
|
||||
assert site.content_manager.hashfield.hasHash(optional_file_info["sha512"])
|
||||
assert not site_temp.content_manager.hashfield.hasHash(optional_file_info["sha512"])
|
||||
|
||||
site_temp.needFile("data/users/1CjfbrbwtP8Y2QjPy12vpTATkUT7oSiPQ9/peanut-butter-jelly-time.gif")
|
||||
|
@ -66,3 +100,46 @@ class TestSiteDownload:
|
|||
assert site_temp.content_manager.hashfield.hasHash(optional_file_info["sha512"])
|
||||
|
||||
assert site_temp.storage.deleteFiles()
|
||||
[connection.close() for connection in file_server.connections]
|
||||
|
||||
# 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):
|
||||
file_server.ip_incoming = {} # Reset flood protection
|
||||
|
||||
# Init source server
|
||||
site.connection_server = file_server
|
||||
file_server.sites[site.address] = site
|
||||
|
||||
# Init full source server (has optional files)
|
||||
site_full = Site("1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT")
|
||||
file_server_full = FileServer("127.0.0.1", 1546)
|
||||
site_full.connection_server = file_server_full
|
||||
gevent.spawn(lambda: ConnectionServer.start(file_server_full))
|
||||
time.sleep(0) # Port opening
|
||||
file_server_full.sites[site_full.address] = site_full # Add site
|
||||
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
|
||||
assert site_full_peer.updateHashfield() # Update hashfield
|
||||
|
||||
# Init client server
|
||||
site_temp.connection_server = ConnectionServer("127.0.0.1", 1545)
|
||||
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) # Add source server
|
||||
|
||||
# Download normal files
|
||||
site_temp.download(blind_includes=True).join(timeout=5)
|
||||
|
||||
# Download optional data/optional.txt
|
||||
optional_file_info = site_temp.content_manager.getFileInfo("data/optional.txt")
|
||||
assert not site_temp.storage.isFile("data/optional.txt")
|
||||
assert not site.content_manager.hashfield.hasHash(optional_file_info["sha512"]) # Source server don't know he has the file
|
||||
assert site_full_peer.hashfield.hasHash(optional_file_info["sha512"]) # Source full peer on source server has the file
|
||||
assert site_full.content_manager.hashfield.hasHash(optional_file_info["sha512"]) # Source full server he has the file
|
||||
|
||||
with Spy.Spy(FileRequest, "route") as requests:
|
||||
site_temp.needFile("data/optional.txt")
|
||||
print requests
|
||||
|
||||
assert site_temp.storage.deleteFiles()
|
||||
file_server_full.stop()
|
||||
[connection.close() for connection in file_server.connections]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue