def test_port_free(): upnp = InMemoryUPnP('1.1.1.1', '2.2.2.2') mapper = UpnpPortMapper(upnp) mapper.add_mapping(80, 80, 'TCP') assert len(upnp.mappings) == 1 assert upnp.mappings[0].external_port == 80 assert upnp.mappings[0].local_ip == upnp.lanaddr
def test_fail_to_remove(): upnp = InMemoryUPnP('1.1.1.1', '2.2.2.2') upnp.mappings = [Mapping(80, 'TCP', '2.2.2.2', 80, '', True, '1.1.1.1', '')] upnp.fail_on_external_port_with(80, Exception('Failed')) mapper = UpnpPortMapper(upnp) mapper.remove_mapping(80, 80, 'TCP') assert len(upnp.mappings) == 1
def test_above_limit_fail_attempts(): upnp = InMemoryUPnP('1.1.1.1', '2.2.2.2') for port in range(1, 51, 1): upnp.fail_on_external_port_with(port, Exception('Failed')) mapper = UpnpPortMapper(upnp) with pytest.raises(Exception) as context: mapper.add_mapping(1, 1, 'TCP') assert 'Unable' in context.value.message assert len(upnp.mappings) == 0
def test_fail_to_add(): upnp = InMemoryUPnP('1.1.1.1', '2.2.2.2') upnp.fail_on_external_port_with(80, Exception('Failed')) mapper = UpnpPortMapper(upnp) mapper.add_mapping(80, 80, 'TCP') assert len(upnp.mappings) == 1 assert upnp.by_external_port(81).local_port == 80 assert upnp.by_external_port(81).local_ip == '2.2.2.2'
def test_below_limit_fail_attempts(): upnp = InMemoryUPnP('1.1.1.1', '2.2.2.2') for port in range(1, 50, 1): upnp.fail_on_external_port_with(port, Exception('Failed')) mapper = UpnpPortMapper(upnp) mapper.add_mapping(1, 1, 'TCP') assert len(upnp.mappings) == 1 assert upnp.by_external_port(50).local_port == 1 assert upnp.by_external_port(50).local_ip == '2.2.2.2'
def test_port_taken(): upnp = InMemoryUPnP('1.1.1.1', '2.2.2.2') upnp.mappings = [Mapping(80, 'TCP', '3.3.3.3', 80, '', True, '1.1.1.1', '')] mapper = UpnpPortMapper(upnp) mapper.add_mapping(80, 80, 'TCP') assert len(upnp.mappings) == 2 assert upnp.by_external_port(80).local_port == 80 assert upnp.by_external_port(80).local_ip == '3.3.3.3' assert upnp.by_external_port(81).local_port == 80 assert upnp.by_external_port(81).local_ip == '2.2.2.2'
def test_multiple_external_ports_with_preferred_cleanup(): upnp = InMemoryUPnP('1.1.1.1', '2.2.2.2') upnp.mappings = [ Mapping(80, 'TCP', '2.2.2.2', 80, '', True, '1.1.1.1', ''), Mapping(81, 'TCP', '2.2.2.2', 80, '', True, '1.1.1.1', '') ] mapper = UpnpPortMapper(upnp, lower_limit=80) mapper.add_mapping(80, 80, 'TCP') assert len(upnp.mappings) == 1 assert upnp.by_external_port(80).local_port == 80 assert upnp.by_external_port(80).local_ip == '2.2.2.2'
def test_port_taken(): upnp = InMemoryUPnP('1.1.1.1', '2.2.2.2') upnp.mappings = [ Mapping(80, 'TCP', '3.3.3.3', 80, '', True, '1.1.1.1', '') ] mapper = UpnpPortMapper(upnp) mapper.add_mapping(80, 80, 'TCP') assert len(upnp.mappings) == 2 assert upnp.by_external_port(80).local_port == 80 assert upnp.by_external_port(80).local_ip == '3.3.3.3' assert upnp.by_external_port(81).local_port == 80 assert upnp.by_external_port(81).local_ip == '2.2.2.2'
def __init__(self, debug=False, config_dir=None): self.platform_config = PlatformConfig(config_dir=config_dir) if not logger.factory_instance: console = True if debug else False level = logging.DEBUG if debug else logging.INFO logger.init(level, console, join(self.platform_config.get_platform_log())) self.user_platform_config = PlatformUserConfig(self.platform_config.get_user_config()) self.log_aggregator = Aggregator(self.platform_config) self.platform_app_paths = AppPaths(PLATFORM_APP_NAME, self.platform_config) self.platform_app_paths.get_data_dir() self.versions = Versions(self.platform_config) self.redirect_service = RedirectService(self.user_platform_config, self.versions) self.port_config = PortConfig(self.platform_app_paths.get_data_dir()) self.nat_pmp_port_mapper = NatPmpPortMapper() self.upnp_port_mapper = UpnpPortMapper(UPnP()) self.port_mapper_factory = PortMapperFactory(self.nat_pmp_port_mapper, self.upnp_port_mapper) self.port_drill_factory = PortDrillFactory(self.user_platform_config, self.port_config, self.port_mapper_factory) self.device_info = DeviceInfo(self.user_platform_config, self.port_config) if self.platform_config.get_installer() == 'sam': self.sam = SamStub(self.platform_config, self.device_info) else: self.sam = Snap(self.platform_config, self.device_info) self.platform_cron = PlatformCron(self.platform_config) self.systemctl = Systemctl(self.platform_config) self.ldap_auth = LdapAuth(self.platform_config, self.systemctl) self.event_trigger = EventTrigger(self.sam, self.platform_config) self.nginx = Nginx(self.platform_config, self.systemctl, self.device_info) self.certbot_genetator = CertbotGenerator(self.platform_config, self.user_platform_config, self.device_info, self.sam) self.tls = CertificateGenerator(self.platform_config, self.user_platform_config, self.device_info, self.nginx, self.certbot_genetator) self.device = Device(self.platform_config, self.user_platform_config, self.redirect_service, self.port_drill_factory, self.sam, self.platform_cron, self.ldap_auth, self.event_trigger, self.tls, self.nginx) self.internal = Internal(self.platform_config, self.device, self.redirect_service, self.log_aggregator) self.path_checker = PathChecker(self.platform_config) self.lsblk = Lsblk(self.platform_config, self.path_checker) self.hardware = Hardware(self.platform_config, self.event_trigger, self.lsblk, self.path_checker, self.systemctl) self.network = Network() self.public = Public(self.platform_config, self.user_platform_config, self.device, self.device_info, self.sam, self.hardware, self.redirect_service, self.log_aggregator, self.certbot_genetator, self.port_mapper_factory, self.network, self.port_config) self.udev = Udev(self.platform_config)
def __init__(self, debug=False): self.platform_config = PlatformConfig() if not logger.factory_instance: console = True if debug else False level = logging.DEBUG if debug else logging.INFO logger.init(level, console, join(self.platform_config.get_platform_log())) self.user_platform_config = PlatformUserConfig(self.platform_config.get_user_config()) self.log_aggregator = Aggregator(self.platform_config) self.platform_app_paths = AppPaths(PLATFORM_APP_NAME, self.platform_config) self.platform_app_paths.get_data_dir() self.redirect_service = RedirectService(self.user_platform_config, platform_version) self.port_config = PortConfig(self.platform_app_paths.get_data_dir()) self.nat_pmp_port_mapper = NatPmpPortMapper() self.upnp_port_mapper = UpnpPortMapper(UPnP()) self.port_drill_factory = PortDrillFactory(self.user_platform_config, self.port_config, self.nat_pmp_port_mapper, self.upnp_port_mapper) self.info = DeviceInfo(self.user_platform_config, self.port_config) self.sam = SamStub(self.platform_config, self.info) self.platform_cron = PlatformCron(self.platform_config) self.ldap_auth = LdapAuth(self.platform_config) self.event_trigger = EventTrigger(self.sam) self.nginx = Nginx(self.platform_config) self.tls = Tls(self.platform_config, self.info, self.nginx) self.device = Device(self.platform_config, self.user_platform_config, self.redirect_service, self.port_drill_factory, self.sam, self.platform_cron, self.ldap_auth, self.event_trigger, self.tls) self.internal = Internal(self.platform_config, self.device, self.redirect_service, self.log_aggregator) self.path_checker = PathChecker(self.platform_config) self.lsblk = Lsblk(self.platform_config, self.path_checker) self.hardware = Hardware(self.platform_config, self.event_trigger, self.lsblk, self.path_checker) self.public = Public(self.platform_config, self.user_platform_config, self.device, self.info, self.sam, self.hardware, self.redirect_service, self.log_aggregator) self.udev = Udev(self.platform_config)
def test_many_ports_until_fail(): mapper = UpnpPortMapper(UPnP()) base_port = 11000 for port in range(base_port, base_port + 50, 1): mapper.add_mapping(port, port, 'TCP')
def http_server(request): server = SomeHttpServer(18088) server.start() def fin(): server.stop() request.addfinalizer(fin) return server ids = [] mappers = [] mapper = PortMapperFactory(NatPmpPortMapper(), UpnpPortMapper(UPnP())).provide_mapper() if mapper is not None: ids.append(mapper.name()) mappers.append(mapper) # @pytest.mark.parametrize("mapper", mappers, ids=ids) # def test_external_ip(mapper): # external_ip = mapper.external_ip() # assert external_ip is not None # # # @pytest.mark.parametrize("mapper", mappers, ids=ids) # def test_add_mapping_simple(http_server, mapper): # external_port = mapper.add_mapping(http_server.port, http_server.port, 'TCP') # assert external_port is not None # external_ip = mapper.external_ip()
@pytest.fixture(scope="module") def http_server(request): server = SomeHttpServer(18088) server.start() def fin(): server.stop() request.addfinalizer(fin) return server ids = [] mappers = [] mapper = provide_mapper(NatPmpPortMapper(), UpnpPortMapper(UPnP())) if mapper is not None: ids.append(mapper.name()) mappers.append(mapper) @pytest.mark.parametrize("mapper", mappers, ids=ids) def test_external_ip(mapper): external_ip = mapper.external_ip() assert external_ip is not None @pytest.mark.parametrize("mapper", mappers, ids=ids) def test_add_mapping_simple(http_server, mapper): external_port = mapper.add_mapping(http_server.port, http_server.port, 'TCP') assert external_port is not None