Haidi Ibrahim

59 papers Misc 8Journal 47Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
Neural Comput. Appl.
Chengcheng Jin, Haidi Ibrahim
2026 J jnl
IEEE Trans. Artif. Intell.
Imran Riaz, Ahmad Nazri Ali, Haidi Ibrahim, Ilyas Ahmad Huqqani
2026 J jnl
Comput. Medical Imaging Graph.
Chengcheng Jin, Nor Safira Elaina Mohd Noor, Theam Foo Ng, Mohd Shahrimie Mohd Asaari, Haidi Ibrahim
2025 J jnl
Comput. Electron. Agric.
Zahid Ur Rahman, Mohd Shahrimie Mohd Asaari, Haidi Ibrahim
2025 J jnl
IEEE Access
Nor Safira Elaina Mohd Noor, Haidi Ibrahim, Chi Qin Lai, Jafri Malin Abdullah
2025 J jnl
Multim. Tools Appl.
Harn Tung Ng, Haidi Ibrahim, Parvathy Rajendran
2024 J jnl
Displays
Qamar Ul Islam, Haidi Ibrahim, Pan Kok Chin, Kevin Lim, Mohd Zaid Abdullah, Fatemeh Khozaei
2024 J jnl
Expert Syst. Appl.
Qamar Ul Islam, Haidi Ibrahim, Pan Kok Chin, Kevin Lim, Mohd Zaid Abdullah, Fatemeh Khozaei
2024 J jnl
IEEE Access
Zahid Ur Rahman, Mohd Shahrimie Mohd Asaari, Haidi Ibrahim, Intan Sorfina Zainal Abidin, Mohamad Khairi Ishak
2024 J jnl
Multim. Tools Appl.
Imran Riaz, Ahmad Nazri Ali, Haidi Ibrahim
2024 J jnl
J. Field Robotics
Qamar Ul Islam, Haidi Ibrahim, Pan Kok Chin, Kevin Lim, Mohd Zaid Abdullah
2023 Misc conf
RoViSP
Shadi Mahmoodi Khaniabadi, Haidi Ibrahim, Ilyas Ahmad Huqqani, Harsa Amylia Mat Sakim, Soo Siang Teoh
2023 J jnl
Comput.
Nor Safira Elaina Mohd Noor, Haidi Ibrahim, Chi Qin Lai, Jafri Malin Abdullah
2023 Misc conf
RoViSP
Sami Abdulla Mohsen Saleh, Shahrel Azmin Suandi, Haidi Ibrahim, Qusay Shihab Hamad, Ibrahim Al Amoudi
2023 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Imran Riaz, Ahmad Nazri Ali, Haidi Ibrahim
2023 J jnl
Multim. Tools Appl.
Shan Wei Chen, Shir Li Wang, Xiu Zhi Qi, Theam Foo Ng, Haidi Ibrahim
2023 Misc conf
RoViSP
Nazish Tariq, Michael Chi Seng Tang, Haidi Ibrahim, Soo Siang Teoh, Zunaina Embong, Aini Ismafairus Abd Hamid, Rafidah Zainon
2023 Misc conf
RoViSP
Nazish Tariq, Shadi Mahmoodi Khaniabadi, Soo Siang Teoh, Shir Li Wang, Theam Foo Ng, Rostam Affendi Hamzah, Zunaina Embong, Haidi Ibrahim
2023 Misc conf
RoViSP
Shadi Mahmoodi Khaniabadi, Harsa Amylia Mat Sakim, Haidi Ibrahim, Ilyas Ahmad Huqqani, Farzad Mahmoodi Khaniabadi, Soo Siang Teoh
2022 J jnl
IEEE Access
Michael Chi Seng Tang, Soo Siang Teoh, Haidi Ibrahim, Zunaina Embong
2022 J jnl
Expert Syst. Appl.
Chi Qin Lai, Haidi Ibrahim, Aini Ismafairus Abd Hamid, Jafri Malin Abdullah
2021 J jnl
IEEE Access
Chi Qin Lai, Haidi Ibrahim, Jafri Malin Abdullah, Azlinda Azman, Mohd Zaid Abdullah
2021 Misc conf
RoViSP
Chi Qin Lai, Azlinda Azman, Jafri Malin Abdullah, Haidi Ibrahim
2021 J jnl
IEEE Access
Yoong Khang Ooi, Haidi Ibrahim, Muhammad Nasiruddin Mahyuddin
2021 J jnl
Comput. Electron. Agric.
Win Hung Tan, Haidi Ibrahim, Derek Juinn Chieh Chan
2021 Misc conf
RoViSP
Sami Abdulla Mohsen Saleh, Shahrel Azmin Suandi, Haidi Ibrahim
2021 J jnl
IEEE Access
Nor Safira Elaina Mohd Noor, Haidi Ibrahim, Muhammad Hanif Che Lah, Jafri Malin Abdullah
2021 J jnl
Sensors
Alexander Ze Hwan Ooi, Zunaina Embong, Aini Ismafairus Abd Hamid, Rafidah Zainon, Shir Li Wang, Theam Foo Ng, Rostam Affendi Hamzah, Soo Siang Teoh, Haidi Ibrahim
2021 J jnl
Sensors
Michael Chi Seng Tang, Soo Siang Teoh, Haidi Ibrahim, Zunaina Embong
2021 J jnl
IEEE Access
Nazish Tariq, Rostam Affendi Hamzah, Theam Foo Ng, Shir Li Wang, Haidi Ibrahim
2021 Misc conf
RoViSP
Seng Chun Hoo, Adeshina Sirajdin Olagoke, Haidi Ibrahim
2020 J jnl
Sensors
Chi Qin Lai, Haidi Ibrahim, Aini Ismafairus Abd Hamid, Jafri Malin Abdullah
2020 J jnl
Comput. Intell. Neurosci.
Chi Qin Lai, Haidi Ibrahim, Aini Ismafairus Abd Hamid, Mohd Zaid Abdullah, Azlinda Azman, Jafri Malin Abdullah
2020 J jnl
IEEE Access
Adeshina Sirajdin Olagoke, Haidi Ibrahim, Soo Siang Teoh
2020 J jnl
IEEE Access
Nor Safira Elaina Mohd Noor, Haidi Ibrahim
2019 J jnl
Comput. Intell. Neurosci.
Chi Qin Lai, Haidi Ibrahim, Mohd Zaid Abdullah, Jafri Malin Abdullah, Shahrel Azmin Suandi, Azlinda Azman
2019 J jnl
J. Sensors
Roszaharah Yaacob, Chok Dong Ooi, Haidi Ibrahim, Nik Fakhuruddin Nik Hassan, Puwira Jaya Othman, Helmi Hadi
2019 J jnl
J. Sensors
Seng Chun Hoo, Haidi Ibrahim
2019 J jnl
Turkish J. Electr. Eng. Comput. Sci.
Haidi Ibrahim, Ahmed Khaldoon Abdalameer
2019 conf
EEET
Chi Qin Lai, Mohd Zaid Abdullah, Jafri Malin Abdullah, Azlinda Azman, Haidi Ibrahim
2018 conf
ICCMS
Sarah Hazwani Adnan, Shir Li Wang, Haidi Ibrahim, Theam Foo Ng
2018 J jnl
Signal Process. Image Commun.
Rostam Affendi Hamzah, Ahmad Fauzan Kadmin, Mohd Saad Hamid, S. Fakhar Abd Ghani, Haidi Ibrahim
2017 conf
ICCSCE
Roszaharah Yaacob, Helmi Mohd Hadi Pritam, Nik Fakhuruddin Nik Hassan, Chok Dong Ooi, Haidi Ibrahim, Puwira Jaya Othman
2017 J jnl
J. Vis. Commun. Image Represent.
Rostam Affendi Hamzah, Haidi Ibrahim, Anwar Hasni Abu Hassan
2016 J jnl
J. Sensors
Rostam Affendi Hamzah, Haidi Ibrahim
2016 J jnl
J. Sensors
Boon Tatt Koik, Haidi Ibrahim
2015 J jnl
Eng. Appl. Artif. Intell.
Sami Abdulla Mohsen Saleh, Shahrel Azmin Suandi, Haidi Ibrahim
2014 conf
ICCSCE
Boon Tatt Koik, Haidi Ibrahim
2014 J jnl
Int. J. Online Eng.
Haidi Ibrahim, Theam Foo Ng
2014 J jnl
Neurocomputing
Waled Hussein Al-Arashi, Haidi Ibrahim, Shahrel Azmin Suandi
2014 J jnl
Signal Image Video Process.
Sin Hoong Teoh, Haidi Ibrahim
2012 J jnl
Sensors
Norasyikin Fadilah, Junita Mohamad-Saleh, Zaini Abdul Halim, Haidi Ibrahim, Syed Salim Syed Ali
2011 J jnl
Comput. Electr. Eng.
Nicholas Sia Pik Kong, Haidi Ibrahim
2009 J jnl
IEEE Trans. Consumer Electron.
Chen Hee Ooi, Nicholas Sia Pik Kong, Haidi Ibrahim
2009 J jnl
IEEE Trans. Consumer Electron.
Haidi Ibrahim, Nicholas Sia Pik Kong
2008 J jnl
IEEE Trans. Consumer Electron.
Nicholas Sia Pik Kong, Haidi Ibrahim
2008 J jnl
IEEE Trans. Consumer Electron.
Kenny Kal Vin Toh, Haidi Ibrahim, Muhammad Nasiruddin Mahyuddin
2008 J jnl
IEEE Trans. Consumer Electron.
Haidi Ibrahim, Nicholas Sia Pik Kong, Theam Foo Ng
2007 J jnl
IEEE Trans. Consumer Electron.
Haidi Ibrahim, Nicholas Sia Pik Kong
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 != ""