Weiming Zhang

73 papers A* 2A 2B 4C 5Misc 4Journal 28Unranked 28
YearRankTypeTitle / Venue / Authors
2026 J jnl
Swarm Evol. Comput.
Hongtao Lei, Chunxian Guo, Jianmai Shi, Cheng Zhu, Weiming Zhang
2026 J jnl
Int. J. Intell. Syst.
Haodan Ran, Yang Fang, Xiang Zhao, Jiuyang Tang, Weiming Zhang
2025 conf
DASFAA (3)
Haodan Ran, Yang Fang, Jiuyang Tang, Weiming Zhang, Jinzhi Liao, Xiang Zhao
2025 conf
APWeb-WAIM (1)
Haodan Ran, Yang Fang, Yang Sun, Jiuyang Tang, Weiming Zhang
2024 J jnl
IEEE Trans. Comput. Soc. Syst.
Lijian Sun, Yun Zhou, Hanlin You, Cheng Zhu, Weiming Zhang
2024 J jnl
ACM Trans. Sens. Networks
Xiaofeng Cao, Deke Guo, Feng Lyu, Peng Yang, Weiming Zhang
2023 J jnl
Knowl. Based Syst.
Hang Zhang, Weike Liu, Hao Yang, Yun Zhou, Cheng Zhu, Weiming Zhang
2022 A* conf
IJCAI
Haoyu Yang, Kaiming Xiao, Lihua Liu, Hongbin Huang, Weiming Zhang
2022 J jnl
Expert Syst. Appl.
Qingyong Wang, Yun Zhou, Zehong Cao, Weiming Zhang
2021 J jnl
Expert Syst. Appl.
Baodan Sun, Yun Zhou, Jianjiang Wang, Weiming Zhang
2020 J jnl
Expert Syst. Appl.
Qingyong Wang, Yun Zhou, Weiming Zhang, Zhangui Tang, Xiaojing Chen
2020 J jnl
Sensors
Jingwen Yan, Kaiming Xiao, Cheng Zhu, Jun Wu, Guoli Yang, Weiming Zhang
2020 J jnl
Entropy
Kaiming Xiao, Cheng Zhu, Junjie Xie, Yun Zhou, Xianqiang Zhu, Weiming Zhang
2020 J jnl
IEEE/ACM Trans. Netw.
Xiaofeng Cao, Guoming Tang, Deke Guo, Yan Li, Weiming Zhang
2020 conf
ICACI
Zhengfei Yu, Yun Zhou, Weiming Zhang
2020 J jnl
J. Comput. Sci. Technol.
Yifan Chen, Xiang Zhao, Jinyuan Liu, Bin Ge, Weiming Zhang
2020 J jnl
IEEE Access
Kaiming Xiao, Cheng Zhu, Weiming Zhang, Xiangyu Wei
2020 J jnl
IEEE Access
Lijian Sun, Yun Zhou, Yanjuan Wang, Cheng Zhu, Weiming Zhang
2019 J jnl
CoRR
Xiaofeng Cao, Guoming Tang, Deke Guo, Yan Li, Weiming Zhang
2019 conf
ICACI
Peichao Wang, Yun Zhou, Baodan Sun, Weiming Zhang
2019 conf
ICDE Workshops
Yifan Chen, Xiang Zhao, Jinyuan Liu, Bin Ge, Weiming Zhang
2018 conf
ISCBI
Yunfei Wang, Luohao Tang, Yun Zhou, Cheng Zhu, Weiming Zhang, Lianfei Yu
2018 B conf
SMC
Yun Zhou, Cheng Zhu, Luohao Tang, Weiming Zhang, Peichao Wang
2018 A* conf
INFOCOM
Kaiming Xiao, Cheng Zhu, Junjie Xie, Yun Zhou, Xianqiang Zhu, Weiming Zhang
2018 J jnl
IEEE Access
Jiang Wang, Cheng Zhu, Yun Zhou, Xianqiang Zhu, Yilin Wang, Weiming Zhang
2018 J jnl
IEEE Access
Xiaofeng Cao, Yuhua Zhong, Yun Zhou, Jiang Wang, Cheng Zhu, Weiming Zhang
2017 B conf
SMC
Peichao Wang, Yun Zhou, Jiang Wang, Cheng Zhu, Chao Chen, Weiming Zhang
2017 J jnl
Sci. Program.
Lianfei Yu, Cheng Zhu, Jianmai Shi, Weiming Zhang
2017 conf
AMBN
Yun Zhou, Jiang Wang, Cheng Zhu, Weiming Zhang
2017 conf
SIGSPATIAL/GIS
Jiang Wang, Yun Zhou, Xiaofeng Cao, Yilin Wang, Cheng Zhu, Weiming Zhang
2016 J jnl
Comput. Syst. Sci. Eng.
Yifan Chen, Xiang Zhao, Jiuyang Tang, Weiming Zhang, Haichuan Shang
2015 J jnl
Comput. Intell.
Jiang-feng Luo, Cheng Zhu, Weiming Zhang, Zhong Liu
2014 J jnl
Comput. Math. Organ. Theory
Guoli Yang, Weiming Zhang, Baoxin Xiu, Zhong Liu, Jincai Huang
2014 conf
GAMENETS
Kaiming Xiao, Cheng Zhu, Weiming Zhang, Xiangyu Wei, Songchao Hu
2013 J jnl
IEEE Trans. Intell. Transp. Syst.
Zhong Liu, Quan Luo, Ding Wen, Shidong Qiao, Jianmai Shi, Weiming Zhang
2013 A conf
CP
Jun He, Pierre Flener, Justin Pearson, Weiming Zhang
2012 J jnl
ACM Trans. Internet Techn.
Deke Guo, Yunhao Liu, Hai Jin, Zhong Liu, Weiming Zhang, Hui Liu
2011 C conf
DASC
Jie Liu, Weiming Zhang, Bao-Xin Xiu, Zhong Liu
2011 B conf
SMC
Guoli Yang, Weiming Zhang, Baoxin Xiu, Yong Zhang, Shidong Qiao
2011 C conf
DASC
Wei Du, Zhong Liu, Bao-Xin Xiu, Weiming Zhang, Qing Cheng
2011 C conf
DASC
Xu-Hui Luo, Jiang Wang, Meng Qian, Zhong Liu, Weiming Zhang, Cheng Zhu
2011 J jnl
IEEE Intell. Syst.
Zhong Liu, Dongsheng Yang, Ding Wen, Weiming Zhang, Wenji Mao
2011 Misc conf
IRI
Guoli Yang, Baoxin Xiu, Weiming Zhang, Yong Zhang
2011 C conf
HIS
Luohao Tang, Weiming Zhang, Cheng Zhu, Jincai Huang
2011 conf
CCIS
Luohao Tang, Cheng Zhu, Weiming Zhang, Zhong Liu
2010 conf
ICSI (1)
Yan-Li Hu, Lining Xing, Weiming Zhang, Weidong Xiao, Daquan Tang
2010 Misc conf
ICMLC
Yi-Ping Bao, Li Yao, Weiming Zhang, Jiuyang Tang
2010 Misc conf
ICNC
Jun Qiang, Zhong Liu, Dongsheng Yang, Weiming Zhang
2010 Misc conf
ICNC
Liang Bai, Yan-Li Hu, Songyang Lao, Weiming Zhang
2009 J jnl
IEEE Trans. Syst. Man Cybern. Part A
Jianwen Hu, Xiaofeng Hu, Weiming Zhang, Shuguang Zhu, Zhong Liu, Jincai Huang
2007 conf
WIAMIS
Liang Bai, Songyang Lao, Weiming Zhang, Gareth J. F. Jones, Alan F. Smeaton
2007 conf
Adaptive Multimedia Retrieval
Liang Bai, Songyang Lao, Weiming Zhang, Gareth J. F. Jones, Alan F. Smeaton
2006 J jnl
Sci. China Ser. F Inf. Sci.
Jianwen Hu, Weiming Zhang, Zhong Liu, Xiaofeng Hu, Guangya Si
2006 conf
ICEBE
Zhong Liu, Meng Qian, Weiming Zhang, Jincai Huang
2006 conf
AICT/ICIW
Jiuyang Tang, Weiming Zhang, Weidong Xiao, Daquan Tang, Jun-Feng Song
2005 conf
ITCC (1)
Jun-Feng Song, Weiming Zhang, Weidong Xiao
2005 conf
GCC
Yan-Li Hu, Liang Bai, Weiming Zhang, Weidong Xiao, Zhong Liu
2005 conf
SOAS
Jiuyang Tang, Weiming Zhang, Weidong Xiao, Daquan Tang
2005 C conf
APWeb
Jiuyang Tang, Weiming Zhang, Weidong Xiao
2005 B conf
SMC
Bao-Xin Xiu, Weiming Zhang, Zhong Liu, Jincai Huang
2005 conf
ISWS
Deke Guo, Honghui Chen, Xueshan Luo, Weiming Zhang
2005 conf
EEE
Jun-Feng Song, Weiming Zhang, Weidong Xiao, Guo-Hui Li, Zhen-ning Xu
2005 conf
GCA
Honghui Chen, Deke Guo, Xue Qun-Wei, Xueshan Luo, Weiming Zhang
2005 conf
EEE
Jun-Feng Song, Weiming Zhang, Weidong Xiao, Zhen-ning Xu
2005 J jnl
Int. J. Intell. Syst.
Jun-Feng Song, Weiming Zhang, Weidong Xiao, Daquan Tang
2004 conf
Web Intelligence
Cheng Zhu, Zhong Liu, Weiming Zhang, Weidong Xiao, Jincai Huang
2004 A conf
IPDPS
Jiuyang Tang, Weiming Zhang, Jun-Feng Song, Weidong Xiao
2004 J jnl
J. Grid Comput.
Cheng Zhu, Zhong Liu, Weiming Zhang, Weidong Xiao, Zhen-ning Xu, Dongsheng Yang
2004 conf
Web Intelligence
Dongsheng Yang, Zhong Liu, Yin-Long Lu, Weiming Zhang
2004 conf
GCC
Cheng Zhu, Zhong Liu, Weiming Zhang, Zhen-ning Xu, Dongsheng Yang
2003 conf
Peer-to-Peer Computing
Cheng Zhu, Zhong Liu, Weiming Zhang, Weidong Xiao, Dongsheng Yang
2003 conf
ICDCS Workshops
Zhong Liu, Wen Dou, Weiming Zhang, Peng Zou
2003 conf
ICWI
Jun-Feng Song, Weiming Zhang, Weidong Xiao
tests/integration/test_elf_extractors.py
← Index tests/integration/test_elf_extractors.py python
"""
Integration tests for ELF-specific extractors.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

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


# ============================================================================
# ELFFeaturesExtractor Tests
# ============================================================================

class TestELFFeaturesExtractor:
    """Tests for ELFFeaturesExtractor class."""

    def test_extract_valid_elf(self, elf_binary_path, mock_logger):
        """Test extracting features from valid ELF file."""
        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)

    def test_extract_header_data(self, elf_binary_path, mock_logger):
        """Test ELF header data extraction."""
        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.extract()

            assert result is not None
            # Check header fields
            assert isinstance(result.ei_class, int)
            assert isinstance(result.ei_data, int)
            assert isinstance(result.e_type, int)
            assert isinstance(result.e_machine, int)
            assert isinstance(result.e_entry, int)

    def test_extract_human_readable_strings(self, elf_binary_path, mock_logger):
        """Test human-readable string fields."""
        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.extract()

            assert result is not None
            assert result.ei_class_str in ['32-bit', '64-bit', 'unknown']
            assert result.ei_data_str in ['Little-endian', 'Big-endian', 'unknown']
            assert result.e_type_str is not None
            assert result.e_machine_str is not None

    def test_extract_security_properties(self, elf_binary_path, mock_logger):
        """Test security property extraction."""
        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.extract()

            assert result is not None
            # Security flags should be 0 or 1
            assert result.is_pie in [0, 1]
            assert result.has_canary in [0, 1]
            assert result.has_nx in [0, 1]
            assert result.has_relro in [0, 1]
            assert result.has_fortify in [0, 1]

    def test_extract_counts(self, elf_binary_path, mock_logger):
        """Test section/segment/symbol counts."""
        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.extract()

            assert result is not None
            assert result.number_of_segments >= 0
            assert result.number_of_sections >= 0
            assert result.number_of_symbols >= 0
            assert result.number_of_dynamic_symbols >= 0
            assert result.number_of_relocations >= 0
            assert result.number_of_dependencies >= 0

    def test_extract_build_info(self, elf_binary_path, mock_logger):
        """Test build information extraction."""
        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.extract()

            assert result is not None
            # Build ID may or may not be present
            if result.build_id is not None:
                assert isinstance(result.build_id, str)
            assert result.gnu_hash_present in [0, 1]
            assert result.has_debug_info in [0, 1]

    def test_extract_invalid_elf(self, pe_binary_path, mock_logger):
        """Test extraction 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)

            result = extractor.extract()

            # Should return None for invalid ELF
            assert result is None


# ============================================================================
# ELFSectionExtractor Tests
# ============================================================================

class TestELFSectionExtractor:
    """Tests for ELFSectionExtractor class."""

    def test_extract_sections(self, elf_binary_path, mock_logger):
        """Test section extraction."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, list)
            assert len(result) > 0

    def test_section_properties(self, elf_binary_path, mock_logger):
        """Test section property extraction."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor
        from redb.models.dataclasses import ELFSection

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                section = result[0]
                assert isinstance(section, ELFSection)
                assert section.section_name is not None
                assert isinstance(section.section_type, int)
                assert isinstance(section.section_flags, int)
                assert section.section_entropy >= 0

    def test_section_hashes(self, elf_binary_path, mock_logger):
        """Test section hash computation."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                for section in result:
                    if section.section_sha256:
                        assert len(section.section_sha256) == 64
                    if section.section_md5:
                        assert len(section.section_md5) == 32


# ============================================================================
# ELFSegmentExtractor Tests
# ============================================================================

class TestELFSegmentExtractor:
    """Tests for ELFSegmentExtractor class."""

    def test_extract_segments(self, elf_binary_path, mock_logger):
        """Test segment extraction."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

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

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, list)

    def test_segment_properties(self, elf_binary_path, mock_logger):
        """Test segment property extraction."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor
        from redb.models.dataclasses import ELFSegment

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                segment = result[0]
                assert isinstance(segment, ELFSegment)
                assert isinstance(segment.segment_type, int)
                assert isinstance(segment.segment_flags, int)


# ============================================================================
# ELFSymbolExtractor Tests
# ============================================================================

class TestELFSymbolExtractor:
    """Tests for ELFSymbolExtractor class."""

    def test_extract_symbols(self, elf_binary_path, mock_logger):
        """Test symbol extraction."""
        from redb.extractors.elf_extractors.elf_symbols import ELFSymbolExtractor

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

            result = extractor.extract()

            # May be None if stripped
            if result is not None:
                assert isinstance(result, list)

    def test_symbol_properties(self, elf_binary_path, mock_logger):
        """Test symbol property extraction."""
        from redb.extractors.elf_extractors.elf_symbols import ELFSymbolExtractor
        from redb.models.dataclasses import ELFSymbol

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                symbol = result[0]
                assert isinstance(symbol, ELFSymbol)
                assert symbol.symbol_name is not None
                assert isinstance(symbol.symbol_type, int)
                assert isinstance(symbol.symbol_bind, int)


# ============================================================================
# ELFImportExtractor Tests
# ============================================================================

class TestELFImportExtractor:
    """Tests for ELFImportExtractor class."""

    def test_extract_imports(self, elf_binary_path, mock_logger):
        """Test import extraction."""
        from redb.extractors.elf_extractors.elf_imports import ELFImportExtractor

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

            result = extractor.extract()

            # May be None if no imports
            if result is not None:
                assert hasattr(result, 'elf_imports_total')

    def test_import_functions(self, elf_binary_path, mock_logger):
        """Test import function extraction."""
        from redb.extractors.elf_extractors.elf_imports import ELFImportExtractor
        from redb.models.dataclasses import ELFImport

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

            result = extractor.extract()

            if result is not None:
                assert isinstance(result, ELFImport)
                assert isinstance(result.elf_imports_total, int)


# ============================================================================
# ELFExportExtractor Tests
# ============================================================================

class TestELFExportExtractor:
    """Tests for ELFExportExtractor class."""

    def test_extract_exports(self, elf_binary_path, mock_logger):
        """Test export extraction."""
        from redb.extractors.elf_extractors.elf_exports import ELFExportExtractor

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

            result = extractor.extract()

            # May be None if no exports
            if result is not None:
                assert hasattr(result, 'elf_exports_total')

    def test_export_functions(self, elf_binary_path, mock_logger):
        """Test export function extraction."""
        from redb.extractors.elf_extractors.elf_exports import ELFExportExtractor
        from redb.models.dataclasses import ELFExport

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

            result = extractor.extract()

            if result is not None:
                assert isinstance(result, ELFExport)


# ============================================================================
# ELFDependencyExtractor Tests
# ============================================================================

class TestELFDependencyExtractor:
    """Tests for ELFDependencyExtractor class."""

    def test_extract_dependencies(self, elf_binary_path, mock_logger):
        """Test dependency extraction."""
        from redb.extractors.elf_extractors.elf_dependencies import ELFDependencyExtractor

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

            result = extractor.extract()

            # May be None if no dependencies
            if result is not None:
                assert isinstance(result, list)

    def test_dependency_properties(self, elf_binary_path, mock_logger):
        """Test dependency property extraction."""
        from redb.extractors.elf_extractors.elf_dependencies import ELFDependencyExtractor
        from redb.models.dataclasses import ELFDependency

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                dep = result[0]
                assert isinstance(dep, ELFDependency)
                assert dep.dependency_name is not None


# ============================================================================
# ELFRelocationExtractor Tests
# ============================================================================

class TestELFRelocationExtractor:
    """Tests for ELFRelocationExtractor class."""

    def test_extract_relocations(self, elf_binary_path, mock_logger):
        """Test relocation extraction."""
        from redb.extractors.elf_extractors.elf_relocations import ELFRelocationExtractor

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

            result = extractor.extract()

            # May be None if no relocations
            if result is not None:
                assert isinstance(result, list)

    def test_relocation_properties(self, elf_binary_path, mock_logger):
        """Test relocation property extraction."""
        from redb.extractors.elf_extractors.elf_relocations import ELFRelocationExtractor
        from redb.models.dataclasses import ELFRelocation

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                reloc = result[0]
                assert isinstance(reloc, ELFRelocation)
                assert isinstance(reloc.relocation_offset, int)
                assert isinstance(reloc.relocation_type, int)


# ============================================================================
# ELFNotesExtractor Tests
# ============================================================================

class TestELFNotesExtractor:
    """Tests for ELFNotesExtractor class."""

    def test_extract_notes(self, elf_binary_path, mock_logger):
        """Test notes extraction."""
        from redb.extractors.elf_extractors.elf_notes import ELFNotesExtractor

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

            result = extractor.extract()

            # May be None if no notes
            if result is not None:
                assert isinstance(result, list)

    def test_note_properties(self, elf_binary_path, mock_logger):
        """Test note property extraction."""
        from redb.extractors.elf_extractors.elf_notes import ELFNotesExtractor
        from redb.models.dataclasses import ELFNote

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                note = result[0]
                assert isinstance(note, ELFNote)
                assert note.note_name is not None
                assert isinstance(note.note_type, int)


# ============================================================================
# Integration Tests
# ============================================================================

class TestELFExtractorIntegration:
    """Integration tests for ELF extractors."""

    def test_all_extractors_valid_elf(self, elf_binary_path, mock_logger):
        """Test all ELF extractors with valid ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            features_ext = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            sections_ext = ELFSectionExtractor(elf_binary_path, mock_logger)
            segments_ext = ELFSegmentExtractor(elf_binary_path, mock_logger)

            features_result = features_ext.extract()
            sections_result = sections_ext.extract()
            segments_result = segments_ext.extract()

            # All should extract something
            assert features_result is not None
            assert sections_result is not None
            assert segments_result is not None

    def test_hash_consistency_across_extractors(self, elf_binary_path, mock_logger):
        """Test that hashes are consistent across all extractors."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            # Hashes should be the same
            assert features_ext.sha256 == sections_ext.sha256
            assert features_ext.md5 == sections_ext.md5
            assert features_ext.sha1 == sections_ext.sha1

    def test_clickhouse_tables_unique(self, elf_binary_path, mock_logger):
        """Test that each extractor has a unique ClickHouse table."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            features_ext = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            sections_ext = ELFSectionExtractor(elf_binary_path, mock_logger)
            segments_ext = ELFSegmentExtractor(elf_binary_path, mock_logger)

            tables = {
                features_ext.get_clickhouse_table(),
                sections_ext.get_clickhouse_table(),
                segments_ext.get_clickhouse_table(),
            }

            # All tables should be unique
            assert len(tables) == 3


# ============================================================================
# Advanced Binary Tests
# ============================================================================

class TestELFAdvancedBinary:
    """Tests using the hello_advanced binary."""

    def test_advanced_features_extraction(self, elf_advanced_binary_path, mock_logger):
        """Test feature extraction from 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)

            result = extractor.extract()

            assert result is not None
            assert result.number_of_sections > 0

    def test_advanced_sections_extraction(self, elf_advanced_binary_path, mock_logger):
        """Test section extraction from advanced ELF binary."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            result = extractor.extract()

            assert result is not None
            assert len(result) > 0

            # Check for common ELF sections
            section_names = [s.section_name for s in result]
            # Most ELF files have .text section
            assert any('.text' in name for name in section_names)

    def test_advanced_segments_extraction(self, elf_advanced_binary_path, mock_logger):
        """Test segment extraction from advanced ELF binary."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

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

            result = extractor.extract()

            assert result is not None
            assert len(result) > 0


# ============================================================================
# Export Data Tests
# ============================================================================

class TestELFExtractorExportData:
    """Tests for export data preparation."""

    def test_features_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test ClickHouse export preparation for features."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.prepare_export_data("ClickHouseExporter")

            assert result is not None
            data, column_names, column_type_names = result

            assert 'sha256' in column_names
            assert 'ei_class' in column_names
            assert 'e_machine' in column_names
            assert 'is_pie' in column_names

    def test_sections_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test ClickHouse export preparation for sections."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            result = extractor.prepare_export_data("ClickHouseExporter")

            if result is not None:
                data, column_names, column_type_names = result
                assert 'section_name' in column_names
                assert 'section_entropy' in column_names

    def test_segments_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test ClickHouse export preparation for segments."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

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

            result = extractor.prepare_export_data("ClickHouseExporter")

            if result is not None:
                data, column_names, column_type_names = result
                assert 'segment_type' in column_names