Haitao Zhao

113 papers B 12Journal 80Unranked 21
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Open J. Commun. Soc.
Peng Luo, Li Zhou, Haitao Zhao, Nan Li, Kuo Cao, Yueling Liu, Yichi Zhang, Jibo Wei
2026 J jnl
IEEE J. Sel. Areas Commun.
Yueling Liu, Li Zhou, Yichi Zhang, Haitao Zhao, Kuo Cao, Zhaolong Ning, Jibo Wei
2026 J jnl
IEEE Signal Process. Lett.
Bin Gu, Haitao Zhao, Jibo Wei
2026 J jnl
IEEE Trans. Commun.
Kaiwen Tan, Haitao Zhao, Li Zhou, Yichi Zhang, Jun Xiong, Yuyuan Zhang, Haijun Zhang, Jibo Wei
2026 J jnl
IEEE Trans. Cogn. Commun. Netw.
Xianli Feng, Jun Xiong, Xiaoran Liu, Xiaoying Zhang, Haitao Zhao, Jibo Wei
2026 J jnl
IEEE Trans. Cogn. Commun. Netw.
Yuyuan Zhang, Yichi Zhang, Haitao Zhao, Peng Luo, Kaiwen Tan, Jiewen Deng, Jibo Wei
2025 J jnl
CoRR
Bin Gu, Lipeng Dai, Huipeng Du, Haitao Zhao, Jibo Wei
2025 J jnl
IEEE Trans. Consumer Electron.
Chan Lei, Jiao Zhang, Haitao Chen, Haitao Zhao, Li Zhou, Xiaoying Zhang
2025 B conf
WCNC
Yandong Shi, Yichi Zhang, Haitao Zhao, Ji-Bo Wei
2025 J jnl
IEEE Wirel. Commun. Lett.
Xiaoran Liu, Yuhang Zhou, Jun Xiong, Xiaoying Zhang, Haitao Zhao
2025 J jnl
IEEE Trans. Cogn. Commun. Netw.
Kaiwen Tan, Haitao Zhao, Yichi Zhang, Kuo Cao, Peng Luo, Yuyuan Zhang, Jibo Wei
2025 B conf
WCNC
Haitao Chen, Jiao Zhang, Chan Lei, Haitao Zhao, Haijun Wang, Jibo Wei
2025 conf
VTC2025-Fall
Xianli Feng, Xiaoran Liu, Jun Xiong, Hailin Wang, Haitao Zhao
2025 J jnl
CoRR
Bin Gu, Lipeng Dai, Huipeng Du, Haitao Zhao, Jibo Wei
2025 J jnl
IEEE Internet Things J.
Xuanhan Zhou, Jun Xiong, Haitao Zhao, Chao Yan, Haijun Wang, Jibo Wei
2025 J jnl
IEEE Trans. Wirel. Commun.
Lingjin Kong, Xiaoran Liu, Xiaoying Zhang, Jun Xiong, Haitao Zhao, Jibo Wei
2025 B conf
PIMRC
Chuying Guo, Yichi Zhang, Jun Xiong, Haitao Zhao, Ji-Bo Wei
2025 B conf
WCNC
Zhanxiang Luo, Jiao Zhang, Jibo Wei, Li Zhou, Kuo Cao, Haitao Zhao
2025 J jnl
IEEE Netw.
Li Zhou, Xinfeng Deng, Zhaolong Ning, Haitao Zhao, Jibo Wei, Victor C. M. Leung
2024 conf
ICCT
Lei Zhu, Zhihu Wei, Zhang Chen, Qiang Zhou, Haitao Zhao, Jibo Wei
2024 conf
VTC Spring
Yuhang Zhou, Jiaxuan Li, Xiaoran Liu, Jun Xiong, Haitao Zhao
2024 J jnl
Digit. Commun. Networks
Yichi Zhang, Haitao Zhao, Kuo Cao, Li Zhou, Zhe Wang, Yueling Liu, Jibo Wei
2024 J jnl
IEEE Trans. Cogn. Commun. Netw.
Xiaochen Zhang, Haitao Zhao, Jun Xiong, Xiaoran Liu, Hang Yin, Xuanhan Zhou, Jibo Wei
2024 J jnl
IEEE Trans. Veh. Technol.
Zhe Wang, Haijun Wang, Jiao Zhang, Qinbo Zhang, Shijie Liang, Haitao Zhao, Yichi Zhang, Jibo Wei
2024 J jnl
IEEE Commun. Lett.
Peng Luo, Haitao Zhao, Kuo Cao, Yueling Liu, Yuyuan Zhang, Jibo Wei
2024 J jnl
Digit. Commun. Networks
Yueling Liu, Shengteng Jiang, Yichi Zhang, Kuo Cao, Li Zhou, Boon-Chong Seet, Haitao Zhao, Jibo Wei
2024 B conf
WCNC
Haozhe Li, Jiao Zhang, Haitao Zhao, Yiyang Ni, Jun Xiong, Jibo Wei
2024 J jnl
IEEE Trans. Veh. Technol.
Haozhe Li, Jiao Zhang, Haitao Zhao, Yiyang Ni, Jun Xiong, Jibo Wei
2024 J jnl
Sci. China Inf. Sci.
Xuanhan Zhou, Jun Xiong, Haitao Zhao, Xiaoran Liu, Baoquan Ren, Xiaochen Zhang, Jibo Wei, Hao Yin
2024 J jnl
IEEE Signal Process. Lett.
Yuyuan Zhang, Haitao Zhao, Kuo Cao, Yichi Zhang, Jibo Wei
2024 J jnl
IEEE Trans. Wirel. Commun.
Nan Shi, Xiaoran Liu, Li Zhou, Haijun Zhang, Jun Xiong, Haitao Zhao, Jibo Wei
2024 J jnl
IEEE Internet Things J.
Li Zhou, Hailu Mao, Xinfeng Deng, Jiao Zhang, Haitao Zhao, Jibo Wei
2024 J jnl
IEEE Wirel. Commun. Lett.
Yaxuan Liu, Yiyang Ni, Haitao Zhao, Yuting Yang, Shen Qiao, Hongbo Zhu
2024 J jnl
IEEE Trans. Mob. Comput.
Xuanhan Zhou, Jun Xiong, Haitao Zhao, Chao Yan, Jibo Wei
2023 J jnl
IEEE Trans. Wirel. Commun.
Xiaochen Zhang, Haitao Zhao, Jibo Wei, Chao Yan, Jun Xiong, Xiaoran Liu
2022 conf
VTC Fall
Haozhe Li, Guangwei Gong, Jiao Zhang, Haitao Zhao, Li Zhou, Jibo Wei
2022 conf
ICCT
Zhe Wang, Jiao Zhang, Yichi Zhang, Haitao Zhao, Jibo Wei
2022 J jnl
IEEE Wirel. Commun. Lett.
Xuanhan Zhou, Xiaochen Zhang, Haitao Zhao, Jun Xiong, Jibo Wei
2022 J jnl
IEEE Trans. Cogn. Commun. Netw.
Yichi Zhang, Haitao Zhao, Jibo Wei, Jiao Zhang, Mark F. Flanagan, Jun Xiong
2022 J jnl
IEEE Internet Things J.
Xiang Tan, Li Zhou, Haijun Wang, Yuli Sun, Haitao Zhao, Boon-Chong Seet, Jibo Wei, Victor C. M. Leung
2022 J jnl
IEEE Trans. Wirel. Commun.
Haijun Wang, Bo Jiang, Haitao Zhao, Jiao Zhang, Li Zhou, Dongtang Ma, Jibo Wei, Victor C. M. Leung
2022 B conf
WCNC
Jun Liu, Haitao Zhao, Dongtang Ma, Kai Mei, Jibo Wei
2022 J jnl
Entropy
Shengteng Jiang, Yueling Liu, Yichi Zhang, Peng Luo, Kuo Cao, Jun Xiong, Haitao Zhao, Jibo Wei
2022 J jnl
CoRR
Jun Liu, Haitao Zhao, Dongtang Ma, Kai Mei, Jibo Wei
2022 J jnl
IEEE Trans. Commun.
Jun Liu, Haitao Zhao, Dongtang Ma, Kai Mei, Jibo Wei
2021 J jnl
IEEE Internet Things J.
Dengke Guo, Kuo Cao, Jun Xiong, Dongtang Ma, Haitao Zhao
2021 J jnl
IEEE Trans. Veh. Technol.
Tian Xie, Haitao Zhao, Jun Xiong, Nurul I. Sarkar
2021 J jnl
Wirel. Commun. Mob. Comput.
Yingteng Ma, Haijun Wang, Jun Xiong, Dongtang Ma, Haitao Zhao
2021 J jnl
CoRR
Xiang Tan, Li Zhou, Haijun Wang, Yuli Sun, Haitao Zhao, Boon-Chong Seet, Jibo Wei, Victor C. M. Leung
2021 B conf
GLOBECOM
Xiaochen Zhang, Haitao Zhao, Jun Xiong, Xiaoran Liu, Li Zhou, Jibo Wei
2021 J jnl
CoRR
Xiaochen Zhang, Haitao Zhao, Jun Xiong, Li Zhou, Jibo Wei
2021 J jnl
Entropy
Lingjin Kong, Xiaoying Zhang, Haitao Zhao, Jibo Wei
2020 conf
ICCCS
Fang Li, Jun Xiong, Xiaodi Zhao, Haitao Zhao, Xuanhan Zhou
2020 J jnl
IEEE Internet Things J.
Jiaxun Li, Haitao Zhao, Haijun Wang, Fanglin Gu, Jibo Wei, Hao Yin, Baoquan Ren
2020 J jnl
IEEE Commun. Surv. Tutorials
Haijun Wang, Haitao Zhao, Jiao Zhang, Dongtang Ma, Jiaxun Li, Jibo Wei
2019 J jnl
IEEE Internet Things J.
Jiaxun Li, Haitao Zhao, Abdelhakim Senhaji Hafid, Jibo Wei, Hao Yin, Baoquan Ren
2019 J jnl
IEEE Trans. Commun.
Jiaxun Li, Haitao Zhao, Shaojie Zhang, Abdelhakim Senhaji Hafid, Dusit Niyato, Jibo Wei
2019 J jnl
IEEE Internet Things J.
Haijun Wang, Haitao Zhao, Weiyu Wu, Jun Xiong, Dongtang Ma, Jibo Wei
2019 J jnl
IEEE Trans. Mob. Comput.
Haitao Zhao, Jibo Wei, Shengchun Huang, Li Zhou, Qi Tang
2019 J jnl
IEEE Commun. Lett.
Jun Xiong, Dongtang Ma, Haitao Zhao, Fanglin Gu
2019 J jnl
IEEE Internet Things J.
Jiao Zhang, Li Zhou, Qi Tang, Edith C. H. Ngai, Xiping Hu, Haitao Zhao, Jibo Wei
2018 J jnl
IEEE Trans. Veh. Technol.
Haitao Zhao, Kaiqi Ding, Nurul I. Sarkar, Jibo Wei, Jun Xiong
2018 J jnl
KSII Trans. Internet Inf. Syst.
Mu Qiao, Haitao Zhao, Shengchun Huang, Li Zhou, Shan Wang
2018 conf
INFOCOM Workshops
Xiao Zhang, Haijun Wang, Haitao Zhao
2018 J jnl
Comput. Networks
Haitao Zhao, Lingchu Mao, Jibo Wei
2018 B conf
GLOBECOM
Jiaxun Li, Haitao Zhao, Shaojie Zhang, Abdelhakim Hafid
2018 J jnl
IEEE J. Sel. Areas Commun.
Haitao Zhao, Haijun Wang, Weiyu Wu, Jibo Wei
2018 conf
WCNC Workshops
Haijun Wang, Haitao Zhao, Li Zhou, Dongtang Ma, Jibo Wei
2018 J jnl
IEEE Trans. Cogn. Commun. Netw.
Shaojie Zhang, Abdelhakim Senhaji Hafid, Haitao Zhao, Shan Wang
2018 J jnl
IEEE Access
Xingwu Song, Li Zhou, Haitao Zhao, Xiping Hu, Jibo Wei
2018 J jnl
IEEE Commun. Mag.
Haitao Zhao, Nurul I. Sarkar, Jalel Ben-Othman, Oliver Holland, Amine Maaref, Wei Tan
2018 J jnl
IEEE Trans Autom. Sci. Eng.
Haitao Zhao, Hai Liu, Yiu-Wing Leung, Xiaowen Chu
2018 J jnl
IEEE Trans. Mob. Comput.
Jiaxun Li, Haitao Zhao, Jibo Wei, Dongtang Ma, Li Zhou
2018 J jnl
CoRR
Haijun Wang, Haitao Zhao, Jiao Zhang, Dongtang Ma, Jiaxun Li, Jibo Wei
2018 J jnl
IEEE Access
Mu Qiao, Haitao Zhao, Li Zhou, Chunsheng Zhu, Shengchun Huang
2017 J jnl
Int. J. Commun. Syst.
Yi Tang, Lijie Wang, Haitao Zhao, Jibo Wei
2017 J jnl
Sensors
Kaiqi Ding, Haitao Zhao, Xiping Hu, Jibo Wei
2017 J jnl
IET Commun.
Shaojie Zhang, Haitao Zhao, Shan Wang, Abdelhakim Senhaji Hafid
2017 J jnl
Wirel. Commun. Mob. Comput.
Mu Qiao, Haitao Zhao, Shengchun Huang, Li Zhou, Shan Wang
2017 J jnl
Mob. Inf. Syst.
Jiao Zhang, Li Zhou, Angran Xiao, Sai Zeng, Haitao Zhao, Jibo Wei
2016 J jnl
IEEE Trans. Veh. Technol.
Li Zhou, Xiping Hu, Edith C. H. Ngai, Haitao Zhao, Shan Wang, Jibo Wei, Victor C. M. Leung
2016 J jnl
IEEE Trans. Wirel. Commun.
Shaojie Zhang, Abdelhakim Senhaji Hafid, Haitao Zhao, Shan Wang
2016 J jnl
IET Commun.
Shaojie Zhang, Abdelhakim Senhaji Hafid, Haitao Zhao, Shan Wang
2016 J jnl
J. Netw. Comput. Appl.
Haitao Zhao, Jibo Wei, Nurul I. Sarkar, Shengchun Huang
2016 J jnl
Ad Hoc Networks
Li Zhou, Zhengguo Sheng, Lei Wei, Xiping Hu, Haitao Zhao, Jibo Wei, Victor C. M. Leung
2016 J jnl
Phys. Commun.
Muhammad R. A. Khandaker, Kai-Kit Wong, Haitao Zhao, Shamik Sengupta
2016 conf
VTC Fall
Shaojie Zhang, Haitao Zhao, Abdelhakim Senhaji Hafid, Shan Wang
2016 conf
WPMC
Mu Qiao, Haitao Zhao, Shan Wang, Jibo Wei
2016 B conf
MobiHoc
Jiaxun Li, Haitao Zhao, Haijun Wang, Li Zhou, Jibo Wei
2016 B conf
PIMRC
Haijun Wang, Haitao Zhao, Jiaxun Li, Shan Wang, Jibo Wei
2016 B conf
MobiHoc
Haijun Wang, Haitao Zhao, Jiaxun Li, Jibo Wei
2016 B conf
PIMRC
Jiaxun Li, Haitao Zhao, Jibo Wei, Dongtang Ma, Chunsheng Zhu, Xiping Hu, Li Zhou
2015 conf
VTC Spring
Shaojie Zhang, Abdelhakim Hafid, Zhuo Wang, Haitao Zhao, Shan Wang
2015 conf
ICC
Shaojie Zhang, Abdelhakim Hafid, Haitao Zhao, Shan Wang
2015 J jnl
IEEE Commun. Lett.
Songhu Ge, Yong Xi, Haitao Zhao, Shengchun Huang, Jibo Wei
2014 J jnl
IEEE Commun. Lett.
Shaojie Zhang, Haitao Zhao, Shan Wang, Jibo Wei
2014 conf
GLOBECOM Workshops
Li Zhou, Rukhsana Ruby, Haitao Zhao, Xiaoting Ji, Jibo Wei, Victor C. M. Leung
2013 J jnl
Ad Hoc Networks
Haitao Zhao, Emiliano Garcia-Palacios, Shan Wang, Jibo Wei, Dongtang Ma
2012 J jnl
Int. J. Distributed Sens. Networks
Chunguang Shi, Haitao Zhao, Wang Shan, Jibo Wei, Linhua Zheng
2012 J jnl
IET Networks
Chunguang Shi, Haitao Zhao, Emiliano Garcia-Palacios, Dongtang Ma, Ji-Bo Wei
2012 J jnl
IET Commun.
Haitao Zhao, Emi Garcia-Palacios, Jibo Wei, Shan Wang, Dongtang Ma
2011 conf
VTC Spring
Haitao Zhao, Emi Garcia-Palacios, An Song, Jibo Wei
2011 J jnl
Phys. Commun.
Haitao Zhao, Emiliano Garcia-Palacios, Jibo Wei, Yong Xi
2011 conf
VTC Spring
Haitao Zhao, Emiliano Garcia-Palacios, Shan Wang, Jibo Wei
2011 J jnl
Sci. China Inf. Sci.
Haitao Zhao, Shan Wang, Jibo Wei, An Song, Ying Li
2011 conf
MSN
Shan Wang, Haitao Zhao, Shengchun Huang, Abdelhakim Hafid
2010 conf
CSNDSP
Haitao Zhao, Emiliano Garcia-Palacios, An Song, Shan Wang, Jibo Wei
2010 conf
CSNDSP
Haitao Zhao, Emiliano Garcia-Palacios, Yong Xi, Jibo Wei
2010 J jnl
IEEE Commun. Lett.
Haitao Zhao, Shan Wang, Yong Xi, Jibo Wei
2010 conf
ISWCS
Haitao Zhao, Emi Garcia-Palacios, Yong Xi, Jibo Wei
2009 J jnl
Comput. Commun.
Haitao Zhao, Emiliano Garcia-Palacios, Jibo Wei, Yong Xi
2008 conf
ICC
Haitao Zhao, Yong Xi, Jibo Wei, Jun Li
2007 conf
AccessNets
Haitao Zhao, Jibo Wei, Yong Xi
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