Xiaofang Yuan

105 papers B 2Journal 88Unranked 14
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Intell. Transp. Syst.
Xiangcheng Pan, Xiaofang Yuan, Zhigang Ling, Zhe Li, Kexin Liu, Yaonan Wang
2026 J jnl
IEEE Trans. Multim.
Haozhi Xu, Xiaofang Yuan, Yaonan Wang
2026 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Guowei An, Yaonan Wang, Qing Zhu, Kai Zeng, Xiaofang Yuan, Xuebing Liu
2026 J jnl
J. Control. Decis.
Zhe Li, Kexin Liu, Xudong Wang, Xiaofang Yuan, Yaonan Wang
2026 J jnl
IEEE Trans. Artif. Intell.
Shuqiao Huang, Mingxin Hou, Xiaofang Yuan, Xiru Wu, Yaonan Wang, Guoming Huang
2026 J jnl
Expert Syst. Appl.
Ji Feng, Xiaofang Yuan, Zhe Li, Xiangcheng Pan, Kexin Liu
2026 J jnl
Neurocomputing
Haozhi Xu, Xiaofang Yuan, Jinlei Wang, Yaonan Wang
2025 J jnl
IEEE Internet Things J.
Yingjun Hou, Xizheng Zhang, Hui Zhang, Xu Cao, Zhangyu Lu, Xiaofang Yuan
2025 J jnl
J. Intell. Manuf.
Zhe Li, Kexin Liu, Xudong Wang, Xiaofang Yuan, He Xie, Yaonan Wang
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Xiangcheng Pan, Xiaofang Yuan, Zhigang Ling, Zhe Li, Kexin Liu, Yaonan Wang
2025 J jnl
IEEE Access
Guowei An, Yaonan Wang, Yang Mo, Kai Zeng, Qing Zhu, Xiaofang Yuan
2025 J jnl
Vis. Comput.
Guowei An, Yaonan Wang, Kai Zeng, Qing Zhu, Xiaofang Yuan
2025 J jnl
Int. J. Hum. Comput. Interact.
Xiaofang Yuan, Fenghui Deng, Xiaoyu Yao, Yu Wu
2025 J jnl
Neurocomputing
Pan Li, Xiaofang Yuan, Haozhi Xu, Jinlei Wang, Yaonan Wang
2025 J jnl
Hum. Factors
Yu Wu, Xiaoyu Yao, Fenghui Deng, Xiaofang Yuan
2025 J jnl
Neurocomputing
Pan Li, Xiaofang Yuan, Haozhi Xu, Jinlei Wang, Yaonan Wang
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Kexin Liu, Xiaofang Yuan, Zhe Li, Xiangcheng Pan, Yaonan Wang
2025 J jnl
IEEE Trans. Veh. Technol.
Xiangcheng Pan, Xiaofang Yuan, Zhigang Ling, Zhe Li, Kexin Liu, Yaonan Wang
2024 J jnl
IEEE Trans. Ind. Informatics
Xuebing Liu, Xiaofang Yuan, Qing Zhu, Yaonan Wang, Mingtao Feng, Jiaming Zhou, Zhen Zhou
2024 J jnl
Neurocomputing
Haozhi Xu, Zhigang Ling, Xiaofang Yuan, Yaonan Wang
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Xizheng Zhang, Xu Cao, Hui Zhang, Yongpeng Shen, Xiaofang Yuan, Zijian Cui, Zhangyu Lu
2024 J jnl
IEEE Access
Guowei An, Yaonan Wang, Kai Zeng, Qing Zhu, Xiaofang Yuan, Yang Mo
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Xizheng Zhang, Sichen Fang, Yongpeng Shen, Xiaofang Yuan, Zhangyu Lu
2024 J jnl
CoRR
Guoming Huang, Mingxin Hou, Xiaofang Yuan, Shuqiao Huang, Yaonan Wang
2024 J jnl
IEEE Trans. Veh. Technol.
Jinlei Wang, Xiaofang Yuan, Guoming Huang, Weihua Tan, Yaonan Wang
2024 J jnl
Behav. Inf. Technol.
Linhui Sun, Zigu Guo, Xiaofang Yuan, Xinping Wang
2023 J jnl
IEEE Trans. Ind. Electron.
Xuebing Liu, Xiaofang Yuan, Qing Zhu, Yaonan Wang, Hui Zhang, Mingtao Feng, Zijie Wu, Yongpeng Tang
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Changjing Wan, Xiaofang Yuan, Xiangshan Dai, Ting Zhang, Qian He
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Jinlei Wang, Xiaofang Yuan, Zhixian Liu, Weihua Tan, Xizheng Zhang, Yaonan Wang
2023 J jnl
Expert Syst. Appl.
Weihua Tan, Xiaofang Yuan, Xizheng Zhang, Jinlei Wang
2023 J jnl
CoRR
Guoming Huang, Xiaofang Yuan, Zhixian Liu, Weihua Tan, Xiru Wu, Yaonan Wang
2023 conf
CAIBDA
Zien Liu, Jun Cao, Fengxiang Ma, Yue Zhao, Xiangke Wang, Jianhao Li, Ahui Qian, Xiaofang Yuan, Yumei Song
2023 J jnl
Adv. Eng. Informatics
Yu Wu, Lisha Ma, Xiaofang Yuan, Qingnan Li
2023 ed.
ICCEIC
Xiaofang Yuan, Qinmin Yang
2022 J jnl
J. Frankl. Inst.
Zhixian Liu, Xiaofang Yuan, Zhe Li
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Zhixian Liu, Xiaofang Yuan, Guoming Huang, Weihua Tan, Yaonan Wang
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Guoming Huang, Xiaofang Yuan, Ke Shi, Zhixian Liu, Xiru Wu
2022 conf
ICARM
Tao Xu, Hui Zhang, Xidong Zhou, Xiaofang Yuan, Xuan Tan, Jieqingxin Zhang, Hang Zhong
2022 conf
CSE
Xinhe Pu, Xiaofang Yuan, Liangsen Li, Weiming Ji
2022 B conf
TrustCom
Xinhe Pu, Xiaofang Yuan, Liangsen Li, Weiming Ji
2022 J jnl
IEEE Trans. Ind. Electron.
Haotian Wu, Yaonan Wang, Patricio A. Vela, Hui Zhang, Xiaofang Yuan, Xianen Zhou
2022 J jnl
Soft Comput.
Weihua Tan, Xiaofang Yuan, Yuhui Yang, Lianghong Wu
2022 J jnl
Symmetry
Lisha Ma, Yu Wu, Qingnan Li, Xiaofang Yuan
2021 J jnl
IEEE Trans. Cogn. Dev. Syst.
Wei Wu, Q. M. Jonathan Wu, Wei Sun, Yimin Yang, Xiaofang Yuan, Wei-Long Zheng, Bao-Liang Lu
2021 J jnl
Comput. Ind. Eng.
Weihua Tan, Xiaofang Yuan, Jinlei Wang, Xizheng Zhang
2021 conf
ISCID
Xiaofang Yuan, Fenghui Deng, Zheng Liu
2021 J jnl
Appl. Soft Comput.
Weihua Tan, Xiaofang Yuan, Guoming Huang, Zhixian Liu
2021 J jnl
IEEE Trans. Instrum. Meas.
Haotian Wu, Yaonan Wang, Hui Zhang, Xiaofang Yuan, Xianen Zhou
2021 conf
ICCSE
Meng Zhang, Xiaofang Yuan
2020 J jnl
IEEE Trans. Intell. Veh.
Guoming Huang, Xiaofang Yuan, Ke Shi, Zhixian Liu, Xiru Wu
2020 conf
HCI (40)
Xiaofang Yuan, Qiujie Jiang
2020 J jnl
IEEE Trans. Intell. Transp. Syst.
Xiaofang Yuan, Guoming Huang, Ke Shi
2020 J jnl
Comput. Electr. Eng.
Huihuang Zhao, Jing-Hua Zheng, Yaonan Wang, Xiaofang Yuan, Yuhua Li
2020 J jnl
IEEE Access
Yanjie Chen, Weiwei Zhan, Bingwei He, Lixiong Lin, Zhiqiang Miao, Xiaofang Yuan, Yaonan Wang
2019 J jnl
J. Frankl. Inst.
Guoming Huang, Xiaofang Yuan, Ke Shi, Xiru Wu
2019 conf
CAAD Futures
Lisha Ma, Yu Wu, Xiaofang Yuan, Wuzhen Zhu
2019 J jnl
IEEE Access
Jianhua Wu, Pengjie Wei, Xiaofang Yuan, Zhigang Shu, Yao-Yi Chiang, Zhongliang Fu, Min Deng
2019 conf
HPCC/SmartCity/DSS
Xiaofang Yuan, Wubin Zhang
2019 J jnl
J. Frankl. Inst.
Zhe Li, Xiaofang Yuan, Yaonan Wang, Chun-Hua Xie
2018 B conf
ITS
Xiaoxiao Cheng, Zhengzhou Zhu, Xiao Liu, Xiaofang Yuan, Jiayu Guo, Qun Guo, Deqi Li, Ruofei Zhu
2018 J jnl
Int. J. Syst. Sci.
Ke Shi, Xiaofang Yuan, Guoming Huang, Qian He
2018 J jnl
Int. J. Inf. Technol. Manag.
Hongxia Li, Dandan Che, Xiaofang Yuan, Yan Li
2017 J jnl
Soft Comput.
Xiangshan Dai, Xiaofang Yuan, Liang-Hong Wu
2017 J jnl
Comput. Ind. Eng.
Yu Wu, Ji-Hyun Lee, Yong Se Kim, Sang Won Lee, Sun-Joong Kim, Xiaofang Yuan
2017 conf
iThings/GreenCom/CPSCom/SmartData
Xiaofang Yuan, Lijun Liu, Fei Hao
2017 conf
iThings/GreenCom/CPSCom/SmartData
Xiaofang Yuan, Yue Hu
2016 J jnl
Soft Comput.
Jingyi Zhao, Xiaofang Yuan
2016 J jnl
Neural Process. Lett.
Xiaofang Yuan, Yongzhong Xiang, Yan Wang, Xinggang Yan
2015 J jnl
Soft Comput.
Xiaofang Yuan, Xiangshan Dai, Liang-Hong Wu
2015 J jnl
Appl. Soft Comput.
Xiangshan Dai, Xiaofang Yuan, Zhenjun Zhang
2015 J jnl
IEEE Trans. Cybern.
Yimin Yang, Q. M. Jonathan Wu, Yaonan Wang, K. M. Zeeshan, Xiaofeng Lin, Xiaofang Yuan
2015 J jnl
Appl. Soft Comput.
Xiaofang Yuan, Ting Zhang, Yongzhong Xiang, Xiangshan Dai
2015 J jnl
Neural Comput. Appl.
Xiaofang Yuan, Yuqing He, Liangjiang Liu
2015 J jnl
Appl. Math. Comput.
Xiaofang Yuan, Yuanming Liu, Yongzhong Xiang, Xinggang Yan
2015 J jnl
Intell. Autom. Soft Comput.
Yimin Yang, Xiaofeng Lin, Zhiqiang Miao, Xiaofang Yuan, Yaonan Wang
2014 J jnl
Sensors
Bumin Meng, Yaonan Wang, Wei Sun, Xiaofang Yuan
2014 J jnl
Adv. Eng. Informatics
Xiaofang Yuan, Ji-Hyun Lee
2014 J jnl
Appl. Soft Comput.
Xiaofang Yuan, Jingyi Zhao, Yimin Yang, Yaonan Wang
2014 J jnl
Appl. Math. Comput.
Xiaofang Yuan, Xiangshan Dai, Jingyi Zhao, Qian He
2014 conf
WHICEB
Xiaofang Yuan, Lin Shi, Hongxia Li
2013 J jnl
Neural Comput. Appl.
Xiaofang Yuan, Yimin Yang, Hui Wang, Yaonan Wang
2013 J jnl
Neural Comput. Appl.
Hui Wang, Xiaofang Yuan, Yaonan Wang, Yimin Yang
2013 J jnl
Neural Comput. Appl.
Yimin Yang, Yaonan Wang, Xiaofang Yuan, Youhui Chen, Lei Tan
2013 J jnl
Neural Process. Lett.
Yimin Yang, Yaonan Wang, Xiaofang Yuan
2013 conf
CAAD Futures
Xiaofang Yuan, Ji-Hyun Lee
2013 J jnl
Inf. Syst.
Xiaofang Yuan, Ji-Hyun Lee, Sun-Joong Kim, Yoon-Hyun Kim
2012 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Yimin Yang, Yaonan Wang, Xiaofang Yuan
2012 J jnl
Appl. Math. Comput.
Yimin Yang, Yaonan Wang, Xiaofang Yuan, Feng Yin
2012 J jnl
Appl. Math. Comput.
Xiaofang Yuan, Yimin Yang, Hui Wang
2011 J jnl
Int. J. Comput. Intell. Syst.
Liang-Hong Wu, Yaonan Wang, Xiaofang Yuan
2011 J jnl
IEEE Trans. Veh. Technol.
Liang-Hong Wu, Yaonan Wang, Xiaofang Yuan, Zhenlong Chen
2011 J jnl
IEEE Trans. Veh. Technol.
Yaonan Wang, Xizheng Zhang, Xiaofang Yuan, Guorong Liu
2011 J jnl
Neural Comput. Appl.
Xiaofang Yuan, Yaonan Wang, Hui Wang, Beining Wang
2011 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Qin Wan, Yaonan Wang, Hongshan Yu, Xiaofang Yuan, Juan Lu
2010 J jnl
Int. J. Comput. Commun. Control
Xizheng Zhang, Yaonan Wang, Xiaofang Yuan
2010 J jnl
Soft Comput.
Yaonan Wang, Liang-Hong Wu, Xiaofang Yuan
2010 J jnl
IEEE Trans. Veh. Technol.
Xiaofang Yuan, Yaonan Wang, Liang-Hong Wu, Xizheng Zhang, Wei Sun
2010 J jnl
IEEE Trans. Control. Syst. Technol.
Xiaofang Yuan, Yaonan Wang, Wei Sun, Liang-Hong Wu
2010 J jnl
Int. J. Model. Identif. Control.
Qian He, Xiaofang Yuan, Yong Wang
2010 J jnl
Intell. Autom. Soft Comput.
Yaonan Wang, Xiaofang Yuan, Liang-Hong Wu
2009 J jnl
IEEE Trans. Ind. Electron.
Xiaofang Yuan, Yaonan Wang
2008 J jnl
Neural Process. Lett.
Xiaofang Yuan, Yaonan Wang, Liang-Hong Wu
2008 J jnl
IEEE Trans. Veh. Technol.
Xiaofang Yuan, Yaonan Wang, Liang-Hong Wu
2007 conf
FSKD (2)
Yongjun Li, Xiaofang Yuan
2007 conf
ISNN (3)
Xiaofang Yuan, Yaonan Wang
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