Ingo J. Timm

127 papers A 1B 3C 7Misc 17Journal 24Unranked 64
YearRankTypeTitle / Venue / Authors
2025 conf
INFORMATIK
Annika Selzer, Ingo J. Timm
2025 conf
ICAART (1)
Veronika Kurchyna, Ye Eun Bae, Jan Ole Berndt, Ingo J. Timm
2025 J jnl
Datenschutz und Datensicherheit (dud)
Annika Selzer, Jan Ole Berndt, Ingo J. Timm
2025 conf
ICAART (3)
Stephanie C. Fendrich, Philipp Flügger, Annegret Janzso, David Kaub, Stefan Klein, Anna Kravets, Patrick Mertes, Nhat Tran, Jan Ole Berndt, Ingo J. Timm
2025 conf
ICAART (1)
Veronika Kurchyna, Philipp Flügger, Ye Eun Bae, Jan Ole Berndt, Ingo J. Timm
2024 conf
SimuTools
Annegret Janzso, David Kaub, Philipp Flügger, Krzysztof Marek Graca, Veronika Kurchyna, Patrick Mertes, Nhat Tran, Jan Ole Berndt, Ingo J. Timm
2024 conf
ICAART (1)
Stephanie C. Rodermund, Annegret Janzso, Ye Eun Bae, Anna Kravets, Alexander Schewerda, Jan Ole Berndt, Ingo J. Timm
2024 conf
HCI (22)
Veronika Kurchyna, Lilian Kojan, Jan Schneider, Bernd Wurpts, Anastasia Golovin, André Calero Valdez, Jan Ole Berndt, Ingo J. Timm
2024 conf
INFORMATIK
Annika Selzer, Ingo J. Timm
2024 conf
ICAART (3)
Veronika Kurchyna, Stephanie C. Rodermund, Ye Eun Bae, Patrick Mertes, Philipp Flügger, Jan Ole Berndt, Ingo J. Timm
2024 conf
LDIC
David Kaub, Christian Lohr, Anelyse Reis David, Monotosch Kumar Das Chandan, Hilal Chanekar, Tung Nguyen, Jan Ole Berndt, Ingo J. Timm
2024 conf
ICAART (Revised Selected Paper, 1)
Stephanie C. Fendrich, Annegret Janzso, Ye Eun Bae, Anna Kravets, Philipp Flügger, Jan Ole Berndt, Ingo J. Timm
2023 J jnl
it Inf. Technol.
Achim Guldner, Maximilian Hoffmann, Christian Lohr, Rüdiger Machhamer, Lukas Malburg, Marlies Morgen, Stephanie C. Rodermund, Florian Schäfer, Lars Schaupeter, Jens Schneider, Felix Theusch, Ralph Bergmann, Guido Dartmann, Norbert Kuhn, Stefan Naumann, Ingo J. Timm, Matthias Vette-Steinkamp, Benjamin Weyers
2023 C conf
MABS
Veronika Kurchyna, Jan Ole Berndt, Ingo J. Timm
2023 conf
GI-Jahrestagung
Annika Selzer, Ingo J. Timm
2023 J jnl
HMD Prax. Wirtsch.
Annika Selzer, Ingo J. Timm
2023 J jnl
CoRR
Rüdiger Machhamer, Lejla Begic Fazlic, Eray Guven, David Junk, Gunes Karabulut-Kurt, Stefan Naumann, Stephan Didas, Klaus-Uwe Gollmer, Ralph Bergmann, Ingo J. Timm, Guido Dartmann
2023 conf
GI-Jahrestagung
Annika Selzer, Ingo J. Timm
2022 conf
GI-Jahrestagung
Annika Selzer, Ingo J. Timm
2022 Misc conf
PAAMS
Alexander Schewerda, Veronika Kurchyna, Jan Ole Berndt, Ingo J. Timm
2022 Misc conf
KI
Veronika Kurchyna, Stephanie C. Rodermund, Jan Ole Berndt, Heike Spaderna, Ingo J. Timm
2022 Misc ed.
KI
Ralph Bergmann, Lukas Malburg, Stephanie C. Rodermund, Ingo J. Timm
2022 conf
AMCIS
Johannes Breitenbach, Daniel Eisenhardt, Thilo Rieg, Hermann Baumgartl, Patrick Sven Ulrich, Ingo J. Timm, Ricardo Buettner
2022 conf
AAMAS Workshops
Lukas Tapp, Veronika Kurchyna, Falco Nogatz, Jan Ole Berndt, Ingo J. Timm
2022 C conf
MABS
Lukas Tapp, Veronika Kurchyna, Falco Nogatz, Jan Ole Berndt, Ingo J. Timm
2021 J jnl
Datenschutz und Datensicherheit
Annika Selzer, Ingo J. Timm
2021 B conf
COMPSAC
Hermann Baumgartl, Dennis Flathau, Samuel Bayerlein, Daniel Sauter, Ingo J. Timm, Ricardo Buettner
2021 J jnl
Datenschutz und Datensicherheit
Annika Selzer, Ingo J. Timm
2020 Misc conf
KI
Lukas Reuter, Jan Ole Berndt, Ingo J. Timm
2020 J jnl
Bus. Inf. Syst. Eng.
Oliver Thomas, Simon Hagen, Ulrich Frank, Jan Recker, Lauri Wessel, Friedemann Kammler, Novica Zarvic, Ingo J. Timm
2020 J jnl
LOG IN
Matthias Klusch, Frithjof Nagel, Ingo J. Timm
2020 conf
HICSS
Ingo J. Timm, Lukas Reuter, Jan Ole Berndt
2020 C conf
ICT4AWE
Fabian Lorig, Colja A. Becker, Daniel S. Lebherz, Stephanie C. Rodermund, Ingo J. Timm
2020 conf
Wirtschaftsinformatik (Zentrale Tracks)
Stephanie C. Rodermund, Ingo J. Timm, Ricardo Buettner
2019 conf
HICSS
Ingo J. Timm, Lukas Reuter, Jan Ole Berndt, Anna-Sophie Ulfert, Thomas Ellwart, Conny H. Antoni
2019 conf
Wirtschaftsinformatik
Fabian Lorig, Ingo J. Timm, Peter Mertens
2019 conf
ISCRAM
Ingo J. Timm, Bernhard Hess, Fabian Lorig
2019 conf
EMoWI@Wirtschaftsinformatik
Stephanie C. Rodermund, Fabian Lorig, Ingo J. Timm
2019 C conf
HealthCom
Ricardo Buettner, Michael Hirschmiller, Kevin Schlosser, Manfred Rössle, Marc Fernandes, Ingo J. Timm
2019 J jnl
Künstliche Intell.
Ingo J. Timm, Otthein Herzog, Jan Ole Berndt, Christoph Beierle
2019 J jnl
Künstliche Intell.
Lukas Reuter, Jan Ole Berndt, Anna-Sophie Ulfert, Conny H. Antoni, Thomas Ellwart, Ingo J. Timm
2019 J jnl
Künstliche Intell.
Christoph Beierle, Jan Ole Berndt, Norbert Gronau, Ingo J. Timm
2019 J jnl
Künstliche Intell.
Christoph Beierle, Ingo J. Timm
2019 ed.
SysRisk@Wirtschaftsinformatik
Fabian Lorig, Ingo J. Timm, Peter Mertens
2018 Misc conf
WSC
Daniel S. Lebherz, Fabian Lorig, Ingo J. Timm
2018 Misc conf
KI
Ingo J. Timm, Steffen Staab, Michael Siebers, Claudia Schon, Ute Schmid, Kai Sauerwald, Lukas Reuter, Marco Ragni, Claudia Niederée, Heiko Maus, Gabriele Kern-Isberner, Christian Jilek, Paulina Friemann, Thomas Eiter, Andreas Dengel, Hannah Dames, Tanja Bock, Jan Ole Berndt, Christoph Beierle
2018 conf
AIH@IJCAI (Revised Selected Papers)
Colja A. Becker, Fabian Lorig, Ingo J. Timm
2018 Misc conf
WSC
Jan Ole Berndt, Stephanie C. Rodermund, Ingo J. Timm
2018 conf
AIH@IJCAI
Colja A. Becker, Fabian Lorig, Ingo J. Timm
2018 conf
DKB/KIK@KI
Ingo J. Timm, Lukas Reuter
2018 conf
INF-DH
Daniel S. Lebherz, Christian Zeyen, Jan Hess, Ralph Bergmann, Ingo J. Timm, Thomas Burch, Vera Hildenbrandt, Claudine Moulin
2017 conf
MATES
Stephanie C. Rodermund, Fabian Lorig, Jan Ole Berndt, Ingo J. Timm
2017 Misc conf
WSC
Lukas Reuter, Jan Ole Berndt, Ingo J. Timm
2017 conf
SpringSim (TMS)
Fabian Lorig, Colja A. Becker, Ingo J. Timm
2017 Misc conf
WSC
Fabian Lorig, Daniel S. Lebherz, Jan Ole Berndt, Ingo J. Timm
2017 Misc conf
WSC
Jan Ole Berndt, Ingo J. Timm, Joscha Krause, Ralf T. Münnich
2017 conf
WM
Ingo J. Timm, Jan Ole Berndt, Lukas Reuter, Thomas Ellwart, Conny H. Antoni, Anna-Sophie Ulfert
2017 Misc conf
KI
Lukas Reuter, Jan Ole Berndt, Ingo J. Timm
2017 Misc conf
WSC
Daniel S. Lebherz, Fabian Lorig, Ingo J. Timm
2016 J jnl
IxD&A
Fabian Lorig, Lukas Reuter, Jan-Felix Zolitschka, Ingo J. Timm, Christoph Emmerling, Thomas Udelhoven
2015 Misc conf
WSC
Ingo J. Timm, Fabian Lorig
2015 J jnl
J. Intell. Transp. Syst.
Jörg Dallmeyer, René Schumann, Andreas D. Lattner, Ingo J. Timm
2015 Misc conf
WSC
Ingo J. Timm, Fabian Lorig
2015 conf
MATES
Fabian Lorig, Nils Dammenhayn, David-Johannes Müller, Ingo J. Timm
2015 conf
PVM
Christian Hennen, Axel Kalenborn, Sascha Stadlbauer, Ingo J. Timm
2014 conf
MATES
Fabian Lorig, Matthias Gräf, Steffen Walter, Ingo J. Timm
2014 conf
SpringSim (ADS)
Fabian Lorig, Ingo J. Timm
2013 Misc ed.
KI
Ingo J. Timm, Matthias Thimm
2013 conf
ICSI (1)
Tjorben Bogon, Fabian Lorig, Ingo J. Timm
2012 C conf
ECMS
Andreas D. Lattner, Jörg Dallmeyer, Dimitrios C. Paraskevopoulos, Ingo J. Timm
2012 C conf
ECMS
Jörg Dallmeyer, Carsten Taubert, Andreas D. Lattner, Ingo J. Timm
2012 conf
MATES
Tjorben Bogon, Meike Endres, Ingo J. Timm
2012 ed.
MATES
Ingo J. Timm, Christian Guttmann
2012 conf
MATES
Jörg Dallmeyer, Andreas D. Lattner, Ingo J. Timm
2012 conf
AOSE
René Schumann, Zijad Kurtanovic, Ingo J. Timm
2012 Misc conf
WSC
Tjorben Bogon, Ingo J. Timm, Ulrich Jessen, Markus Schmitz, Sigrid Wenzel, Andreas D. Lattner, Dimitris C. Paraskevopoulos, Sven Spieckermann
2011 conf
ICAART (1)
Andreas D. Lattner, Tjorben Bogon, Ingo J. Timm
2011 J jnl
Simul. Notes Eur.
Andreas D. Lattner, Holger Pitsch, Ingo J. Timm, Sven Spieckermann, Sigrid Wenzel
2011 conf
ICAART (Revised Selected Papers)
Andreas D. Lattner, Tjorben Bogon, Ingo J. Timm
2011 conf
ICAART (1)
Tjorben Bogon, Georgios Poursanidis, Andreas D. Lattner, Ingo J. Timm
2011 conf
ICINCO (1)
Dirk Pauli, Jens Feller, Bernhard Mauersberg, Ingo J. Timm
2011 conf
SimuTools
Jörg Dallmeyer, Andreas D. Lattner, Ingo J. Timm
2011 conf
MATES
Andreas D. Lattner, Jörg Dallmeyer, Ingo J. Timm
2011 conf
ICAART (Revised Selected Papers)
Tjorben Bogon, Georgios Poursanidis, Andreas D. Lattner, Ingo J. Timm
2010 conf
SpringSim
Andreas D. Lattner, Tjorben Bogon, Yann Lorion, Ingo J. Timm
2010 conf
MKWI
Tjorben Bogon, Andreas D. Lattner, Yann Lorion, Ingo J. Timm
2010 conf
ANTS Conference
Tjorben Bogon, Georgios Poursanidis, Andreas D. Lattner, Ingo J. Timm
2010 J jnl
Künstliche Intell.
Andreas D. Lattner, Ingo J. Timm
2010 J jnl
Künstliche Intell.
Ingo J. Timm, Andreas D. Lattner
2010 conf
SimuTools
Jörg Dallmeyer, Tjorben Bogon, Yann Lorion, Ingo J. Timm
2010 J jnl
Künstliche Intell.
Andreas D. Lattner, Ingo J. Timm
2010 conf
MKWI
Jörg P. Müller, Lars Braubach, Birgit Burmeister, Alexander Pokahr, Ingo J. Timm
2009 conf
IWSOS
Pascal Katzenbach, Yann Lorion, Tjorben Bogon, Ingo J. Timm
2009 conf
SIS
Yann Lorion, Tjorben Bogon, Ingo J. Timm, Oswald Drobnik
2009 conf
KES-AMSTA
Florian Messerschmidt, Andreas D. Lattner, Ingo J. Timm
2009 B conf
ICAART
Jan-Marc Ehrmann, Andreas D. Lattner, Gabriela Lindemann, Ingo J. Timm
2009 J jnl
Auton. Agents Multi Agent Syst.
Klaus Fischer, Ingo J. Timm, Elisabeth André
2009 conf
SpringSim
Ingo J. Timm, René Schumann
2009 conf
GI Jahrestagung
Jürgen Sauer, René Schumann, Ingo J. Timm, Sigrid Wenzel
2009 conf
Normative Multi-Agent Systems
Ingo J. Timm, Andreas D. Lattner, René Schumann
2009 J jnl
Künstliche Intell.
Christoph Niemann, Stefan König, René Schumann, Ingo J. Timm, Torsten Eymann
2008 conf
Intelligente Systeme zur Entscheidungsunterstützung
René Schumann, Andreas D. Lattner, Ingo J. Timm
2008 conf
MATES
Ingo J. Timm, Tjorben Bogon, Andreas D. Lattner, René Schumann
2008 conf
OTM Workshops
Ingo J. Timm, Thorsten Scholz
2007 conf
GI Jahrestagung (1)
Hagen Langer, Jörn Schönberger, Herbert Kopfer, Ingo J. Timm
2006 J jnl
Int. J. Knowl. Based Intell. Eng. Syst.
Hagen Langer, Jan D. Gehrke, Joachim Hammer, Martin Lorenz, Ingo J. Timm, Otthein Herzog
2006 Misc conf
KI
Dirk Pawlaszczyk, Ingo J. Timm
2006 J jnl
Adv. Eng. Informatics
Ingo J. Timm, Thorsten Scholz, Otthein Herzog
2006 ch.
Multiagent Engineering
Ingo J. Timm, Thorsten Scholz, Otthein Herzog, Karl-Heinz Krempels, Otto Spaniol
2006 ch.
Multiagent Engineering
Ingo J. Timm, Thorsten Scholz, Hendrik Fürstenau
2006 ch.
Multiagent Engineering
Leif-Erik Lorenzen, Peer-Oliver Woelk, Berend Denkena, Thorsten Scholz, Ingo J. Timm, Otthein Herzog
2006 ch.
Multiagent Engineering
Karl-Heinz Krempels, Otto Spaniol, Thorsten Scholz, Ingo J. Timm, Otthein Herzog
2006 ed.
MATES
Klaus Fischer, Ingo J. Timm, Elisabeth André, Ning Zhong
2006 ch.
Multiagent Engineering
Thorsten Scholz, Ingo J. Timm, Otthein Herzog, Günther Görz, Bernhard Schiemann
2006 ch.
Multiagent Engineering
Ingo J. Timm, Thorsten Scholz, Holger Knublauch
2005 C conf
EUMAS
Thorsten Scholz, Ingo J. Timm, Rainer Spittel
2005 conf
MATES
Thorsten Scholz, Ingo J. Timm, Rainer Spittel
2005 conf
SOAS
Martin Lorenz, Jan D. Gehrke, Joachim Hammer, Hagen Langer, Ingo J. Timm
2005 B conf
CCGRID
Ingo J. Timm, Dirk Pawlaszczyk
2005 A conf
CIKM
Martin Lorenz, Jan D. Gehrke, Hagen Langer, Ingo J. Timm, Joachim Hammer
2004
Ingo J. Timm
2004 ed.
MATES
Gabriela Lindemann, Jörg Denzinger, Ingo J. Timm, Rainer Unland
2003 conf
MCPC
Andreas J. Dietrich, Ingo J. Timm, Stefan Kirn
2003 conf
MATES
Ingo J. Timm, Peer-Oliver Woelk
2002 J jnl
Künstliche Intell.
Ubbo Visser, Heiner Stuckenschmidt, Christoph Schlieder, Holger Wache, Ingo J. Timm
2001 conf
GI Jahrestagung (2)
Ingo J. Timm
1997 J jnl
Künstliche Intell.
Heiner Stuckenschmidt, Ingo J. Timm, Jörg Schröder
tests/integration/test_pe_extractors.py
← Index tests/integration/test_pe_extractors.py python
"""
Integration tests for PE-specific extractors.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

pytestmark = [pytest.mark.integration, pytest.mark.pe]


# ============================================================================
# PEFeaturesExtractor Tests
# ============================================================================

class TestPEFeaturesExtractor:
    """Tests for PEFeaturesExtractor class."""

    def test_extract_valid_pe(self, pe_binary_path, mock_logger):
        """Test extracting features from valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.models.dataclasses import PE

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, PE)

    def test_extract_pe_type(self, pe_binary_path, mock_logger):
        """Test PE type detection (DLL, EXE, DRIVER)."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result.type in ["DLL", "EXE", "DRIVER"]

    def test_extract_architecture(self, pe_binary_path, mock_logger):
        """Test architecture detection."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Architecture should be detected
            assert result.architecture is not None

    def test_extract_entry_point(self, pe_binary_path, mock_logger):
        """Test entry point extraction."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Entry point should be a hex string
            assert result.entry_point.startswith("0x")

    def test_extract_compilation_time(self, pe_binary_path, mock_logger):
        """Test compilation time extraction."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Compilation time should be an integer timestamp
            assert isinstance(result.compilation_time, int)
            assert result.compilation_time_utc is not None

    def test_extract_dotnet_detection(self, pe_binary_path, mock_logger):
        """Test .NET detection."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Should be True for the test .NET binary
            assert isinstance(result.is_dotnet, bool)
            assert result.is_dotnet is True  # Test file is .NET

    def test_extract_headers(self, pe_binary_path, mock_logger):
        """Test header extraction."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result.dos_header is not None
            assert result.nt_header is not None
            assert result.file_header is not None
            assert result.optional_header is not None

    def test_extract_counts(self, pe_binary_path, mock_logger):
        """Test section/import/export counts."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert isinstance(result.number_of_sections, int)
            assert isinstance(result.number_of_imports, int)
            assert isinstance(result.number_of_exports, int)
            assert isinstance(result.number_of_resources, int)

    def test_extract_rich_header(self, pe_binary_path, mock_logger):
        """Test Rich header extraction."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Rich header may or may not be present
            # If present, should be JSON string
            if result.rich_header_dump is not None:
                assert isinstance(result.rich_header_dump, str)

    def test_extract_version_info(self, pe_binary_path, mock_logger):
        """Test version info extraction."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Version info may or may not be present
            if result.version_info is not None:
                assert isinstance(result.version_info, list)


# ============================================================================
# PEImportExtractor Tests
# ============================================================================

class TestPEImportExtractor:
    """Tests for PEImportExtractor class."""

    def test_extract_imports(self, pe_binary_path, mock_logger):
        """Test import extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.models.dataclasses import PEImport

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None:
                assert isinstance(result, PEImport)
                assert isinstance(result.pe_imports_total, int)

    def test_extract_import_libraries(self, pe_binary_path, mock_logger):
        """Test import library extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and result.pe_import_libraryName is not None:
                assert isinstance(result.pe_import_libraryName, list)

    def test_extract_import_functions(self, pe_binary_path, mock_logger):
        """Test import function extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and result.pe_import_functions is not None:
                assert isinstance(result.pe_import_functions, list)

    def test_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test ClickHouse export preparation."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.prepare_export_data("ClickHouseExporter")

            if result is not None:
                data, column_names, column_type_names = result
                assert 'library_name' in column_names
                assert 'function_name' in column_names


# ============================================================================
# PESectionExtractor Tests
# ============================================================================

class TestPESectionExtractor:
    """Tests for PESectionExtractor class."""

    def test_extract_sections(self, pe_binary_path, mock_logger):
        """Test section extraction."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor
        from redb.models.dataclasses import PESection

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, list)
            assert len(result) > 0
            assert isinstance(result[0], PESection)

    def test_section_properties(self, pe_binary_path, mock_logger):
        """Test section property extraction."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and len(result) > 0:
                section = result[0]
                assert section.section_name is not None
                assert section.section_entropy >= 0
                assert section.section_sha256 is not None
                assert section.section_md5 is not None
                assert section.section_size >= 0

    def test_section_entropy_range(self, pe_binary_path, mock_logger):
        """Test that section entropy is in valid range."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None:
                for section in result:
                    assert 0 <= section.section_entropy <= 8

    def test_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test ClickHouse export preparation."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.prepare_export_data("ClickHouseExporter")

            if result is not None:
                data, column_names, column_type_names = result
                assert 'section_name' in column_names
                assert 'section_entropy' in column_names
                assert 'section_sha256' in column_names


# ============================================================================
# PEResourceExtractor Tests
# ============================================================================

class TestPEResourceExtractor:
    """Tests for PEResourceExtractor class."""

    def test_extract_resources(self, pe_binary_path, mock_logger):
        """Test resource extraction."""
        from redb.extractors.pe_extractors.pe_resources import PEResourceExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEResourceExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May be None if no resources
            if result is not None:
                assert isinstance(result, list)

    def test_resource_properties(self, pe_binary_path, mock_logger):
        """Test resource property extraction."""
        from redb.extractors.pe_extractors.pe_resources import PEResourceExtractor
        from redb.models.dataclasses import PEResource

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEResourceExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and len(result) > 0:
                resource = result[0]
                assert isinstance(resource, PEResource)
                assert resource.resource_type is not None


# ============================================================================
# PEOverlayExtractor Tests
# ============================================================================

class TestPEOverlayExtractor:
    """Tests for PEOverlayExtractor class."""

    def test_extract_overlay(self, pe_binary_path, mock_logger):
        """Test overlay extraction."""
        from redb.extractors.pe_extractors.pe_overlay import PEOverlayExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEOverlayExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May be None if no overlay
            # If present, should have overlay properties
            if result is not None:
                assert hasattr(result, 'overlay_size')

    def test_has_overlay_check(self, pe_binary_path, mock_logger):
        """Test overlay detection."""
        from redb.extractors.pe_extractors.pe_overlay import PEOverlayExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEOverlayExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            has_overlay = extractor._has_overlay()
            assert isinstance(has_overlay, bool)


# ============================================================================
# PESignatureExtractor Tests
# ============================================================================

class TestPESignatureExtractor:
    """Tests for PESignatureExtractor class."""

    def test_extract_signature(self, pe_binary_path, mock_logger):
        """Test signature extraction."""
        from redb.extractors.pe_extractors.pe_signature import PESignatureExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESignatureExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May be None if not signed
            # Result type depends on implementation

    def test_is_signed_check(self, pe_binary_path, mock_logger):
        """Test signature detection."""
        from redb.extractors.pe_extractors.pe_signature import PESignatureExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESignatureExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            is_signed = extractor._is_signed()
            assert isinstance(is_signed, bool)


# ============================================================================
# PEDotNetExtractor Tests
# ============================================================================

class TestPEDotNetExtractor:
    """Tests for PEDotNetExtractor class."""

    def test_extract_dotnet(self, pe_binary_path, mock_logger):
        """Test .NET metadata extraction."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEDotNetExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # The test file is a .NET binary
            if extractor._check_dotnet():
                assert result is not None

    def test_check_dotnet(self, pe_binary_path, mock_logger):
        """Test .NET detection."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEDotNetExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            is_dotnet = extractor._check_dotnet()
            assert isinstance(is_dotnet, bool)
            # Test file should be .NET
            assert is_dotnet is True


# ============================================================================
# PEInconsistencyTestsExtractor Tests
# ============================================================================

class TestPEInconsistencyTestsExtractor:
    """Tests for PEInconsistencyTestsExtractor class."""

    def test_extract_inconsistency_tests(self, pe_binary_path, mock_logger):
        """Test inconsistency tests extraction."""
        from redb.extractors.pe_extractors.pe_inconsistency_tests import PEInconstistencyTestsExtractor as PEInconsistencyTestsExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEInconsistencyTestsExtractor(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # extract() returns True if tests were performed, False otherwise
            # The actual test results are stored in extractor.pe_inconsistency_tests
            # and extractor.dotnet_inconsistency_tests
            assert result in (True, False)

            if result:
                # Check that test results were stored
                assert extractor.pe_inconsistency_tests is not None or extractor.dotnet_inconsistency_tests is not None


# ============================================================================
# PEExtraFindings Tests
# ============================================================================

class TestPEExtraFindings:
    """Tests for PEExtraFindings class."""

    def test_extract_extra_findings(self, pe_binary_path, mock_logger):
        """Test extra findings extraction."""
        from redb.extractors.pe_extractors.pe_extra_findings import PEExtraFindings

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEExtraFindings(pe_binary_path, mock_logger)

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May return None or list of findings
            if result is not None:
                assert isinstance(result, list)


# ============================================================================
# Integration Tests
# ============================================================================

class TestPEExtractorIntegration:
    """Integration tests for PE extractors."""

    def test_all_extractors_same_pe_object(self, pe_binary_path, mock_logger, pe_object):
        """Test that extractors can share the same PE object."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            # Create extractors sharing the same PE object
            features_ext = PEFeaturesExtractor(pe_binary_path, mock_logger, pe=pe_object)
            imports_ext = PEImportExtractor(pe_binary_path, mock_logger, pe=pe_object)
            sections_ext = PESectionExtractor(pe_binary_path, mock_logger, pe=pe_object)

            # All should use the same PE object
            assert features_ext.pe is pe_object
            assert imports_ext.pe is pe_object
            assert sections_ext.pe is pe_object

            # All should extract successfully
            features_result = features_ext.extract()
            imports_result = imports_ext.extract()
            sections_result = sections_ext.extract()

            assert features_result is not None
            # imports and sections may be None if not present

    def test_hash_consistency_across_extractors(self, pe_binary_path, mock_logger):
        """Test that hashes are consistent across all extractors."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            features_ext = PEFeaturesExtractor(pe_binary_path, mock_logger)
            imports_ext = PEImportExtractor(pe_binary_path, mock_logger)

            # Hashes should be the same
            assert features_ext.sha256 == imports_ext.sha256
            assert features_ext.md5 == imports_ext.md5
            assert features_ext.sha1 == imports_ext.sha1