Wang Liu

84 papers A* 2A 2B 6C 3Journal 49Unranked 22
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Wirel. Commun.
Wang Liu, Cunhua Pan, Hong Ren, Wei Zhang, Cheng-Xiang Wang, Jiangzhou Wang
2026 J jnl
IEEE Commun. Lett.
Wang Liu, Qingtao Zeng, Yuanmeng Zhang, Junfei Li, ErQing Zhang, Likun Lu
2026 J jnl
IEEE Trans. Cogn. Commun. Netw.
Yangchen Li, Wang Liu, Bingbin Li, Yuanzhe Wang, Tianle Wang, Zhe Jia, Lianghui Ding, Feng Yang
2025 J jnl
Discov. Comput.
Wang Liu, Haitao Zhang, Zelong Hao
2025 J jnl
J. Comput. Methods Sci. Eng.
Peng Wang, Wang Liu, Jun Sun, Liang Chen, Chen Lu, Bowen Zheng
2025 J jnl
Int. J. Circuit Theory Appl.
Zhenghua Wei, Qiang Liu, Guangxing Du, Wang Liu, Guolin Li
2025 J jnl
IEEE Internet Things J.
Qiuzhen Lin, Wang Liu, Shaifeng Zheng, Junkai Ji, Ka-Chun Wong, Jianqiang Li, Carlos A. Coello Coello
2025 A conf
SDM
Zelong Hao, Haitao Zhang, Yang Che, Wang Liu
2025 conf
ICC
Chuhan Jiang, Ying Cui, Wang Liu, Lianghui Ding, Feng Yang
2025 J jnl
IEEE Trans. Commun.
Wang Liu, Cunhua Pan, Hong Ren, Cheng-Xiang Wang, Jiangzhou Wang, Xiaohu You
2025 J jnl
IEEE Trans. Commun.
Wang Liu, Cunhua Pan, Hong Ren, Jiangzhou Wang, Robert Schober
2025 J jnl
IEEE Internet Things J.
Wang Liu, Yuanmeng Zhang, Qingtao Zeng, Likun Lu, Anping Xu, Wenjing Li
2024 conf
ICNSC
Feng Qian, Wang Liu, Hanqiu Bao, Xudong Shi
2024 B conf
WCNC
Wang Liu, Cunhua Pan, Hong Ren, Jiangzhou Wang
2024 J jnl
Remote. Sens.
Qiansi Tu, Frank Hase, Kai Qin, Carlos Alberti, Fan Lu, Ze Bian, Lixue Cao, Jiaxin Fang, Jiacheng Gu, Luoyao Guan, Yanwu Jiang, Hanshu Kang, Wang Liu, Yanqiu Liu, Lingxiao Lu, Yanan Shan, Yuze Si, Qing Xu, Chang Ye
2024 J jnl
IEEE Trans. Wirel. Commun.
Wang Liu, Ying Cui, Feng Yang, Lianghui Ding, Jun Sun
2024 J jnl
CoRR
Wang Liu, Cunhua Pan, Hong Ren, Cheng-Xiang Wang, Jiangzhou Wang, Xiaohu You
2024 J jnl
CoRR
Wang Liu, Cunhua Pan, Hong Ren, Jiangzhou Wang, Robert Schober, Lajos Hanzo
2024 J jnl
Frontiers Inf. Technol. Electron. Eng.
Yajun Zhao, Linglong Dai, Jianhua Zhang, Ran Ji, Mengnan Jian, Hao Xue, Hongkang Yu, Yunqi Sun, Yu Lu, Zidong Wu, Zhuo Xu, Jinke Li, Haiyang Miao, Zhiqiang Yuan, Pan Tang, Jiayu Shen, Tierui Gong, Haixia Liu, Jiaqi Han, Qiang Feng, Zhi Chen, Lingxiang Li, Gang Yang, Yong Zeng, Cunhua Pan, Wang Liu, Kangda Zhi, Weidong Hu, Yuanwei Liu, Xidong Mu, Chau Yuen, Mérouane Debbah, Chongwen Huang, Long Li, Ping Zhang
2024 B conf
WCNC
Boshi Wang, Cunhua Pan, Hong Ren, Gui Zhou, Wang Liu, Zhiyuan Yu
2023 conf
ICSOC (1)
Jianfeng Shi, Heng Wu, Wang Liu, Heran Gao, Wenbo Zhang
2023 A conf
RTSS
Jianfeng Shi, Heng Wu, Wang Liu, Heran Gao, Wenbo Zhang
2023 J jnl
IEEE Commun. Lett.
Wang Liu, Hong Ren, Cunhua Pan, Jiangzhou Wang
2023 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Zipeng Wan, Qiang Liu, Wang Liu, Dong Cheng
2023 J jnl
IEEE Trans. Commun.
Wang Liu, Cunhua Pan, Hong Ren, Feng Shu, Shi Jin, Jiangzhou Wang
2023 J jnl
CoRR
Wang Liu, Ying Cui, Feng Yang, Lianghui Ding, Jun Sun
2023 conf
ICCT
Tian Hao, Wang Liu, Yue Li, Lingna Hu, Feng Yang
2023 conf
AIBDF
Lu Ke, Feng Jin, Yue Xu, Yanze Yu, Yilan Qiao, Wang Liu
2023 conf
Blizzard Challenge
Xin Qi, Xiaopeng Wang, Zhiyong Wang, Wang Liu, Mingming Ding, Shuchen Shi
2023 J jnl
CoRR
Xin Qi, Xiaopeng Wang, Zhiyong Wang, Wang Liu, Mingming Ding, Shuchen Shi
2022 J jnl
Remote. Sens.
Guobin Jin, Zhongchen Wu, Zongcheng Ling, Changqing Liu, Wang Liu, Wenxi Chen, Li Zhang
2022 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Wang Liu, Qiang Liu, Guangxing Du, Guolin Li
2022 J jnl
CoRR
Wang Liu, Hong Ren, Cunhua Pan, Jiangzhou Wang
2022 J jnl
Neurocomputing
Ran Zhu, Mingkun Yang, Wang Liu, Rujun Song, Bo Yan, Zhuoling Xiao
2022 J jnl
IEEE Geosci. Remote. Sens. Lett.
Jianxin Cheng, Jin Liu, Qiuming Kuang, Zhou Xu, Chenkai Shen, Wang Liu, Kang Zhou
2022 J jnl
IEEE Trans. Commun.
Wang Liu, Ying Cui, Feng Yang, Lianghui Ding, Jun Sun
2022 J jnl
IEEE Commun. Lett.
Hong Ren, Cunhua Pan, Liang Wang, Wang Liu, Zhoubing Kou, Kezhi Wang
2022 J jnl
CoRR
Wang Liu, Cunhua Pan, Hong Ren, Feng Shu, Shi Jin, Jiangzhou Wang
2022 conf
ICC
Wang Liu, Ying Cui, Feng Yang, Lianghui Ding, Jiyong Xu, Xingchen Xu
2022 conf
SPAWC
Wang Liu, Ying Cui, Feng Yang, Lianghui Ding, Jun Sun
2021 conf
WCSP
Zhixiang Liu, Wang Liu, Lingna Hu, Li Zhang, Feng Yang
2021 J jnl
Int. J. Web Based Communities
Xinhui Cui, Wang Liu, Zhiqiang He
2021 J jnl
CoRR
Ran Zhu, Mingkun Yang, Wang Liu, Rujun Song, Bo Yan, Zhuoling Xiao
2021 conf
I2MTC
Wang Liu, Jianxin Liu, Debao Wei, Liyan Qiao
2021 J jnl
Inf.
Yunlong Qu, Guiling Sun, Bowen Zheng, Wang Liu
2021 conf
ICC Workshops
Wang Liu, Ying Cui, Lianghui Ding, Jun Sun, Yangyang Liu, Yang Li, Li Zhang
2021 J jnl
CoRR
Wang Liu, Ying Cui, Lianghui Ding, Jun Sun, Yangyang Liu, Yang Li, Li Zhang
2021 J jnl
CoRR
Wang Liu, Ying Cui, Feng Yang, Lianghui Ding, Jun Sun
2021 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Chang Wang, Jinyu Sun, Shiwei Ma, Yuqiu Lu, Wang Liu
2021 J jnl
Sci. Program.
Wang Liu, Xia Li, Fengjiao Wu
2020 conf
ICSPCC
Jingchao Zhang, Sisheng Yin, Wang Liu
2020 J jnl
Multim. Tools Appl.
Yuqiu Lu, Jingjing Liu, Wang Liu, Shiwei Ma, Xianchao Xiu, Wanquan Liu, Hui Chen
2020 J jnl
IEEE Access
Wang Liu, Zhongyan Liu, Qi Zhang, Yujing Xu, Shuchang Liu, Zhuo Chen, Canlin Zhu, Ze Wang, Mengchun Pan, Jiafei Hu, Peisen Li
2020 J jnl
IEEE Access
Jianxin Cheng, Qiuming Kuang, Chenkai Shen, Jin Liu, Xicheng Tan, Wang Liu
2019 J jnl
IEEE Access
Xuehui Guan, Wang Liu, Baoping Ren, Haiwen Liu, Pin Wen
2019 conf
AIPR
Biqing Wang, Wang Liu, Ping Qi
2018 J jnl
IEEE Access
Datong Liu, Xuehao Yin, Yuchen Song, Wang Liu, Yu Peng
2018 conf
I2MTC
Jinyuan Jiang, Wang Liu
2017 conf
I2MTC
Wang Liu, Tianchi Zhao, David He, Datong Liu
2017 conf
HCI (6)
Jiayi Cai, Weifen Huang, Jie Li, Wang Liu, Haipeng Jing, Dong Chen, Yanlei Wang, Xiang Zhang
2016 conf
UEMCON
Wang Liu, Yanlin Ren, David He, Liyan Qiao
2016 conf
HCI (4)
Wang Liu, Yu Tian, Chunhui Wang, Weifen Huang, Shanguang Chen, Jun Wang
2015 conf
ICCC Workshops
Wang Liu, Mingya Zhang, Wei Chen, Wenxiang Li, Yuxia Sheng
2015 B conf
ICIP
Tong Liu, Wang Liu, Liyan Qiao, Tiannan Luo, Xiyuan Peng
2014 J jnl
Int. J. Auton. Adapt. Commun. Syst.
Mir Sajjad Hussain Talpur, Wang Liu, Guojun Wang
2013 A* conf
INFOCOM
Wang Liu, Kejie Lu, Jianping Wang, Yi Qian, Liusheng Huang, Jun Liu, Dapeng Oliver Wu
2012 A* conf
INFOCOM
Wang Liu, Kejie Lu, Jianping Wang, Yi Qian, Tao Zhang, Liusheng Huang
2012 J jnl
Theor. Comput. Sci.
Hongli Xu, Liusheng Huang, Wang Liu, Yindong Zhang, Yanjing Sun
2012 J jnl
J. Comput.
Zhen-Guo Yang, Liusheng Huang, Mingjun Xiao, Wang Liu
2012 J jnl
IEEE Trans. Wirel. Commun.
Tao Zhang, Kejie Lu, Shengli Fu, Yi Qian, Wang Liu, Jianping Wang
2012 J jnl
IEEE Trans. Veh. Technol.
Wang Liu, Kejie Lu, Jianping Wang, Liusheng Huang, Dapeng Oliver Wu
2012 J jnl
IEEE Intell. Syst.
Dong-Xu Li, Wang Liu, Jian-Ping Jiang
2012 J jnl
IEEE Trans. Veh. Technol.
Wang Liu, Kejie Lu, Jianping Wang, Guoliang Xing, Liusheng Huang
2011 J jnl
Int. J. Digit. Multim. Broadcast.
Kaiqian Ou, Yinlong Xu, Xiumin Wang, Wang Liu
2010 B conf
ISIT
Kejie Lu, Wang Liu, Jianping Wang, Tao Zhang, Shengli Fu
2010 conf
WCNIS
Zhen-Guo Yang, Liusheng Huang, Mingjun Xiao, Wang Liu
2010 B conf
ICCCN
Gang Liu, Liusheng Huang, Hongli Xu, Wang Liu, Yindong Zhang
2009 C conf
ICIS
Wang Liu, Chunhui Zhao
2009 B conf
MASS
Wang Liu, Jianping Wang, Guoliang Xing, Liusheng Huang
2009 J jnl
Comput. Commun.
Hongli Xu, Liusheng Huang, Wang Liu, Gang Wang, Yang Wang
2008 C conf
QSHINE
Hongli Xu, Liusheng Huang, Junmin Wu, Gang Wang, Wang Liu
2008 C conf
ISCC
Hongli Xu, Liusheng Huang, Wang Liu, Ben Xu, Mingjun Xiao
2006 conf
ICICIC (3)
Wang Liu, Sheng-He Sun
2005 conf
KES (4)
Wang Liu, Sheng-He Sun
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 != ""