Files @ 2e5828ec7d49
Branch filter:

Location: Morevna/src/tests/test_overall.py - annotation

Laman
fixed order of negotiation to a "batch DFS"
import os
import shutil
import hashlib
import multiprocessing
from unittest import TestCase

import config
from hashtree import HashTree
from client import Client, Connection as ClientConnection
from server import Miniserver


dataDir=os.path.join(config.directory,"src/tests/data")
filename=os.path.join(dataDir,"test.img")


def compareFiles(f1,f2):
	with open(f1,mode="rb") as f:
		h2=hashlib.sha256(f.read()).hexdigest()
	with open(f2,mode="rb") as f:
		h=hashlib.sha256(f.read()).hexdigest()
	return (h,h2)


class TestMorevna(TestCase):
	def setUp(self):
		src=os.path.join(dataDir,"test1.img")
		shutil.copyfile(src,filename)

	@classmethod
	def tearDownClass(cls):
		os.remove(filename)

	def test_build(self):
		treeFile=os.path.join(dataDir,"test.bin")
		refFile=os.path.join(dataDir,"test1.bin")

		tree=HashTree.fromFile(os.path.join(dataDir,"test1.img"))
		tree.save(treeFile)

		self.assertEqual(*compareFiles(refFile,treeFile))

		os.remove(treeFile)

	def test_push(self):
		ms=Miniserver(filename)
		p=multiprocessing.Process(target=ms.serve)
		p.start()

		for clientFile in ("test2.img","test3.img"):
			clientFile=os.path.join(dataDir,clientFile)
			c=Client(clientFile)
			with ClientConnection() as con:
				c.setConnection(con)
				blocksToTransfer=c.negotiate()
				c.sendData(blocksToTransfer)

			self.assertEqual(*compareFiles(clientFile,filename))

		p.terminate()
		p.join()

	def test_pull(self):
		serverFile=os.path.join(dataDir,"test3.img")
		ms=Miniserver(serverFile)
		p=multiprocessing.Process(target=ms.serve)
		p.start()

		c=Client(filename)
		with ClientConnection() as con:
			c.setConnection(con)
			blocksToTransfer=c.negotiate()
			c.pullData(blocksToTransfer)

		self.assertEqual(*compareFiles(serverFile,filename))

		p.terminate()
		p.join()