Xiangjun Xin

85 papers B 2Journal 49Unranked 32
YearRankTypeTitle / Venue / Authors
2026 conf
CNML
Jiawei Wang, Xianshuang Li, Yukai Fu, Chen Chen, Bing Chen, Mengfan He, Tangyao Xie, Xiaolong Pan, Xinying Li, Xiangjun Xin, Yu Liu, Ji Zhou
2026 book
Xiangjun Xin
2026 J jnl
J. Opt. Commun. Netw.
Xiao Zhang, Qinghua Tian, Xiangjun Xin, Yiqun Pan, Haipeng Yao, Fu Wang, Ze Dong, Xiaolong Pan, Sitong Zhou, Feng Tian, Ran Gao
2026 J jnl
IEEE Trans. Cogn. Commun. Netw.
Tianle Mai, Haipeng Yao, Gepeng Zhu, Chenlang Jin, Xiangjun Xin
2026 conf
CNML
Han Jiang, Xuanqing Geng, Jiawei Wang, Yukai Fu, Xianshuang Li, Yujie Zhang, Chengang Fu, Jiahao Bi, Tangyao Xie, Xiaolong Pan, Xinying Li, Xiangjun Xin
2026 J jnl
IEEE Trans. Commun.
Yiqun Pan, Qinghua Tian, Xiangjun Xin, Yuqing Zhang, Xiao Zhang, Haipeng Yao, Feng Tian, Ran Gao
2025 J jnl
IEEE Trans. Commun.
Yutian Li, Feng Tian, Xiangjun Xin, Tianze Wu, Jianwei Zhou, Qi Zhang, Ze Dong
2025 J jnl
IEEE Trans. Serv. Comput.
Furong Chai, Qi Zhang, Haipeng Yao, Xiangjun Xin, Ran Gao, Di Wu, F. Richard Yu
2025 conf
OFC
Chen Wang, Jianyu Long, Jianjun Yu, Bohan Sang, Wen Zhou, Kaihui Wang, Feng Zhao, Bo Liu, Ze Dong, Xiangjun Xin, Yong Chen, Weizhang Chen, Bing Ye
2025 J jnl
CoRR
Haide Wang, Ji Zhou, Yongcheng Li, Weiping Liu, Changyuan Yu, Xiangjun Xin, Liangchuan Li
2025 J jnl
IEEE Trans. Sustain. Comput.
Di Wu, Chenlang Jin, Haipeng Yao, Tianle Mai, Xiangjun Xin
2025 J jnl
IEEE Commun. Mag.
Dong Guo, Ji Zhou, Junwen Zhang, Ran Gao, Changyuan Yu, Xiangjun Xin
2025 book
Feng Tian, Xiangjun Xin
2025 J jnl
IEEE Commun. Mag.
Chenlang Jin, Haipeng Yao, Tianle Mai, Jiaqi Xu, Ran Gao, Xiangjun Xin
2025 J jnl
CoRR
Mengqi Guo, Ji Zhou, Haide Wang, Changyuan Yu, Xiangjun Xin, Liangchuan Li
2025 B conf
IWCMC
Yuanfeng Li, Qi Zhang, Haipeng Yao, Xiangjun Xin, Ran Gao, Fu Wang
2025 conf
ICC
Shangyi Li, Fu Wang, Ruimin Mai, Ze Dong, Haipeng Yao, Xiangjun Xin
2025 J jnl
IEEE Internet Things J.
Shangyi Li, Fu Wang, Ruimin Mai, Ze Dong, Haipeng Yao, Xiangjun Xin
2025 J jnl
IEEE Netw.
Yuanfeng Li, Qi Zhang, Haipeng Yao, Ran Gao, Xiangjun Xin, Mohsen Guizani
2025 J jnl
IEEE Trans. Veh. Technol.
Yuanfeng Li, Qi Zhang, Haipeng Yao, Xiangjun Xin, Yi Zhao, Ran Gao
2025 J jnl
CoRR
Ji Zhou, Kainan Wu, Haide Wang, Jinyang Yang, Weiping Liu, Junwen Zhang, Changyuan Yu, Xiangjun Xin, Liangchuan Li
2024 conf
OFC
Chen Wang, Bohan Sang, Kaihui Wang, Junjie Ding, Wen Zhou, Jianyu Long, Xianming Zhao, Bing Ye, Weizhang Chen, Xiangjun Xin, Bo Liu, Lei Shen, Jianjun Yu
2024 J jnl
IEEE Trans. Commun.
Bo Tian, Xiangjun Xin, Qi Zhang, Haipeng Yao, Di Wu, Massimo Tornatore
2024 J jnl
IEEE Trans. Commun.
Furong Chai, Qi Zhang, Haipeng Yao, Xiangjun Xin, Fu Wang, Minrui Xu, Zehui Xiong, Dusit Niyato
2024 J jnl
IEEE Trans. Wirel. Commun.
Huan Chang, Panpan Xu, Haipeng Yao, Jinqiu Li, Xiangjun Xin, Mohsen Guizani
2024 J jnl
IEEE Trans. Commun.
Tianze Wu, Feng Tian, Yutian Li, Qi Zhang, Ran Gao, Haipeng Yao, Ze Dong, Qinghua Tian, Fu Wang, Xiangjun Xin
2024 J jnl
J. Opt. Commun. Netw.
Yun Wang, Qi Zhang, Xiangjun Xin, Meng Sun, Ran Gao, Haipeng Yao, Feng Tian, Qinghua Tian, Yongjun Wang, Fu Wang, Sitong Zhou, Zuolin Li, Zhipei Li
2024 J jnl
IEEE J. Sel. Areas Commun.
Yuanfeng Li, Qi Zhang, Haipeng Yao, Ran Gao, Xiangjun Xin, F. Richard Yu
2024 J jnl
IEEE Trans. Netw. Sci. Eng.
Yuanfeng Li, Qi Zhang, Haipeng Yao, Ran Gao, Xiangjun Xin, Feng Tian, Qinghua Tian, Weiying Feng, Dong Chen
2024 J jnl
IEEE Trans. Netw. Sci. Eng.
Fu Wang, Haipeng Yao, Wenji He, Huan Chang, Xiangjun Xin, Song Guo
2023 conf
OFC
Bohan Sang, Miao Kong, Wen Zhou, Jianyu Long, Li Zhao, Bing Ye, Weizhang Chen, Xiangjun Xin, Bo Liu, Jianjun Yu
2023 J jnl
J. Opt. Commun. Netw.
Hailian He, Jun Ming, Junyuan Song, Yuyao Wen, Dong Guo, Xiangjun Xin, Ran Gao, Zhipei Li, Xiaolong Pan, Ze Dong
2023 J jnl
IEEE Trans. Veh. Technol.
Furong Chai, Qi Zhang, Haipeng Yao, Xiangjun Xin, Ran Gao, Mohsen Guizani
2023 J jnl
Sensors
Lei Fan, Yongjun Wang, Hongxin Zhang, Chao Li, Xingyuan Huang, Qi Zhang, Xiangjun Xin
2023 conf
OFC
Long Zhang, Kaihui Wang, Chen Wang, Junjie Ding, Ming Chen, Bohan Sang, Junting Shi, Bowen Zhu, Feng Wang, Li Zhao, Yun Chen, Ze Dong, Xiangjun Xin, Wen Zhou, Jianjun Yu
2022 J jnl
IEEE Trans. Wirel. Commun.
Huan Chang, Xiaoli Yin, Haipeng Yao, Jingjing Wang, Ran Gao, Xiangjun Xin, Mohsen Guizani
2022 J jnl
IEEE Internet Things J.
Lei Zhu, Haipeng Yao, Huan Chang, Qinghua Tian, Qi Zhang, Xiangjun Xin, F. Richard Yu
2022 J jnl
IEEE Internet Things J.
Yiqiang Li, Qi Zhang, Ran Gao, Xiangjun Xin, Haipeng Yao, Feng Tian, Mohsen Guizani
2022 B conf
IWCMC
Jin Wu, Fu Wang, Haipeng Yao, Xiangjun Xin
2022 J jnl
IEEE Internet Things J.
Yongjun Wang, Haipeng Yao, Jingjing Wang, Xiangjun Xin
2022 J jnl
IEEE Commun. Mag.
Fu Wang, Haipeng Yao, Jingjing Wang, Tianle Mai, Xiangjun Xin, Mohsen Guizani
2022 J jnl
IEEE Commun. Lett.
Xishuo Wang, Zhipei Li, Qi Zhang, Ran Gao, Xiangjun Xin
2021 conf
ECOC
Miao Kong, Bohan Sang, Chen Wang, Bo Liu, Xiangjun Xin, Wen Zhou, Bing Ye, Jianjun Yu
2021 conf
ONDM
Zhuangzhuang Ma, Yongli Zhao, Wei Wang, Xiangjun Xin, Jie Zhang
2021 conf
OFC
Miao Kong, Cuiwei Liu, Bohan Sang, Kaihui Wang, Junjie Ding, Junting Shi, Li Zhao, Wen Zhou, Xiangjun Xin, Bo Liu, Bing Ye, Weizhang Chen, Jianjun Yu
2021 conf
OFC
Chenda Lu, Qinghua Tian, Xiangjun Xin, Lei Zhu, Qi Zhang, Haipeng Yao, Huan Chang, Ran Gao
2020 conf
OFC
Kaihui Wang, Jiao Zhang, Yiran Wei, Li Zhao, Wen Zhou, Mingming Zhao, Jiangnan Xiao, Xiaolong Pan, Bo Liu, Xiangjun Xin, Liwei Zhang, Yun Zhang, Jianjun Yu
2020 J jnl
JOCN
Jiao Zhang, Jianjun Yu, Xinying Li, Kaihui Wang, Wen Zhou, Jiangnan Xiao, Li Zhao, Xiaolong Pan, Bo Liu, Xiangjun Xin
2020 conf
OFC
Jiao Zhang, Kaihui Wang, Yiran Wei, Li Zhao, Wen Zhou, Jiangnan Xiao, Bo Liu, Xiangjun Xin, Feng Zhao, Ze Dong, Jianjun Yu
2020 conf
ComComAP
Fu Wang, Qinghua Tian, Qi Zhang, Feng Tian, Huan Chang, Xiangjun Xin
2020 J jnl
IEEE Access
Tao Yang, Aiying Yang, Peng Guo, Yaojun Qiao, Xiangjun Xin
2020 J jnl
IEICE Trans. Commun.
Yeqi Liu, Qi Zhang, Xiangjun Xin, Qinghua Tian, Ying Tao, Naijin Liu, Kai Lv
2020 conf
OFC
Kaihui Wang, Jiao Zhang, Mingming Zhao, Wen Zhou, Li Zhao, Jiangnan Xiao, Feng Zhao, Yun Zhang, Bo Liu, Xiangjun Xin, Ze Dong, Jianjun Yu
2020 conf
ComComAP
Yeqi Liu, Qi Zhang, Xiangjun Xin, Guixing Cao, Ying Tao, Yufei Shen
2020 J jnl
IEEE Access
Jianxin Ren, Bo Liu, Xiangyu Wu, Xing Xu, Yaya Mao, Yongfeng Wu, Xiumin Song, Lei Jiang, Jingyi Zhang, Ying Zhang, Xiangjun Xin
2020 J jnl
IEEE Open J. Comput. Soc.
Zhuotong Li, Yongli Zhao, Yajie Li, Mingzhe Liu, Zebin Zeng, Xiangjun Xin, Feng Wang, Xinghua Li, Jie Zhang
2020 J jnl
IEEE/ACM Trans. Netw.
Boyuan Yan, Yongli Zhao, Xiaosong Yu, Yajie Li, Sabidur Rahman, Yongqi He, Xiangjun Xin, Jie Zhang
2020 J jnl
IEICE Trans. Commun.
Qingyuan Liu, Qi Zhang, Xiangjun Xin, Ran Gao, Qinghua Tian, Feng Tian
2020 conf
OFC
Jiao Zhang, Kaihui Wang, Yiran Wei, Li Zhao, Wen Zhou, Jiangnan Xiao, Bo Liu, Xiangjun Xin, Jianjun Yu
2020 conf
ONDM
Fu Wang, Fulong Yan, Xuwei Xue, Bo Liu, Lijia Zhang, Qi Zhang, Xiangjun Xin, Nicola Calabretta
2020 conf
ECOC
Junjie Ding, Kaihui Wang, Miao Kong, Cuiwei Liu, Wen Zhou, Li Zhao, Bo Liu, Xiangjun Xin, Jianjun Yu
2020 J jnl
IEEE Access
Sibghat Ullah, Rahat Ullah, Qi Zhang, Hafiz Ahmad Khalid, Kamran Ali Memon, Adil Khan, Feng Tian, Xiangjun Xin
2019 conf
OFC
Xinying Li, Jianjun Yu, Li Zhao, Wen Zhou, Kaihui Wang, Miao Kong, Gee-Kung Chang, Ying Zhang, Xiaolong Pan, Xiangjun Xin
2019 conf
OFC
Jiao Zhang, Jianjun Yu, Kaihui Wang, Wen Zhou, Xin Xiao, Jiangnan Xiao, Li Zhao, Xiaolong Pan, Bo Liu, Xiangjun Xin
2019 conf
OFC
Jianjun Yu, Miao Kong, Hung-Chang Chien, Kaihui Wang, Jianyang Shi, Xinying Li, Xiaolong Pan, Xiangjun Xin, Yan Xia, Bing Ye, Xiaoqiang Wei, Taili Wang, Yufei Chen
2019 conf
OFC
Jiao Zhang, Jianjun Yu, Hungchang Chien, Jun Shan Wey, Miao Kong, Xiangjun Xin, Yun Zhang
2019 conf
OFC
Jiao Zhang, Jianjun Yu, Xinying Li, Yiran Wei, Kaihui Wang, Li Zhao, Wen Zhou, Jiangnan Xiao, Xiaolong Pan, Bo Liu, Xiangjun Xin, Liwei Zhang, Yun Zhang
2019 conf
OFC
Jiao Zhang, Jianjun Yu, Li Zhao, Kaihui Wang, Jianyang Shi, Xinying Li, Miao Kong, Wen Zhou, Xiaolong Pan, Bo Liu, Xiangjun Xin, Liwei Zhang, Yun Zhang
2019 J jnl
IEICE Electron. Express
Kai Lv, Xiaolong Pan, Junwen Zhang, Kaihui Wang, Dong Guo, Qi Zhang, Deng-ao Li, Xiangjun Xin
2019 J jnl
IEEE Access
Xiaoli Yin, Xiaozheng Chen, Huan Chang, Xiaozhou Cui, Yuanzhi Su, Yilin Guo, Yongjun Wang, Xiangjun Xin
2019 conf
OFC
Mingming Zhao, Jianjun Yu, Yingjun Zhou, Kaihui Wang, Can Wang, Wen Zhou, Jiangnan Xiao, Xiaolong Pan, Xiangjun Xin, Bo Liu
2019 J jnl
IEEE Access
Xiangyu Wu, Bo Liu, Lijia Zhang, Yaya Mao, Xing Xu, Jianxin Ren, Ying Zhang, Lei Jiang, Xiangjun Xin
2019 J jnl
Comput. Appl. Eng. Educ.
Rahat Ullah, Bo Liu, Sibghat Ullah, Yaya Mao, Feng Tian, Xiangjun Xin
2019 conf
OFC
Miao Kong, Jianjun Yu, Hung-Chang Chien, Kaihui Wang, Xinying Li, Jianyang Shi, Li Zhao, Benyuan Zhu, Xiaolong Pan, Xiangjun Xin, Bing Ye, Yan Xia, Taili Wang, Yufei Chen
2018 J jnl
IEEE Access
Rahat Ullah, Bo Liu, Sibghat Ullah, Yaya Mao, Feng Tian, Muhammad Kamran Khan, Xiangjun Xin
2018 J jnl
IEEE Access
Sibghat Ullah, Rahat Ullah, Adil Khan, Hafiz Ahmad Khalid, Qi Zhang, Qinghua Tian, Faheem Khan, Xiangjun Xin
2017 conf
OFC
Jianjun Yu, Junwen Zhang, Hung-Chang Chien, Xinying Li, Yuming Xu, Xiaolong Pan, Fu Wang, Zhipei Li, Bo Liu, Lijia Zhang, Xiangjun Xin, Huitao Wang, Gee-Kung Chang
2017 conf
OFC
Xinying Li, Jianjun Yu, Yuming Xu, Xiaolong Pan, Fu Wang, Zhipei Li, Bo Liu, Lijia Zhang, Xiangjun Xin, Gee-Kung Chang
2016 J jnl
Photonic Netw. Commun.
Yang Yang, Jianxin Ma, Xiangjun Xin, Qi Zhang, Yi Zhang, Xiaoli Yin, Ruijiao Zhang, Wen Liu
2014 J jnl
IEICE Electron. Express
Lili Wang, Xiangjun Xin, Linwei Zhu
2014 conf
BMSB
Yousaf Khan, Muhammad Idrees Afridi, Waqas Imtiaz, Xiangjun Xin, Waheed Ur Rehman, Jahanzeb Khan
2013 conf
WOCC
Xiaoli Yin, Junyu Shang, Yulu Chen, Ji Hao, Li Li, Xiangjun Xin, Chongxiu Yu
2012 conf
WCSP
Qinghua Tian, Qi Zhang, Xiangjun Xin, Dahsiung Hsu
2011 J jnl
Opt. Switch. Netw.
Yongsheng Cao, Alexey V. Osadchiy, Xiangjun Xin, Xiaoli Yin, Chongxiu Yu, Xu Zhang, Idelfonso Tafur Monroy
2010 J jnl
Photonic Netw. Commun.
Yongsheng Cao, Alexey V. Osadchiy, Xiangjun Xin, Xiaoli Yin, Chongxiu Yu, Idelfonso Tafur Monroy
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