Changeset - b022997ba96d
[Not reviewed]
default
0 2 0
Laman - 7 years ago 2017-11-02 21:49:54

more on server denying connection
2 files changed with 42 insertions and 9 deletions:
0 comments (0 inline, 0 general)
src/server.py
Show inline comments
 
@@ -33,11 +33,17 @@ class Miniserver:
 
		self._ss.listen(1)
 

	
 
	def serve(self):
 
		while True:
 
			with Connection(self._ss,self._ssl) as c:
 
				p=multiprocessing.Process(target=Server.run,args=(c,self._filename,self._treeFile))
 
		p=None
 
		with self._ss:
 
			while True:
 
				connection=Connection(self._ss,self._ssl)
 
				if p and p.is_alive():
 
					with connection as c:
 
						c[0].readMsg()
 
						c[1].writeMsg({"command":"deny"})
 
					continue
 
				p=multiprocessing.Process(target=Server.run,args=(connection,self._filename,self._treeFile))
 
				p.start()
 
				p.join()
 

	
 

	
 
class Server(NetNode):
 
@@ -51,9 +57,10 @@ class Server(NetNode):
 
		self._dataFileHandle=None
 

	
 
	@staticmethod
 
	def run(*args):
 
		s=Server(*args)
 
		s.serve()
 
	def run(connection,*args):
 
		with connection as c:
 
			s=Server(c,*args)
 
			s.serve()
 

	
 
	@property
 
	def _dataFile(self):
 
@@ -75,6 +82,8 @@ class Server(NetNode):
 
				self._outcoming.writeMsg({"command":"deny"})
 
			if jsonData["action"]=="pull" and self.isLocked():
 
				self._outcoming.writeMsg({"command":"deny"})
 
			if jsonData["action"]=="push" and not self.isLocked():
 
				self._lock()
 

	
 
			self._outcoming.writeMsg({"command":"init", "version":conf.version})
 

	
src/tests/test_overall.py
Show inline comments
 
import os
 
import sys
 
import shutil
 
import hashlib
 
import multiprocessing
 
@@ -8,7 +7,7 @@ from unittest import TestCase
 

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

	
 
@@ -56,6 +55,7 @@ class TestMorevna(RedirectedOutput,TestC
 
		os.remove(treeFile)
 

	
 
	def test_push(self):
 
		config.port+=1
 
		ms=Miniserver(filename)
 
		p=multiprocessing.Process(target=ms.serve)
 
		p.start()
 
@@ -65,6 +65,7 @@ class TestMorevna(RedirectedOutput,TestC
 
			c=Client(clientFile)
 
			with ClientConnection("127.0.0.1",config.port) as con:
 
				c.setConnection(con)
 
				c.init("push")
 
				blocksToTransfer=c.negotiate()
 
				c.sendData(blocksToTransfer)
 

	
 
@@ -74,6 +75,7 @@ class TestMorevna(RedirectedOutput,TestC
 
		p.join()
 

	
 
	def test_pull(self):
 
		config.port+=1
 
		serverFile=os.path.join(dataDir,"test3.img")
 
		ms=Miniserver(serverFile)
 
		p=multiprocessing.Process(target=ms.serve)
 
@@ -82,6 +84,7 @@ class TestMorevna(RedirectedOutput,TestC
 
		c=Client(filename)
 
		with ClientConnection("127.0.0.1",config.port) as con:
 
			c.setConnection(con)
 
			c.init("pull")
 
			blocksToTransfer=c.negotiate()
 
			c.pullData(blocksToTransfer)
 

	
 
@@ -89,3 +92,24 @@ class TestMorevna(RedirectedOutput,TestC
 

	
 
		p.terminate()
 
		p.join()
 

	
 
	def test_deny(self):
 
		config.port+=1
 
		ms=Miniserver(filename)
 
		p=multiprocessing.Process(target=ms.serve)
 
		p.start()
 

	
 
		c1=Client(os.path.join(dataDir,"test2.img"))
 
		with ClientConnection("127.0.0.1",config.port) as con1:
 
			c1.setConnection(con1)
 
			c1.init("push")
 

	
 
			c2=Client(os.path.join(dataDir,"test3.img"))
 
			with ClientConnection("127.0.0.1",config.port) as con2:
 
				c2.setConnection(con2)
 
				with self.assertRaises(DeniedConnection):
 
					c2.init("push")
 
			c1.sendData([]) # to unlock the server
 

	
 
		p.terminate()
 
		p.join()
0 comments (0 inline, 0 general)