Macarena Espinilla

100 papers B 3C 7Misc 2Journal 43Unranked 44
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Methods Programs Biomed.
Carlos Montoya-Peña, Juan Francisco Gaitán Guerrero, Macarena Espinilla, José L. López
2025 J jnl
Comput. Methods Programs Biomed.
Juan F. Gaitán Guerrero, Carmen Martínez-Cruz, Macarena Espinilla, David Díaz-Jiménez, José L. López
2025 J jnl
Inf. Fusion
Carlos Fernandez-Basso, David Díaz-Jiménez, José L. López, Macarena Espinilla
2025 conf
BIOSTEC (2): HEALTHINF
Juan F. Gaitán Guerrero, Carmen Martínez-Cruz, José L. López, Francisco Mata, Luis G. Pérez-Cordón, José-María Serrano, Juana M. Morcillo-Martínez, María Ángeles Verdejo-Espinosa, Juan C. Cuevas-Martínez, Raquel Viciana-Abad, Pedro Reche López, José Manuel Pérez-Lorenzo, David Díaz-Jiménez, Macarena Espinilla
2025 C conf
ICT4AWE
David Díaz-Jiménez, José L. López, Francisco J. Flores-Avilés, Macarena Espinilla
2025 C conf
ICT4AWE
David Díaz-Jiménez, Francisco Mata, José L. López, Luis G. Pérez-Cordón, José-María Serrano, Carmen Martínez-Cruz, Juana M. Morcillo-Martínez, Ángeles Verdejo-Espinosa, Juan C. Cuevas-Martínez, Raquel Viciana-Abad, Pedro Reche López, José Manuel Pérez-Lorenzo, Juan F. Gaitán Guerrero, Macarena Espinilla
2025 C conf
IPIN
David Díaz-Jiménez, José Luis López Ruiz, Macarena Espinilla, Moisés Ramires, Joaquín Torres-Sospedra
2024 J jnl
IEEE Internet Things J.
David Díaz-Jiménez, José L. López, Jesús González Lama, Macarena Espinilla
2024 conf
UCAmI
Carlos Montoya, José L. López, Juan F. Gaitán Guerrero, David Díaz-Jiménez, Macarena Espinilla
2024 conf
HICSS
David Díaz-Jiménez, José Luis López Ruiz, Jesús González Lama, Macarena Espinilla
2024 conf
UCAmI
David Díaz-Jiménez, José Luis López, Juan F. Gaitán Guerrero, Macarena Espinilla
2024 J jnl
IEEE Internet Things J.
Juan Francisco Gaitán Guerrero, José Luis López Ruiz, Macarena Espinilla, Carmen Martínez-Cruz
2023 conf
UCAmI (2)
Carmen Martínez-Cruz, Juan F. Gaitán Guerrero, José Luis López Ruiz, Antonio Jesús Rueda, Macarena Espinilla
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Macarena Espinilla, Javier Medina, Josef Hallberg, Chris D. Nugent
2023 J jnl
Sensors
José L. López, Macarena Espinilla, Ángeles Verdejo
2023 conf
HICSS
Francisco Jesús Martínez Mimbrera, Alicia Montoro-Lendínez, José Luis López Ruiz, Miguel Damas Hermoso, Macarena Espinilla
2023 conf
UCAmI (2)
José Luis López Ruiz, Juan F. Gaitán Guerrero, Carmen Martínez-Cruz, David Díaz-Jiménez, Jesús González Lama, Macarena Espinilla
2023 conf
UCAmI (2)
Sandra Amador, Kelly Turbay, Alicia Montoro, Macarena Espinilla, Higinio Mora, David Gil
2023 conf
UCAmI (1)
Jesús González Lama, Alicia Montoro, Macarena Espinilla, Juan Carlos Valera, David Gil, Jesús Peral, Magnus Johnsson
2023 conf
UCAmI (1)
Alicia Montoro-Lendínez, Carmen Linares, Ana Perandrés Gómez, Alfonso Jesús Cruz, José Luis López Ruiz, Chris D. Nugent, Macarena Espinilla
2022 conf
ICIAP Workshops (1)
Aurora Polo Rodríguez, Alicia Montoro-Lendínez, Macarena Espinilla, Javier Medina Quero
2022 conf
IWBBIO (1)
José Luis López Ruiz, David Díaz-Jiménez, Alicia Montoro-Lendínez, Macarena Espinilla
2022 conf
UCAmI
D. Díaz, Javier Medina, Alicia Montoro, José L. López, Macarena Espinilla
2022 conf
HICSS
Sixto Campaña Bastidas, Macarena Espinilla, Javier Medina Quero
2021 conf
HICSS
Macarena Espinilla, Emiro de la Hoz Franco, Edna Bernal Monroy, Paola Ariza Colpas, Fabio Mendoza Palechor
2020 J jnl
Int. J. Distributed Sens. Networks
Miguel López-Medina, Macarena Espinilla, Chris D. Nugent, Javier Medina Quero
2020 J jnl
J. Intell. Fuzzy Syst.
Miguel López-Medina, Macarena Espinilla, Ian Cleland, Chris D. Nugent, Javier Medina
2019 J jnl
Sensors
Miguel López-Medina, Macarena Espinilla, Cristiano Paggeti, Javier Medina Quero
2019 conf
UCAmI
Macarena Espinilla, María Ángeles Verdejo-Espinosa, Lucia González, Chris D. Nugent, Alfonso Jesús Cruz, Javier Medina
2019 J jnl
Complex.
Maria Dolores Peláez-Coca, Macarena Espinilla, María Rosa Fernández Olmo, Javier Medina
2019 J jnl
J. Ambient Intell. Humaniz. Comput.
Alberto G. Salguero, Javier Medina, Pablo Delatorre, Macarena Espinilla
2019 J jnl
Sci. Program.
Alberto G. Salguero, Pablo Delatorre, Javier Medina, Macarena Espinilla, Antonio J. Tomeu
2019 conf
PerCom Workshops
Javier Medina Quero, Federico Cruciani, Lorenzo Seidenari, Macarena Espinilla, Chris D. Nugent
2019 J jnl
Sensors
Macarena Espinilla, Vladimir Villarreal, Ian R. McChesney
2018 J jnl
Lang. Resour. Evaluation
Alberto G. Salguero, Macarena Espinilla
2018 conf
PerCom Workshops
Ian Cleland, Mark P. Donnelly, Chris D. Nugent, Josef Hallberg, Macarena Espinilla, Matias Garcia-Constantino
2018 conf
UCAmI
Javier Medina Quero, Matthew Burns, Muhammad Asif Razzaq, Chris D. Nugent, Macarena Espinilla
2018 J jnl
Expert Syst. Appl.
Javier Medina Quero, Shuai Zhang, Chris D. Nugent, Macarena Espinilla
2018 conf
UCAmI
Kåre Synnes, Margareta Lilja, Anneli Nyman, Macarena Espinilla, Ian Cleland, Andres Gabriel Sanchez Comas, Zhoe Comas-Gonzalez, Josef Hallberg, Niklas Karvonen, Wagner Ourique de Morais, Federico Cruciani, Chris D. Nugent
2018 conf
UCAmI
Macarena Espinilla, Javier Medina, Alberto Salguero, Naomi Irvine, Mark P. Donnelly, Ian Cleland, Chris D. Nugent
2018 J jnl
IEEE Access
Macarena Espinilla, Javier Medina, Gabriel Urzaiz, Pritpal Singh
2018 J jnl
Comput. Electr. Eng.
Javier Medina, Macarena Espinilla, Ángel Luis García-Fernández, Luis Martínez
2018 C conf
IPIN
Antonio Ramón Jiménez, Fernando Seco, Pekka Peltola, Macarena Espinilla
2018 J jnl
Comput. Electr. Eng.
Alberto G. Salguero, Macarena Espinilla
2018 J jnl
IEEE Access
Javier Medina Quero, Miguel López-Medina, Alberto Salguero Hidalgo, Macarena Espinilla
2018 conf
UCAmI
Javier Medina Quero, Claire Orr, Shuai Zhang, Chris D. Nugent, Alberto Salguero, Macarena Espinilla
2018 J jnl
IEEE Access
Emiro De la Hoz-Franco, Paola Ariza Colpas, Javier Medina Quero, Macarena Espinilla
2018 J jnl
IEEE Access
Macarena Espinilla, Luis Martínez, Javier Medina, Chris D. Nugent
2018 conf
UCAmI
Macarena Espinilla, Javier Medina, Chris D. Nugent
2018 J jnl
Sensors
Alberto G. Salguero, Macarena Espinilla, Pablo Delatorre, Javier Medina
2017 J jnl
Int. J. Comput. Intell. Syst.
Pilar Gómez, Antonio Partal, Macarena Espinilla
2017 J jnl
Int. J. Commun. Syst.
Colin Shewell, Javier Medina, Macarena Espinilla, Chris D. Nugent, Mark P. Donnelly, Haiying Wang
2017 J jnl
Int. J. Comput. Intell. Syst.
Macarena Espinilla, Chris D. Nugent
2017 conf
UCAmI
Javier Medina, Macarena Espinilla, Daniel Zafra, Luis Martínez-López, Chris D. Nugent
2017 J jnl
Mob. Inf. Syst.
Macarena Espinilla, Javier Medina, Ángel Luis García-Fernández, Sixto Campaña, Jorge Londoño
2017 conf
UCAmI
Alberto Salguero, Macarena Espinilla
2017 conf
IWBBIO (2)
Maria Dolores Peláez, Miguel López-Medina, Macarena Espinilla, Javier Medina Quero
2017 J jnl
Microprocess. Microsystems
Macarena Espinilla, Javier Medina, Alberto Calzada, Jun Liu, Luis Martínez, Chris D. Nugent
2017 J jnl
J. Ambient Intell. Humaniz. Comput.
Macarena Espinilla, Jun Liu, Juan Manuel García Chamizo
2017 J jnl
Int. J. Commun. Syst.
Javier Medina, Luis Martínez-López, Macarena Espinilla
2016 J jnl
Mob. Inf. Syst.
Susanna Spinsante, Alberto Angelici, Jens Lundström, Macarena Espinilla, Ian Cleland, Chris D. Nugent
2016 conf
IWBBIO
Daniel Zafra, Javier Medina, Luis Martínez-López, Chris D. Nugent, Macarena Espinilla
2016 conf
UCAmI (2)
Alberto Calzada, Chris D. Nugent, Macarena Espinilla, Jonathan Synnott, Luis Martínez
2016 conf
PervasiveHealth
Chris D. Nugent, Ian Cleland, Anita Pinheiro Sant'Anna, Macarena Espinilla, Jonathan Synnott, Oresti Banos, Jens Lundström, Josef Hallberg, Alberto Calzada
2016 ch.
Sentiment Analysis and Ontology Engineering
Alberto Salguero, Macarena Espinilla
2016 B conf
SMARTCOMP
Jonathan Synnott, Chris D. Nugent, Shuai Zhang, Alberto Calzada, Ian Cleland, Macarena Espinilla, Javier Medina Quero, Jens Lundström
2016 conf
UCAmI (1)
Macarena Espinilla, Sixto Campaña, Jorge Londoño, Ángel Luis García-Fernández
2016 conf
UCAmI (2)
Chris D. Nugent, Jonathan Synnott, Celeste Gabrielli, Shuai Zhang, Macarena Espinilla, Alberto Calzada, Jens Lundström, Ian Cleland, Kåre Synnes, Josef Hallberg, Susanna Spinsante, Miguel Angel Ortiz Barrios
2016 conf
PervasiveHealth
Javier Medina, Macarena Espinilla, Christopher Nugent
2016 conf
UCAmI (2)
Macarena Espinilla, Antonio J. Rivera, M. Dolores Pérez-Godoy, Javier Medina, Luis Martínez, Chris D. Nugent
2015 conf
UCAmI
Javier Medina, Francisco J. Quesada, Macarena Espinilla
2015 C conf
ICOST
Francisco J. Quesada, Francisco Moya, Macarena Espinilla, Luis Martínez-López, Chris D. Nugent
2015 conf
UCAmI
Francisco J. Quesada, Francisco Moya, Javier Medina, Luis Martínez-López, Chris D. Nugent, Macarena Espinilla
2015 J jnl
Int. J. Comput. Intell. Syst.
Macarena Espinilla, Nesrin Halouani, Habib Chabchoub
2015 C conf
ICOST
Macarena Espinilla, Francisco J. Quesada, Francisco Moya, Luis Martínez-López, Chris D. Nugent
2014 J jnl
Int. J. Comput. Intell. Syst.
Macarena Espinilla, Javier Montero, Juan Tinguaro Rodríguez
2014 J jnl
Inf. Sci.
Francisco Javier Estrella, Macarena Espinilla, Francisco Herrera, Luis Martínez-López
2014 J jnl
J. Multiple Valued Log. Soft Comput.
Francisco Javier Estrella, Macarena Espinilla, Luis Martínez-López
2014 conf
RSCTC
Macarena Espinilla, Francisco J. Martínez, Francisco Javier Estrella Liébana
2014 B conf
FUZZ-IEEE
Francisco Javier Estrella, Rosa M. Rodríguez, Macarena Espinilla, Luis Martínez-López
2013 J jnl
Inf. Sci.
Macarena Espinilla, Rocío de Andrés, Francisco J. Martínez, Luis Martínez-López
2013 conf
AGOP
Yeleny Zulueta, Juan Martínez-Moreno, Luis Martínez, Macarena Espinilla
2013 conf
A Tribute to Prof. Dr. Da Ruan
Luis Martínez-López, Macarena Espinilla, Rosa M. Rodríguez
2012 conf
IPMU (1)
Macarena Espinilla, Jie Lu, Jun Ma, Luis Martínez-López
2011 conf
Eurofuse
Macarena Espinilla, Rocío de Andrés, Francisco J. Martínez, Luis Martínez
2011 J jnl
Comput. Intell.
Macarena Espinilla, Jun Liu, Luis Martínez-López
2010 Misc conf
ISKE
Macarena Espinilla, Francisco J. Martínez, Luis Martínez
2010 B conf
FUZZ-IEEE
Macarena Espinilla, Da Ruan, Jun Liu, Luis Martínez-López
2010 J jnl
Int. J. Comput. Intell. Syst.
Rocío de Andrés, Macarena Espinilla, Luis Martínez-López
2010 conf
CSEDU (2)
Macarena Espinilla, Iván Palomares, Humberto Bustince
2010 J jnl
Internet Res.
Rosa M. Rodríguez, Macarena Espinilla, Pedro J. Sánchez, Luis Martínez-López
2009 conf
IFSA/EUSFLAT Conf.
Rosa M. Rodríguez, Luis Martínez-López, Macarena Espinilla
2009 J jnl
J. Multiple Valued Log. Soft Comput.
Luis Martínez-López, Macarena Espinilla, Jun Liu, Luis G. Pérez, Pedro J. Sánchez
2009 C conf
ISDA
Macarena Espinilla, Rosa M. Rodríguez, Luis Martínez-López, Francisco Mata, Jun Liu
2009 conf
Web Intelligence/IAT Workshops
Luis Martínez-López, Rosa M. Rodríguez, Macarena Espinilla
2008 J jnl
Int. J. Comput. Intell. Syst.
Luis Martínez-López, Manuel J. Barranco, Luis G. Pérez, Macarena Espinilla
2008 J jnl
Int. J. Comput. Intell. Syst.
Luis Martínez-López, Macarena Espinilla, Luis G. Pérez
2008 Misc conf
ISKE
Luis Martínez, Macarena Espinilla, Jun Liu
2008 J jnl
Int. J. Uncertain. Fuzziness Knowl. Based Syst.
Luis Martínez-López, Luis G. Pérez, Manuel J. Barranco, Macarena Espinilla
2007 conf
IFSA (1)
Luis Martínez-López, Luis G. Pérez, Jun Liu, Macarena Espinilla
tests/integration/test_pe_extractor.py
← Index tests/integration/test_pe_extractor.py python
"""
Integration tests for the PEExtractor base class.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

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


class TestPEExtractorInitialization:
    """Tests for PEExtractor initialization."""

    def test_pe_extractor_with_valid_pe(self, pe_binary_path, mock_logger):
        """Test PEExtractor initialization with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            assert extractor.pe is not None
            assert extractor.filepath == pe_binary_path

    def test_pe_extractor_with_provided_pe_object(self, pe_binary_path, mock_logger, pe_object):
        """Test PEExtractor initialization with pre-existing PE object."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should use the provided PE object, not create a new one
            assert extractor.pe is pe_object

    def test_pe_extractor_with_invalid_file(self, elf_binary_path, mock_logger):
        """Test PEExtractor initialization with non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return None for pe when file is not a valid PE
            assert extractor.pe is None
            # Logger should have recorded an error
            assert mock_logger.error.called


class TestPEExtractorMethods:
    """Tests for PEExtractor helper methods."""

    def test_check_dotnet_true(self, pe_binary_path, mock_logger):
        """Test _check_dotnet returns True for .NET PE."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # The test PE file is a .NET binary
            if extractor.pe is not None:
                result = extractor._check_dotnet()
                # d8637bdbcfc9112fcb1f0167b398e771 is a .NET binary
                assert result is True

    def test_check_dotnet_false(self, elf_binary_path, mock_logger):
        """Test _check_dotnet returns False for non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return False when PE is None
            result = extractor._check_dotnet()
            assert result is False

    def test_is_signed_false(self, pe_binary_path, mock_logger):
        """Test _is_signed method."""
        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 not None:
                result = extractor._is_signed()
                # Result depends on the actual binary
                assert isinstance(result, bool)

    def test_has_overlay(self, pe_binary_path, mock_logger):
        """Test _has_overlay method."""
        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 not None:
                result = extractor._has_overlay()
                assert isinstance(result, bool)


class TestGeneratePEFileObject:
    """Tests for _generate_pefile_object method."""

    def test_generate_pefile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_pefile_object with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # The PE object should be created successfully
            assert extractor.pe is not None

    def test_generate_pefile_object_invalid(self, temp_text_file, mock_logger):
        """Test _generate_pefile_object with invalid file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return None for invalid PE
            assert extractor.pe is None


class TestGenerateDotNetFileObject:
    """Tests for _generate_dotnetfile_object method."""

    def test_generate_dotnetfile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with .NET PE file."""
        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 not None and extractor._check_dotnet():
                dotnet, error = extractor._generate_dotnetfile_object()
                # Should create dotnet object for .NET PE
                assert dotnet is not None
                assert error is None

    def test_generate_dotnetfile_object_invalid(self, elf_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with non-.NET file."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

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

            dotnet, error = extractor._generate_dotnetfile_object()
            # Should return error for non-.NET file
            assert dotnet is None
            assert error is not None


class TestPEExtractorTag:
    """Tests for tag method in PE extractors."""

    def test_pe_features_tag(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_FEATURES.value

    def test_pe_import_tag(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_IMPORT.value

    def test_pe_section_tag(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_SECTION.value


class TestPEExtractorClickHouseTable:
    """Tests for get_clickhouse_table method in PE extractors."""

    def test_pe_features_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

    def test_pe_import_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

    def test_pe_section_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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


class TestPEExtractorPrepareExportData:
    """Tests for prepare_export_data method in PE extractors."""

    def test_pe_features_prepare_export_elasticsearch(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        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 not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ElasticsearchExporter")
                # Should return the pe_features dataclass
                assert result is extractor.pe_features

    def test_pe_features_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        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 not None:
                # 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)