A test case for incoming connection, needs debugging

This commit is contained in:
Lee Miller 2023-07-26 05:31:13 +03:00
parent 5804d2b2db
commit dba3e318f3
Signed by: lee.miller
GPG Key ID: 4F97A5EA88F4AB63

View File

@ -1,12 +1,18 @@
import unittest import unittest
import os
import shutil
import signal import signal
import subprocess import subprocess
import sys import sys
import tempfile import tempfile
import threading
import time import time
import psutil import psutil
from minode import shared
from minode.main import main as app
class TestProcessProto(unittest.TestCase): class TestProcessProto(unittest.TestCase):
"""Test process attributes, common flow""" """Test process attributes, common flow"""
@ -18,18 +24,23 @@ class TestProcessProto(unittest.TestCase):
home = None home = None
@classmethod @classmethod
def setUpClass(cls): def _build_app_args(cls, extra=None):
if not cls.home: if not cls.home:
cls.home = tempfile.gettempdir() cls.home = tempfile.gettempdir()
cmd = cls._process_cmd + [ args = cls._process_cmd + [
'--data-dir', cls.home, '--data-dir', cls.home,
'--connection-limit', str(cls._connection_limit) '--connection-limit', str(cls._connection_limit)
] ]
if not cls._listen: if not cls._listen:
cmd += ['--no-incoming'] args += ['--no-incoming']
elif cls._listening_port: elif cls._listening_port:
cmd += ['-p', str(cls._listening_port)] args += ['-p', str(cls._listening_port)]
cls.process = psutil.Popen(cmd, stderr=subprocess.STDOUT) # nosec
if extra:
args += extra
print('ARGS: %r' % args)
return args
@classmethod @classmethod
def _stop_process(cls, timeout=5): def _stop_process(cls, timeout=5):
@ -40,6 +51,11 @@ class TestProcessProto(unittest.TestCase):
return False return False
return True return True
@classmethod
def setUpClass(cls):
cmd = cls._build_app_args()
cls.process = psutil.Popen(cmd, stderr=subprocess.STDOUT) # nosec
@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
"""Ensures the process is stopped and removes files""" """Ensures the process is stopped and removes files"""
@ -112,3 +128,41 @@ class TestProcess(TestProcessProto):
else: else:
if self._listen: if self._listen:
self.fail('No listening connection found') self.fail('No listening connection found')
class TestConnectivity(TestProcessProto):
"""Check connectivity between instances"""
_process_cmd = [
'minode', '--trusted-peer', '127.0.0.1:8445']
# _listen = True
@classmethod
def setUpClass(cls):
super(TestConnectivity, cls).setUpClass()
cls._listen = True
cls._listening_port = 8445
cls.home = os.path.join(cls.home, 'client')
os.mkdir(cls.home)
# sys.argv = cls._build_app_args(['--trusted-peer', '127.0.0.1:8444'])
cls._process_cmd = ['minode', '--no-outgoing']
sys.argv = cls._build_app_args()
cls.app = threading.Thread(name="minode", target=app, daemon=True)
cls.app.start()
@classmethod
def tearDownClass(cls):
super(TestConnectivity, cls).tearDownClass()
shared.shutting_down = True
shutil.rmtree(cls.home)
def test_connections(self):
"""Check the connection with trusted peer"""
time.sleep(5)
for t in range(10):
time.sleep(1)
connection_count = len([
c for c in shared.connections.copy()
if c.status == 'fully_established'])
if connection_count != 1:
self.fail("Unexpected connection count: %i" % connection_count)