Xiaofei Liu

122 papers A* 2A 2B 1C 9Misc 3Journal 70Unranked 35
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Tao Huang, Rui Wang, Xiaofei Liu, Yi Qin, Li Duan, Liping Jing
2026 J jnl
CCF Trans. High Perform. Comput.
Xiaofei Liu, Tianhan He, Wencheng Wang
2026 J jnl
CoRR
Xiaofei Liu, Milena Radenkovic
2026 J jnl
Int. Trans. Oper. Res.
Hao Zhang, Xiya Zheng, Zhonghao Liu, Xiaofei Liu
2025 J jnl
IEEE Access
Shaohui Zhong, Xiaofei Liu
2025 J jnl
Adv. Eng. Informatics
Changdong Wang, Xiaofei Liu, Jingli Yang, Huamin Jie, Tianyu Gao, Zhenyu Zhao
2025 J jnl
Syst.
Meiqi Liu, Yalan Li, Xiaofei Liu, Yang Chen, Ruochen Hao
2025 conf
COCOON (2)
Xiaofei Liu, Weidong Li
2025 C conf
TAMC
Wencheng Wang, Tianjin Lu, Xiaofei Liu
2025 J jnl
BMC Medical Informatics Decis. Mak.
Zhikui Tian, Jizhong Zhang, Yadong Fan, Xuan Sun, Dongjun Wang, Xiaofei Liu, Guohui Lu, Hongwu Wang
2025 J jnl
Adv. Eng. Informatics
Xiaofei Liu, Yaguo Lei, Naipeng Li, Bin Yang, Ke Feng, Yue Shu
2025 J jnl
J. Ambient Intell. Humaniz. Comput.
Xiaofei Liu
2025 J jnl
Reliab. Eng. Syst. Saf.
Qing Zhang, Shaochen Li, Tan Chin-Hon, Xiaofei Liu, Jingyuan Shen, Tielin Shi, Jianping Xuan
2025 A conf
CIKM
Xiuting Weng, Lixing Yu, Shaojie Zhan, Ruizhi Pu, Xiaofei Liu
2025 J jnl
PLoS Comput. Biol.
Lin Huang, Xiaofei Liu, Fangfang Zhu, Wenwen Min
2025 J jnl
IEEE Trans. Ind. Electron.
Jinze Jiang, Yaguo Lei, Zidong Wang, Ke Feng, Xiaofei Liu
2025 J jnl
PeerJ Comput. Sci.
Xiaofei Liu, Haiyan Cui, Tengcheng Que, Sujuan Zhao, Shaohui Zhong, Wenjian Liu, Yanling Hu
2025 conf
ICIC (1)
Songyan Liu, Tong Xiao, Chaoyi Luo, Jing Chai, Xiaofei Liu
2025 J jnl
Adv. Eng. Softw.
Zhen Hu, Kai Liang, Enyuan Wang, Xiaofei Liu, Fuyin Jia
2025 J jnl
IEEE Trans. Instrum. Meas.
Naipeng Li, Xinyu Li, Xiaofei Liu, Xiang Li, Bin Yang, Yaguo Lei
2025 J jnl
Int. J. Comput. Vis.
Xiaofei Liu, Zhengkun Yi, Xin-Yu Wu, Wanfeng Shang
2025 J jnl
Int. J. Found. Comput. Sci.
Xiaofei Liu, Weidong Li
2025 conf
IJTCS-FAW
Zhonghao Liu, Man Xiao, Xiaofei Liu, Weidong Li
2024 J jnl
Symmetry
Yifei You, Wenhua Jiao, Jinglong Chen, Zhaoyi Wang, Xiaofei Liu, Zhenwen Liu, Yuantao Chen, Xiaofei Zhang
2024 J jnl
Reliab. Eng. Syst. Saf.
Yuan Wang, Yaguo Lei, Naipeng Li, Xuanyu Gao, Xiaofei Liu, Qubing Ren, Jinze Jiang
2024 J jnl
IEEE Trans. Ind. Informatics
Xiaofei Liu, Yaguo Lei, Naipeng Li, Xiang Li, Bin Yang
2024 J jnl
Math. Struct. Comput. Sci.
Xiaofei Liu, Weidong Li
2024 conf
COCOON (1)
Hao Zhang, Xiya Zheng, Xiaofei Liu
2024 conf
OFC
Xiaofei Liu, Jingchuan Liu, Funan He, Ruyuan Ma, Xingyan Zhao, Qize Zhong, Yuan Dong, Ting Hu
2024 conf
IST
Xiaoyan Wang, Xiaofei Liu, Wuqiang Yang
2024 conf
BIBM
Lin Huang, Xiaofei Liu, Shunfang Wang, Wenwen Min
2024 J jnl
CoRR
Lin Huang, Xiaofei Liu, Shunfang Wang, Wenwen Min
2024 J jnl
IEEE Trans. Instrum. Meas.
Xiaofei Liu, Wuqiang Yang, Fan Meng, Tengchen Sun
2024 J jnl
Remote. Sens.
Xiaofei Liu, Jiangtao Wang, Sen Du, Kazhong Deng, Guoliang Chen, Xipeng Qin
2024 C conf
CoG
Xueqing Yang, Xiaofei Liu, Wenbin Lin
2024 J jnl
Symmetry
Junchao Chen, Yuke Long, Yulin Chen, Xiaofei Liu
2024 conf
I2MTC
Zihan Xia, Ruochen Huang, Xue Bai, Tian Meng, Xiaofei Liu, Qian Zhao, Zhijie Zhang, Wuliang Yin, Wuqiang Yang
2023 conf
I2MTC
Xiaofei Liu, Wuqiang Yang, Fan Meng, Tengchen Sun
2023 J jnl
Frontiers Comput. Sci.
Xiaofei Liu, Weidong Li, Jinhua Yang
2023 J jnl
J. Comb. Optim.
Xiaofei Liu, Man Xiao, Weidong Li, Yaoyu Zhu, Lei Ma
2023 conf
I2MTC
Zihan Xia, Gang Hu, Ruochen Huang, Xiaofei Liu, Anthony J. Peyton, Wuliang Yin, Wuqiang Yang
2023 conf
RCAR
Wenqiang Huang, Wanfeng Shang, Yulu Li, Xiaofei Liu, Xinyu Wu
2023 J jnl
J. Comb. Optim.
Xiaofei Liu, Yajie Li, Weidong Li, Jinhua Yang
2023 J jnl
IEEE Trans. Parallel Distributed Syst.
Peng Qu, Hui Lin, Meng Pang, Xiaofei Liu, Weimin Zheng, Youhui Zhang
2023 J jnl
Comput. Methods Programs Biomed.
Ting Zhu, Xiaofei Liu, Junren Wang, Ran Kou, Yao Hu, Minlan Yuan, Cui Yuan, Li Luo, Wei Zhang
2023 J jnl
Sensors
Jinxin Wang, Shenglei Zhao, Enyuan Wang, Jiyun Zhao, Xiaofei Liu, Zhonghui Li
2023 J jnl
IEEE Trans. Ind. Electron.
Naipeng Li, Yaguo Lei, Xiaofei Liu, Tao Yan, Pengcheng Xu
2023 conf
IST
Xiaofei Liu, Wuqiang Yang
2023 conf
RCAR
Yulu Li, Wanfeng Shang, Wenqiang Huang, Xiaofei Liu, Xinyu Wu
2023 conf
IST
Haoyu Zhao, Xiaofei Liu, Wuqiang Yang
2023 J jnl
Oper. Res. Forum
Man Xiao, Weidong Li, Xiaofei Liu
2023 J jnl
Int. J. Auton. Adapt. Commun. Syst.
Xiaofei Liu, Shaohui Zhong
2023 conf
I2MTC
Tian Meng, Lei Xiong, Xinnan Zheng, Zihan Xia, Xiaofei Liu, Yang Tao, Wuqiang Yang, Wuliang Yin
2022 J jnl
J. Comb. Optim.
Han Dai, Bin Deng, Weidong Li, Xiaofei Liu
2022 J jnl
Comput. Electr. Eng.
Boxiong Yang, Faizan Ali, Bo Zhou, Shelei Li, Ying Yu, Tingting Yang, Xiaofei Liu, Zhiyong Liang, Kaicun Zhang
2022 J jnl
Optim. Lett.
Xiaofei Liu, Weidong Li, Runtao Xie
2022 J jnl
IEEE Access
Yadong Yang, Jing Li, Ziwen Wu, Xiaofei Liu, Jian Wu
2022 C conf
TAMC
Xiaofei Liu, Weidong Li
2022 Misc conf
FAW
Han Dai, Weidong Li, Xiaofei Liu
2022 C conf
AAIM
Ruiqing Sun, Xiaofei Liu
2022 J jnl
Theor. Comput. Sci.
Xiaofei Liu, Weidong Li, Han Dai
2022 J jnl
J. Comb. Optim.
Xiaofei Liu, Weidong Li
2022 J jnl
Oper. Res.
Jacob B. Feldman, Dennis J. Zhang, Xiaofei Liu, Nannan Zhang
2022 J jnl
Stat. Anal. Data Min.
Weidong Rao, Xiaofei Liu, Fei Chen
2022 A conf
IROS
Xiaofei Liu, Zhengkun Yi, Xinyu Wu, Wanfeng Shang
2022 J jnl
Manuf. Serv. Oper. Manag.
Dennis J. Zhang, Ming Hu, Xiaofei Liu, Yuxiang Wu, Yong Li
2022 C conf
AAIM
Xiaofei Liu, Yaoyu Zhu, Weidong Li, Lei Ma
2022 conf
ICATCI (1)
Shuang Lin, Jianye Huang, Yongqian Liu, Yan Yang, Xiaofei Liu
2022 C conf
ISNCC
Mu Li, Yong Meng, Xiaofei Liu, Yaning Guo, Jiali Li, Qidi You
2022 Misc conf
COCOON
Xiaofei Liu, Zhonghao Liu
2022 conf
IST
Xiaofei Liu, Wuqiang Yang
2021 Misc conf
ICASSP
Peiyin Xing, Xiaofei Liu, Peixi Peng, Tiejun Huang, Yonghong Tian
2021 J jnl
Comput. Electr. Eng.
Boxiong Yang, Faizan Ali, Ping Yin, Tao Yang, Ying Yu, Shelei Li, Xiaofei Liu
2021 C conf
AAIM
Yajie Li, Weidong Li, Xiaofei Liu, Jinhua Yang
2021 J jnl
Optim. Lett.
Xiaofei Liu, Weidong Li
2021 J jnl
Earth Sci. Informatics
Yangyang Di, Enyuan Wang, Zhonghui Li, Xiaofei Liu, Baolin Li
2021 J jnl
IEEE Access
Xiaofei Liu, Pei Zhang, Hui Fang, Yinglu Zhou
2021 J jnl
CoRR
Zehong Chang, Fumin Wang, Xiaoli Wang, Xiaofei Liu, Rongqian Wu, Yi Lv, Pei Zhang
2021 J jnl
J. Sensors
Qiaolin Yu, Xiaofei Liu, Sihui Li, Lei Hou, Chengdong Zhu, Ying Lin
2020 J jnl
Int. J. Auton. Adapt. Commun. Syst.
Xiaofei Liu, Fei Zhu, Yuchen Fu, Quan Liu
2020 J jnl
CoRR
Shengdong Zhang, Shihui You, Longfei Chen, Xiaofei Liu
2020 J jnl
Comput. Math. Methods Medicine
Li Luo, Xiaofei Liu, Xinyuan Cui, Yuanjun Cheng, Xinzhu Yu, Yue Li, Li Jiang, Mingying Tan
2020 J jnl
Neural Comput. Appl.
Jin Zhang, Tiantian Tian, Shengchun Wang, Xiaofei Liu, Xuanyu Shu, Ying Wang
2020 J jnl
Manag. Sci.
Dennis J. Zhang, Hengchen Dai, Lingxiu Dong, Fangfang Qi, Nannan Zhang, Xiaofei Liu, Zhongyi Liu, Jiang Yang
2020 J jnl
CoRR
Shengdong Zhang, Shihui You, Longfei Chen, Xiaofei Liu
2019 conf
I2MTC
Fengtao Wang, Xiaofei Liu, Linjie Ma, Gang Deng, Qingkai Han, Hongkun Li
2019 conf
WOCC
Xiaofei Liu, Zhenyu Zhang, Xiyuan Wang, Jing Lian, Xiaoming Dai
2019 C conf
AAIM
Xiaofei Liu, Weidong Li
2019 J jnl
IEEE Access
Fengtao Wang, Gang Deng, Linjie Ma, Xiaofei Liu, Hongkun Li
2019 J jnl
Sensors
Xiaofei Liu, Xintai Su, Chao Yang, Kongjun Ma
2019 conf
WOCC
Jing Lian, Zhenyu Zhang, Xiyuan Wang, Xiaofei Liu, Xiaoming Dai
2019 conf
ICAIS (2)
Qian Li, Qiang Wu, Xiaofei Liu
2019 J jnl
Neural Process. Lett.
Fengtao Wang, Xiaofei Liu, Gang Deng, Xiaoguang Yu, Hongkun Li, Qingkai Han
2019 conf
HCC
Xiaofei Liu, Yu Zhang, Jiahao Xu
2019 J jnl
Manag. Sci.
Dennis J. Zhang, Hengchen Dai, Lingxiu Dong, Qian Wu, Lifan Guo, Xiaofei Liu
2018 conf
ICNC-FSKD
Jin Zhang, Tiantian Tian, Xiaofei Liu, Xuanyu Shu, Qiang Li
2018 A* conf
AAAI
Chang Zhou, Jinze Bai, Junshuai Song, Xiaofei Liu, Zhengchao Zhao, Xiusi Chen, Jun Gao
2018 conf
ICNC-FSKD
Xiaofei Liu, Jin Zhang, Rong Liu, Xuanyu Shu, Ming Chen, Tiantian Tian
2018 conf
CDC
Xiaofei Liu, Bruno Sinopoli
2018 conf
ICIGP
Qiang Ren, Tao Yang, Xiaofei Liu, Jing Li, Yanning Zhang, Wencheng Duan
2018 conf
ICIGP
Xiaofei Liu, Tao Yang, Jing Li, Miao Wang, Yanning Zhang
2017 J jnl
IEEE Trans. Control. Netw. Syst.
Sean Weerakkody, Xiaofei Liu, Sang H. Son, Bruno Sinopoli
2017 J jnl
CoRR
Chang Zhou, Jinze Bai, Junshuai Song, Xiaofei Liu, Zhengchao Zhao, Xiusi Chen, Jun Gao
2017 conf
COCOA (1)
Jianping Li, Xiaofei Liu, Weidong Li, Li Guan, Junran Lichen
2017 J jnl
Secur. Commun. Networks
Hongyan Cui, Xiaofei Liu, Tao Yu, Honggang Zhang, Yajun Fang, Zong-Guo Xia
2017 J jnl
IET Commun.
Hongyan Cui, Yang Li, Xiaofei Liu, Nirwan Ansari, Yunjie Liu
2017 conf
CDC
Sean Weerakkody, Xiaofei Liu, Bruno Sinopoli
2017 A* conf
AAAI
Chang Zhou, Yuqiong Liu, Xiaofei Liu, Zhongyi Liu, Jun Gao
2016 C conf
ACC
Sean Weerakkody, Xiaofei Liu, Sang H. Son, Bruno Sinopoli
2016 conf
ICCSA (3)
Nicola Ferrè, Songyin Qiu, Matteo Mazzucato, Andrea Ponzoni, Paolo Mulatti, Matteo Morini, Ji Fan, Xiaofei Liu, Shulong Dou, Xiangmei Lin, Stefano Marangon
2016 conf
CDC
Xiaofei Liu, Sean Weerakkody, Bruno Sinopoli
2015 J jnl
CoRR
Sean Weerakkody, Xiaofei Liu, Sang H. Son, Bruno Sinopoli
2015 conf
ISGT
Shuqing Zhang, Xiaofei Liu, Junwei Cao, Guoyu Tu, Yuxin Wan
2015 J jnl
CoRR
Xiaofei Liu, Sérgio Daniel Pequito, Soummya Kar, Bruno Sinopoli, A. Pedro Aguiar
2014 J jnl
J. Networks
Na Wang, Xiaogang Qi, Li Duan, Hua Jiang, Xiaofei Liu
2012 J jnl
J. Softw.
Hongzhi Hu, Weihui Dai, Yonghui Dai, Hai Sun, Peiran Zhang, Xiaofei Liu
2012 J jnl
Comput. Chem. Eng.
Mingxing Jia, Hengyuan Xu, Xiaofei Liu, Ning Wang
2011 conf
CCTA (1)
Zhifang Chen, Jinglei Wang, Jingsheng Sun, Aiwang Duan, Zugui Liu, Ni Song, Xiaofei Liu
2008 B conf
ICCCN
Xiaofei Liu, Song Guo, Abdulmotaleb El Saddik
2008 conf
ICWN
Xiaofei Liu, Song Guo, Abdulmotaleb El Saddik, Victor C. M. Leung
2008 conf
ICC
Xiaofei Liu, Song Guo, Abdulmotaleb El Saddik
2006 J jnl
BMC Bioinform.
Zhuo Zhang, Shiwei Sun, Xiaopeng Zhu, Suhua Chang, Xiaofei Liu, Chungong Yu, Dongbo Bu, Runsheng Chen
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