Xiang Cui

116 papers A* 9A 6B 14C 10Misc 2Journal 38Unranked 37
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Internet Things J.
Xiang Cui, Yachen Mao, Qinmeng Du, Shanyue Wang, Yubo Yan, Hao Zhou, Xiangyang Li
2025 J jnl
ACM Trans. Sens. Networks
Fengyu Zhou, Hao Zhou, Weiming Guo, Zhan Wang, Wangqiu Zhou, Xiang Cui, Xiaoyan Wang, Xiang-Yang Li
2025 J jnl
ACM Trans. Sens. Networks
Sijia Zhang, Xiang Cui, Haohua Du, Shaoang Li, Yingqi Yu, Jiahui Hou, Xiang-Yang Li
2025 J jnl
Mach. Learn. Sci. Technol.
Haifeng Huang, Guobiao Cai, Chuanfeng Wei, Baiyi Zhang, Xiang Cui, Yongjia Zhao, Huiyan Weng, Weizong Wang, Lihui Liu, Bijiao He
2025 J jnl
IEEE Trans. Instrum. Meas.
Yongfan Zhan, Xuebao Li, Peng Sun, Zhibin Zhao, Xiang Cui
2025 J jnl
IEEE Trans. Instrum. Meas.
Li Zhang, Zhibin Zhao, Rui Jin, Xiaofeng Yang, Xuebao Li, Xiang Cui
2024 conf
MSN
Qinmeng Du, Shanyue Wang, Xiang Cui, Yachen Mao, Xiangyang Li
2024 conf
CDC
Patrick Myers, Yun Hwang, Daniel Ehrens, Christine Beauchene, Xiang Cui, Sergey Khasabov, Yun Guan, Sridevi Sarma
2024 J jnl
Remote. Sens.
Haibo Yang, Xiang Cui, Yingchun Cai, Zhengrong Wu, Shiqi Gao, Bo Yu, Yanling Wang, Ke Li, Zheng Duan, Qiuhua Liang
2024 C conf
CSCWD
Jianjun Zhao, Ru Tan, Yaqin Cao, Xutong Wang, Qixu Liu, Xiang Cui
2024 J jnl
IEEE Internet Things J.
Tiantian Ji, Binxing Fang, Xiang Cui, Tian Wang, Yuntao Zhang, Fan Gu, Chao Zheng
2024 C conf
CSCWD
Jinli Zhang, Xutong Wang, Ningjun Zheng, Kezhen Huang, Yun Feng, Xiang Cui
2023 J jnl
IEEE Trans. Ind. Electron.
Yan Shi, Xiang Cui, Lei Qi, Xiangyu Zhang, Xuebao Li, Hong Shen
2023 B conf
SECON
Weiming Guo, Zhan Wang, Hao Zhou, Wangqiu Zhou, Xiang Cui, Jianhui Zhang
2023 J jnl
Cybersecur.
Jianjun Zhao, Can Yang, Di Wu, Yaqin Cao, Yuling Liu, Xiang Cui, Qixu Liu
2023 J jnl
Sci. China Inf. Sci.
Tiantian Ji, Binxing Fang, Xiang Cui, Zhongru Wang, Peng Liao, Shouyou Song
2023 J jnl
ACM Trans. Sens. Networks
Wangqiu Zhou, Hao Zhou, Xiang Cui, Fengyu Zhou, Haisheng Tan, Xiang-Yang Li
2023 J jnl
IEEE Trans. Ind. Electron.
Wuyu Zhang, Kun Tan, Bing Ji, Lei Qi, Xiang Cui, Xiangyu Zhang, Luchun Du
2023 J jnl
IEEE Trans. Mob. Comput.
Hao Zhou, Jialin Deng, Wenxiong Hua, Xiang Cui, Xiang-Yang Li, Panlong Yang
2023 A* conf
INFOCOM
Wangqiu Zhou, Hao Zhou, Xiang Cui, Xinyu Wang, Xiaoyan Wang, Zhi Liu
2023 conf
MSN
Jinli Zhang, Feng Dai, Yaqin Cao, Ru Tan, Xiang Cui, Qixu Liu
2022 conf
DSC
Ruiling Gan, Jiawen Diao, Xiang Cui, Shouyou Song
2022 B conf
TrustCom
Jingqiang Liu, Xiaoxi Zhu, Chaoge Liu, Xiang Cui, Qixu Liu
2022 B conf
TrustCom
Dongxu Han, Pu Dong, Ning Li, Xiang Cui, Jiawen Diao, Qing Wang, Dan Du, Yuling Liu
2022 C conf
ICICS
Zhi Wang, Chaoge Liu, Xiang Cui, Jie Yin, Jiaxi Liu, Di Wu, Qixu Liu
2022 J jnl
Comput. Secur.
Zhi Wang, Chaoge Liu, Xiang Cui, Jie Yin, Xutong Wang
2022 B conf
TrustCom
Jiawen Diao, Binxing Fang, Xiang Cui, Zhongru Wang, Tian Wang, Shouyou Song
2022 A* conf
INFOCOM
Xiang Cui, Hao Zhou, Jialin Deng, Wangqiu Zhou, Xing Guo, Yu Gu
2022 A conf
ACSAC
Xutong Wang, Chaoge Liu, Xiaohui Hu, Zhi Wang, Jie Yin, Xiang Cui
2021 A conf
RAID
Junnan Wang, Qixu Liu, Di Wu, Ying Dong, Xiang Cui
2021 conf
MedInfo
Tianchu Lyu, Andrew Eidson, Jungmi Jun, Xiajie Zhou, Xiang Cui, Chen Liang
2021 J jnl
CoRR
Zhi Wang, Chaoge Liu, Xiang Cui, Jie Yin
2021 C conf
ISCC
Zhi Wang, Chaoge Liu, Xiang Cui
2021 J jnl
CoRR
Zhi Wang, Chaoge Liu, Xiang Cui
2021 B conf
IWQoS
Wangqiu Zhou, Hao Zhou, Wenxiong Hua, Fengyu Zhou, Xiang Cui, Suhua Tang, Zhi Liu, Xiang-Yang Li
2021 J jnl
IEEE Trans. Instrum. Meas.
Shi Fu, Guanrou Zhang, Yongfan Zhan, Cheng Peng, Zhibin Zhao, Xuebao Li, Xiang Cui
2021 J jnl
IEEE Trans. Instrum. Meas.
Shi Fu, Erping Deng, Cheng Peng, Guanrou Zhang, Zhibin Zhao, Xiang Cui
2021 B conf
ICPADS
Xiaolun Liang, Hao Zhou, Wangqiu Zhou, Xiang Cui, Zhi Liu, Xiang-Yang Li
2021 conf
ATCI (1)
Xiang Cui, Zhenghao Jia, Ping Xue, Qidan Xu, Shuang Li, Liankai Zhou
2020 conf
BigDataSE
Fangjiao Zhang, Xiang Cui, Zhi Wang, Shaomian Chen, Qixu Liu, Chaoge Liu
2020 J jnl
Appl. Soft Comput.
Hongtao Li, Juncheng Bai, Xiang Cui, Yongwu Li, Shaolong Sun
2020 conf
BigCom
Feiyu Han, Chengchen Wan, Panlong Yang, Hao Zhang, Yubo Yan, Xiang Cui
2020 J jnl
CoRR
Zhi Wang, Chaoge Liu, Xiang Cui, Jialong Zhang, Di Wu, Jie Yin, Jiaxi Liu, Qixu Liu, Jinli Zhang
2020 C conf
ICICS
Jie Yin, Xiang Cui, Chaoge Liu, Qixu Liu, Tao Cui, Zhi Wang
2020 J jnl
IEEE Trans. Ind. Electron.
Zhonghao Dongye, Lei Qi, Kexin Liu, Xiaoguang Wei, Xiang Cui
2020 Misc conf
AMIA
Xiajie Zhou, Tianchu Lyu, Jungmi Jun, Xiang Cui, Andrew Eidson, Chen Liang
2020 J jnl
CoRR
Tiantian Ji, Binxing Fang, Xiang Cui, Zhongru Wang, Jiawen Diao, Tian Wang, Weiqiang Yu
2020 J jnl
IEEE Access
Xiaoke Zhu, Pengfei Ye, Xiao-Yuan Jing, Xinyu Zhang, Xiang Cui, Xiaopan Chen, Fan Zhang
2020 A* conf
INFOCOM
Hao Zhou, Wenxiong Hua, Jialin Deng, Xiang Cui, Xiang-Yang Li, Panlong Yang
2020 conf
BigCom
Xiang Cui, Ji Zhang, Hao Zhou, Chang Deng
2020 J jnl
Trans. Emerg. Telecommun. Technol.
Xiang Cui, Xiaowen Li, Yifeng Chen
2019 J jnl
Int. J. Digit. Crime Forensics
Wei Jiang, Xianda Wu, Xiang Cui, Chaoge Liu
2019 J jnl
Pattern Recognit.
Xiaoke Zhu, Xiao-Yuan Jing, Fan Zhang, Xinyu Zhang, Xinge You, Xiang Cui
2019 conf
ICC
Di Wu, Binxing Fang, Junnan Wang, Qixu Liu, Xiang Cui
2019 J jnl
Sensors
Weihai Chen, Zhongyi Li, Xiang Cui, Jianbin Zhang, Shaoping Bai
2019 B conf
SECON
Wenxiong Hua, Xiang Cui, Hao Zhou, Panlong Yang, Xiang-Yang Li
2019 conf
ICAIS (4)
Zongshi Chen, Mohan Li, Xiang Cui, Yanbin Sun
2019 J jnl
J. Ambient Intell. Humaniz. Comput.
Juan Chen, Zhihong Tian, Xiang Cui, Lihua Yin, Xianzhi Wang
2018 conf
DSC
Jingqiang Liu, Zihao Zhao, Xiang Cui, Zhi Wang, Qixu Liu
2018 J jnl
IEEE Access
Zhihong Tian, Yu Cui, Lun An, Shen Su, Xiaoxia Yin, Lihua Yin, Xiang Cui
2018 conf
TrustCom/BigDataSE
Yun Feng, Baoxu Liu, Xiang Cui, Chaoge Liu, Xuebin Kang, Junwei Su
2018 conf
ICCCS (1)
Hui Lu, Xiang Cui, Le Wang, Yu Jiang, Ronglai Jia
2018 conf
ICCCS (1)
Xiangsong Gao, Hui Lu, Xiang Cui, Le Wang
2018 J jnl
Wirel. Commun. Mob. Comput.
Zihan Wang, Chaoge Liu, Jing Qiu, Zhihong Tian, Xiang Cui, Shen Su
2018 conf
DSC
Xiaoyun Li, Xiang Cui, Limin Shi, Chaoge Liu, Xiaoxi Wang
2018 conf
DSC
Chaoge Liu, Xiang Cui, Zhi Wang, Xiaoxi Wang, Yun Feng, Xiaoyun Li
2018 conf
DSC
Zhaopeng Jia, Xiang Cui, Qixu Liu, Xiaoxi Wang, Chaoge Liu
2018 conf
SciSec
Zhi Wang, Jinli Zhang, Qixu Liu, Xiang Cui, Junwei Su
2018 conf
DSC
Di Wu, Binxing Fang, Jie Yin, Fangjiao Zhang, Xiang Cui
2018 C conf
ICICS
Jie Yin, Heyang Lv, Fangjiao Zhang, Zhihong Tian, Xiang Cui
2018 conf
ICCCS (2)
Hui Lu, Xiang Cui, Le Wang, Yu Jiang, Meng Cui
2017 conf
DSC
Jie Yin, Xiang Cui, Ke Li
2017 J jnl
IEEE Access
Heng-Tian Wu, Chong-Qing Jiao, Xiang Cui, Xiao-Fan Liu, Jian-Fei Ji
2016 conf
I2MTC
Zhilong Zou, Yong Ju, Xu Zhang, Xiang Cui, Tiebing Lu
2016 B conf
PPoPP
Yifeng Chen, Kun Huang, Bei Wang, Guohui Li, Xiang Cui
2015 conf
I2MTC
Xuebao Li, Xiang Cui, Tiebing Lu, Donglai Wang, Zhenguo Wang, He Zhang
2015 J jnl
Secur. Commun. Networks
Xiang Cui, Lihua Yin, Shuyuan Jin, Zhiyu Hao, Shuhao Li
2015 A* conf
ICRA
Xin Jin, Xiang Cui, Sunil Kumar Agrawal
2015 B conf
CCGRID
Xiang Cui, Xiaowen Li, Yifeng Chen
2015 conf
I2MTC
Yang Liu, Xiang Cui, Tiebing Lu, Xuebao Li, Zhenguo Wang
2015 B conf
PPoPP
Yifeng Chen, Xiang Cui, Hong Mei
2014 A conf
IROS
Xiang Cui, Weihai Chen, Sunil K. Agrawal, Jianhua Wang
2014 C conf
NPC
Xiang Cui, Xiaowen Li, Yifeng Chen
2014 C conf
CloudCom
Lingfang Zeng, Shijie Xu, Yang Wang, Xiang Cui, Tan Wee Kiat, David Bremner, Kenneth B. Kent
2014 A* conf
CCS
Ke Li, Chaoge Liu, Xiang Cui
2014 A* conf
CCS
Yu Liang, Zhiqiao Li, Xiang Cui
2014 conf
ITQM
Fangjiao Zhang, Lidong Zhai, Jincui Yang, Xiang Cui
2013 C conf
SecureComm
Xiang Cui, Binxing Fang, Jinqiao Shi, Chaoge Liu
2013 conf
AIM
Xiang Cui, Weihai Chen, Guilin Yang, Yan Jin
2013 J jnl
J. Comput.
Xiang Cui, Guisheng Yin, Long Zhang, Yongjin Kang
2013 A* conf
CCS
Dan Li, Chaoge Liu, Xu Cui, Xiang Cui
2012 A* conf
CCS
Xiang Cui, Binxing Fang, Peng Liao, Chaoge Liu
2012 A conf
RAID
Shuyuan Jin, Zhi Yang, Xiang Cui
2012 Misc conf
SEC
Shuhao Li, Xiao-chun Yun, Zhiyu Hao, Yongzheng Zhang, Xiang Cui, Yipeng Wang
2012 conf
ISCTCS
Yaxing Zhang, Shuyuan Jin, Xiang Cui, Xi Yin, Yi Pang
2012 B conf
PPoPP
Yifeng Chen, Xiang Cui, Hong Mei
2012 conf
IPDPS Workshops
Changyou Zhang, Kun Huang, Xiang Cui, Yifeng Chen
2012 conf
ISCTCS
Shuai Wang, Xiang Cui, Peng Liao, Dan Li
2012 A conf
RAID
Xiang Cui, Jinqiao Shi, Peng Liao, Chaoge Liu
2011 C conf
PDCAT
Shuhao Li, Xiao-chun Yun, Zhiyu Hao, Xiang Cui, Yipeng Wang
2011 conf
MALWARE
Chaoge Liu, Weiqing Lu, Zhiqi Zhang, Peng Liao, Xiang Cui
2011 conf
LEET
Xiang Cui, Binxing Fang, Lihua Yin, Xiaoyi Liu, Tianning Zang
2011 A* conf
CCS
Peng Liao, Xiang Cui, Shuhao Li, Chaoge Liu
2011 conf
GreenCom
Changyou Zhang, Kun Huang, Xiang Cui, Yifeng Chen
2011 J jnl
J. Softw.
Lidong Zhai, Li Guo, Xiang Cui, Shuhao Li
2010 B conf
ICPADS
Xiang Cui, Yifeng Chen, Changyou Zhang, Hong Mei
2010 A conf
ICS
Yifeng Chen, Xiang Cui, Hong Mei
2009 B conf
SMC
Shuyuan Jin, Yong Wang, Xiang Cui, Xiao-chun Yun
2009 B conf
ICPADS
Xiang Cui, Yifeng Chen, Hong Mei
2008 conf
SpringSim
Alex A. Aravind, Xiang Cui
2007 conf
ITNG
Bing Wu, Xiao-chun Yun, Xiang Cui
2005 J jnl
IEEE Trans. Instrum. Meas.
Changsheng Li, Xiang Cui, Ichirou Yamaguchi, Masayuki Yokota, Toshihiko Yoshino
2005 conf
WiMob (3)
Jernej Polajnar, Tyler Neilson, Xiang Cui, Alex A. Aravind
2005 J jnl
J. Comput. Sci. Technol.
Yu Jiang, Binxing Fang, Ming-Zeng Hu, Xiang Cui
2004 conf
International Conference on Wireless Networks
Xiang Cui, Yong Sun, K. Alagarsamy
2001 J jnl
IEEE Trans. Instrum. Meas.
Changsheng Li, Xiang Cui, Toshihiko Yoshino
tests/integration/test_elf_extractor.py
← Index tests/integration/test_elf_extractor.py python
"""
Integration tests for the ELFExtractor base class.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

pytestmark = [pytest.mark.integration, pytest.mark.elf]


class TestELFExtractorInitialization:
    """Tests for ELFExtractor initialization."""

    def test_elf_extractor_with_valid_elf(self, elf_binary_path, mock_logger):
        """Test ELFExtractor initialization with valid ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            assert extractor.filepath == elf_binary_path
            assert extractor._is_elf_file() is True

    def test_elf_extractor_with_invalid_file(self, pe_binary_path, mock_logger):
        """Test ELFExtractor initialization 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)

            # Should not be a valid ELF
            assert extractor._is_elf_file() is False

    def test_elf_extractor_with_text_file(self, temp_text_file, mock_logger):
        """Test ELFExtractor initialization with text file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(temp_text_file, mock_logger)

            # Should not be a valid ELF
            assert extractor._is_elf_file() is False


class TestELFExtractorMethods:
    """Tests for ELFExtractor helper methods."""

    def test_is_elf_file_true(self, elf_binary_path, mock_logger):
        """Test _is_elf_file returns True for valid ELF."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            assert extractor._is_elf_file() is True

    def test_is_elf_file_cached(self, elf_binary_path, mock_logger):
        """Test _is_elf_file result is cached."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # First call
            result1 = extractor._is_elf_file()
            # Second call should use cached value
            result2 = extractor._is_elf_file()

            assert result1 == result2
            # Cache should be set
            assert extractor._elf_file_valid is not None

    def test_is_64bit(self, elf_binary_path, mock_logger):
        """Test _is_64bit method."""
        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._is_64bit()
            # Result depends on the test binary
            assert isinstance(result, bool)

    def test_is_stripped(self, elf_binary_path, mock_logger):
        """Test _is_stripped method."""
        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._is_stripped()
            assert isinstance(result, bool)

    def test_has_debug_info(self, elf_binary_path, mock_logger):
        """Test _has_debug_info method."""
        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._has_debug_info()
            assert isinstance(result, bool)

    def test_get_architecture(self, elf_binary_path, mock_logger):
        """Test _get_architecture method."""
        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._get_architecture()
            # Should return a string (architecture name)
            assert isinstance(result, str)
            assert result != ""

    def test_get_endianness(self, elf_binary_path, mock_logger):
        """Test _get_endianness method."""
        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._get_endianness()
            # Should be one of: "little", "big", or "unknown"
            assert result in ["little", "big", "unknown"]

    def test_get_file_type(self, elf_binary_path, mock_logger):
        """Test _get_file_type method."""
        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._get_file_type()
            # Should return a file type string
            assert isinstance(result, str)
            # Common values: "executable", "shared_object", "relocatable", etc.
            expected_types = ["none", "relocatable", "executable", "shared_object", "core_dump", "unknown"]
            assert result in expected_types or result.startswith("ET_")

    def test_is_pie(self, elf_binary_path, mock_logger):
        """Test _is_pie method."""
        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._is_pie()
            assert isinstance(result, bool)

    def test_has_stack_protection(self, elf_binary_path, mock_logger):
        """Test _has_stack_protection method."""
        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._has_stack_protection()
            assert isinstance(result, bool)

    def test_has_nx_bit(self, elf_binary_path, mock_logger):
        """Test _has_nx_bit method."""
        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._has_nx_bit()
            assert isinstance(result, bool)

    def test_has_relro(self, elf_binary_path, mock_logger):
        """Test _has_relro method."""
        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._has_relro()
            assert isinstance(result, bool)

    def test_get_build_id(self, elf_binary_path, mock_logger):
        """Test _get_build_id method."""
        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._get_build_id()
            # Could be None if no build ID, or a hex string
            assert result is None or isinstance(result, str)

    def test_count_sections(self, elf_binary_path, mock_logger):
        """Test _count_sections method."""
        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._count_sections()
            assert isinstance(result, int)
            assert result >= 0

    def test_count_segments(self, elf_binary_path, mock_logger):
        """Test _count_segments method."""
        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._count_segments()
            assert isinstance(result, int)
            assert result >= 0

    def test_count_symbols(self, elf_binary_path, mock_logger):
        """Test _count_symbols method."""
        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._count_symbols()
            assert isinstance(result, int)
            assert result >= 0

    def test_get_dependencies(self, elf_binary_path, mock_logger):
        """Test _get_dependencies method."""
        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._get_dependencies()
            assert isinstance(result, list)


class TestWithELFFile:
    """Tests for the _with_elf_file context manager method."""

    def test_with_elf_file_success(self, elf_binary_path, mock_logger):
        """Test _with_elf_file executes operation successfully."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # Define a simple operation
            def get_header(elf):
                return elf.header is not None

            result = extractor._with_elf_file(get_header)
            assert result is True

    def test_with_elf_file_error_handling(self, temp_text_file, mock_logger):
        """Test _with_elf_file handles errors gracefully."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(temp_text_file, mock_logger)

            # Define an operation that would fail
            def get_header(elf):
                return elf.header

            result = extractor._with_elf_file(get_header)
            # Should return None on error
            assert result is None


class TestELFExtractorTag:
    """Tests for tag method in ELF extractors."""

    def test_elf_features_tag(self, elf_binary_path, mock_logger):
        """Test that ELFFeaturesExtractor returns correct tag."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            tag = extractor.tag()
            # Should return the tag string
            assert isinstance(tag, str)
            assert "elf" in tag.lower() or "features" in tag.lower()


class TestELFExtractorClickHouseTable:
    """Tests for get_clickhouse_table method in ELF extractors."""

    def test_elf_features_clickhouse_table(self, elf_binary_path, mock_logger):
        """Test that ELFFeaturesExtractor returns correct ClickHouse table name."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_elf_features"


class TestELFExtractorExtract:
    """Tests for extract method in ELF extractors."""

    def test_elf_features_extract(self, elf_binary_path, mock_logger):
        """Test ELFFeaturesExtractor.extract() returns valid data."""
        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)

            # Check some expected fields
            assert isinstance(result.ei_class, int)
            assert isinstance(result.ei_data, int)
            assert isinstance(result.e_entry, int)
            assert isinstance(result.number_of_sections, int)
            assert isinstance(result.number_of_segments, int)

    def test_elf_features_extract_invalid_file(self, pe_binary_path, mock_logger):
        """Test ELFFeaturesExtractor.extract() handles invalid ELF."""
        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


class TestELFExtractorPrepareExportData:
    """Tests for prepare_export_data method in ELF extractors."""

    def test_elf_features_prepare_export_elasticsearch(self, elf_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # First extract
            extractor.extract()
            result = extractor.prepare_export_data("ElasticsearchExporter")
            # Should return the elf_features dataclass
            assert result is extractor.elf_features

    def test_elf_features_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # First extract
            extractor.extract()
            result = extractor.prepare_export_data("ClickHouseExporter")

            # Should return tuple of (data, column_names, column_type_names)
            assert isinstance(result, tuple)
            assert len(result) == 3
            data, column_names, column_type_names = result
            assert isinstance(data, list)
            assert isinstance(column_names, list)
            assert isinstance(column_type_names, list)
            # Column names and types should match in length
            assert len(column_names) == len(column_type_names)


class TestELFExtractorAdvanced:
    """Advanced tests for ELF extraction using hello_advanced binary."""

    def test_elf_advanced_features(self, elf_advanced_binary_path, mock_logger):
        """Test ELFFeaturesExtractor with more complex 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

            # Check that we can extract meaningful data
            assert result.number_of_sections > 0
            assert result.number_of_segments > 0

    def test_elf_advanced_architecture(self, elf_advanced_binary_path, mock_logger):
        """Test architecture detection for 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)

            arch = extractor._get_architecture()
            # Should detect a valid architecture
            assert arch != "unknown"
            assert arch != ""