Haidong Zhang

130 papers A* 7A 1B 3C 1Journal 98Unranked 19
YearRankTypeTitle / Venue / Authors
2026 J jnl
Appl. Soft Comput.
Yizhu Cairang, Haidong Zhang, Yanping He
2026 J jnl
Fuzzy Sets Syst.
Yonghong Shen, Qian Wang, Haidong Zhang
2026 J jnl
Eng. Appl. Artif. Intell.
Jing Li, Haidong Zhang, Zhuoma Dawa, Yanping He
2026 J jnl
CoRR
Haidong Zhang, Chaoqian Wang, Shuo Liu, Charo I. Del Genio, Stefano Boccaletti, Xin Lu
2025 J jnl
Int. J. Fuzzy Syst.
Jiaxin Song, Haidong Zhang, Yanping He
2025 J jnl
CoRR
Qixu Chen, Yeye He, Raymond Chi-Wing Wong, Weiwei Cui, Song Ge, Haidong Zhang, Dongmei Zhang, Surajit Chaudhuri
2025 J jnl
Proc. ACM Manag. Data
Qixu Chen, Yeye He, Raymond Chi-Wing Wong, Weiwei Cui, Song Ge, Haidong Zhang, Dongmei Zhang, Surajit Chaudhuri
2025 J jnl
IEEE Trans. Vis. Comput. Graph.
Yuan Tian, Weiwei Cui, Dazhen Deng, Xinjing Yi, Yurun Yang, Haidong Zhang, Yingcai Wu
2025 J jnl
Ecol. Informatics
Qianghao Zeng, Xuehe Lu, Suwan Chen, Xuan Cui, Haidong Zhang, Qian Zhang
2025 A* conf
UIST
Yuan Tian, Chuhan Zhang, Xiaotong Wang, Sitong Pan, Weiwei Cui, Haidong Zhang, Dazhen Deng, Yingcai Wu
2025 J jnl
CoRR
Yuan Tian, Chuhan Zhang, Xiaotong Wang, Sitong Pan, Weiwei Cui, Haidong Zhang, Dazhen Deng, Yingcai Wu
2025 J jnl
IEEE Trans. Vis. Comput. Graph.
Shuhan Liu, Yuan Tian, Zikun Deng, Weiwei Cui, Haidong Zhang, Di Weng, Yingcai Wu
2025 J jnl
IEEE Trans. Vis. Comput. Graph.
Lu Ying, Yun Wang, Haotian Li, Shuguang Dou, Haidong Zhang, Xinyang Jiang, Huamin Qu, Yingcai Wu
2025 J jnl
Eng. Appl. Artif. Intell.
Zhaxi Pahua, Haidong Zhang, Yizhu Cairang, Yanping He
2025 J jnl
IEEE Trans. Vis. Comput. Graph.
Yun Wang, Leixian Shen, Zhengxin You, Xinhuan Shu, Bongshin Lee, John Thompson, Haidong Zhang, Dongmei Zhang
2024 conf
ICCBD
Jiaxin Song, Haidong Zhang
2024 J jnl
Comput. Biol. Medicine
Haibei Xin, Yuanfeng Li, Quanlei Wang, Ren Liu, Cunzhen Zhang, Haidong Zhang, Xian Su, Bin Bai, Nan Li, Minfeng Zhang
2024 J jnl
Appl. Soft Comput.
Haidong Zhang, Yin Liu, Deji Selang, Yanping He
2024 J jnl
CoRR
Sibei Chen, Yeye He, Weiwei Cui, Ju Fan, Song Ge, Haidong Zhang, Dongmei Zhang, Surajit Chaudhuri
2024 J jnl
Proc. ACM Manag. Data
Sibei Chen, Yeye He, Weiwei Cui, Ju Fan, Song Ge, Haidong Zhang, Dongmei Zhang, Surajit Chaudhuri
2024 J jnl
IEEE Trans. Vis. Comput. Graph.
Renzhong Li, Weiwei Cui, Tianqi Song, Xiao Xie, Rui Ding, Yun Wang, Haidong Zhang, Hong Zhou, Yingcai Wu
2024 J jnl
IEEE Trans. Vis. Comput. Graph.
Leixian Shen, Yizhi Zhang, Haidong Zhang, Yun Wang
2024 J jnl
CoRR
Haidong Zhang, Wancheng Ni, Xin Li, Yiping Yang
2024 J jnl
IEEE Trans. Vis. Comput. Graph.
Chuhan Shi, Weiwei Cui, Chengzhong Liu, Chengbo Zheng, Haidong Zhang, Qiong Luo, Xiaojuan Ma
2024 conf
EACL (Findings)
Wei Zhao, Zhitao Hou, Siyuan Wu, Yang Gao, Haoyu Dong, Yao Wan, Hongyu Zhang, Yulei Sui, Haidong Zhang
2024 J jnl
CoRR
Wei Zhao, Zhitao Hou, Siyuan Wu, Yan Gao, Haoyu Dong, Yao Wan, Hongyu Zhang, Yulei Sui, Haidong Zhang
2024 J jnl
CoRR
Shuhan Liu, Yunfan Zhou, Lu Ying, Yuan Tian, Jue Zhang, Shandan Zhou, Weiwei Cui, Qingwei Lin, Thomas Moscibroda, Haidong Zhang, Di Weng, Yingcai Wu
2024 J jnl
Inf. Sci.
Haidong Zhang, Jiaxin Song, Chao Zhang, Yanping He
2024 J jnl
Proc. ACM Manag. Data
Peng Li, Yeye He, Dror Yashar, Weiwei Cui, Song Ge, Haidong Zhang, Danielle Rifinski Fainman, Dongmei Zhang, Surajit Chaudhuri
2024 J jnl
Inf. Sci.
Deji Selang, Haidong Zhang, Yanping He
2024 J jnl
Sensors
Zhen Wu, Junzhou Huo, Haidong Zhang, Fan Yang, Shangqi Chen, Zhihao Feng
2023 J jnl
Appl. Soft Comput.
Haidong Zhang, Deji Selang
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Naihao Liu, Zhuo Li, Rongchang Liu, Haidong Zhang, Jinghuai Gao, Tao Wei, Jianlou Si, Hao Wu
2023 A* conf
KDD
Dezhan Tu, Yeye He, Weiwei Cui, Song Ge, Haidong Zhang, Shi Han, Dongmei Zhang, Surajit Chaudhuri
2023 J jnl
CoRR
Dezhan Tu, Yeye He, Weiwei Cui, Song Ge, Haidong Zhang, Shi Han, Dongmei Zhang, Surajit Chaudhuri
2023 J jnl
CoRR
Yuan Tian, Weiwei Cui, Dazhen Deng, Xinjing Yi, Yurun Yang, Haidong Zhang, Yingcai Wu
2023 J jnl
CoRR
Leixian Shen, Yizhi Zhang, Haidong Zhang, Yun Wang
2023 A* conf
CHI
Wenchao Li, Zhan Wang, Yun Wang, Di Weng, Liwenhan Xie, Siming Chen, Haidong Zhang, Huamin Qu
2023 J jnl
CoRR
Wenchao Li, Zhan Wang, Yun Wang, Di Weng, Liwenhan Xie, Siming Chen, Haidong Zhang, Huamin Qu
2023 J jnl
Neural Comput. Appl.
Junyan Qiu, Ziqi Lin, Haidong Zhang, Yiping Yang
2023 J jnl
Remote. Sens.
Qing Huang, Xuehe Lu, Fanxingyu Chen, Qian Zhang, Haidong Zhang
2023 conf
ICSCA
Junyan Qiu, Haidong Zhang, Yiping Yang
2023 B conf
IJCNN
Yekun Chai, Haidong Zhang, Qiyue Yin, Junge Zhang
2023 A* conf
CHI
Haotian Li, Lu Ying, Haidong Zhang, Yingcai Wu, Huamin Qu, Yun Wang
2023 J jnl
CoRR
Haotian Li, Lu Ying, Haidong Zhang, Yingcai Wu, Huamin Qu, Yun Wang
2023 J jnl
CoRR
Shuhan Liu, Yuan Tian, Zikun Deng, Weiwei Cui, Haidong Zhang, Di Weng, Yingcai Wu
2023 J jnl
Vis. Intell.
Danqing Shi, Weiwei Cui, Danqing Huang, Haidong Zhang, Nan Cao
2023 J jnl
IEEE Trans. Vis. Comput. Graph.
Dazhen Deng, Weiwei Cui, Xiyu Meng, Mengye Xu, Yu Liao, Haidong Zhang, Yingcai Wu
2023 J jnl
CoRR
Lu Ying, Yun Wang, Haotian Li, Shuguang Dou, Haidong Zhang, Xinyang Jiang, Huamin Qu, Yingcai Wu
2023 J jnl
Connect. Sci.
Junyan Qiu, Haidong Zhang, Yiping Yang
2023 conf
ICCAI
Junyan Qiu, Haidong Zhang, Yiping Yang
2023 J jnl
CoRR
Peng Li, Yeye He, Dror Yashar, Weiwei Cui, Song Ge, Haidong Zhang, Danielle Rifinski Fainman, Dongmei Zhang, Surajit Chaudhuri
2023 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Yun Jin, Haidong Zhang, Jiaxin Li, Weihong Bi
2023 J jnl
Earth Sci. Informatics
Xingwei Wang, Ran Wang, Yonghui Xin, Haidong Zhang, Xin Han, Wanshan Lei, Gangfeng Wei
2023 J jnl
IEEE Trans. Vis. Comput. Graph.
Yun Wang, Zhitao Hou, Leixian Shen, Tongshuang Wu, Jiaqi Wang, He Huang, Haidong Zhang, Dongmei Zhang
2023 B conf
IJCNN
Li Huang, Weiwei Cui, Bin B. Zhu, Haidong Zhang
2023 J jnl
CoRR
Yun Wang, Leixian Shen, Zhengxin You, Xinhuan Shu, Bongshin Lee, John Thompson, Haidong Zhang, Dongmei Zhang
2022 J jnl
IEEE Trans. Vis. Comput. Graph.
Weiwei Cui, Jinpeng Wang, He Huang, Yun Wang, Chin-Yew Lin, Haidong Zhang, Dongmei Zhang
2022 J jnl
IEEE Trans. Vis. Comput. Graph.
Aoyu Wu, Yun Wang, Xinhuan Shu, Dominik Moritz, Weiwei Cui, Haidong Zhang, Dongmei Zhang, Huamin Qu
2022 conf
ICCAI
Haidong Zhang, Xuwen Li, Qiang Wu
2022 A* conf
ACM Multimedia
Jiayun Fu, Bin B. Zhu, Haidong Zhang, Yayi Zou, Song Ge, Weiwei Cui, Yun Wang, Dongmei Zhang, Xiaojing Ma, Hai Jin
2022 A conf
IUI
Sruti Srinivasa Ragavan, Zhitao Hou, Yun Wang, Andrew D. Gordon, Haidong Zhang, Dongmei Zhang
2022 J jnl
Knowl. Based Syst.
Xueqi Jia, Jiaxing Shang, Dajiang Liu, Haidong Zhang, Wancheng Ni
2022 J jnl
Comput. Graph. Forum
Hao Cheng, Junhong Wang, Yun Wang, Bongshin Lee, Haidong Zhang, Dongmei Zhang
2022 conf
ISCSIC
Tong Wang, Song Dai, Xuan Liu, Meijing Zhao, Haidong Zhang, Qiyue Yin
2022 J jnl
IEEE Trans. Vis. Comput. Graph.
Aoyu Wu, Yun Wang, Mengyu Zhou, Xinyi He, Haidong Zhang, Huamin Qu, Dongmei Zhang
2022 A* conf
CHI
Yu Zhang, Yun Wang, Haidong Zhang, Bin Zhu, Siming Chen, Dongmei Zhang
2022 J jnl
CoRR
Yu Zhang, Yun Wang, Haidong Zhang, Bin Zhu, Siming Chen, Dongmei Zhang
2022 J jnl
Int. J. Fuzzy Syst.
TaiBen Nan, Haidong Zhang, Yanping He
2022 J jnl
J. Intell. Fuzzy Syst.
Yanping He, TaiBen Nan, Haidong Zhang
2022 J jnl
CoRR
Danqing Shi, Weiwei Cui, Danqing Huang, Haidong Zhang, Nan Cao
2022 J jnl
CoRR
Dazhen Deng, Weiwei Cui, Xiyu Meng, Mengye Xu, Yu Liao, Haidong Zhang, Yingcai Wu
2022 conf
ICCCS
Siyuan Xing, Wancheng Ni, Haidong Zhang, Meijing Zhao
2022 J jnl
CoRR
Yun Wang, Zhitao Hou, Leixian Shen, Tongshuang Wu, Jiaqi Wang, He Huang, Haidong Zhang, Dongmei Zhang
2022 J jnl
Soft Comput.
Haidong Zhang, TaiBen Nan, Yanping He
2021 J jnl
Remote. Sens.
Haidong Zhang, Lingqing Wang, Ting Tian, Jianghai Yin
2021 J jnl
CoRR
Wenchao Li, Yun Wang, He Huang, Weiwei Cui, Haidong Zhang, Huamin Qu, Dongmei Zhang
2021 J jnl
Comput. Graph. Forum
Yun Wang, Yi Gao, Ray Huang, Weiwei Cui, Haidong Zhang, Dongmei Zhang
2021 J jnl
IEEE Trans. Vis. Comput. Graph.
Jiayun Fu, Bin Zhu, Weiwei Cui, Song Ge, Yun Wang, Haidong Zhang, He Huang, Yuanyuan Tang, Dongmei Zhang, Xiaojing Ma
2021 conf
EMNLP (Findings)
Yekun Chai, Haidong Zhang, Qiyue Yin, Junge Zhang
2021 J jnl
CoRR
Aoyu Wu, Yun Wang, Mengyu Zhou, Xinyi He, Haidong Zhang, Huamin Qu, Dongmei Zhang
2021 J jnl
J. Intell. Fuzzy Syst.
TaiBen Nan, Haidong Zhang, Yanping He
2021 J jnl
IEEE Trans. Vis. Comput. Graph.
Chunyao Qian, Shizhao Sun, Weiwei Cui, Jian-Guang Lou, Haidong Zhang, Dongmei Zhang
2021 conf
CHI Extended Abstracts
Yun Wang, Ying Liu, Weiwei Cui, John C. Tang, Haidong Zhang, Doug Walston, Dongmei Zhang
2021 J jnl
CoRR
Aoyu Wu, Yun Wang, Xinhuan Shu, Dominik Moritz, Weiwei Cui, Haidong Zhang, Dongmei Zhang, Huamin Qu
2020 J jnl
IEEE Access
Chen Yan, Haidong Zhang
2020 J jnl
IEEE Trans. Vis. Comput. Graph.
Ke Xu, Yun Wang, Leni Yang, Yifang Wang, Bo Qiao, Si Qin, Yong Xu, Haidong Zhang, Huamin Qu
2020 J jnl
IEEE Trans. Vis. Comput. Graph.
Yun Wang, Zhida Sun, Haidong Zhang, Weiwei Cui, Ke Xu, Xiaojuan Ma, Dongmei Zhang
2020 conf
IEEE VIS (Short Papers)
Wenchao Li, Yun Wang, Haidong Zhang, Huamin Qu
2020 J jnl
CoRR
Wenchao Li, Yun Wang, Haidong Zhang, Huamin Qu
2020 J jnl
IEEE Access
Haidong Zhang, Duojie Jia-hua, Chen Yan
2020 J jnl
CoRR
Yekun Chai, Haidong Zhang, Shuo Jin
2020 J jnl
CoRR
Chunyao Qian, Shizhao Sun, Weiwei Cui, Jian-Guang Lou, Haidong Zhang, Dongmei Zhang
2020 J jnl
IEEE Trans. Vis. Comput. Graph.
Weiwei Cui, Xiaoyu Zhang, Yun Wang, He Huang, Bei Chen, Lei Fang, Haidong Zhang, Jian-Guang Lou, Dongmei Zhang
2020 J jnl
Soft Comput.
Haidong Zhang, Qian Ma
2019 J jnl
J. Intell. Fuzzy Syst.
Haidong Zhang, Yanping He, Weiyuan Ma
2019 J jnl
CoRR
Ke Xu, Yun Wang, Leni Yang, Yifang Wang, Bo Qiao, Si Qin, Yong Xu, Haidong Zhang, Huamin Qu
2019 B conf
CoNLL
Haidong Zhang, Wancheng Ni, Meijing Zhao, Ziqi Lin
2019 J jnl
Soft Comput.
Haidong Zhang, Jianming Zhan, Yanping He
2019 J jnl
Soft Comput.
Haidong Zhang, Lan Shu, Lianglin Xiong
2019 J jnl
Comput. Graph. Forum
Xun Zhao, Weiwei Cui, Yanhong Wu, Haidong Zhang, Huamin Qu, Dongmei Zhang
2019 J jnl
J. Intell. Fuzzy Syst.
Duojie Jia-hua, Haidong Zhang, Yanping He
2019 J jnl
IEEE Access
Ziqi Lin, Haidong Zhang, Wancheng Ni, Yiping Yang
2019 conf
SIGMOD Conference
Rui Ding, Shi Han, Yong Xu, Haidong Zhang, Dongmei Zhang
2019 J jnl
Clust. Comput.
Changwei Tan, Qing Zhang, Jian Zhou, Ying Du, Dunliang Wang, Ming Luo, Haidong Zhang, Wenshan Guo
2019 J jnl
CoRR
Weiwei Cui, Xiaoyu Zhang, Yun Wang, He Huang, Bei Chen, Lei Fang, Haidong Zhang, Jian-Guang Lou, Dongmei Zhang
2019 conf
IEEE VIS (Short Papers)
Xin Fu, Yun Wang, Haoyu Dong, Weiwei Cui, Haidong Zhang
2018 J jnl
CoRR
Swaminathan Gurumurthy, Lantao Yu, Chenyan Zhang, Yongchao Jin, Weiping Li, Haidong Zhang, Fei Fang
2018 J jnl
J. Intell. Fuzzy Syst.
Haidong Zhang, Yanping He
2018 A* conf
CHI
Yun Wang, Haidong Zhang, He Huang, Xi Chen, Qiufeng Yin, Zhitao Hou, Dongmei Zhang, Qiong Luo, Huamin Qu
2018 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Haidong Zhang, Wancheng Ni, Xin Li, Yiping Yang
2017 conf
IALP
Ziqi Lin, Wancheng Ni, Haidong Zhang, Yu Liu, Yiping Yang
2017 J jnl
Soft Comput.
Haidong Zhang, Lan Shu, Shilong Liao, Cairang Xiawu
2017 J jnl
Soft Comput.
Haidong Zhang, Lan Shu, Shilong Liao
2017 conf
ISCID (2)
Ziqi Lin, Wancheng Ni, Haidong Zhang, Meijing Zhao, Yu Liu
2016 conf
PACIS
Haidong Zhang, Wancheng Ni, Xin Li, Yiping Yang
2016 C conf
ICIS
Haidong Zhang, Wancheng Ni, Xin Li, Yiping Yang
2016 J jnl
J. Intell. Fuzzy Syst.
Haidong Zhang, Yanping He, Lianglin Xiong
2016 J jnl
Soft Comput.
Haidong Zhang, Lan Shu, Shilong Liao
2016 J jnl
J. Intell. Fuzzy Syst.
Haidong Zhang, Lan Shu, Shilong Liao
2016 ch.
Perspectives on Data Science for Software Engineering
Zhitao Hou, Hongyu Zhang, Haidong Zhang, Dongmei Zhang
2015 J jnl
Int. J. Fuzzy Syst.
Haidong Zhang, Lan Shu
2015 J jnl
Proc. VLDB Endow.
Rui Ding, Qiang Wang, Yingnong Dang, Qiang Fu, Haidong Zhang, Dongmei Zhang
2014 J jnl
J. Appl. Math.
Haidong Zhang, Lan Shu, Shilong Liao
2014 J jnl
J. Intell. Fuzzy Syst.
Haidong Zhang, Lan Shu
2014 conf
SIGSOFT FSE
Chengnian Sun, Haidong Zhang, Jian-Guang Lou, Hongyu Zhang, Qiang Wang, Dongmei Zhang, Siau-Cheng Khoo
2014 conf
WASA
Tongqing Zhou, Haidong Zhang, Ming Xu, Yingwen Chen
2013 conf
FSKD
Haidong Zhang, Yanping He
2013 J jnl
IEEE Softw.
Dongmei Zhang, Shi Han, Yingnong Dang, Jian-Guang Lou, Haidong Zhang, Tao Xie
2011 conf
WICON
Haidong Zhang, Pin Lv, Yingwen Chen, Ming Xu
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