Manuel F. Dolz

96 papers B 3C 14Journal 58Unranked 18
YearRankTypeTitle / Venue / Authors
2026 conf
BIOSTEC (2)
Ferran Soler-Guiral, Manuel F. Dolz, José Ignacio Aliaga, Katty Delgado-Barriga
2026 J jnl
J. Supercomput.
Franklin Espinoza, Justo Molina, Darwin Quezada-Gaibor, Sandra Catalán, Manuel F. Dolz
2026 J jnl
CoRR
Cristian Pérez-Corral, Alberto Fernández-Hernández, José I. Mestre, Manuel F. Dolz, José Duato, Enrique S. Quintana-Ortí
2026 J jnl
CoRR
Alberto Fernández-Hernández, Cristian Pérez-Corral, José I. Mestre, Manuel F. Dolz, José Duato, Enrique S. Quintana-Ortí
2026 J jnl
CoRR
Alberto Fernández-Hernández, Cristian Pérez-Corral, José I. Mestre, Manuel F. Dolz, Enrique S. Quintana-Ortí
2026 J jnl
CoRR
Cristian Pérez-Corral, Alberto Fernández-Hernández, José I. Mestre, Manuel F. Dolz, Enrique S. Quintana-Ortí
2025 conf
EuroMLSys
José Duato, José I. Mestre, Manuel F. Dolz, Enrique S. Quintana-Ortí, José Cano
2025 J jnl
J. Supercomput.
José I. Mestre, Sergio Barrachina, Darwin Quezada, Manuel F. Dolz
2025 conf
FLLM
Núria Moreno-Chamorro, Maribel Castillo, José Ignacio Aliaga, Manuel F. Dolz
2025 ed.
Euro-Par Workshops (1)
Silvina Caíno-Lores, Demetris Zeinalipour, Thaleia Dimitra Doudali, David E. Singh, Gracia Ester Martín Garzón, Leonel Sousa, Diego Andrade, Tommaso Cucinotta, Donato D'Ambrosio, Patrick Diehl, Manuel F. Dolz, Admela Jukan, Raffaele Montella, Matteo Nardelli, Marta Garcia-Gasulla, Sarah Neuwirth
2025 ed.
Euro-Par Workshops (2)
Silvina Caíno-Lores, Demetris Zeinalipour, Thaleia Dimitra Doudali, David E. Singh, Gracia Ester Martín Garzón, Leonel Sousa, Diego Andrade, Tommaso Cucinotta, Donato D'Ambrosio, Patrick Diehl, Manuel F. Dolz, Admela Jukan, Raffaele Montella, Matteo Nardelli, Marta Garcia-Gasulla, Sarah Neuwirth
2025 J jnl
CoRR
José I. Mestre, Alberto Fernández-Hernández, Cristian Pérez-Corral, Manuel F. Dolz, José Duato, Enrique S. Quintana-Ortí
2025 J jnl
CoRR
Alberto Fernández-Hernández, José I. Mestre, Manuel F. Dolz, José Duato, Enrique S. Quintana-Ortí
2025 J jnl
CoRR
Alberto Fernández-Hernández, José I. Mestre, Manuel F. Dolz, José Duato, Enrique S. Quintana-Ortí
2024 J jnl
J. Supercomput.
Guillermo Alaejos, Héctor Martínez, Adrián Castelló, Manuel F. Dolz, Francisco D. Igual, Pedro Alonso-Jordá, Enrique S. Quintana-Ortí
2024 J jnl
IEEE Internet Things J.
Antonio Maciá-Lillo, Sergio Barrachina, Germán Fabregat, Manuel F. Dolz
2024 J jnl
J. Supercomput.
Jose A. Belloch, Raul Coronado, Óscar Valls, Rocío del Amor, German Leon, Valery Naranjo, Manuel F. Dolz, Adrian Amor-Martin, Gema Piñero
2023 J jnl
Computing
Adrián Castelló, Mar Catalán, Manuel F. Dolz, Enrique S. Quintana-Ortí, José Duato
2023 J jnl
J. Supercomput.
Manuel F. Dolz, Héctor Martínez, Adrián Castelló, Pedro Alonso-Jordá, Enrique S. Quintana-Ortí
2023 J jnl
CoRR
José Duato, José I. Mestre, Manuel F. Dolz, Enrique S. Quintana-Ortí
2023 J jnl
J. Supercomput.
Manuel F. Dolz, Sergio Barrachina, Héctor Martínez, Adrián Castelló, Antonio-Manuel Vidal-Maciá, Germán Fabregat, Andrés E. Tomás
2023 J jnl
J. Syst. Archit.
Sergio Barrachina, Adrián Castelló, Manuel F. Dolz, Tze Meng Low, Héctor Martínez, Enrique S. Quintana-Ortí, Upasana Sridhar, Andrés E. Tomás
2023 J jnl
Computing
Sergio Barrachina, Adrián Castelló, Mar Catalán, Manuel F. Dolz, José I. Mestre
2022 J jnl
J. Supercomput.
Sergio Barrachina, Adrián Castelló, Manuel F. Dolz, Andrés E. Tomás
2022 C conf
SBAC-PAD
Manuel F. Dolz, Héctor Martínez, Pedro Alonso, Enrique S. Quintana-Ortí
2022 J jnl
J. Parallel Distributed Comput.
Sergio Barrachina, Manuel F. Dolz, Pablo San Juan, Enrique S. Quintana-Ortí
2022 J jnl
J. Syst. Archit.
Adrián Castelló, Sergio Barrachina, Manuel F. Dolz, Enrique S. Quintana-Ortí, Pau San Juan, Andrés E. Tomás
2022 C conf
PDP
Manuel F. Dolz, Adrián Castelló, Enrique S. Quintana-Ortí
2021 conf
IPDPS Workshops
Sergio Barrachina, Adrián Castelló, Mar Catalán, Manuel F. Dolz, José I. Mestre
2021 J jnl
CoRR
Julio Silva-Rodríguez, Manuel F. Dolz, Miguel Ferrer, Adrián Castelló, Valery Naranjo, Gema Piñero
2021 J jnl
Int. J. High Perform. Comput. Appl.
Maria Barreda, Manuel F. Dolz, M. Asunción Castaño
2021 C conf
PDP
Adrián Castelló, Mar Catalán, Manuel F. Dolz, José I. Mestre, Enrique S. Quintana-Ortí, José Duato
2021 J jnl
CoRR
Adrián Castelló, Sergio Barrachina, Manuel F. Dolz, Enrique S. Quintana-Ortí, Pau San Juan
2021 C conf
PDP
Adrián Castelló, Mar Catalán, Manuel F. Dolz, José I. Mestre, Enrique S. Quintana-Ortí, José Duato
2021 J jnl
J. Supercomput.
Sergio Barrachina, Adrián Castelló, Mar Catalán, Manuel F. Dolz, José I. Mestre
2020 J jnl
Comput. Math. Methods
Manuel F. Dolz, Fran J. Alventosa, Pedro Alonso-Jordá, Antonio M. Vidal
2020 J jnl
J. Supercomput.
Javier López-Gómez, David del Rio Astorga, Manuel F. Dolz, Javier Fernández, José Daniel García
2020 J jnl
CoRR
Pablo San Juan, Adrián Castelló, Manuel F. Dolz, Pedro Alonso-Jordá, Enrique S. Quintana-Ortí
2020 C conf
SBAC-PAD
Pablo San Juan, Adrián Castelló, Manuel F. Dolz, Pedro Alonso-Jordá, Enrique S. Quintana-Ortí
2020 J jnl
J. Supercomput.
Maria Barreda, Manuel F. Dolz, M. Asunción Castaño, Pedro Alonso-Jordá, Enrique S. Quintana-Ortí
2019 J jnl
J. Supercomput.
Manuel F. Dolz, Fran J. Alventosa, Pedro Alonso-Jordá, Antonio M. Vidal
2019 J jnl
J. Supercomput.
Raul Torres, Julian M. Kunkel, Manuel F. Dolz, Thomas Ludwig
2019 C conf
EuroMPI
Adrián Castelló, Manuel F. Dolz, Enrique S. Quintana-Ortí, José Duato
2019 J jnl
Parallel Comput.
Javier López-Gómez, Javier Fernández Muñoz, David del Rio Astorga, Manuel F. Dolz, José Daniel García
2019 J jnl
J. Supercomput.
David del Rio Astorga, Manuel F. Dolz, Javier Fernández, Javier García Blas
2019 B conf
CCGRID
Adrián Castelló, Manuel F. Dolz, Enrique S. Quintana-Ortí, José Duato
2018 J jnl
Int. J. High Perform. Comput. Appl.
David del Rio Astorga, Manuel F. Dolz, Luis Miguel Sánchez, Javier Fernández, José Daniel García
2018 conf
HPCS
Raul Torres, Thomas Ludwig, Julian M. Kunkel, Manuel F. Dolz
2018 J jnl
Sustain. Comput. Informatics Syst.
Francisco Almeida, Marcos Dias de Assunção, Jorge G. Barbosa, Vicente Blanco Pérez, Ivona Brandic, Georges Da Costa, Manuel F. Dolz, Anne C. Elster, Mateusz Jarus, Helen D. Karatza, Laurent Lefèvre, Ilias Mavridis, Ariel Oleksiak, Anne-Cécile Orgerie, Jean-Marc Pierson
2018 J jnl
Int. J. High Perform. Comput. Appl.
David del Rio Astorga, Manuel F. Dolz, Luis Miguel Sánchez, José Daniel García, Marco Danelutto, Massimo Torquati
2018 C conf
PDP
Placido Fernández, David del Rio Astorga, Manuel F. Dolz, Javier Fernández, Omar Awile, José Daniel García
2018 J jnl
Future Gener. Comput. Syst.
David del Rio Astorga, Manuel F. Dolz, Javier Fernández, José Daniel García
2018 C conf
EuroMPI
Javier Fernández Muñoz, Manuel F. Dolz, David del Rio Astorga, Javier Prieto Cepeda, José Daniel García
2018 J jnl
IEEE Access
Manuel F. Dolz, David del Rio Astorga, Javier Fernández, José Daniel García, Jesús Carretero
2018 J jnl
Sustain. Comput. Informatics Syst.
Julian M. Kunkel, Manuel F. Dolz
2017 B conf
PaCT
Raul Torres, Julian M. Kunkel, Manuel F. Dolz, Thomas Ludwig
2017 J jnl
Concurr. Comput. Pract. Exp.
David del Rio Astorga, Manuel F. Dolz, Javier Fernández, José Daniel García
2017 J jnl
J. Supercomput.
José Ignacio Aliaga, Maria Barreda, M. Asunción Castaño, Manuel F. Dolz, Enrique S. Quintana-Ortí
2017 J jnl
Concurr. Comput. Pract. Exp.
Manuel F. Dolz, David del Rio Astorga, Javier Fernández, Massimo Torquati, José Daniel García, Félix García Carballeira, Marco Danelutto
2017 C conf
ICA3PP
Javier Fernández, Andrés Sánchez Cuadrado, David del Rio Astorga, Manuel F. Dolz, José Daniel García
2017 conf
Euro-Par Workshops
David del Rio Astorga, Manuel F. Dolz, Javier Fernández, José Daniel García
2016 C conf
ICA3PP
David del Rio Astorga, Manuel F. Dolz, Luis Miguel Sánchez, Javier García Blas, José Daniel García
2016 J jnl
Comput. Sci. Res. Dev.
Manuel F. Dolz, Julian M. Kunkel, Konstantinos Chasapis, Sandra Catalán
2016 J jnl
J. Supercomput.
Pablo Llopis, Manuel F. Dolz, Francisco Javier García Blas, Florin Isaila, Mohammad Reza Heidari, Michael Kuhn
2016 conf
UIC/ATC/ScalCom/CBDCom/IoP/SmartWorld
Luis Miguel Sánchez, David del Rio Astorga, Manuel F. Dolz, Javier Fernández
2016 conf
PMAM@PPoPP
David del Rio Astorga, Manuel F. Dolz, Luis Miguel Sánchez, José Daniel García
2016 conf
PMAM@PPoPP
Manuel F. Dolz, David del Rio Astorga, Javier Fernández, José Daniel García, Félix García Carballeira, Marco Danelutto, Massimo Torquati
2016 C conf
ICA3PP
Javier García Blas, Manuel F. Dolz, José Daniel García, Jesús Carretero, Alessandro Daducci, Yasser Alemán-Gómez, Erick Jorge Canales-Rodríguez
2015 conf
IGSC
Manuel F. Dolz, Mohammad Reza Heidari, Michael Kuhn, Thomas Ludwig, Germán Fabregat
2015 J jnl
Comput. Sci. Res. Dev.
José Ignacio Aliaga, Maria Barreda, Manuel F. Dolz, Enrique S. Quintana-Ortí
2015 J jnl
Comput. Electr. Eng.
Manuel F. Dolz, Francisco D. Igual, Thomas Ludwig, Luis Piñuel, Enrique S. Quintana-Ortí
2015 J jnl
Comput. Sci. Res. Dev.
Joseph Charles, William B. Sawyer, Manuel F. Dolz, Sandra Catalán
2014 J jnl
Sustain. Comput. Informatics Syst.
Mohammed el Mehdi Diouri, Manuel F. Dolz, Olivier Glück, Laurent Lefèvre, Pedro Alonso, Sandra Catalán, Rafael Mayo, Enrique S. Quintana-Ortí
2014 J jnl
Clust. Comput.
José Ignacio Aliaga, Maria Barreda, Manuel F. Dolz, Alberto F. Martín, Rafael Mayo, Enrique S. Quintana-Ortí
2014 J jnl
Comput. Sci. Res. Dev.
Maria Barreda, Sandra Catalán, Manuel F. Dolz, Rafael Mayo, Enrique S. Quintana-Ortí
2014 J jnl
J. Parallel Distributed Comput.
Pedro Alonso, Manuel F. Dolz, Antonio M. Vidal
2014
Manuel F. Dolz
2014 J jnl
Concurr. Comput. Pract. Exp.
Pedro Alonso, Manuel F. Dolz, Francisco D. Igual, Rafael Mayo, Enrique S. Quintana-Ortí
2014 conf
PDSW@SC
Konstantinos Chasapis, Manuel F. Dolz, Michael Kuhn, Thomas Ludwig
2014 J jnl
Concurr. Comput. Pract. Exp.
Pedro Alonso, Manuel F. Dolz, Rafael Mayo, Enrique S. Quintana-Ortí
2014 J jnl
Comput. Sci. Res. Dev.
Pedro Alonso, Manuel F. Dolz, Rafael Mayo, Enrique S. Quintana-Ortí
2014 J jnl
Sci. Program.
Robert Schöne, Jan Treibig, Manuel F. Dolz, Carla Guillén, Carmen B. Navarrete, Michael Knobloch, Barry Rountree
2013 J jnl
Clust. Comput.
Pedro Alonso, Manuel F. Dolz, Rafael Mayo, Enrique S. Quintana-Ortí
2013 conf
EE-LSDS
Pedro Alonso, Manuel F. Dolz, Francisco D. Igual, Enrique S. Quintana-Ortí, Rafael Mayo
2013 conf
EE-LSDS
Mohammed el Mehdi Diouri, Manuel F. Dolz, Olivier Glück, Laurent Lefèvre, Pedro Alonso, Sandra Catalán, Rafael Mayo, Enrique S. Quintana-Ortí
2012 J jnl
ACM SIGOPS Oper. Syst. Rev.
Manuel F. Dolz, Juan Carlos Fernández, Sergio Iserte, Rafael Mayo, Enrique S. Quintana-Ortí
2012 C conf
ISPA
Maria Barreda, Manuel F. Dolz, Rafael Mayo, Enrique S. Quintana-Ortí, Ruymán Reyes
2012 J jnl
Comput. Sci. Res. Dev.
Pedro Alonso, Manuel F. Dolz, Francisco D. Igual, Rafael Mayo, Enrique S. Quintana-Ortí
2012 conf
ICT-GLOW
José Ignacio Aliaga, Manuel F. Dolz, Alberto F. Martín, Rafael Mayo, Enrique S. Quintana-Ortí
2012 C conf
ISPA
Pedro Alonso, Manuel F. Dolz, Francisco D. Igual, Rafael Mayo, Enrique S. Quintana-Ortí
2012 C conf
PDP
Pedro Alonso, Manuel F. Dolz, Francisco D. Igual, Rafael Mayo, Enrique S. Quintana-Ortí
2012 B conf
ICPP
Pedro Alonso, Rosa M. Badia, Jesús Labarta, Maria Barreda, Manuel F. Dolz, Rafael Mayo, Enrique S. Quintana-Ortí, Ruymán Reyes
2011 conf
IPDPS Workshops
Maribel Castillo, Manuel F. Dolz, Juan Carlos Fernández, Rafael Mayo, Enrique S. Quintana-Ortí, Vicente Roca
2011 conf
HPCS
Pedro Alonso, Manuel F. Dolz, Rafael Mayo, Enrique S. Quintana-Ortí
2011 conf
MARC Symposium
Pedro Alonso, Manuel F. Dolz, Francisco D. Igual, Bryan Marker, Rafael Mayo, Enrique S. Quintana-Ortí, Robert A. van de Geijn
2010 conf
ARCS
Manuel F. Dolz, Juan Carlos Fernández, Rafael Mayo, Enrique S. Quintana-Ortí
tests/integration/test_elf_extractor.py
← Index tests/integration/test_elf_extractor.py python
"""
Integration tests for the ELFExtractor base class.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

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


class TestELFExtractorInitialization:
    """Tests for ELFExtractor initialization."""

    def test_elf_extractor_with_valid_elf(self, elf_binary_path, mock_logger):
        """Test ELFExtractor initialization with valid ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            assert extractor.filepath == elf_binary_path
            assert extractor._is_elf_file() is True

    def test_elf_extractor_with_invalid_file(self, pe_binary_path, mock_logger):
        """Test ELFExtractor initialization with non-ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            # Should not be a valid ELF
            assert extractor._is_elf_file() is False

    def test_elf_extractor_with_text_file(self, temp_text_file, mock_logger):
        """Test ELFExtractor initialization with text file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(temp_text_file, mock_logger)

            # Should not be a valid ELF
            assert extractor._is_elf_file() is False


class TestELFExtractorMethods:
    """Tests for ELFExtractor helper methods."""

    def test_is_elf_file_true(self, elf_binary_path, mock_logger):
        """Test _is_elf_file returns True for valid ELF."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            assert extractor._is_elf_file() is True

    def test_is_elf_file_cached(self, elf_binary_path, mock_logger):
        """Test _is_elf_file result is cached."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # First call
            result1 = extractor._is_elf_file()
            # Second call should use cached value
            result2 = extractor._is_elf_file()

            assert result1 == result2
            # Cache should be set
            assert extractor._elf_file_valid is not None

    def test_is_64bit(self, elf_binary_path, mock_logger):
        """Test _is_64bit method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._is_64bit()
            # Result depends on the test binary
            assert isinstance(result, bool)

    def test_is_stripped(self, elf_binary_path, mock_logger):
        """Test _is_stripped method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._is_stripped()
            assert isinstance(result, bool)

    def test_has_debug_info(self, elf_binary_path, mock_logger):
        """Test _has_debug_info method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._has_debug_info()
            assert isinstance(result, bool)

    def test_get_architecture(self, elf_binary_path, mock_logger):
        """Test _get_architecture method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._get_architecture()
            # Should return a string (architecture name)
            assert isinstance(result, str)
            assert result != ""

    def test_get_endianness(self, elf_binary_path, mock_logger):
        """Test _get_endianness method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._get_endianness()
            # Should be one of: "little", "big", or "unknown"
            assert result in ["little", "big", "unknown"]

    def test_get_file_type(self, elf_binary_path, mock_logger):
        """Test _get_file_type method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._get_file_type()
            # Should return a file type string
            assert isinstance(result, str)
            # Common values: "executable", "shared_object", "relocatable", etc.
            expected_types = ["none", "relocatable", "executable", "shared_object", "core_dump", "unknown"]
            assert result in expected_types or result.startswith("ET_")

    def test_is_pie(self, elf_binary_path, mock_logger):
        """Test _is_pie method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._is_pie()
            assert isinstance(result, bool)

    def test_has_stack_protection(self, elf_binary_path, mock_logger):
        """Test _has_stack_protection method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._has_stack_protection()
            assert isinstance(result, bool)

    def test_has_nx_bit(self, elf_binary_path, mock_logger):
        """Test _has_nx_bit method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._has_nx_bit()
            assert isinstance(result, bool)

    def test_has_relro(self, elf_binary_path, mock_logger):
        """Test _has_relro method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._has_relro()
            assert isinstance(result, bool)

    def test_get_build_id(self, elf_binary_path, mock_logger):
        """Test _get_build_id method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._get_build_id()
            # Could be None if no build ID, or a hex string
            assert result is None or isinstance(result, str)

    def test_count_sections(self, elf_binary_path, mock_logger):
        """Test _count_sections method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._count_sections()
            assert isinstance(result, int)
            assert result >= 0

    def test_count_segments(self, elf_binary_path, mock_logger):
        """Test _count_segments method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._count_segments()
            assert isinstance(result, int)
            assert result >= 0

    def test_count_symbols(self, elf_binary_path, mock_logger):
        """Test _count_symbols method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._count_symbols()
            assert isinstance(result, int)
            assert result >= 0

    def test_get_dependencies(self, elf_binary_path, mock_logger):
        """Test _get_dependencies method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._get_dependencies()
            assert isinstance(result, list)


class TestWithELFFile:
    """Tests for the _with_elf_file context manager method."""

    def test_with_elf_file_success(self, elf_binary_path, mock_logger):
        """Test _with_elf_file executes operation successfully."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # Define a simple operation
            def get_header(elf):
                return elf.header is not None

            result = extractor._with_elf_file(get_header)
            assert result is True

    def test_with_elf_file_error_handling(self, temp_text_file, mock_logger):
        """Test _with_elf_file handles errors gracefully."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(temp_text_file, mock_logger)

            # Define an operation that would fail
            def get_header(elf):
                return elf.header

            result = extractor._with_elf_file(get_header)
            # Should return None on error
            assert result is None


class TestELFExtractorTag:
    """Tests for tag method in ELF extractors."""

    def test_elf_features_tag(self, elf_binary_path, mock_logger):
        """Test that ELFFeaturesExtractor returns correct tag."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            tag = extractor.tag()
            # Should return the tag string
            assert isinstance(tag, str)
            assert "elf" in tag.lower() or "features" in tag.lower()


class TestELFExtractorClickHouseTable:
    """Tests for get_clickhouse_table method in ELF extractors."""

    def test_elf_features_clickhouse_table(self, elf_binary_path, mock_logger):
        """Test that ELFFeaturesExtractor returns correct ClickHouse table name."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_elf_features"


class TestELFExtractorExtract:
    """Tests for extract method in ELF extractors."""

    def test_elf_features_extract(self, elf_binary_path, mock_logger):
        """Test ELFFeaturesExtractor.extract() returns valid data."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.models.dataclasses import ELFFeatures

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor.extract()
            assert result is not None
            assert isinstance(result, ELFFeatures)

            # Check some expected fields
            assert isinstance(result.ei_class, int)
            assert isinstance(result.ei_data, int)
            assert isinstance(result.e_entry, int)
            assert isinstance(result.number_of_sections, int)
            assert isinstance(result.number_of_segments, int)

    def test_elf_features_extract_invalid_file(self, pe_binary_path, mock_logger):
        """Test ELFFeaturesExtractor.extract() handles invalid ELF."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()
            # Should return None for invalid ELF
            assert result is None


class TestELFExtractorPrepareExportData:
    """Tests for prepare_export_data method in ELF extractors."""

    def test_elf_features_prepare_export_elasticsearch(self, elf_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # First extract
            extractor.extract()
            result = extractor.prepare_export_data("ElasticsearchExporter")
            # Should return the elf_features dataclass
            assert result is extractor.elf_features

    def test_elf_features_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # First extract
            extractor.extract()
            result = extractor.prepare_export_data("ClickHouseExporter")

            # Should return tuple of (data, column_names, column_type_names)
            assert isinstance(result, tuple)
            assert len(result) == 3
            data, column_names, column_type_names = result
            assert isinstance(data, list)
            assert isinstance(column_names, list)
            assert isinstance(column_type_names, list)
            # Column names and types should match in length
            assert len(column_names) == len(column_type_names)


class TestELFExtractorAdvanced:
    """Advanced tests for ELF extraction using hello_advanced binary."""

    def test_elf_advanced_features(self, elf_advanced_binary_path, mock_logger):
        """Test ELFFeaturesExtractor with more complex ELF binary."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_advanced_binary_path, mock_logger)

            result = extractor.extract()
            assert result is not None

            # Check that we can extract meaningful data
            assert result.number_of_sections > 0
            assert result.number_of_segments > 0

    def test_elf_advanced_architecture(self, elf_advanced_binary_path, mock_logger):
        """Test architecture detection for advanced ELF binary."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_advanced_binary_path, mock_logger)

            arch = extractor._get_architecture()
            # Should detect a valid architecture
            assert arch != "unknown"
            assert arch != ""