Iris Braun

51 papers A 2B 3C 4Misc 1Journal 3Unranked 37
YearRankTypeTitle / Venue / Authors
2025 conf
CSEDU (1)
Florian Stahr, Sebastian Kucharski, Iris Braun, Gregor Damnik
2025 J jnl
CoRR
Sebastian Kucharski, Iris Braun, Gregor Damnik, Matthias Wählisch
2025 conf
SIGCOMM (Posters and Demos)
Arno Uhlig, Iris Braun, Matthias Wählisch
2025 A conf
IMC
Arno Uhlig, Iris Braun, Matthias Wählisch
2025 J jnl
CoRR
Arno Uhlig, Iris Braun, Matthias Wählisch
2025 conf
WiSEE
Anastasia Vöhringer, Marius Feldmann, Iris Braun
2024 conf
CSEDU (2)
Tenshi Hara, Sebastian Kucharski, Iris Braun, Karina Hara
2024 conf
CSEDU (1)
Sebastian Kucharski, Florian Stahr, Iris Braun, Gregor Damnik
2023 B conf
ICALT
Sebastian Kucharski, Iris Braun, Tommy Kubica
2023 conf
CSEDU (2)
Sebastian Kucharski, Gregor Damnik, Florian Stahr, Iris Braun
2023 B conf
EC-TEL
Antje Proske, Hermann Körndle, Kristin Drexler, Julia Kirsten, Klara Schröder, Sebastian Kucharski, Tommy Kubica, Iris Braun
2022 conf
CollabTech
Tommy Kubica, Iris Braun, Alexander Schill
2020 B conf
EC-TEL
Tommy Kubica, Tenshi Hara, Iris Braun, Alexander Schill
2020 conf
CSEE&T
Tommy Kubica, Robert Peine, Iris Braun
2019 conf
CSEDU (2)
Lucas Braeschke, Iris Braun, Felix Kapp, Tenshi Hara
2019 conf
DeLFI
Lucas Braeschke, Iris Braun, Felix Kapp, Tenshi Hara
2018 conf
ELES
Iris Braun, Felix Kapp, Tenshi Hara, Tommy Kubica
2018 conf
CSEDU (1)
Tenshi Hara, Anastasia Iljassova, Iris Braun, Felix Kapp
2018 conf
CSEDU (1)
Tenshi Hara, Anne Schumacher, Karina Hara, Iris Braun, Felix Kapp, Alexander Schill
2018 conf
TALE
Tenshi Hara, Iris Braun, Felix Kapp, Karina Hara, Matti Leydecker, Alexander Schill
2018 conf
COMPSAC (1)
Iris Braun, Tenshi Hara, Felix Kapp, Lucas Braeschke, Alexander Schill
2017 C conf
CLOSER
Philipp Grubitzsch, Thomas Springer, Tenshi Hara, Iris Braun, Alexander Schill
2017 conf
DeLFI/GMW Workshops
Iris Braun, Felix Kapp, Tenshi Hara, Tommy Kubica, Alexander Schill
2017 conf
DeLFI
Tommy Kubica, Tenshi Hara, Iris Braun, Felix Kapp, Alexander Schill
2017 conf
CSEDU (1)
Tenshi Hara, Kaijun Chen, Iris Braun, Felix Kapp
2017 C conf
FIE
Tommy Kubica, Tenshi Hara, Iris Braun, Felix Kapp, Alexander Schill
2017 conf
ICIOT
Philipp Grubitzsch, Iris Braun, Heiko Fichtl, Thomas Springer, Tenshi Hara, Alexander Schill
2016 conf
CSEDU (2)
Felix Kapp, Iris Braun, Tenshi Hara
2016 conf
GI-Jahrestagung
Iris Braun, Felix Kapp, Tenshi Hara, Frank Siegert
2016 conf
IFIPTM
Jörg Kebbedies, Felix Kluge, Iris Braun, Alexander Schill
2015 conf
CSEDU (2)
Tenshi Hara, Felix Kapp, Iris Braun, Alexander Schill
2015 Misc conf
UCC
Jörg Kebbedies, Josef Spillner, Iris Braun, Alexander Schill
2015 conf
GeNeMe
Iris Braun, Felix Kapp, Hermann Körndle, Alexander Schill
2014 conf
CSEDU (3)
Felix Kapp, Iris Braun, Hermann Körndle, Alexander Schill
2014 conf
GeNeMe
Lars Beier, Iris Braun, Tenshi Hara
2010 conf
GI Jahrestagung (1)
Josef Spillner, Anne Kümpel, Iris Braun, Alexander Schill
2009 conf
MAI@DisCoTec
Josef Spillner, Iris Braun, Alexander Schill
2009 A conf
ICWS
Anja Strunk, Iris Braun, Sandro Reichert, Alexander Schill
2009 conf
ICSOFT (2)
Josef Spillner, Iris Braun, Alexander Schill
2009 conf
ICSOFT (Selected Papers)
Josef Spillner, Iris Braun, Alexander Schill
2008 C conf
UIC
Thomas Springer, Patrick Wustmann, Iris Braun, Waltenegus Dargie, Michael Berger
2008 conf
Middleware (Companion)
Thomas Springer, Daniel Schuster, Iris Braun, Jordan Janeiro, Markus Endler, Antonio Alfredo Ferreira Loureiro
2008 conf
ServiceWave
Josef Spillner, Marius Feldmann, Iris Braun, Thomas Springer, Alexander Schill
2008 J jnl
Prax. Inf.verarb. Kommun.
Iris Braun, Sandro Reichert, Josef Spillner, Anja Strunk, Alexander Schill
2007 conf
ICEIS (5)
Josef Spillner, Iris Braun, Alexander Schill
2006 C conf
DAIS
Josef Spillner, Iris Braun, Alexander Schill
2005 conf
IMSA
Iris Braun, Alexander Schill
2005
Iris Braun
2005 conf
GeNeMe
Diana Ruth, Alexander Lorz, Iris Braun
2002 conf
Information Systems: The e-Business Challenge
Ulf Zschuckelt, Iris Braun, Alexander Schill
2001 conf
WebNet
Iris Braun, Ulf Zschuckelt
tests/unit/test_extractor_registry.py
← Index tests/unit/test_extractor_registry.py python
"""
Unit tests for the extractor registry (redb/extractor_registry.py).

Verifies that all file-type groups load correctly, return the expected
extractors, and that lookup/filtering logic works as intended.
"""
import pytest

from redb.extractor_registry import (
    get_filetype_modules,
    get_extractor_class,
    FILETYPE_TO_GROUP,
    _REGISTRY,
)

pytestmark = [pytest.mark.unit]


# ============================================================================
# get_filetype_modules — group loading
# ============================================================================

class TestGetFiletypeModules:

    @pytest.mark.parametrize("filetype,expected_names", [
        ("pebin", [
            "PEFeaturesExtractor", "PEImportExtractor", "PEResourceExtractor",
            "PEOverlayExtractor", "PESectionExtractor", "PESignatureExtractor",
            "PEExtraFindings", "PEInconstistencyTestsExtractor", "PEDotNetExtractor",
        ]),
        ("elf", [
            "ELFFeaturesExtractor", "ELFSegmentExtractor", "ELFSectionExtractor",
            "ELFDependencyExtractor", "ELFSymbolExtractor", "ELFImportExtractor",
            "ELFExportExtractor", "ELFRelocationExtractor", "ELFNotesExtractor",
        ]),
        ("macho", [
            "MachOFeaturesExtractor", "MachOSegmentExtractor",
            "MachOImportExtractor", "MachOExportExtractor",
            "MachODylibExtractor", "MachOSignatureExtractor",
        ]),
        ("apk", [
            "APKFeaturesExtractor", "APKManifestExtractor",
            "APKPermissionsExtractor", "APKSignatureExtractor",
            "APKDexExtractor", "APKResourceExtractor",
            "APKNativeLibExtractor", "APKInconsistencyTestsExtractor",
        ]),
    ])
    def test_loads_all_extractors_for_filetype(self, filetype, expected_names):
        """Each filetype group should return all its registered extractors."""
        modules = get_filetype_modules(filetype)
        names = [m.__name__ for m in modules]
        for expected in expected_names:
            assert expected in names, f"{expected} missing from {filetype} modules"

    def test_apk_excludes_decompilers(self):
        """get_filetype_modules should not include DecompileAPK."""
        modules = get_filetype_modules("apk")
        names = [m.__name__ for m in modules]
        assert "DecompileAPK" not in names

    def test_unknown_filetype_returns_empty(self):
        """An unrecognized filetype should return an empty list."""
        assert get_filetype_modules("unknown_format") == []

    def test_returned_classes_are_callable(self):
        """All returned extractor classes should be callable (i.e., actual classes)."""
        for filetype in FILETYPE_TO_GROUP:
            for cls in get_filetype_modules(filetype):
                assert callable(cls), f"{cls} is not callable"


# ============================================================================
# get_extractor_class — single lookup
# ============================================================================

class TestGetExtractorClass:

    def test_finds_pe_extractor(self):
        cls = get_extractor_class("PEFeaturesExtractor")
        assert cls is not None
        assert cls.__name__ == "PEFeaturesExtractor"

    def test_finds_elf_extractor(self):
        cls = get_extractor_class("ELFSectionExtractor")
        assert cls is not None
        assert cls.__name__ == "ELFSectionExtractor"

    def test_finds_macho_extractor(self):
        cls = get_extractor_class("MachOSignatureExtractor")
        assert cls is not None
        assert cls.__name__ == "MachOSignatureExtractor"

    def test_finds_apk_extractor(self):
        cls = get_extractor_class("APKDexExtractor")
        assert cls is not None
        assert cls.__name__ == "APKDexExtractor"

    def test_finds_decompile_apk(self):
        cls = get_extractor_class("DecompileAPK")
        assert cls is not None
        assert cls.__name__ == "DecompileAPK"

    def test_returns_none_for_unknown(self):
        assert get_extractor_class("NonExistentExtractor") is None


# ============================================================================
# Registry completeness
# ============================================================================

class TestRegistryCompleteness:

    def test_all_filetypes_have_registry_group(self):
        """Every filetype in FILETYPE_TO_GROUP should map to a valid registry group."""
        for filetype, group in FILETYPE_TO_GROUP.items():
            assert group in _REGISTRY, f"filetype {filetype} maps to unknown group {group}"

    def test_all_registry_groups_are_reachable(self):
        """Every registry group should be reachable via at least one filetype."""
        reachable = set(FILETYPE_TO_GROUP.values())
        for group in _REGISTRY:
            assert group in reachable, f"registry group {group} has no filetype mapping"


# ============================================================================
# Integration with workers.get_module_by_name
# ============================================================================

class TestWorkersGetModuleByName:

    def test_resolves_common_extractor(self):
        from redb.workers import get_module_by_name
        cls = get_module_by_name("BasicPropertiesExtractor")
        assert cls is not None
        assert cls.__name__ == "BasicPropertiesExtractor"

    def test_resolves_type_specific_extractor(self):
        from redb.workers import get_module_by_name
        cls = get_module_by_name("PEFeaturesExtractor")
        assert cls is not None
        assert cls.__name__ == "PEFeaturesExtractor"

    def test_resolves_decompile_apk(self):
        from redb.workers import get_module_by_name
        cls = get_module_by_name("DecompileAPK")
        assert cls is not None

    def test_returns_none_for_unknown(self):
        from redb.workers import get_module_by_name
        assert get_module_by_name("BogusExtractor") is None