Osama Amin

117 papers B 16C 1Misc 2Journal 76Unranked 21
YearRankTypeTitle / Venue / Authors
2025 B conf
WCNC
Yuxiang Liu, Osama Amin, Basem Shihada
2025 B conf
GLOBECOM
Jichen Lu, Osama Amin, Basem Shihada
2025 conf
ICC
Yuxiang Liu, Osama Amin, Basem Shihada
2025 J jnl
ACM Trans. Comput. Heal.
Luyao Yang, Osama Amin, Azmy Faisal, Basem Shihada
2024 B conf
WCNC
Zhirui Lu, Osama Amin, Basem Shihada
2024 J jnl
Frontiers Commun. Networks
Osama Amin, Shuping Dang, Amr M. Abdelhady, Guoqing Ma, Jia Ye, Mohamed-Slim Alouini, Basem Shihada
2024 J jnl
IEEE Trans. Mob. Comput.
Wiem Abderrahim, Osama Amin, Basem Shihada
2024 conf
SM
Yuxiang Liu, Osama Amin, Noha Alharthi, Jaafar M. H. Elmirghani, Ahmed M. Eltawil, Basem Shihada
2024 J jnl
IEEE Trans. Mob. Comput.
Wafa Hedhly, Osama Amin, Mohamed-Slim Alouini, Basem Shihada
2024 J jnl
ACM Comput. Surv.
Luyao Yang, Osama Amin, Basem Shihada
2024 C conf
HealthCom
Luyao Yang, Osama Amin, Basem Shihada
2024 conf
BlackSeaCom
Sahar Ammar, Osama Amin, Basem Shihada
2023 J jnl
IEEE Trans. Mob. Comput.
Wafa Hedhly, Osama Amin, Basem Shihada, Mohamed-Slim Alouini
2023 conf
SM
Wafa Hedhly, Osama Amin, Mohamed-Slim Alouini, Basem Shihada
2023 J jnl
CoRR
Wiem Abderrahim, Osama Amin, Basem Shihada
2023 conf
ICC
Fahad S. Alqurashi, Osama Amin, Basem Shihada
2023 J jnl
IEEE Commun. Mag.
Wiem Abderrahim, Osama Amin, Basem Shihada
2023 J jnl
CoRR
Wiem Abderrahim, Osama Amin, Basem Shihada
2023 J jnl
IEEE Commun. Mag.
Sahar Ammar, Osama Amin, Mohamed-Slim Alouini, Basem Shihada
2022 J jnl
IEEE Trans. Commun.
Amr M. Abdelhady, Osama Amin, Ahmed Kamal Sultan-Salem, Mohamed-Slim Alouini, Basem Shihada
2022 J jnl
Frontiers Commun. Networks
Sidrah Javed, Ahmed Elzanaty, Osama Amin, Mohamed-Slim Alouini, Basem Shihada
2022 J jnl
IEEE Commun. Lett.
Sahar Ammar, Osama Amin, Mohamed-Slim Alouini, Basem Shihada
2022 J jnl
IEEE Trans. Commun.
Jia Ye, Shuping Dang, Guoqing Ma, Osama Amin, Basem Shihada, Mohamed-Slim Alouini
2022 J jnl
CoRR
Wiem Abderrahim, Osama Amin, Mohamed-Slim Alouini, Basem Shihada
2022 J jnl
IEEE Trans. Commun.
Wiem Abderrahim, Osama Amin, Mohamed-Slim Alouini, Basem Shihada
2022 J jnl
IEEE Open J. Commun. Soc.
Amr M. Abdelhady, Osama Amin, Mohamed-Slim Alouini, Basem Shihada
2021 J jnl
IEEE Open J. Commun. Soc.
Wafa Hedhly, Osama Amin, Basem Shihada, Mohamed-Slim Alouini
2021 J jnl
IEEE Trans. Mol. Biol. Multi Scale Commun.
Osama Amin, Hayssam Dahrouj, Nojood Almayouf, Tareq Y. Al-Naffouri, Basem Shihada, Mohamed-Slim Alouini
2021 J jnl
IEEE Open J. Commun. Soc.
Amr M. Abdelhady, Ahmed K. Sultan-Salem, Osama Amin, Basem Shihada, Mohamed-Slim Alouini
2021 J jnl
IEEE Trans. Commun.
Sidrah Javed, Ahmed Elzanaty, Osama Amin, Basem Shihada, Mohamed-Slim Alouini
2020 J jnl
IEEE Commun. Surv. Tutorials
Sidrah Javed, Osama Amin, Basem Shihada, Mohamed-Slim Alouini
2020 J jnl
IEEE Commun. Mag.
Basem Shihada, Osama Amin, Christopher Bainbridge, Seifallah Jardak, Omar Alkhazragi, Tien Khee Ng, Boon S. Ooi, Michael L. Berumen, Mohamed-Slim Alouini
2020 J jnl
IEEE Trans. Cogn. Commun. Netw.
Wafa Hedhly, Osama Amin, Mohamed-Slim Alouini
2020 Misc conf
ICASSP
Touseef Yaqoob, Saira Aziz, Sajid Ahmed, Osama Amin, Mohamed-Slim Alouini
2020 J jnl
CoRR
Wiem Abderrahim, Osama Amin, Mohamed-Slim Alouini, Basem Shihada
2020 J jnl
IEEE Open J. Commun. Soc.
Wiem Abderrahim, Osama Amin, Mohamed-Slim Alouini, Basem Shihada
2020 J jnl
IEEE Commun. Lett.
Ahmed Douik, Hayssam Dahrouj, Osama Amin, Bayan Aloquibi, Tareq Y. Al-Naffouri, Mohamed-Slim Alouini
2020 J jnl
IEEE Trans. Commun.
Maryam Khalid, Osama Amin, Sajid Ahmed, Basem Shihada, Mohamed-Slim Alouini
2020 J jnl
IEEE Internet Things Mag.
Maha Aslani, Osama Amin, Faisal Nawab, Basem Shihada
2020 J jnl
IEEE Trans. Wirel. Commun.
Amr M. Abdelhady, Osama Amin, Basem Shihada, Mohamed-Slim Alouini
2020 J jnl
IEEE Open J. Commun. Soc.
Hadeel Elayan, Osama Amin, Basem Shihada, Raed M. Shubair, Mohamed-Slim Alouini
2020 J jnl
CoRR
Osama Amin, Hayssam Dahrouj, Nojood Almayouf, Tareq Y. Al-Naffouri, Basem Shihada, Mohamed-Slim Alouini
2019 J jnl
IEEE Trans. Wirel. Commun.
Sidrah Javed, Osama Amin, Salama S. Ikki, Mohamed-Slim Alouini
2019 J jnl
IEEE Commun. Mag.
Maryam Khalid, Osama Amin, Sajid Ahmed, Basem Shihada, Mohamed-Slim Alouini
2019 J jnl
IEEE Trans. Wirel. Commun.
Amr M. Abdelhady, Osama Amin, Anas Chaaban, Basem Shihada, Mohamed-Slim Alouini
2019 J jnl
CoRR
Shuping Dang, Osama Amin, Basem Shihada, Mohamed-Slim Alouini
2019 J jnl
IEEE Trans. Commun.
Sidrah Javed, Osama Amin, Basem Shihada, Mohamed-Slim Alouini
2019 J jnl
IEEE Trans. Veh. Technol.
Sidrah Javed, Osama Amin, Salama S. Ikki, Mohamed-Slim Alouini
2019 J jnl
IEEE Trans. Commun.
Amr M. Abdelhady, Osama Amin, Anas Chaaban, Basem Shihada, Mohamed-Slim Alouini
2019 J jnl
CoRR
Hadeel Elayan, Osama Amin, Basem Shihada, Raed M. Shubair, Mohamed-Slim Alouini
2018 J jnl
CoRR
Maryam Khalid, Osama Amin, Sajid Ahmed, Basem Shihada, Mohamed-Slim Alouini
2018 J jnl
IEEE Trans. Green Commun. Netw.
Taniya Shafique, Amr M. Abdelhady, Osama Amin, Mohamed-Slim Alouini
2018 J jnl
CoRR
Ebrahim Bedeer, Osama Amin, Octavia A. Dobre, Mohamed Hossam Ahmed, Kareem E. Baddour
2018 J jnl
IEEE Trans. Commun.
Mohamed Gaafar, Mohammad Galal Khafagy, Osama Amin, Rafael F. Schaefer, Mohamed-Slim Alouini
2018 conf
ICC
Adham Hagag, Osama Amin, Lei Cao, Ramanarayanan Viswanathan, Mohamed-Slim Alouini
2018 B conf
GLOBECOM
Amr M. Abdelhady, Osama Amin, Basem Shihada, Mohamed-Slim Alouini
2018 conf
ICC
Maryam Khalid, Osama Amin, Sajid Ahmed, Mohamed-Slim Alouini
2018 conf
CommNet
Hadeel Elayan, Osama Amin, Raed M. Shubair, Mohamed-Slim Alouini
2017 J jnl
IEEE Access
Sidrah Javed, Osama Amin, Salama S. Ikki, Mohamed-Slim Alouini
2017 J jnl
CoRR
Mohammad Mahdi Azari, Yuri Murillo, Osama Amin, Fernando Rosas, Mohamed-Slim Alouini, Sofie Pollin
2017 B conf
PIMRC
Mohammad Mahdi Azari, Yuri Murillo, Osama Amin, Fernando Rosas, Mohamed-Slim Alouini, Sofie Pollin
2017 conf
ICC
Taniya Shafique, Osama Amin, Mohamed-Slim Alouini
2017 J jnl
IEEE Trans. Wirel. Commun.
Amr M. Abdelhady, Osama Amin, Mohamed-Slim Alouini
2017 J jnl
CoRR
Mohamed Gaafar, Mohammad Galal Khafagy, Osama Amin, Rafael F. Schaefer, Mohamed-Slim Alouini
2017 Misc conf
ICASSP
Sidrah Javed, Osama Amin, Mohamed-Slim Alouini
2017 B conf
WCNC
Osama Amin, Walid Abediseid, Mohamed-Slim Alouini
2017 conf
ICC
Sidrah Javed, Osama Amin, Salama S. Ikki, Mohamed-Slim Alouini
2017 conf
WSA
Mohamed Gaafar, Osama Amin, Rafael F. Schaefer, Mohamed-Slim Alouini
2017 J jnl
CoRR
Mohamed Gaafar, Osama Amin, Rafael F. Schaefer, Mohamed-Slim Alouini
2017 conf
ICC Workshops
Mohamed Gaafar, Osama Amin, Rafael F. Schaefer, Mohamed-Slim Alouini
2017 B conf
GLOBECOM
Wafa Hedhly, Osama Amin, Mohamed-Slim Alouini
2017 B conf
GLOBECOM
Sidrah Javed, Osama Amin, Salama S. Ikki, Mohamed-Slim Alouini
2017 B conf
GLOBECOM
Sidrah Javed, Osama Amin, Salama S. Ikki, Mohamed-Slim Alouini
2017 J jnl
IEEE J. Sel. Areas Commun.
Osama Amin, Walid Abediseid, Mohamed-Slim Alouini
2017 conf
GLOBECOM Workshops
Amr M. Abdelhady, Osama Amin, Anas Chaaban, Mohamed-Slim Alouini
2017 J jnl
IEEE Trans. Wirel. Commun.
Mohamed Gaafar, Osama Amin, Walid Abediseid, Mohamed-Slim Alouini
2016 J jnl
CoRR
Hesham ElSawy, Ahmad AlAmmouri, Osama Amin, Mohamed-Slim Alouini
2016 conf
GlobalSIP
Amr M. Abdelhady, Osama Amin, Anas Chaaban, Mohamed-Slim Alouini
2016 J jnl
IEEE Trans. Veh. Technol.
Osama Amin, Ebrahim Bedeer, Mohamed Hossam Ahmed, Octavia A. Dobre
2016 B conf
PIMRC
Bayan Al-Oquibi, Osama Amin, Hayssam Dahrouj, Tareq Y. Al-Naffouri, Mohamed-Slim Alouini
2016 J jnl
CoRR
Mohamed Gaafar, Mohammad Galal Khafagy, Osama Amin, Mohamed-Slim Alouini
2016 conf
ICC
Mohamed Gaafar, Mohammad Galal Khafagy, Osama Amin, Mohamed-Slim Alouini
2016 J jnl
CoRR
Mohamed Gaafar, Osama Amin, Rafael F. Schaefer, Mohamed-Slim Alouini
2016 J jnl
IEEE Trans. Wirel. Commun.
Ahmad AlAmmouri, Hesham ElSawy, Osama Amin, Mohamed-Slim Alouini
2016 J jnl
IEEE Commun. Lett.
Mohamed Gaafar, Osama Amin, Aïssa Ikhlef, Anas Chaaban, Mohamed-Slim Alouini
2016 J jnl
IEEE Trans. Veh. Technol.
Osama Amin, Ebrahim Bedeer, Mohamed Hossam Ahmed, Octavia A. Dobre, Mohamed-Slim Alouini
2016 conf
ICC
Amr M. Abdelhady, Osama Amin, Mohamed-Slim Alouini
2016 J jnl
IEEE Trans. Wirel. Commun.
Osama Amin, Walid Abediseid, Mohamed-Slim Alouini
2016 J jnl
CoRR
Mohamed Gaafar, Osama Amin, Walid Abediseid, Mohamed-Slim Alouini
2015 conf
ICEAC
Mohammed Abo-Zahhad, Mohammed Farrag, Abdelhay Ali, Osama Amin
2015 J jnl
IEEE Trans. Veh. Technol.
Ebrahim Bedeer, Osama Amin, Octavia A. Dobre, Mohamed Hossam Ahmed, Kareem E. Baddour
2015 conf
ICC Workshops
Osama Amin, Ebrahim Bedeer, Mohamed Hossam Ahmed, Octavia A. Dobre, Mohamed-Slim Alouini
2015 J jnl
IEEE J. Sel. Areas Commun.
Ebrahim Bedeer, Abdulaziz Alorainy, Md. Jahangir Hossain, Osama Amin, Mohamed-Slim Alouini
2015 J jnl
CoRR
Ahmad AlAmmouri, Hesham ElSawy, Osama Amin, Mohamed-Slim Alouini
2015 B conf
GLOBECOM
Ahmad AlAmmouri, Hesham ElSawy, Osama Amin, Mohamed-Slim Alouini
2015 J jnl
CoRR
Ahmad AlAmmouri, Hesham ElSawy, Osama Amin, Mohamed-Slim Alouini
2015 B conf
ISIT
Osama Amin, Walid Abediseid, Mohamed-Slim Alouini
2015 J jnl
IEEE Trans. Veh. Technol.
Osama Amin, Raed Mesleh, Salama S. Ikki, Mohamed Hossam Ahmed, Octavia A. Dobre
2015 B conf
GLOBECOM
Mohamed Gaafar, Osama Amin, Walid Abediseid, Mohamed-Slim Alouini
2015 J jnl
CoRR
Mohamed Gaafar, Osama Amin, Walid Abediseid, Mohamed-Slim Alouini
2015 J jnl
CoRR
Mohamed Gaafar, Osama Amin, Walid Abediseid, Mohamed-Slim Alouini
2015 B conf
PIMRC
Mohamed Gaafar, Osama Amin, Walid Abediseid, Mohamed-Slim Alouini
2014 J jnl
IEEE Wirel. Commun. Lett.
Osama Amin, Ebrahim Bedeer, Mohamed Hossam Ahmed, Octavia A. Dobre
2014 conf
ICC
Osama Amin, Ebrahim Bedeer, Mohamed Hossam Ahmed, Octavia A. Dobre
2014 B conf
WCNC
Raed Mesleh, Salama S. Ikki, Osama Amin
2014 J jnl
IET Commun.
Raed Mesleh, Salama S. Ikki, Osama Amin
2013 B conf
PIMRC
Raed Mesleh, Salama Said Ikki, Osama Amin, Said Boussakta
2012 J jnl
IEEE Trans. Commun.
Osama Amin, Murat Uysal
2012 J jnl
IET Commun.
Osama Amin, Salama S. Ikki, Murat Uysal
2012 J jnl
IEEE Wirel. Commun. Lett.
Osama Amin, Lutz Lampe
2011 J jnl
IEEE Trans. Veh. Technol.
Osama Amin, Salama S. Ikki, Murat Uysal
2011 J jnl
IEEE Trans. Wirel. Commun.
Osama Amin, Murat Uysal
2010
Osama Amin
2010 J jnl
IET Commun.
Osama Amin, Berna Gedik, Murat Uysal
2010 conf
VTC Spring
Salama Ikki, Osama Amin, Murat Uysal
2010 conf
ICC
Salama S. Ikki, Osama Amin, Murat Uysal
2009 J jnl
IEEE Trans. Wirel. Commun.
Berna Gedik, Osama Amin, Murat Uysal
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)