예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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
예제 #7
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'
예제 #8
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'
예제 #9
0
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'
예제 #10
0
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'
예제 #11
0
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'
예제 #12
0
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'
예제 #13
0
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'
예제 #14
0
    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)
예제 #15
0
    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)
예제 #16
0
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')
예제 #17
0
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()
예제 #18
0
@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