Wei Wang

113 papers A* 7A 1B 7C 7Misc 1Journal 57Unranked 32
YearRankTypeTitle / Venue / Authors
2026 J jnl
Inf. Fusion
Yifan Guan, Wei Wang, Jianjun Chen, Po Yang, Jingzhou Xu, Jun Qi
2026 A* conf
AAAI
Zeqiang Wang, Rebecca Oldroyd, Yuqi Wang, Jiageng Wu, Jie Yang, Wei Wang, Nishanth Ramakrishna Sastry, Jon Johnson, Suparna De
2026 J jnl
Pattern Recognit.
Yijie Hu, Kaizhu Huang, Wei Wang, Xiaowei Huang, Qiu-Feng Wang
2025 J jnl
CoRR
Chengming Wang, Dongyao Jia, Wei Wang, Dong Ngoduy, Bei Peng, Jianping Wang
2025 conf
ACL (Findings)
Hongbin Na, Yining Hua, Zimu Wang, Tao Shen, Beibei Yu, Lilin Wang, Wei Wang, John B. Torous, Ling Chen
2025 J jnl
CoRR
Hongbin Na, Yining Hua, Zimu Wang, Tao Shen, Beibei Yu, Lilin Wang, Wei Wang, John B. Torous, Ling Chen
2025 J jnl
CoRR
Fuyu Xing, Zimu Wang, Wei Wang, Haiyang Zhang
2025 J jnl
Comput. Mater. Continua
Jia Liu, Hang Gu, Fangmei Liu, Hao Chen, Zuhe Li, Gang Xu, Qidong Liu, Wei Wang
2025 A* conf
EMNLP
Xiaoqiang Kang, Shengen Wu, Zimu Wang, Yilin Liu, Xiaobo Jin, Kaizhu Huang, Wei Wang, Yutao Yue, Xiaowei Huang, Qiufeng Wang
2025 J jnl
CoRR
Xiaoqiang Kang, Shengen Wu, Zimu Wang, Yilin Liu, Xiaobo Jin, Kaizhu Huang, Wei Wang, Yutao Yue, Xiaowei Huang, Qiufeng Wang
2025 B conf
COLING
Jiayuan Ma, Hongbin Na, Zimu Wang, Yining Hua, Yue Liu, Wei Wang, Ling Chen
2025 J jnl
IEEE Access
Nana Li, Zhipeng Weng, Fangmei Liu, Zuhe Li, Wei Wang
2025 A* conf
SIGGRAPH Asia
Weiguang Zhang, Huangcheng Lu, Maizhen Ning, Xiaowei Huang, Wei Wang, Kaizhu Huang, Qiufeng Wang
2025 J jnl
CoRR
Weiguang Zhang, Huangcheng Lu, Maizhen Ning, Xiaowei Huang, Wei Wang, Kaizhu Huang, Qiufeng Wang
2025 A conf
ECAI
Muyi Bao, Changyu Zeng, Yifan Wang, Zhengni Yang, Zimu Wang, Guangliang Cheng, Jun Qi, Wei Wang
2025 J jnl
CoRR
Muyi Bao, Changyu Zeng, Yifan Wang, Zhengni Yang, Zimu Wang, Guangliang Cheng, Jun Qi, Wei Wang
2025 J jnl
IEEE Open J. Comput. Soc.
Hanyue Xu, Kah Phooi Seng, Kenneth Li-Minn Ang, Wei Wang, Jeremy Smith
2025 conf
EMNLP (Industry Track)
Haotan Guo, Jianfei He, Jiayuan Ma, Hongbin Na, Zimu Wang, Haiyang Zhang, Qi Chen, Wei Wang, Zijing Shi, Tao Shen, Ling Chen
2025 J jnl
CoRR
Haotan Guo, Jianfei He, Jiayuan Ma, Hongbin Na, Zimu Wang, Haiyang Zhang, Qi Chen, Wei Wang, Zijing Shi, Tao Shen, Ling Chen
2025 A* conf
EMNLP
Tong Chen, Zimu Wang, Yiyi Miao, Haoran Luo, Yuanfei Sun, Wei Wang, Zhengyong Jiang, Procheta Sen, Jionglong Su
2025 J jnl
CoRR
Tong Chen, Zimu Wang, Yiyi Miao, Haoran Luo, Yuanfei Sun, Wei Wang, Zhengyong Jiang, Procheta Sen, Jionglong Su
2025 conf
EMNLP (Findings)
Changyu Zeng, Yifan Wang, Zimu Wang, Wei Wang, Zhengni Yang, Muyi Bao, Jimin Xiao, Anh Nguyen, Yutao Yue
2025 J jnl
CoRR
Changyu Zeng, Yifan Wang, Zimu Wang, Wei Wang, Zhengni Yang, Muyi Bao, Jimin Xiao, Anh Nguyen, Yutao Yue
2025 C conf
CSCWD
Xinyi Zeng, Zimu Wang, Haiyang Zhang, Yiming Luo, Wei Wang
2025 A* conf
AAAI
Xiaoqiang Kang, Zimu Wang, Xiaobo Jin, Wei Wang, Kaizhu Huang, Qiufeng Wang
2025 A* conf
AAAI
Huiru Shao, Kaizhu Huang, Wei Wang, Xiaowei Huang, Qiufeng Wang
2025 conf
CCL
Fuyu Xing, Haoyu Huang, Dawei Mo, Xinzhuo Yang, Zixuan Gao, Wei Wang, Zimu Wang, Haiyang Zhang
2025 J jnl
CoRR
Hongbin Na, Zimu Wang, Zhaoming Chen, Peilin Zhou, Yining Hua, Grace Ziqi Zhou, Haiyang Zhang, Tao Shen, Wei Wang, John B. Torous, Shaoxiong Ji, Ling Chen
2024 J jnl
CoRR
Baoru Huang, Tuan Van Vo, Chayun Kongtongvattana, Giulio Dagnino, Dennis Kundrat, Wenqiang Chi, Mohamed E. M. K. Abdelaziz, Trevor M. Y. Kwok, Tudor Jianu, Tuong Do, Hieu Le, Minh Nguyen, Hoan Nguyen, Erman Tjiputra, Quang Tran, Jianyang Xie, Yanda Meng, Binod Bhattarai, Zhaorui Tan, Hongbin Liu, Hong Seng Gan, Wei Wang, Xi Yang, Qiufeng Wang, Jionglong Su, Kaizhu Huang, Angelos Stefanidis, Min Guo, Bo Du, Rong Tao, Minh Vu, Guoyan Zheng, Yalin Zheng, Francisco Vasconcelos, Danail Stoyanov, Daniel S. Elson, Ferdinando Rodriguez y Baena, Anh Nguyen
2024 conf
SemEval@NAACL
Yuqi Wang, Zeqiang Wang, Wei Wang, Qi Chen, Kaizhu Huang, Anh Nguyen, Suparna De
2024 J jnl
CoRR
Yuqi Wang, Zeqiang Wang, Wei Wang, Qi Chen, Kaizhu Huang, Anh Nguyen, Suparna De
2024 conf
ECCV (65)
Huiru Shao, Zhuang Qian, Kaizhu Huang, Wei Wang, Xiaowei Huang, Qiufeng Wang
2024 J jnl
CoRR
Jiayuan Ma, Hongbin Na, Zimu Wang, Yining Hua, Yue Liu, Wei Wang, Ling Chen
2024 J jnl
CoRR
Zimu Wang, Lei Xia, Wei Wang, Xinya Du
2024 C conf
PACLIC
Lu Qian, Yuqi Wang, Zimu Wang, Haiyang Zhang, Wei Wang, Ting Yu, Anh Nguyen
2024 J jnl
CoRR
Lu Qian, Yuqi Wang, Zimu Wang, Haiyang Zhang, Wei Wang, Ting Yu, Anh Nguyen
2024 C conf
ISPA
Ruilin Cai, Jun Qi, Jiayi Li, Jianjun Chen, Wei Wang, Haiyang Zhang
2024 C conf
CSCWD
Zimu Wang, Wei Wang, Qi Chen, Qiufeng Wang, Anh Nguyen
2024 J jnl
CoRR
Jianfei He, Lilin Wang, Jiaying Wang, Zhenyu Liu, Hongbin Na, Zimu Wang, Wei Wang, Qi Chen
2024 conf
WASSA
Yuqi Wang, Zimu Wang, Nijia Han, Wei Wang, Qi Chen, Haiyang Zhang, Yushan Pan, Anh Nguyen
2024 conf
INLG (System Demonstrations)
Nijia Han, Zimu Wang, Yuqi Wang, Haiyang Zhang, Daiyun Huang, Wei Wang
2024 A* conf
AAAI
Zihao Zhou, Qiufeng Wang, Mingyu Jin, Jie Yao, Jianan Ye, Wei Liu, Wei Wang, Xiaowei Huang, Kaizhu Huang
2024 J jnl
CoRR
Hongbin Na, Zimu Wang, Mieradilijiang Maimaiti, Tong Chen, Wei Wang, Tao Shen, Ling Chen
2024 J jnl
CoRR
Zeqiang Wang, Jiageng Wu, Yuqi Wang, Wei Wang, Jie Yang, Jon Johnson, Nishanth Sastry, Suparna De
2024 J jnl
ACM Trans. Multim. Comput. Commun. Appl.
Yijie Hu, Bin Dong, Kaizhu Huang, Lei Ding, Wei Wang, Xiaowei Huang, Qiu-Feng Wang
2024 J jnl
Expert Syst. Appl.
Changyu Zeng, Wei Wang, Anh Nguyen, Jimin Xiao, Yutao Yue
2024 J jnl
CoRR
Xiaoqiang Kang, Zimu Wang, Xiaobo Jin, Wei Wang, Kaizhu Huang, Qiufeng Wang
2024 J jnl
Neurocomputing
Yuqi Wang, Wei Wang, Qi Chen, Kaizhu Huang, Anh Nguyen, Suparna De
2023 J jnl
Inf. Fusion
Yuqi Wang, Wei Wang, Qi Chen, Kaizhu Huang, Anh Nguyen, Suparna De, Amir Hussain
2023 J jnl
CoRR
Zimu Wang, Wei Wang, Qi Chen, Qiufeng Wang, Anh Nguyen
2023 B conf
SMARTCOMP
Jingyi Li, Qi Chen, Wei Wang, Fangyu Wu
2023 J jnl
IEEE Internet Things J.
Haotian Yin, Xin Huang, Bin Xing, Jiajia Huang, Xiaoxin Sun, Jianshuang Li, Sheng Chai, Di Zhang, Rana Abu Bakar, Wei Wang
2023 conf
ACL (Findings)
Zihao Zhou, Maizhen Ning, Qiufeng Wang, Jie Yao, Wei Wang, Xiaowei Huang, Kaizhu Huang
2023 J jnl
CoRR
Zihao Zhou, Maizhen Ning, Qiufeng Wang, Jie Yao, Wei Wang, Xiaowei Huang, Kaizhu Huang
2023 J jnl
CoRR
Zihao Zhou, Qiufeng Wang, Mingyu Jin, Jie Yao, Jianan Ye, Wei Liu, Wei Wang, Xiaowei Huang, Kaizhu Huang
2023 conf
ICONIP (15)
Huiru Shao, Kaizhu Huang, Wei Wang, Xiaowei Huang, Qiufeng Wang
2023 conf
ACL (student)
Yuqi Wang, Wei Wang, Qi Chen, Kaizhu Huang, Anh Nguyen, Suparna De
2023 J jnl
IEEE Trans. Smart Grid
Sheng Chai, Haotian Yin, Bin Xing, Zhukun Li, Yunyi Guo, Di Zhang, Xin Zhang, Da He, Jie Zhang, Xiaoling Yu, Wei Wang, Xin Huang
2023 J jnl
CoRR
Changyu Zeng, Wei Wang, Anh Nguyen, Yutao Yue
2023 J jnl
CoRR
Yuqi Wang, Zeqiang Wang, Wei Wang, Qi Chen, Kaizhu Huang, Anh Nguyen, Suparna De
2022 conf
CyberC
Changyu Zeng, Li Liu, Haocheng Zhao, Yu Zhang, Wei Wang, Ning Cai, Yutao Yue
2022 J jnl
IEEE Internet Things Mag.
Dawei Liu, Qiwen Chen, Shuchang Li, Ziniu Wu, Liqi Chen, Xu He, Xin Huang, Wei Wang
2022 B conf
SMARTCOMP
Yuqi Wang, Wei Wang, Qi Chen, Kaizhu Huang, Anh Nguyen, Suparna De
2022 conf
CyberC
Haoyu Wu, Jun Qi, Wei Wang, Jianjun Chen
2022 conf
iThings/GreenCom/CPSCom/SmartData/Cybermatics
Suparna De, Usamah Jassat, Alex Grace, Wei Wang, Klaus Moessner
2022 J jnl
Proc. Priv. Enhancing Technol.
Thomas Cilloni, Wei Wang, Charles Walter, Charles Fleming
2022 J jnl
Computer
Suparna De, Wei Wang, Usamah Jassat, Klaus Moessner
2022 J jnl
IEEE Internet Things J.
Qi Chen, Wei Wang, Kaizhu Huang, Frans Coenen
2021 J jnl
Computing
Suparna De, Wei Wang, Yuchao Zhou, Charith Perera, Klaus Moessner, Mansour Naser Alraja
2021 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Hang Dong, Wei Wang, Kaizhu Huang, Frans Coenen
2021 conf
ICCBD
Shichao Jia, Qi Chen, Wei Wang
2021 J jnl
IEEE Internet Things Mag.
Suparna De, Usamah Jassat, Wei Wang, Charith Perera, Klaus Moessner
2021 J jnl
Expert Syst. Appl.
Qi Chen, Wei Wang, Kaizhu Huang, Suparna De, Frans Coenen
2021 B conf
SMARTCOMP
Yuqi Wang, Qi Chen, Wei Wang
2021 conf
ICCCS
Yinhui Yi, Xiaohui Zhu, Yong Yue, Wei Wang
2020 conf
iThings/GreenCom/CPSCom/SmartData/Cybermatics
Qi Chen, Wei Wang, Kaizhu Huang, Suparna De, Frans Coenen
2020 J jnl
Inf. Sci.
Hang Dong, Wei Wang, Frans Coenen, Kaizhu Huang
2020 B conf
SMARTCOMP
Qi Chen, Wei Wang, Kaizhu Huang, Suparna De, Frans Coenen
2020 Misc conf
SEC
Dawei Liu, Ali H. Al-Bayatti, Wei Wang
2020 J jnl
IEEE Trans. Geosci. Remote. Sens.
Dawei Liu, Wei Wang, Xiaokai Wang, Cheng Wang, Jiangyun Pei, Wenchao Chen
2020 J jnl
CoRR
Thomas Cilloni, Wei Wang, Charles Walter, Charles Fleming
2019 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Qi Chen, Wei Wang, Fangyu Wu, Suparna De, Ruili Wang, Bailing Zhang, Xin Huang
2019 conf
NAACL-HLT (1)
Hang Dong, Wei Wang, Kaizhu Huang, Frans Coenen
2019 conf
CSAI
Yuanying Qu, Haowei Song, Hai-Ning Liang, Jieming Ma, Wei Wang
2019 J jnl
IEEE Internet Things J.
Jie Zhang, Xin Huang, Wei Wang, Yong Yue
2018 conf
SmartBlock
Mengjie Chen, Yuexuan Li, Zhuocheng Xu, Xin Huang, Wei Wang
2018 conf
PRICAI (1)
Hang Dong, Wei Wang, Frans Coenen
2018 J jnl
IEEE Access
Yuchao Zhou, Suparna De, Wei Wang, Ruili Wang, Klaus Moessner
2018 conf
iConference
Hang Dong, Wei Wang, Frans Coenen
2018 J jnl
J. Univers. Comput. Sci.
Difeng Yu, Hai-Ning Liang, Feiyu Lu, Vijayakumar Nanjappan, Konstantinos Papangelis, Wei Wang
2018 conf
DSIT
Yuyun Chen, Hang Dong, Wei Wang
2017 B conf
NSS
Lulu Liang, Kai Zheng, Qiankun Sheng, Wei Wang, Rong Fu, Xin Huang
2017 C conf
WoWMoM
Wei Wang, Suparna De, Yuchao Zhou, Xin Huang, Klaus Moessner
2017 J jnl
Sensors
Yuchao Zhou, Suparna De, Wei Wang, Klaus Moessner, Marimuthu Palaniswami
2016 J jnl
Sensors
Yuchao Zhou, Suparna De, Wei Wang, Klaus Moessner
2015 J jnl
Inf. Sci.
Wei Wang, Fang Yao, Suparna De, Klaus Moessner, Zhili Sun
2015 J jnl
Expert Syst. Appl.
Wei Wang, Suparna De, Gilbert Cassar, Klaus Moessner
2015 conf
SmartCity
Hang Dong, Wei Wang, Hai-Ning Liang
2014 conf
CSE
Yuchao Zhou, Suparna De, Wei Wang, Klaus Moessner
2014 conf
CSE
Wei Wang, Hai-Ning Liang
2014 conf
CSE
Haining Liang, Charles Fleming, Wei Wang
2013 conf
GreenCom/iThings/CPScom
Payam M. Barnaghi, Wei Wang, Lijun Dong, Chonggang Wang
2013 C conf
ISCC
Gilbert Cassar, Payam M. Barnaghi, Wei Wang, Suparna De, Klaus Moessner
2013 C conf
WOWMOM
Martin Serrano, Hoan Quoc Nguyen-Mau, Manfred Hauswirth, Wei Wang, Payam M. Barnaghi, Philippe Cousin
2013 conf
Future Internet Assembly
Suparna De, François Carrez, Eike Steffen Reetz, Ralf Tönjes, Wei Wang
2012 B conf
TrustCom
Wei Wang, Suparna De, Ralf Tönjes, Eike Steffen Reetz, Klaus Moessner
2012 conf
GreenCom
Gilbert Cassar, Payam M. Barnaghi, Wei Wang, Klaus Moessner
2012 J jnl
Int. J. Semantic Web Inf. Syst.
Payam M. Barnaghi, Wei Wang, Cory A. Henson, Kerry Taylor
2011 J jnl
Inf. Sci.
Wei Wang, Payam M. Barnaghi, Andrzej Bargiela
2010 J jnl
IEEE Trans. Knowl. Data Eng.
Wei Wang, Payam M. Barnaghi, Andrzej Bargiela
2009 conf
EuroSSC
Wei Wang, Payam M. Barnaghi
2009 ch.
Handbook of Research on Digital Libraries
Payam M. Barnaghi, Wei Wang, Jayan Chirayath Kurian
2007 conf
ALPIT
Wei Wang, Payam M. Barnaghi, Andrzej Bargiela
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 != ""