def test_configuration(fs, monkeypatch): env = { 'SERVICE1_SERVICE_NAME': 'group1', 'SERVICE2_SERVICE_NAME': 'group1', 'SERVICE3_SERVICE_NAME': 'group2', 'SERVICE1_PORTS': '80:80', 'SERVICE2_PORTS': '81:80,82:8000', 'SERVICE3_PORTS': '80:unix://unix.socket', } monkeypatch.setattr(os, 'environ', env) monkeypatch.setattr(os, 'fchmod', lambda x, y: None) key, onion_url = get_key_and_onion() torrc_tpl = get_torrc_template() fs.CreateFile('/var/local/tor/torrc.tpl', contents=torrc_tpl) fs.CreateFile('/etc/tor/torrc') onion = Onions() onion._get_setup_from_env() onion.apply_conf() with open('/etc/tor/torrc', 'r') as f: torrc = f.read() assert 'HiddenServiceDir /var/lib/tor/hidden_service/group1' in torrc assert 'HiddenServicePort 80 service1:80' in torrc assert 'HiddenServicePort 81 service2:80' in torrc assert 'HiddenServicePort 82 service2:8000' in torrc assert 'HiddenServiceDir /var/lib/tor/hidden_service/group2' in torrc assert 'HiddenServicePort 80 unix://unix.socket' in torrc # Check parser onion2 = Onions() onion2.torrc_parser() assert len(onion2.services) == 2 assert set(group.name for group in onion2.services) == set(['group1', 'group2']) for group in onion2.services: if group.name == 'group1': assert len(group.services) == 2 assert set(service.host for service in group.services) == set( ['service1', 'service2']) for service in group.services: if service.host == 'service1': assert len(service.ports) == 1 assert set((port.port_from, port.dest) for port in service.ports) == set([(80, 80)]) if service.host == 'service2': assert len(service.ports) == 2 assert set((port.port_from, port.dest) for port in service.ports) == set([(81, 80), (82, 8000)]) if group.name == 'group2': assert len(group.services) == 1 assert set(service.host for service in group.services) == set(['group2']) service = group.services[0] assert len(service.ports) == 1 assert set( (port.port_from, port.dest) for port in service.ports) == set([(80, 'unix://unix.socket')])
def test_configuration(fs, monkeypatch, tmpdir): extra_options = """ HiddenServiceNonAnonymousMode 1 HiddenServiceSingleHopMode 1 """.strip() env = { "SERVICE1_SERVICE_NAME": "group1", "SERVICE2_SERVICE_NAME": "group1", "SERVICE3_SERVICE_NAME": "group2", "SERVICE1_PORTS": "80:80", "SERVICE2_PORTS": "81:80,82:8000", "SERVICE3_PORTS": "80:unix://unix.socket", "GROUP3_TOR_SERVICE_VERSION": "2", "GROUP3_TOR_SERVICE_HOSTS": "80:service4:888,81:service5:8080", "GROUP4_TOR_SERVICE_VERSION": "3", "GROUP4_TOR_SERVICE_HOSTS": "81:unix://unix2.sock", "GROUP3V3_TOR_SERVICE_VERSION": "3", "GROUP3V3_TOR_SERVICE_HOSTS": "80:service4:888,81:service5:8080", "SERVICE5_TOR_SERVICE_HOSTS": "80:service5:80", "TOR_EXTRA_OPTIONS": extra_options, } hidden_dir = "/var/lib/tor/hidden_service" monkeypatch.setattr(os, "environ", env) monkeypatch.setattr(os, "fchmod", lambda x, y: None) torrc_tpl = get_torrc_template() fs.create_file("/var/local/tor/torrc.tpl", contents=torrc_tpl) fs.create_file("/etc/tor/torrc") fs.create_dir(hidden_dir) onion = Onions() onion._get_setup_from_env() onion._load_keys_in_services() onion.apply_conf() onions_urls = {} for dir in os.listdir(hidden_dir): with open(os.path.join(hidden_dir, dir, "hostname"), "r") as f: onions_urls[dir] = f.read().strip() with open("/etc/tor/torrc", "r") as f: torrc = f.read() print(torrc) assert "HiddenServiceDir /var/lib/tor/hidden_service/group1" in torrc assert "HiddenServicePort 80 service1:80" in torrc assert "HiddenServicePort 81 service2:80" in torrc assert "HiddenServicePort 82 service2:8000" in torrc assert "HiddenServiceDir /var/lib/tor/hidden_service/group2" in torrc assert "HiddenServicePort 80 unix://unix.socket" in torrc assert "HiddenServiceDir /var/lib/tor/hidden_service/group3" in torrc assert "HiddenServiceDir /var/lib/tor/hidden_service/group4" in torrc assert "HiddenServiceDir /var/lib/tor/hidden_service/group3v3" in torrc assert "HiddenServiceDir /var/lib/tor/hidden_service/service5" in torrc assert torrc.count("HiddenServicePort 80 service4:888") == 2 assert torrc.count("HiddenServicePort 81 service5:8080") == 2 assert torrc.count("HiddenServicePort 80 service5:80") == 1 assert torrc.count("HiddenServicePort 81 unix://unix2.sock") == 1 assert torrc.count("HiddenServiceVersion 3") == 2 assert "HiddenServiceNonAnonymousMode 1\n" in torrc assert "HiddenServiceSingleHopMode 1\n" in torrc assert "ControlPort" not in torrc # Check parser onion2 = Onions() onion2.torrc_parser() assert len(onion2.services) == 6 assert set( group.name for group in onion2.services # ) == set(['group1', 'group2']) ) == set(["group1", "group2", "group3", "group4", "group3v3", "service5"]) for group in onion2.services: if group.name == "group1": assert len(group.services) == 2 assert group.version == 2 assert group.onion_url == onions_urls[group.name] assert set(service.host for service in group.services) == set( ["service1", "service2"]) for service in group.services: if service.host == "service1": assert len(service.ports) == 1 assert set((port.port_from, port.dest) for port in service.ports) == set([(80, 80)]) if service.host == "service2": assert len(service.ports) == 2 assert set((port.port_from, port.dest) for port in service.ports) == set([(81, 80), (82, 8000)]) if group.name == "group2": assert len(group.services) == 1 assert group.version == 2 assert group.onion_url == onions_urls[group.name] assert set(service.host for service in group.services) == set(["group2"]) service = group.services[0] assert len(service.ports) == 1 assert set( (port.port_from, port.dest) for port in service.ports) == set([(80, "unix://unix.socket")]) if group.name in ["group3", "group3v3"]: assert len(group.services) == 2 assert group.version == 2 if group.name == "group3" else 3 assert group.onion_url == onions_urls[group.name] assert set(service.host for service in group.services) == set( ["service4", "service5"]) for service in group.services: if service.host == "service4": assert len(service.ports) == 1 assert set((port.port_from, port.dest) for port in service.ports) == set([(80, 888)]) if service.host == "service5": assert len(service.ports) == 1 assert set((port.port_from, port.dest) for port in service.ports) == set([(81, 8080)]) if group.name == "group4": assert len(group.services) == 1 assert group.version == 3 assert group.onion_url == onions_urls[group.name] assert set(service.host for service in group.services) == set(["group4"]) for service in group.services: assert service.host == "group4" assert len(service.ports) == 1 assert set((port.port_from, port.dest) for port in service.ports) == set([ (81, "unix://unix2.sock") ]) if group.name == "service5": assert len(group.services) == 1 assert group.version == 2 assert group.onion_url == onions_urls[group.name] assert set(service.host for service in group.services) == set(["service5"]) for service in group.services: assert service.host == "service5" assert len(service.ports) == 1 assert set((port.port_from, port.dest) for port in service.ports) == set([(80, 80)]) # bug with fakefs, test everything in the same function env = { "TOR_CONTROL_PORT": "172.0.1.0:7867", "TOR_CONTROL_PASSWORD": "******", } def mock_hash(self, password): self.control_hashed_password = "******" monkeypatch.setattr(os, "environ", env) monkeypatch.setattr(Onions, "_hash_control_port_password", mock_hash) onion = Onions() onion._setup_control_port() onion.apply_conf() with open("/etc/tor/torrc", "r") as f: torrc = f.read() print(torrc) assert "ControlPort 172.0.1.0:7867" in torrc assert f"HashedControlPassword {onion.control_hashed_password}" in torrc env = { "TOR_CONTROL_PORT": "unix:/path/to.socket", } monkeypatch.setattr(os, "environ", env) torrc_tpl = get_torrc_template() onion = Onions() onion._setup_control_port() onion.apply_conf() with open("/etc/tor/torrc", "r") as f: torrc = f.read() print(torrc) assert "ControlPort unix:/path/to.socket" in torrc
def test_configuration(fs, monkeypatch, tmpdir): env = { 'SERVICE1_SERVICE_NAME': 'group1', 'SERVICE2_SERVICE_NAME': 'group1', 'SERVICE3_SERVICE_NAME': 'group2', 'SERVICE1_PORTS': '80:80', 'SERVICE2_PORTS': '81:80,82:8000', 'SERVICE3_PORTS': '80:unix://unix.socket', 'GROUP3_TOR_SERVICE_VERSION': '2', 'GROUP3_TOR_SERVICE_HOSTS': '80:service4:888,81:service5:8080', 'GROUP4_TOR_SERVICE_VERSION': '3', 'GROUP4_TOR_SERVICE_HOSTS': '81:unix://unix2.sock', 'GROUP3V3_TOR_SERVICE_VERSION': '3', 'GROUP3V3_TOR_SERVICE_HOSTS': '80:service4:888,81:service5:8080', 'SERVICE5_TOR_SERVICE_HOSTS': '80:service5:80' } hidden_dir = '/var/lib/tor/hidden_service' monkeypatch.setattr(os, 'environ', env) monkeypatch.setattr(os, 'fchmod', lambda x, y: None) torrc_tpl = get_torrc_template() fs.create_file('/var/local/tor/torrc.tpl', contents=torrc_tpl) fs.create_file('/etc/tor/torrc') fs.create_dir(hidden_dir) onion = Onions() onion._get_setup_from_env() onion._load_keys_in_services() onion.apply_conf() onions_urls = {} for dir in os.listdir(hidden_dir): with open(os.path.join(hidden_dir, dir, 'hostname'), 'r') as f: onions_urls[dir] = f.read().strip() with open('/etc/tor/torrc', 'r') as f: torrc = f.read() print(torrc) assert 'HiddenServiceDir /var/lib/tor/hidden_service/group1' in torrc assert 'HiddenServicePort 80 service1:80' in torrc assert 'HiddenServicePort 81 service2:80' in torrc assert 'HiddenServicePort 82 service2:8000' in torrc assert 'HiddenServiceDir /var/lib/tor/hidden_service/group2' in torrc assert 'HiddenServicePort 80 unix://unix.socket' in torrc assert 'HiddenServiceDir /var/lib/tor/hidden_service/group3' in torrc assert 'HiddenServiceDir /var/lib/tor/hidden_service/group4' in torrc assert 'HiddenServiceDir /var/lib/tor/hidden_service/group3v3' in torrc assert 'HiddenServiceDir /var/lib/tor/hidden_service/service5' in torrc assert torrc.count('HiddenServicePort 80 service4:888') == 2 assert torrc.count('HiddenServicePort 81 service5:8080') == 2 assert torrc.count('HiddenServicePort 80 service5:80') == 1 assert torrc.count('HiddenServicePort 81 unix://unix2.sock') == 1 assert torrc.count('HiddenServiceVersion 3') == 2 # Check parser onion2 = Onions() onion2.torrc_parser() assert len(onion2.services) == 6 assert set( group.name for group in onion2.services # ) == set(['group1', 'group2']) ) == set(['group1', 'group2', 'group3', 'group4', 'group3v3', 'service5']) for group in onion2.services: if group.name == 'group1': assert len(group.services) == 2 assert group.version == 2 assert group.onion_url == onions_urls[group.name] assert set( service.host for service in group.services ) == set(['service1', 'service2']) for service in group.services: if service.host == 'service1': assert len(service.ports) == 1 assert set( (port.port_from, port.dest) for port in service.ports ) == set([(80, 80)]) if service.host == 'service2': assert len(service.ports) == 2 assert set( (port.port_from, port.dest) for port in service.ports ) == set([(81, 80), (82, 8000)]) if group.name == 'group2': assert len(group.services) == 1 assert group.version == 2 assert group.onion_url == onions_urls[group.name] assert set( service.host for service in group.services ) == set(['group2']) service = group.services[0] assert len(service.ports) == 1 assert set( (port.port_from, port.dest) for port in service.ports ) == set([(80, 'unix://unix.socket')]) if group.name in ['group3', 'group3v3']: assert len(group.services) == 2 assert group.version == 2 if group.name == 'group3' else 3 assert group.onion_url == onions_urls[group.name] assert set( service.host for service in group.services ) == set(['service4', 'service5']) for service in group.services: if service.host == 'service4': assert len(service.ports) == 1 assert set( (port.port_from, port.dest) for port in service.ports ) == set([(80, 888)]) if service.host == 'service5': assert len(service.ports) == 1 assert set( (port.port_from, port.dest) for port in service.ports ) == set([(81, 8080)]) if group.name == 'group4': assert len(group.services) == 1 assert group.version == 3 assert group.onion_url == onions_urls[group.name] assert set( service.host for service in group.services ) == set(['group4']) for service in group.services: assert service.host == 'group4' assert len(service.ports) == 1 assert set( (port.port_from, port.dest) for port in service.ports ) == set([(81, 'unix://unix2.sock')]) if group.name == 'service5': assert len(group.services) == 1 assert group.version == 2 assert group.onion_url == onions_urls[group.name] assert set( service.host for service in group.services ) == set(['service5']) for service in group.services: assert service.host == 'service5' assert len(service.ports) == 1 assert set( (port.port_from, port.dest) for port in service.ports ) == set([(80, 80)])