Neil W. Bergmann

95 papers A 5B 11C 5Misc 9Journal 14Unranked 50
YearRankTypeTitle / Venue / Authors
2019 J jnl
Pervasive Mob. Comput.
Vikram Kumar, Reza Arablouei, Frank de Hoog, Raja Jurdak, Branislav Kusy, Neil W. Bergmann
2019 C conf
PRDC
Huichen Lin, Dong Seong Kim, Neil W. Bergmann
2018 conf
IPSN
Afaz Uddin Ahmed, Neil W. Bergmann, Reza Arablouei, Frank de Hoog, Branislav Kusy, Raja Jurdak
2018 J jnl
IEEE Access
Liqun Hou, Shudong Tan, Zhijuan Zhang, Neil W. Bergmann
2017 J jnl
CoRR
Vikram Kumar, Neil W. Bergmann, Izanoordina Ahmad, Raja Jurdak, Branislav Kusy
2017 J jnl
J. Low Power Electron.
Ammar A. Altameemi, Neil W. Bergmann
2017 conf
IoTDI
Weitao Xu, Yiran Shen, Yongtuo Zhang, Neil W. Bergmann, Wen Hu
2017 J jnl
CoRR
Vikram Kumar, Reza Arablouei, Raja Jurdak, Branislav Kusy, Neil W. Bergmann
2017 conf
WPMC
Vikram Kumar, Reza Arablouei, Raja Jurdak, Branislav Kusy, Neil W. Bergmann
2017 J jnl
CoRR
Vikram Kumar, Reza Arablouei, Raja Jurdak, Branislav Kusy, Neil W. Bergmann
2017 B conf
PIMRC
Vikram Kumar, Reza Arablouei, Raja Jurdak, Branislav Kusy, Neil W. Bergmann
2017 J jnl
CoRR
Vikram Kumar, Reza Arablouei, Brano Kusy, Raja Jurdak, Neil W. Bergmann
2016 C conf
CIT
Nazia Majadi, Jarrod Trevathan, Neil W. Bergmann
2016 conf
ISED
Ammar A. Altameemi, Neil W. Bergmann
2016 J jnl
Inf.
Huichen Lin, Neil W. Bergmann
2016 B conf
FPL
Size Xiao, Adam Postula, Neil W. Bergmann
2016 conf
IPSN
Weitao Xu, Yiran Shen, Neil W. Bergmann, Wen Hu
2016 conf
PerCom Workshops
Izanoordina Ahmad, Neil W. Bergmann, Raja Jurdak, Branislav Kusy
2016 conf
IPSN
Weitao Xu, Girish Revadigar, Chengwen Luo, Neil W. Bergmann, Wen Hu
2015 J jnl
IEEE Trans. Computers
Yi Tang, Neil W. Bergmann
2015 B conf
WiMob
Ahmad El Shoghri, Branislav Kusy, Raja Jurdak, Neil W. Bergmann
2015 conf
UIC/ATC/ScalCom
Ida Bagus Irawan Purnama, Neil W. Bergmann, Raja Jurdak, Kun Zhao
2015 J jnl
EURASIP J. Embed. Syst.
Jean-Philippe Diguet, Neil W. Bergmann, Jean-Christophe Morgère
2015 conf
FPT
Size Xiao, Adam Postula, Neil W. Bergmann
2014 A conf
DATE
Sébastien Le Nours, Adam Postula, Neil W. Bergmann
2013 conf
ISSNIP
Shiddartha Raj Bhandari, Neil W. Bergmann
2013 J jnl
ACM Trans. Embed. Comput. Syst.
Neil W. Bergmann, Sunil Shukla, Jürgen Becker
2013 conf
TrustCom/ISPA/IUCC
Saeed Farooq Khan, Marius Portmann, Neil W. Bergmann
2013 conf
LCN Workshops
Neil W. Bergmann, Jonathan Juergens, Liqun Hou, Yunlong Wang, Jarrod Trevathan
2012 J jnl
J. Signal Process. Syst.
Lesley Shannon, Oliver Diessel, Neil W. Bergmann
2012 J jnl
IEEE Trans. Instrum. Meas.
Liqun Hou, Neil W. Bergmann
2012 conf
CCNC
Neil W. Bergmann, Peter J. Robinson
2010 conf
DASIP
Hongzhi Liu, Neil W. Bergmann
2010 C conf
ETFA
Liqun Hou, Neil W. Bergmann
2009 Misc conf
FCCM
Jason Wu, John Williams, Neil W. Bergmann, Peter Sutton
2009 ed.
FPT
Neil W. Bergmann, Oliver Diessel, Lesley Shannon
2008 conf
ISVLSI
Sunil Shukla, Neil W. Bergmann, Jürgen Becker
2008 B conf
FPL
Jason Wu, John Williams, Neil W. Bergmann
2008 Misc conf
FCCM
Jason Wu, John Williams, Neil W. Bergmann
2007 B conf
FPL
Irfan Syed, John A. Williams, Neil W. Bergmann
2007 conf
FPT
Xin Xie, John A. Williams, Neil W. Bergmann
2007 Misc conf
FCCM
Neil W. Bergmann, Yi Lu, John A. Williams
2007 Misc conf
FCCM
Chin Mun Wee, Peter R. Sutton, Neil W. Bergmann
2007 A conf
IPDPS
Sunil Shukla, Neil W. Bergmann, Jürgen Becker
2006 conf
ARCS Workshops
Neil W. Bergmann, John A. Williams, Jie Han, Yi Chen
2006 Misc conf
FCCM
John A. Williams, Irfan Syed, Jason Wu, Neil W. Bergmann
2006 B conf
FPL
Chin Mun Wee, Peter R. Sutton, Neil W. Bergmann, John A. Williams
2006 conf
Dynamically Reconfigurable Architectures
Sunil Shukla, Neil W. Bergmann, Jürgen Becker
2006 conf
ARC
Sunil Shukla, Neil W. Bergmann, Jürgen Becker
2006 conf
ISVLSI
Sunil Shukla, Neil W. Bergmann, Jürgen Becker
2006 Misc conf
FCCM
Chin Mun Wee, Peter R. Sutton, Neil W. Bergmann, John A. Williams
2005 conf
ICETE
Matthew D'Souza, Adam Postula, Neil W. Bergmann, Montserrat Ros
2005 conf
WMASH
Matthew J. A. D'Souza, Adam Postula, Neil W. Bergmann, Montserrat Ros
2005 B conf
FPL
Chin Mun Wee, Peter R. Sutton, Neil W. Bergmann
2005 conf
FPT
Yi Lu, Neil W. Bergmann
2005 Misc conf
FCCM
John A. Williams, Neil W. Bergmann, Xin Xie
2005 conf
ICETE
Matthew D'Souza, Adam Postula, Neil W. Bergmann, Montserrat Ros
2004 conf
ERSA
John Williams, Neil W. Bergmann
2004 conf
FPT
Peter Waldeck, Neil W. Bergmann
2004 conf
FPT
Tien-Lung Lee, Andy Lee, Neil W. Bergmann
2004 conf
FPT
John Williams, Neil W. Bergmann
2004 conf
FPT
Sunil Shukla, Neil W. Bergmann
2003 conf
IWSOC
Neil W. Bergmann, Peter Waldeck, John A. Williams
2003 conf
Engineering of Reconfigurable Systems and Algorithms
Tien-Lung Lee, Neil W. Bergmann
2003 conf
IWSOC
Peter Waldeck, Neil W. Bergmann
2003 conf
Engineering of Reconfigurable Systems and Algorithms
Neil W. Bergmann, John A. Williams, Peter Waldeck
2003 conf
FPT
Andy Lee, Neil W. Bergmann
2003 conf
FPT
Neil W. Bergmann, John Williams
2002 conf
FPT
Neil W. Bergmann
2001 A conf
ACSAC
Neil W. Bergmann, Anwar S. Dawood
2001 J jnl
Pattern Recognit.
A. Cheung, Mohammed Bennamoun, Neil W. Bergmann
2001 A conf
ACSAC
David Brodrick, Anwar S. Dawood, Neil W. Bergmann, Melanie Wark
2000 C conf
VCIP
Anwar S. Dawood, Neil W. Bergmann, Zulfi Asdani, Boris Bravo
2000 Misc conf
ICASSP
Yuk Ying Chung, Man To Wong, Neil W. Bergmann
2000 C conf
VCIP
Vera Yuk Ying Chung, Man To Wong, Neil W. Bergmann
1999 conf
Evolvable Hardware
Reid B. Porter, Kevin McCabe, Neil W. Bergmann
1999 conf
ISSPA
Anwar S. Dawood, Neil W. Bergmann
1999 conf
ISSPA
Anwar S. Dawood, Neil W. Bergmann
1999 B conf
FPL
Gordon J. Brebner, Neil W. Bergmann
1998 B conf
FPL
Neil W. Bergmann, Peter R. Sutton
1998 B conf
SMC
A. Cheung, Mohammed Bennamoun, Neil W. Bergmann
1998 conf
EUSIPCO
Wilfried Osberger, Anthony J. Maeder, Neil W. Bergmann
1998 conf
ICIP (3)
Wilfried Osberger, Neil W. Bergmann, Anthony J. Maeder
1998 conf
SEAL
Reid B. Porter, Neil W. Bergmann
1998 B conf
SMC
Yuk Ying Chung, Man To Wong, Neil W. Bergmann, Mohammed Bennamoun
1998 conf
Human Vision and Electronic Imaging
Wilfried Osberger, Anthony J. Maeder, Neil W. Bergmann
1997 conf
ASYNC
David A. Kearney, Neil W. Bergmann
1997 Misc conf
FCCM
Neil W. Bergmann, Yuk Ying Chung, Bernard K. Gunther
1997 conf
ICIP (1)
Neil W. Bergmann, Yuk Ying Chung
1996 conf
ISSPA
Neil W. Bergmann, Yuk Ying Chung
1996 conf
ISSPA
David A. Keamey, Neil W. Bergmann, Richard G. Burford
1996 conf
ISSPA
Neil W. Bergmann
1995 conf
ASYNC
David A. Kearney, Neil W. Bergmann
1994 conf
ICASSP (2)
Neil W. Bergmann, J. Craig Mudge
1994 A conf
CSCW
Neil W. Bergmann, J. Craig Mudge
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 != ""