Haitao Liao

93 papers Misc 3Journal 88Unranked 2
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Reliab.
Farid Hashemian, Haitao Liao, José Azucena, Edward A. Pohl
2026 J jnl
Reliab. Eng. Syst. Saf.
Yian Wei, Yao Cheng, Haitao Liao, Elsayed A. Elsayed
2025 J jnl
Reliab. Eng. Syst. Saf.
Guannan Shi, Xiaohong Zhang, Jianchao Zeng, Haitao Liao, Jie Gan, Jinhe Wang, Zhijian Wang
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Yian Wei, Yao Cheng, Haitao Liao
2025 J jnl
IEEE Trans. Reliab.
Cesar Ruiz, Haitao Liao, Edward A. Pohl
2025 J jnl
IEEE Trans. Smart Grid
Minh Q. Tran, Adrian de Luis, Haitao Liao, Ying Huang, Roy McCann, H. Alan Mantooth, Jackson David Cothren, Ngan Le
2024 J jnl
Reliab. Eng. Syst. Saf.
Guannan Shi, Xiaohong Zhang, Jianchao Zeng, Haitao Liao, Hui Shi, Huifang Niu, Jinhe Wang
2024 J jnl
IEEE Trans. Reliab.
Haitao Liao
2024 J jnl
Remote. Sens.
Taisei Hanyu, Kashu Yamazaki, Minh Tran, Roy A. McCann, Haitao Liao, Chase Rainwater, Meredith Adkins, Jackson David Cothren, Ngan Le
2024 J jnl
IEEE Trans. Reliab.
Yao Cheng, Haitao Liao, Elsayed A. Elsayed
2024 J jnl
Commun. Stat. Simul. Comput.
José Azucena, Hao Wang, Yu Jin, Haitao Liao
2024 J jnl
Reliab. Eng. Syst. Saf.
Fengxia Zhang, Haitao Liao, Jingyuan Shen, Yizhong Ma
2024 J jnl
Reliab. Eng. Syst. Saf.
Yian Wei, Yao Cheng, Haitao Liao
2024 J jnl
IEEE Trans. Reliab.
Guannan Shi, Xiaohong Zhang, Hui Shi, Jianchao Zeng, Yankai Qin, Haitao Liao
2024 J jnl
CoRR
Minh Tran, Adrian de Luis, Haitao Liao, Ying Huang, Roy McCann, H. Alan Mantooth, Jackson David Cothren, Ngan Le
2023 J jnl
CoRR
Kashu Yamazaki, Taisei Hanyu, Minh Tran, Adrian Garcia, Anh Tran, Roy McCann, Haitao Liao, Chase Rainwater, Meredith Adkins, Andrew Molthan, Jackson David Cothren, Ngan Le
2023 J jnl
Simul. Model. Pract. Theory
Fan Bu, Jingming Liu, Haitao Liao, Heather L. Nachtmann
2023 J jnl
Ann. Oper. Res.
Jingming Liu, Haitao Liao, John A. White
2023 J jnl
IEEE Trans. Reliab.
Fengxia Zhang, Haitao Liao, Jingyuan Shen, Yizhong Ma
2023 J jnl
Reliab. Eng. Syst. Saf.
Zhonghai Ma, Haitao Liao, Jianhang Gao, Songlin Nie, Yugang Geng
2023 J jnl
CoRR
Adrian de Luis, Minh Tran, Taisei Hanyu, Anh Tran, Haitao Liao, Roy McCann, H. Alan Mantooth, Ying Huang, Ngan Le
2023 Misc conf
WSC
Maryam Aghamohammadghasem, José Azucena, Farid Hashemian, Haitao Liao, Shengfan Zhang, Heather L. Nachtmann
2022 J jnl
Simul. Model. Pract. Theory
Yu Jin, Cesar Ruiz, Haitao Liao
2022 J jnl
Comput. Oper. Res.
Basem Alkhaleel, Haitao Liao, Kelly M. Sullivan
2022 J jnl
Reliab. Eng. Syst. Saf.
Yao Cheng, Yian Wei, Haitao Liao
2022 J jnl
Eur. J. Oper. Res.
Basem Alkhaleel, Haitao Liao, Kelly M. Sullivan
2022 J jnl
Reliab. Eng. Syst. Saf.
Han Wang, Haitao Liao, Xiaobing Ma
2021 J jnl
Qual. Reliab. Eng. Int.
Cesar Ruiz, Haitao Liao, Edward A. Pohl
2021 J jnl
Comput. Ind. Eng.
Jiawen Hu, Ancha Xu, Bo Li, Haitao Liao
2021 J jnl
IISE Trans.
Samira Karimi, Haitao Liao, Neng Fan
2021 J jnl
Simul. Model. Pract. Theory
José Azucena, Basem Alkhaleel, Haitao Liao, Heather L. Nachtmann
2021 J jnl
Int. J. Prod. Res.
Sinan Obaidat, Haitao Liao
2021 J jnl
Reliab. Eng. Syst. Saf.
Xiaohong Zhang, Haitao Liao, Jianchao Zeng, Guannan Shi, Bing Zhao
2021 J jnl
Reliab. Eng. Syst. Saf.
Yao Cheng, Haitao Liao, Zhiyi Huang
2021 J jnl
Reliab. Eng. Syst. Saf.
Zhonghai Ma, Haitao Liao, Hui Ji, Shaoping Wang, Fang-long Yin, Songlin Nie
2021 J jnl
Reliab. Eng. Syst. Saf.
Fengxia Zhang, Jingyuan Shen, Haitao Liao, Yizhong Ma
2021 J jnl
IISE Trans.
Sinan Obaidat, Haitao Liao
2021 J jnl
Reliab. Eng. Syst. Saf.
Bing Zhao, Dequan Yue, Haitao Liao, Yuanhui Liu, Xiaohong Zhang
2021 J jnl
IISE Trans.
Jingming Liu, Haitao Liao, John A. White
2021 J jnl
Reliab. Eng. Syst. Saf.
Fuqiang Sun, Hao Li, Yuanyuan Cheng, Haitao Liao
2021 J jnl
IEEE Trans. Reliab.
Han Wang, Haitao Liao, Xiaobing Ma
2021 J jnl
Reliab. Eng. Syst. Saf.
Han Wang, Haitao Liao, Xiaobing Ma, Rui Bao
2020 J jnl
IISE Trans.
Naichao Wang, Yu (Chelsea) Jin, Lin Ma, Haitao Liao
2020 J jnl
Reliab. Eng. Syst. Saf.
Fuqiang Sun, Fangyou Fu, Haitao Liao, Dan Xu
2020 J jnl
Reliab. Eng. Syst. Saf.
Naichao Wang, Jiawen Hu, Lin Ma, Boping Xiao, Haitao Liao
2020 J jnl
IISE Trans.
Cesar Ruiz, Hongwei Luo, Haitao Liao, Wei Xie
2020 J jnl
IISE Trans.
Cesar Ruiz, Mohammadhossein Heydari, Kelly M. Sullivan, Haitao Liao, Edward A. Pohl
2020 J jnl
Reliab. Eng. Syst. Saf.
Zhonghai Ma, Shaoping Wang, Cesar Ruiz, Chao Zhang, Haitao Liao, Edward A. Pohl
2019 J jnl
Qual. Reliab. Eng. Int.
Cesar Ruiz, Edward A. Pohl, Haitao Liao, Kelly M. Sullivan
2019 Misc conf
WSC
Yu Jin, Cesar Ruiz, Haitao Liao, Harry A. Pierson
2019 J jnl
Qual. Reliab. Eng. Int.
Zhonghai Ma, Shaoping Wang, Haitao Liao, Chao Zhang
2019 J jnl
Ann. Oper. Res.
Wanlu Gu, Neng Fan, Haitao Liao
2019 Misc conf
WSC
Tarana Bipasha, José Azucena, Basem Alkhaleel, Haitao Liao, Heather L. Nachtmann
2019 J jnl
Eur. J. Oper. Res.
Xinbao Liu, Tianji Yang, Jun Pei, Haitao Liao, Edward A. Pohl
2019 J jnl
IISE Trans.
Yu Jin, Harry A. Pierson, Haitao Liao
2018 J jnl
Microelectron. Reliab.
Yujie Zhang, Lulu Wang, Shaonian Wang, Peng Wang, Haitao Liao, Yu Peng
2018 J jnl
Reliab. Eng. Syst. Saf.
Xiaoyang Li, Wenbin Chen, Fuqiang Sun, Haitao Liao, Rui Kang, Renqing Li
2018 J jnl
IEEE Access
Datong Liu, Haitao Liao, Enrico Zio, Qiang Miao, Bin Zhang, Chao Hu, Michael H. Azarian
2017 J jnl
Qual. Reliab. Eng. Int.
Shah M. Limon, Om Prakash Yadav, Haitao Liao
2017 conf
ICSRS
Dayu Chen, Xiaoyang Li, Rui Kang, Haitao Liao
2017 J jnl
J. Netw. Comput. Appl.
Ruiying Li, Meinan Li, Haitao Liao, Ning Huang
2017 J jnl
IEEE Trans Autom. Sci. Eng.
Faranak Fathi Aghdam, Haitao Liao, Qiang Huang
2017 J jnl
Int. J. Prod. Res.
Jiawen Hu, Zuhua Jiang, Haitao Liao
2017 J jnl
Reliab. Eng. Syst. Saf.
Jiawen Hu, Zuhua Jiang, Haitao Liao
2016 J jnl
Qual. Reliab. Eng. Int.
Tie Chen, Songlin Zheng, Haitao Liao, Jinzhi Feng
2016 J jnl
J. Comput. Phys.
Haitao Liao
2016 J jnl
Int. J. Ad Hoc Ubiquitous Comput.
Ruiying Li, Haitao Liao, Xiaoxi Liu, Ning Huang
2016 J jnl
Eur. J. Oper. Res.
Maryam Hamidi, Haitao Liao, Ferenc Szidarovszky
2016 J jnl
IEEE Trans. Reliab.
Yiwen Xu, Haitao Liao
2016 J jnl
Sensors
Fuqiang Sun, Le Liu, Xiaoyang Li, Haitao Liao
2015 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Datong Liu, Jianbao Zhou, Haitao Liao, Yu Peng, Xiyuan Peng
2015 J jnl
J. Netw. Comput. Appl.
Ruiying Li, Jingfu Wang, Haitao Liao, Ning Huang
2015 J jnl
IEEE Trans. Instrum. Meas.
Datong Liu, Wei Xie, Haitao Liao, Yu Peng
2015 J jnl
IEEE Trans. Reliab.
Ye Zhang, Haitao Liao
2014 J jnl
IEEE Trans. Cybern.
Jian Sun, Haitao Liao, Belle R. Upadhyaya
2014 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Haitao Liao
2014 J jnl
Eur. J. Oper. Res.
Wei Xie, Haitao Liao, Tongdan Jin
2013 J jnl
IEEE Trans. Reliab.
Qiuze Yu, Huairui Guo, Haitao Liao
2012 J jnl
Qual. Reliab. Eng. Int.
Gracia Toubia-Stucky, Haitao Liao, Janet M. Twomey
2012 J jnl
IEEE Trans. Reliab.
Huairui Guo, Haitao Liao
2012 J jnl
Decis. Support Syst.
Anuj Prakash, Felix T. S. Chan, Haitao Liao, S. G. Deshmukh
2011 J jnl
Reliab. Eng. Syst. Saf.
Zhigang Tian, Haitao Liao
2011 J jnl
IEEE Trans Autom. Sci. Eng.
Haitao Liao, Jian Sun
2010 J jnl
Eur. J. Oper. Res.
Yada Zhu, Elsayed A. Elsayed, Haitao Liao, Ling-Yau Chan
2010 J jnl
IEEE Trans. Reliab.
Mitchell Rausch, Haitao Liao
2010 J jnl
Comput. Ind. Eng.
Huairui Guo, Haitao Liao, Rong Pan, Alexander Aron, Adamantios Mettas
2010 J jnl
Microelectron. Reliab.
Tongdan Jin, Haitao Liao, Madhu Kilari
2009 J jnl
Reliab. Eng. Syst. Saf.
Zhaojun Li, Haitao Liao, David W. Coit
2009 J jnl
Comput. Ind. Eng.
Tongdan Jin, Haitao Liao
2007 J jnl
IEEE Trans. Reliab.
Huairui Guo, Haitao Liao, Wenbiao Zhao, Adamantios Mettas
2006 conf
CASE
Tongdan Jin, Haitao Liao, Zhenhua Xiong, Chen-Han Sung
2006 J jnl
Comput. Ind.
Jay Lee, Jun Ni, Dragan Djurdjanovic, Hai Qiu, Haitao Liao
2006 J jnl
Eur. J. Oper. Res.
Haitao Liao, Elsayed A. Elsayed, Ling-Yau Chan
tests/integration/test_elf_extractors.py
← Index tests/integration/test_elf_extractors.py python
"""
Integration tests for ELF-specific extractors.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

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


# ============================================================================
# ELFFeaturesExtractor Tests
# ============================================================================

class TestELFFeaturesExtractor:
    """Tests for ELFFeaturesExtractor class."""

    def test_extract_valid_elf(self, elf_binary_path, mock_logger):
        """Test extracting features from valid ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.models.dataclasses import ELFFeatures

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

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, ELFFeatures)

    def test_extract_header_data(self, elf_binary_path, mock_logger):
        """Test ELF header data extraction."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            assert result is not None
            # Check header fields
            assert isinstance(result.ei_class, int)
            assert isinstance(result.ei_data, int)
            assert isinstance(result.e_type, int)
            assert isinstance(result.e_machine, int)
            assert isinstance(result.e_entry, int)

    def test_extract_human_readable_strings(self, elf_binary_path, mock_logger):
        """Test human-readable string fields."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            assert result is not None
            assert result.ei_class_str in ['32-bit', '64-bit', 'unknown']
            assert result.ei_data_str in ['Little-endian', 'Big-endian', 'unknown']
            assert result.e_type_str is not None
            assert result.e_machine_str is not None

    def test_extract_security_properties(self, elf_binary_path, mock_logger):
        """Test security property extraction."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            assert result is not None
            # Security flags should be 0 or 1
            assert result.is_pie in [0, 1]
            assert result.has_canary in [0, 1]
            assert result.has_nx in [0, 1]
            assert result.has_relro in [0, 1]
            assert result.has_fortify in [0, 1]

    def test_extract_counts(self, elf_binary_path, mock_logger):
        """Test section/segment/symbol counts."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            assert result is not None
            assert result.number_of_segments >= 0
            assert result.number_of_sections >= 0
            assert result.number_of_symbols >= 0
            assert result.number_of_dynamic_symbols >= 0
            assert result.number_of_relocations >= 0
            assert result.number_of_dependencies >= 0

    def test_extract_build_info(self, elf_binary_path, mock_logger):
        """Test build information extraction."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            assert result is not None
            # Build ID may or may not be present
            if result.build_id is not None:
                assert isinstance(result.build_id, str)
            assert result.gnu_hash_present in [0, 1]
            assert result.has_debug_info in [0, 1]

    def test_extract_invalid_elf(self, pe_binary_path, mock_logger):
        """Test extraction with non-ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            # Should return None for invalid ELF
            assert result is None


# ============================================================================
# ELFSectionExtractor Tests
# ============================================================================

class TestELFSectionExtractor:
    """Tests for ELFSectionExtractor class."""

    def test_extract_sections(self, elf_binary_path, mock_logger):
        """Test section extraction."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, list)
            assert len(result) > 0

    def test_section_properties(self, elf_binary_path, mock_logger):
        """Test section property extraction."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor
        from redb.models.dataclasses import ELFSection

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                section = result[0]
                assert isinstance(section, ELFSection)
                assert section.section_name is not None
                assert isinstance(section.section_type, int)
                assert isinstance(section.section_flags, int)
                assert section.section_entropy >= 0

    def test_section_hashes(self, elf_binary_path, mock_logger):
        """Test section hash computation."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                for section in result:
                    if section.section_sha256:
                        assert len(section.section_sha256) == 64
                    if section.section_md5:
                        assert len(section.section_md5) == 32


# ============================================================================
# ELFSegmentExtractor Tests
# ============================================================================

class TestELFSegmentExtractor:
    """Tests for ELFSegmentExtractor class."""

    def test_extract_segments(self, elf_binary_path, mock_logger):
        """Test segment extraction."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

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

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, list)

    def test_segment_properties(self, elf_binary_path, mock_logger):
        """Test segment property extraction."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor
        from redb.models.dataclasses import ELFSegment

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                segment = result[0]
                assert isinstance(segment, ELFSegment)
                assert isinstance(segment.segment_type, int)
                assert isinstance(segment.segment_flags, int)


# ============================================================================
# ELFSymbolExtractor Tests
# ============================================================================

class TestELFSymbolExtractor:
    """Tests for ELFSymbolExtractor class."""

    def test_extract_symbols(self, elf_binary_path, mock_logger):
        """Test symbol extraction."""
        from redb.extractors.elf_extractors.elf_symbols import ELFSymbolExtractor

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

            result = extractor.extract()

            # May be None if stripped
            if result is not None:
                assert isinstance(result, list)

    def test_symbol_properties(self, elf_binary_path, mock_logger):
        """Test symbol property extraction."""
        from redb.extractors.elf_extractors.elf_symbols import ELFSymbolExtractor
        from redb.models.dataclasses import ELFSymbol

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                symbol = result[0]
                assert isinstance(symbol, ELFSymbol)
                assert symbol.symbol_name is not None
                assert isinstance(symbol.symbol_type, int)
                assert isinstance(symbol.symbol_bind, int)


# ============================================================================
# ELFImportExtractor Tests
# ============================================================================

class TestELFImportExtractor:
    """Tests for ELFImportExtractor class."""

    def test_extract_imports(self, elf_binary_path, mock_logger):
        """Test import extraction."""
        from redb.extractors.elf_extractors.elf_imports import ELFImportExtractor

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

            result = extractor.extract()

            # May be None if no imports
            if result is not None:
                assert hasattr(result, 'elf_imports_total')

    def test_import_functions(self, elf_binary_path, mock_logger):
        """Test import function extraction."""
        from redb.extractors.elf_extractors.elf_imports import ELFImportExtractor
        from redb.models.dataclasses import ELFImport

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

            result = extractor.extract()

            if result is not None:
                assert isinstance(result, ELFImport)
                assert isinstance(result.elf_imports_total, int)


# ============================================================================
# ELFExportExtractor Tests
# ============================================================================

class TestELFExportExtractor:
    """Tests for ELFExportExtractor class."""

    def test_extract_exports(self, elf_binary_path, mock_logger):
        """Test export extraction."""
        from redb.extractors.elf_extractors.elf_exports import ELFExportExtractor

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

            result = extractor.extract()

            # May be None if no exports
            if result is not None:
                assert hasattr(result, 'elf_exports_total')

    def test_export_functions(self, elf_binary_path, mock_logger):
        """Test export function extraction."""
        from redb.extractors.elf_extractors.elf_exports import ELFExportExtractor
        from redb.models.dataclasses import ELFExport

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

            result = extractor.extract()

            if result is not None:
                assert isinstance(result, ELFExport)


# ============================================================================
# ELFDependencyExtractor Tests
# ============================================================================

class TestELFDependencyExtractor:
    """Tests for ELFDependencyExtractor class."""

    def test_extract_dependencies(self, elf_binary_path, mock_logger):
        """Test dependency extraction."""
        from redb.extractors.elf_extractors.elf_dependencies import ELFDependencyExtractor

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

            result = extractor.extract()

            # May be None if no dependencies
            if result is not None:
                assert isinstance(result, list)

    def test_dependency_properties(self, elf_binary_path, mock_logger):
        """Test dependency property extraction."""
        from redb.extractors.elf_extractors.elf_dependencies import ELFDependencyExtractor
        from redb.models.dataclasses import ELFDependency

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                dep = result[0]
                assert isinstance(dep, ELFDependency)
                assert dep.dependency_name is not None


# ============================================================================
# ELFRelocationExtractor Tests
# ============================================================================

class TestELFRelocationExtractor:
    """Tests for ELFRelocationExtractor class."""

    def test_extract_relocations(self, elf_binary_path, mock_logger):
        """Test relocation extraction."""
        from redb.extractors.elf_extractors.elf_relocations import ELFRelocationExtractor

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

            result = extractor.extract()

            # May be None if no relocations
            if result is not None:
                assert isinstance(result, list)

    def test_relocation_properties(self, elf_binary_path, mock_logger):
        """Test relocation property extraction."""
        from redb.extractors.elf_extractors.elf_relocations import ELFRelocationExtractor
        from redb.models.dataclasses import ELFRelocation

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                reloc = result[0]
                assert isinstance(reloc, ELFRelocation)
                assert isinstance(reloc.relocation_offset, int)
                assert isinstance(reloc.relocation_type, int)


# ============================================================================
# ELFNotesExtractor Tests
# ============================================================================

class TestELFNotesExtractor:
    """Tests for ELFNotesExtractor class."""

    def test_extract_notes(self, elf_binary_path, mock_logger):
        """Test notes extraction."""
        from redb.extractors.elf_extractors.elf_notes import ELFNotesExtractor

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

            result = extractor.extract()

            # May be None if no notes
            if result is not None:
                assert isinstance(result, list)

    def test_note_properties(self, elf_binary_path, mock_logger):
        """Test note property extraction."""
        from redb.extractors.elf_extractors.elf_notes import ELFNotesExtractor
        from redb.models.dataclasses import ELFNote

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                note = result[0]
                assert isinstance(note, ELFNote)
                assert note.note_name is not None
                assert isinstance(note.note_type, int)


# ============================================================================
# Integration Tests
# ============================================================================

class TestELFExtractorIntegration:
    """Integration tests for ELF extractors."""

    def test_all_extractors_valid_elf(self, elf_binary_path, mock_logger):
        """Test all ELF extractors with valid ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            features_ext = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            sections_ext = ELFSectionExtractor(elf_binary_path, mock_logger)
            segments_ext = ELFSegmentExtractor(elf_binary_path, mock_logger)

            features_result = features_ext.extract()
            sections_result = sections_ext.extract()
            segments_result = segments_ext.extract()

            # All should extract something
            assert features_result is not None
            assert sections_result is not None
            assert segments_result is not None

    def test_hash_consistency_across_extractors(self, elf_binary_path, mock_logger):
        """Test that hashes are consistent across all extractors."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            # Hashes should be the same
            assert features_ext.sha256 == sections_ext.sha256
            assert features_ext.md5 == sections_ext.md5
            assert features_ext.sha1 == sections_ext.sha1

    def test_clickhouse_tables_unique(self, elf_binary_path, mock_logger):
        """Test that each extractor has a unique ClickHouse table."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            features_ext = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            sections_ext = ELFSectionExtractor(elf_binary_path, mock_logger)
            segments_ext = ELFSegmentExtractor(elf_binary_path, mock_logger)

            tables = {
                features_ext.get_clickhouse_table(),
                sections_ext.get_clickhouse_table(),
                segments_ext.get_clickhouse_table(),
            }

            # All tables should be unique
            assert len(tables) == 3


# ============================================================================
# Advanced Binary Tests
# ============================================================================

class TestELFAdvancedBinary:
    """Tests using the hello_advanced binary."""

    def test_advanced_features_extraction(self, elf_advanced_binary_path, mock_logger):
        """Test feature extraction from advanced ELF binary."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            assert result is not None
            assert result.number_of_sections > 0

    def test_advanced_sections_extraction(self, elf_advanced_binary_path, mock_logger):
        """Test section extraction from advanced ELF binary."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFSectionExtractor(elf_advanced_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            assert len(result) > 0

            # Check for common ELF sections
            section_names = [s.section_name for s in result]
            # Most ELF files have .text section
            assert any('.text' in name for name in section_names)

    def test_advanced_segments_extraction(self, elf_advanced_binary_path, mock_logger):
        """Test segment extraction from advanced ELF binary."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFSegmentExtractor(elf_advanced_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            assert len(result) > 0


# ============================================================================
# Export Data Tests
# ============================================================================

class TestELFExtractorExportData:
    """Tests for export data preparation."""

    def test_features_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test ClickHouse export preparation for features."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.prepare_export_data("ClickHouseExporter")

            assert result is not None
            data, column_names, column_type_names = result

            assert 'sha256' in column_names
            assert 'ei_class' in column_names
            assert 'e_machine' in column_names
            assert 'is_pie' in column_names

    def test_sections_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test ClickHouse export preparation for sections."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            result = extractor.prepare_export_data("ClickHouseExporter")

            if result is not None:
                data, column_names, column_type_names = result
                assert 'section_name' in column_names
                assert 'section_entropy' in column_names

    def test_segments_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test ClickHouse export preparation for segments."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

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

            result = extractor.prepare_export_data("ClickHouseExporter")

            if result is not None:
                data, column_names, column_type_names = result
                assert 'segment_type' in column_names