Wei Shao

100 papers A* 7A 5B 4C 4Misc 1Journal 65Unranked 14
YearRankTypeTitle / Venue / Authors
2026 A* conf
WWW
Tiantian Huang, Yue Li, Wei Shao, Ziqi Xu, Qipeng Song, Hui Li
2025 J jnl
CoRR
Shulun Chen, Wei Shao, Flora D. Salim, Hao Xue
2025 J jnl
CoRR
Wei Shao, Yuhao Wang, Rongguang He, Muhammad Ejaz Ahmed, Seyit Camtepe
2025 conf
SIGSPATIAL/GIS
Yufan Kang, Jie Zhang, Wei Shao, Rui Tang, Mark Andrejevic, Jeffrey Chan, Flora D. Salim
2025 J jnl
IEEE Internet Things J.
Hanchu Zhou, Edward Xie, Wei Shao, Dechen Gao, Michelle Dong, Junshan Zhang
2025 conf
SIGSPATIAL/GIS
Sichen Zhao, Wei Shao, Jeffrey Chan, Ziqi Xu, Flora Salim
2025 J jnl
CoRR
Sichen Zhao, Wei Shao, Jeffrey Chan, Ziqi Xu, Flora Salim
2025 J jnl
Data Min. Knowl. Discov.
Edward A. Small, Wei Shao, Zeliang Zhang, Peihan Liu, Jeffrey Chan, Kacper Sokol, Flora D. Salim
2025 J jnl
IEEE Internet Things J.
Wei Shao, Rongyi Zhu, Cai Yang, Chandra Thapa, Muhammad Ejaz Ahmed, Seyit Camtepe, Rui Zhang, Du Yong Kim, Hamid Menouar, Flora D. Salim
2025 J jnl
CoRR
Sarah Ali Siddiqui, Chandra Thapa, Derui Wang, Rayne Holland, Wei Shao, Seyit Camtepe, Hajime Suzuki, Rajiv Shah
2025 conf
WWW (Companion Volume)
Ziqi Xu, Chenglong Ma, Yongli Ren, Jeffrey Chan, Wei Shao, Feng Xia
2024 J jnl
CoRR
Wei Shao, Chandra Thapa, Rayne Holland, Sarah Ali Siddiqui, Seyit Camtepe
2024 J jnl
CoRR
Hanchu Zhou, Edward Xie, Wei Shao, Dechen Gao, Michelle Dong, Junshan Zhang
2024 J jnl
CoRR
Sarah Ali Siddiqui, Chandra Thapa, Rayne Holland, Wei Shao, Seyit Camtepe
2024 J jnl
IEEE Trans. Mob. Comput.
Wei Shao, Zejun Fan, Chia-Ju Chen, Zhaofeng Zhang, Jiaqi Ma, Junshan Zhang
2024 conf
ECML/PKDD (9)
Yufan Kang, Jeffrey Chan, Wei Shao, Flora D. Salim, Christopher Leckie
2024 J jnl
CoRR
Yufan Kang, Jeffrey Chan, Wei Shao, Flora D. Salim, Christopher Leckie
2024 A conf
ECAI
William Holland, Chandra Thapa, Wei Shao, Seyit Camtepe, Sarah Ali Siddiqui
2024 J jnl
CoRR
William Holland, Chandra Thapa, Sarah Ali Siddiqui, Wei Shao, Seyit Camtepe
2024 J jnl
CoRR
Yufan Kang, Rongsheng Zhang, Wei Shao, Flora D. Salim, Jeffrey Chan
2024 A conf
GECCO
Yufan Kang, Rongsheng Zhang, Wei Shao, Flora D. Salim, Jeffrey Chan
2024 J jnl
CoRR
Wei Shao, Rongyi Zhu, Cai Yang, Chandra Thapa, Muhammad Ejaz Ahmed, Seyit Camtepe, Rui Zhang, Du Yong Kim, Hamid Menouar, Flora D. Salim
2024 A* conf
KDD
Wei Shao, Yufan Kang, Ziyan Peng, Xiao Xiao, Lei Wang, Yuhui Yang, Flora D. Salim
2024 J jnl
CoRR
Wei Shao, Yufan Kang, Ziyan Peng, Xiao Xiao, Lei Wang, Yuhui Yang, Flora D. Salim
2024 J jnl
Data Min. Knowl. Discov.
Arian Prabowo, Hao Xue, Wei Shao, Piotr Koniusz, Flora D. Salim
2024 J jnl
Pervasive Mob. Comput.
Wei Shao, Yu Zhang, Pengfei Xiao, Kyle Kai Qin, Mohammad Saiedur Rahaman, Jeffrey Chan, Bin Guo, Andy Song, Flora D. Salim
2024 J jnl
IEEE Internet Things J.
Chao Liu, Boxi Chen, Wei Shao, Wenjun Chris Zhang, Kelvin K. L. Wong, Yi Zhang
2023 J jnl
Wirel. Pers. Commun.
Hongming Shen, Xingsi Cheng, Boyang Xu, Wei Shao, Chen Xu, Xiaoyan Shen
2023 conf
IoTDI
Arian Prabowo, Wei Shao, Hao Xue, Piotr Koniusz, Flora D. Salim
2023 J jnl
CoRR
Arian Prabowo, Wei Shao, Hao Xue, Piotr Koniusz, Flora D. Salim
2023 A* conf
ICLR
Sheng Yue, Guanbo Wang, Wei Shao, Zhaofeng Zhang, Sen Lin, Ju Ren, Junshan Zhang
2023 J jnl
CoRR
Sheng Yue, Guanbo Wang, Wei Shao, Zhaofeng Zhang, Sen Lin, Ju Ren, Junshan Zhang
2023 A* conf
ICDM
Wei Shao, Ziyan Peng, Yufan Kang, Xiao Xiao, Zhiling Jin
2023 J jnl
CoRR
Arian Prabowo, Hao Xue, Wei Shao, Piotr Koniusz, Flora D. Salim
2023 J jnl
CoRR
Kyle Kai Qin, Yongli Ren, Wei Shao, Brennan Lake, Filippo Privitera, Flora D. Salim
2023 J jnl
ACM Trans. Spatial Algorithms Syst.
Kyle Kai Qin, Yongli Ren, Wei Shao, Brennan Lake, Filippo Privitera, Flora D. Salim
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Xiao Xiao, Ziyan Peng, Yunqing Lin, Zhiling Jin, Wei Shao, Rui Chen, Nan Cheng, Guoqiang Mao
2023 J jnl
CoRR
Arian Prabowo, Wei Shao, Hao Xue, Piotr Koniusz, Flora D. Salim
2022 Misc conf
CoRL
Runsheng Xu, Zhengzhong Tu, Hao Xiang, Wei Shao, Bolei Zhou, Jiaqi Ma
2022 J jnl
CoRR
Runsheng Xu, Zhengzhong Tu, Hao Xiang, Wei Shao, Bolei Zhou, Jiaqi Ma
2022 conf
BIBM
Yuxi Liu, Shaowen Qin, Zhenhao Zhang, Wei Shao
2022 J jnl
ACM Trans. Intell. Syst. Technol.
Nan Gao, Hao Xue, Wei Shao, Sichen Zhao, Kyle Kai Qin, Arian Prabowo, Mohammad Saiedur Rahaman, Flora D. Salim
2022 B conf
IJCNN
Rongguang He, Xiao Xiao, Yufan Kang, Hongyu Zhao, Wei Shao
2022 J jnl
CoRR
Edward Small, Wei Shao, Zeliang Zhang, Peihan Liu, Jeffrey Chan, Kacper Sokol, Flora D. Salim
2022 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Nan Gao, Mohammad Saiedur Rahaman, Wei Shao, Kaixin Ji, Flora D. Salim
2022 conf
BIBM
Yuxi Liu, Shaowen Qin, Antonio Jimeno-Yepes, Wei Shao, Zhenhao Zhang, Flora D. Salim
2022 J jnl
CoRR
Yuxi Liu, Shaowen Qin, Antonio Jimeno-Yepes, Wei Shao, Zhenhao Zhang, Flora D. Salim
2022 J jnl
Sensors
James Brotchie, Wei Shao, Wenchao Li, Allison Kealy
2022 A* conf
IJCAI
Wei Shao, Zhiling Jin, Shuo Wang, Yufan Kang, Xiao Xiao, Hamid Menouar, Zhaofeng Zhang, Junshan Zhang, Flora D. Salim
2022 J jnl
CoRR
Wei Shao, Zhiling Jin, Shuo Wang, Yufan Kang, Xiao Xiao, Hamid Menouar, Zhaofeng Zhang, Junshan Zhang, Flora D. Salim
2022 conf
CWSN
Md. Tanvir Rahman, Yu Zhang, Samen Anjum Arani, Wei Shao
2022 A conf
SDM
Sichen Zhao, Wei Shao, Jeffrey Chan, Flora D. Salim
2022 J jnl
CoRR
Sichen Zhao, Wei Shao, Jeffrey Chan, Flora D. Salim
2022 J jnl
Neurocomputing
Wei Shao, Arian Prabowo, Sichen Zhao, Piotr Koniusz, Flora D. Salim
2022 J jnl
Biomed. Signal Process. Control.
Xiaoyan Shen, Xuemei Wang, Song Lu, Zhiling Li, Wei Shao, Yan Wu
2022 B conf
IJCNN
Zhiling Jin, Jing Xu, Ruiqi Huang, Wei Shao, Xiao Xiao
2022 J jnl
Neuromorph. Comput. Eng.
Yan Du, Wei Shao, Zheng Chai, Hanzhang Zhao, Qihui Diao, Yawei Gao, Xihui Yuan, Qiaoqiao Wang, Tao Li, Weidong Zhang, Jian Fu Zhang, Tai Min
2021 A* conf
PerCom
Wei Shao, Sichen Zhao, Zhen Zhang, Shiyu Wang, Mohammad Saiedur Rahaman, Andy Song, Flora D. Salim
2021 J jnl
Remote. Sens.
Xiao Xiao, Zhiling Jin, Yilong Hui, Yueshen Xu, Wei Shao
2021 J jnl
CoRR
Nan Gao, Mohammad Saiedur Rahaman, Wei Shao, Kaixin Ji, Flora D. Salim
2021 conf
UbiComp/ISWC Adjunct
Nan Gao, Mohammad Saiedur Rahaman, Wei Shao, Flora D. Salim
2021 J jnl
CoRR
Nan Gao, Mohammad Saiedur Rahaman, Wei Shao, Flora D. Salim
2021 B conf
SSDBM
Mohammad Saiedur Rahaman, Wei Shao, Flora D. Salim, Ayad Turky, Andy Song, Jeffrey Chan, Junliang Jiang, Doug Bradbrook
2021 J jnl
CoRR
Mohammad Saiedur Rahaman, Wei Shao, Flora D. Salim, Ayad Turky, Andy Song, Jeffrey Chan, Junliang Jiang, Doug Bradbrook
2021 J jnl
CoRR
Wei Shao, Arian Prabowo, Sichen Zhao, Piotr Koniusz, Flora D. Salim
2020 B conf
IJCNN
Wei Shao, Jeffrey Chan, Flora D. Salim
2020 conf
ICCS (5)
Ayad Turky, Mohammad Saiedur Rahaman, Wei Shao, Flora D. Salim, Doug Bradbrook, Andy Song
2020 J jnl
CoRR
Wei Shao, Sichen Zhao, Zhen Zhang, Shiyu Wang, Mohammad Saiedur Rahaman, Andy Song, Flora Dilys Salim
2020 A conf
CIKM
Kyle Kai Qin, Flora D. Salim, Yongli Ren, Wei Shao, Mark Heimann, Danai Koutra
2020 J jnl
CoRR
Kyle Kai Qin, Flora D. Salim, Yongli Ren, Wei Shao, Mark Heimann, Danai Koutra
2020 J jnl
CoRR
Nan Gao, Hao Xue, Wei Shao, Sichen Zhao, Kyle Kai Qin, Arian Prabowo, Mohammad Saiedur Rahaman, Flora D. Salim
2020 J jnl
Microprocess. Microsystems
Xiaoyan Shen, Wei Shao, Zheng Zhang, Peng Xu
2020 J jnl
ACM Trans. Spatial Algorithms Syst.
Wei Shao, Siyu Tan, Sichen Zhao, Kyle Kai Qin, Xinhong Hei, Jeffrey Chan, Flora D. Salim
2020 A conf
ICWSM
Shakila Khan Rumi, Wei Shao, Flora D. Salim
2020 J jnl
Mob. Networks Appl.
Hui Liu, Huan Liu, Xin Wang, Wei Shao, Xiao Wang, Junzhao Du, Jonathan Liono, Flora D. Salim
2020 J jnl
Neural Comput. Appl.
Kyle Kai Qin, Wei Shao, Yongli Ren, Jeffrey Chan, Flora D. Salim
2020 J jnl
CoRR
Nan Gao, Wei Shao, Mohammad Saiedur Rahaman, Jun Zhai, Klaus David, Flora D. Salim
2020 J jnl
IEEE Trans. Mob. Comput.
Yao Wang, Wan-Dong Cai, Tao Gu, Wei Shao
2020 J jnl
CoRR
Nan Gao, Wei Shao, Mohammad Saiedur Rahaman, Flora D. Salim
2020 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Nan Gao, Wei Shao, Mohammad Saiedur Rahaman, Flora D. Salim
2019 J jnl
CoRR
Wei Shao, Flora D. Salim, Jeffrey Chan, Sean Morrison, Fabio Zambetta
2019 conf
BuildSys
Arian Prabowo, Piotr Koniusz, Wei Shao, Flora D. Salim
2019 J jnl
CoRR
Arian Prabowo, Piotr Koniusz, Wei Shao, Flora D. Salim
2019 conf
SIGSPATIAL/GIS
Wei Shao, Arian Prabowo, Sichen Zhao, Siyu Tan, Piotr Koniusz, Jeffrey Chan, Xinhong Hei, Bradley Feest, Flora D. Salim
2019 J jnl
CoRR
Wei Shao, Arian Prabowo, Sichen Zhao, Siyu Tan, Piotr Koniusz, Jeffrey Chan, Xinhong Hei, Bradley Feest, Flora D. Salim
2019 A* conf
PerCom
Wei Shao, Flora D. Salim, Jeffrey Chan, Kyle Kai Qin, Jiaman Ma, Bradley Feest
2019 C conf
CollaborateCom
Yueshen Xu, Lei Li, Jianbin Huang, Yuyu Yin, Wei Shao, Zhida Mai, Lei Hei
2019 J jnl
Computer
Nan Gao, Wei Shao, Flora D. Salim
2019 J jnl
CoRR
Nan Gao, Wei Shao, Flora D. Salim
2019 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Yao Wang, Wandong Cai, Tao Gu, Wei Shao, Yannan Li, Yong Yu
2018 J jnl
Secur. Commun. Networks
Yao Wang, Wan-Dong Cai, Pin Lyu, Wei Shao
2018 J jnl
IEEE Internet Things J.
Wei Shao, Thuong Nguyen, A. Kai Qin, Moustafa Youssef, Flora D. Salim
2018 C conf
MobiQuitous
Yao Wang, Wan-Dong Cai, Tao Gu, Wei Shao, Ibrahim Khalil, Xianghua Xu
2018 C conf
GPC
Wei Shao, Yu Zhang, Bin Guo, Kyle Kai Qin, Jeffrey Chan, Flora D. Salim
2018 C conf
MobiQuitous
Hui Liu, Xin Wang, Yuheng Wei, Wei Shao, Jonathan Liono, Flora D. Salim, Bo Deng, Junzhao Du
2018 J jnl
IEEE Internet Things J.
Wei Shao, Flora D. Salim, Tao Gu, Ngoc-Thanh Dinh, Jeffrey Chan
2018 J jnl
Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.
Amin Sadri, Flora D. Salim, Yongli Ren, Wei Shao, John Krumm, Cecilia Mascolo
2017 conf
iThings/GreenCom/CPSCom/SmartData
Wei Shao, Flora D. Salim, Thuong Nguyen, Moustafa Youssef
2016 J jnl
IEEE Trans. Big Data
Wei Shao, Flora D. Salim, Andy Song, Athman Bouguettaya
2012 conf
IC-NIDC
Peiyi Shen, Liang Zhang, Zhijian Wang, Wei Shao, Zhengchuan Hu, Xiangdong Zhang, Yi-Zhe Song
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 != ""