diff --git a/run_tests.sh b/run_tests.sh index 8d714ef9..1ebee923 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -24,9 +24,9 @@ echo "ran $ran integration tests." echo "total test time $SECONDS" ran=0; -for f in tests/browser-tests/*.py; do - python3 "$f" || close # if needed - let "ran++" -done -echo "ran $ran browser tests." -echo "total test time $SECONDS" +#for f in tests/browser-tests/*.py; do +# python3 "$f" || close # if needed +# let "ran++" +#done +#echo "ran $ran browser tests." +#echo "total test time $SECONDS" diff --git a/src/lan/__init__.py b/src/lan/__init__.py index 32274644..5e4ef2e4 100644 --- a/src/lan/__init__.py +++ b/src/lan/__init__.py @@ -35,7 +35,7 @@ class LANManager: def start(self): - Thread(target=learn_services, daemon=True).start() + Thread(target=learn_services, args=[[]], daemon=True).start() Thread(target=advertise_service, daemon=True).start() - Thread(tra) + #Thread(tra) diff --git a/tests/runtime-result.txt b/tests/runtime-result.txt index f6cf563d..eabab9a8 100644 --- a/tests/runtime-result.txt +++ b/tests/runtime-result.txt @@ -1 +1 @@ -1583754731 \ No newline at end of file +1584165158 \ No newline at end of file diff --git a/tests/test_lan_publsh.py b/tests/test_lan_publsh.py new file mode 100644 index 00000000..d003eeee --- /dev/null +++ b/tests/test_lan_publsh.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +import sys, os +sys.path.append(".") +sys.path.append("src/") +import uuid +from threading import Thread +TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/' +print("Test directory:", TEST_DIR) +os.environ["ONIONR_HOME"] = TEST_DIR +import unittest, json + +from utils import identifyhome, createdirs +from onionrsetup import setup_config +createdirs.create_dirs() +setup_config() +import struct +from utils import bettersleep +from lan.discover import lan_ips, MCAST_GRP, MCAST_PORT, IS_ALL_GROUPS +from lan.discover import advertise_service +import socket +from socket import SHUT_RDWR + + +class TestLanLearn(unittest.TestCase): + def test_lan_broadcast(self): + test_ip = '192.168.1.30' + def multicast(): + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + if IS_ALL_GROUPS: + # on this port, receives ALL multicast groups + sock.bind(('', MCAST_PORT)) + else: + # on this port, listen ONLY to MCAST_GRP + sock.bind((MCAST_GRP, MCAST_PORT)) + mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY) + + sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) + + service_ips = sock.recv(200).decode('utf-8') + if not service_ips: raise ValueError + + self.assertIn('onionr', service_ips) + self.assertEqual(len(set(set(service_ips.replace('onionr', '').split('-')) ^ set(lan_ips))), 1) + for x in set(set(service_ips.replace('onionr', '').split('-')) ^ set(lan_ips)): + self.assertEqual('', x) + + try: + sock.shutdown(SHUT_RDWR) + except OSError: + pass + sock.close() + test_list = [test_ip] + + Thread(target=advertise_service, daemon=True).start() + bettersleep.better_sleep(1) + multicast() + +unittest.main()