Wanqing Wu

118 papers A 4B 4C 5Journal 88Unranked 16
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Internet Things J.
He Dong, Baoguo Yu, Wanqing Wu
2026 J jnl
Expert Syst. J. Knowl. Eng.
Jianyu Huang, Chunyan Jiang, Xiaomin Huang, Yuting Liu, Fang Li, Rong Deng, Lin Xu, Wanqing Wu
2026 J jnl
Appl. Soft Comput.
Xianbin Zhang, Guibin Bian, Xiaoyun Zhang, Daniel Santos da Silva, Richard C. Millham, Jianyu Huang, Victor Hugo C. de Albuquerque, Lin Xu, Wanqing Wu
2025 C conf
ISCAS
Wanqing Wu, Ruiyong Xiang, Xinyi Zhang, Xian Tang, Songping Mai, Haigang Feng
2025 J jnl
IEEE Trans. Biomed. Circuits Syst.
Kangkang Sun, Jingjing Liu, Feng Yan, Haoning Sun, Yafei Zhang, Yuan Ren, Linfei Huang, Yao Pi, Wanqing Wu, Jian Guan
2025 C conf
ISCAS
Jianjun Zhu, Wanqing Wu, Haigang Feng, Songping Mai, Xian Tang
2025 J jnl
IEEE Internet Things J.
Wanqing Wu, Feixiang Ye
2025 J jnl
Veh. Commun.
Wanqing Wu, Junjie Chen
2025 J jnl
Comput. Networks
Feixiang Ye, Wanqing Wu
2025 J jnl
Comput. Networks
Wanqing Wu, Yanxu Heng
2025 J jnl
Cybersecur.
Wanqing Wu, Jipeng Zhou
2025 J jnl
IEEE Trans. Affect. Comput.
Wei Wu, Yao Pi, Xianbin Zhang, Lin Xu, Wanqing Wu
2025 J jnl
J. Supercomput.
Wanqing Wu, Yuxiang Zhang
2025 J jnl
CoRR
Zehui Zhan, Yaojun Hu, Jiajing Zhan, Wanchen Lian, Wanqing Wu, Jintai Chen
2025 conf
ICIC (4)
Wanqing Wu, Zhican Zhang
2025 J jnl
J. Inf. Secur. Appl.
Qiqi Xie, Hong Zhang, Liqiang Wang, Miao Wang, Wanqing Wu, Yilong Liu
2025 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Aihua Mao, Wanqing Wu, Wenwei Yan, Yuxiang Li, Haoxiang Wang
2025 J jnl
IEEE Access
Wanqing Wu, Baoguo Yu, He Dong, Jingkui Zhang
2024 J jnl
Microelectron. J.
Xiao Luo, Sifan Wang, Ruiyong Xiang, Shengpeng Shu, Bodong Zhang, Wanqing Wu, Xinpeng Xing, Haigang Feng
2024 J jnl
Signal Image Video Process.
Wanqing Wu, Huili Li
2024 J jnl
Biomed. Signal Process. Control.
Zehui Zhan, Jiarong Chen, Kangming Li, Linfei Huang, Lin Xu, Gui-Bin Bian, Richard C. Millham, Victor Hugo C. de Albuquerque, Wanqing Wu
2024 J jnl
Appl. Artif. Intell.
Yihai Mao, Hongyi Zhang, Wanqing Wu, Xingen Gao, Zhibin Lin, Juqiang Lin
2024 B conf
TrustCom
Xiaofei Hao, Liyuan Liu, Yimeng Wang, Fengyu Li, Wanqing Wu
2024 J jnl
J. Syst. Archit.
Wanqing Wu, Feixiang Ye
2024 J jnl
Signal Image Video Process.
Wanqing Wu, Lingshuai Kong
2024 J jnl
Cybersecur.
Wanqing Wu, Mingyu Guo
2024 J jnl
CoRR
Jiarong Chen, Wanqing Wu, Tong Liu, Shenda Hong
2024 J jnl
Expert Syst. Appl.
Mingzhe Jiang, Riitta Rosio, Sanna Salanterä, Amir M. Rahmani, Pasi Liljeberg, Daniel Santos da Silva, Victor Hugo C. de Albuquerque, Wanqing Wu
2024 C conf
ISPA
Qiqi Xie, Hong Zhang, Miao Wang, Wanqing Wu, Zhibo Sun
2023 C conf
CSCWD
Wanqing Wu, Xin Yang, Ruohe Lei
2023 J jnl
Ad Hoc Networks
Chaofan Di, Wanqing Wu
2023 J jnl
Multim. Tools Appl.
Wanqing Wu, Qiao Wang
2023 J jnl
IEEE J. Biomed. Health Informatics
Xianbin Zhang, Mingzhe Jiang, Kemal Polat, Adi Alhudhaif, D. Jude Hemanth, Wanqing Wu
2023 J jnl
Sensors
Mingchao Hao, Wanqing Wu, Yuan Wan
2023 J jnl
Neural Comput. Appl.
Xianbin Zhang, Mingzhe Jiang, Wanqing Wu, Victor Hugo C. de Albuquerque
2023 J jnl
Expert Syst. Appl.
Jiarong Chen, Mingzhe Jiang, Xianbin Zhang, Daniel Santos da Silva, Victor Hugo C. de Albuquerque, Wanqing Wu
2023 J jnl
Neural Comput. Appl.
Jinghua Fan, Mingzhe Jiang, Chuang Lin, Gloria Li, Jinan Fiaidhi, Chenfei Ma, Wanqing Wu
2023 J jnl
Expert Syst. Appl.
Gui-Bin Bian, Zhang Chen, Zhen Li, Bing-Ting Wei, Wei-Peng Liu, Daniel Santos da Silva, Wanqing Wu, Victor Hugo C. de Albuquerque
2023 J jnl
Entropy
Wanqing Wu, Jiahui Wu, Lingna Guo
2023 A conf
ICME
Wanqing Wu, Aihua Mao, Wenwei Yan, Qing Liu
2023 J jnl
Appl. Soft Comput.
Gui-Bin Bian, Wen-Qian Yue, Zhen Li, Li Zhang, Shuai Zhang, Wei-Peng Liu, Shuo Li, Elias P. Medeiros, Wanqing Wu, Victor Hugo C. de Albuquerque
2022 conf
SmartWorld/UIC/ScalCom/DigitalTwin/PriComp/Meta
Wanqing Wu, Ruohe Lei, Xin Yang
2022 J jnl
Expert Syst. Appl.
Cuiting Xu, Chunchuan Yan, Mingzhe Jiang, Fayadh Alenezi, Adi Alhudhaif, Norah Alnaim, Kemal Polat, Wanqing Wu
2022 J jnl
Expert Syst. Appl.
Xu Lu, Kezhou Chen, Jun Liu, Rongjun Chen, Wanqing Wu, Kemal Polat, Adi Alhudhaif, Fayadh Alenezi, Sara A. Althubiti
2022 J jnl
Sensors
Wanqing Wu, Wenyu Mao
2022 J jnl
IEEE J. Biomed. Health Informatics
Jiarong Chen, Yingfang Zheng, Yingshan Liang, Zehui Zhan, Mingzhe Jiang, Xianbin Zhang, Daniel Santos da Silva, Wanqing Wu, Victor Hugo C. de Albuquerque
2022 J jnl
IEEE Access
He Dong, Baoguo Yu, Wanqing Wu, ChengLong He
2022 conf
EMBC
Mingzhe Jiang, Wanqing Wu, Yuning Wang, Amir M. Rahmani, Sanna Salanterä, Pasi Liljeberg
2022 conf
MSN
Wanqing Wu, Ziyang Zhang, Yahua Dong, Caixia Ma
2022 J jnl
Quantum Inf. Process.
Wanqing Wu, Lingna Guo
2021 J jnl
Secur. Commun. Networks
Jingyi Li, Yujue Wang, Yong Ding, Wanqing Wu, Chunhai Li, Huiyong Wang
2021 B conf
IWCMC
Wanqing Wu, Lin Ma, Bin Wang
2021 J jnl
Biomed. Signal Process. Control.
Yun Lu, Mingjiang Wang, Longxin Yao, Hongcai Shen, Wanqing Wu, Qiquan Zhang, Lu Zhang, Moran Chen, Hao Liu, Rongchao Peng, Ming Liu, Shixiong Chen
2021 J jnl
IEEE Netw.
Wanqing Wu, Haoke Zhang, Victor Hugo C. de Albuquerque, Lin Xu
2021 J jnl
IEEE Internet Things J.
João Alexandre Lôbo Marques, Tao Han, Wanqing Wu, João Paulo do Vale Madeiro, Aloísio Vieira Lira Neto, Raffaele Gravina, Giancarlo Fortino, Victor Hugo C. de Albuquerque
2021 J jnl
Quantum Inf. Process.
Wanqing Wu, Xiaoxue Ma
2021 J jnl
Quantum Inf. Process.
Wanqing Wu, Yongxin Zhao
2021 B conf
TrustCom
Yongxin Zhao, Wanqing Wu, Chaofan Di
2020 J jnl
ACM Trans. Multim. Comput. Commun. Appl.
Hongyi Zhang, Haoke Zhang, Sandeep Pirbhulal, Wanqing Wu, Victor Hugo C. de Albuquerque
2020 J jnl
Multim. Tools Appl.
Xiaofan Wang, Shengjie Li, Wanqing Wu
2020 J jnl
Complex.
Yun Lu, Mingjiang Wang, Wanqing Wu, Qiquan Zhang, Yufei Han, Tasleem Kausar, Shixiong Chen, Ming Liu, Bo Wang
2020 J jnl
Comput. Medical Imaging Graph.
Victor Hugo C. de Albuquerque, Douglas de A. Rodrigues, Roberto F. Ivo, Solon Alves Peixoto, Tao Han, Wanqing Wu, Pedro Pedrosa Rebouças Filho
2020 J jnl
IEEE Netw.
Sandeep Pirbhulal, Wanqing Wu, Khan Muhammad, Irfan Mehmood, Guanglin Li, Victor Hugo C. de Albuquerque
2020 J jnl
Comput. Methods Programs Biomed.
Ming Li, Shixiong Chen, Zhen Gao, Wanqing Wu, Lingzheng Xu
2020 J jnl
Appl. Soft Comput.
Haibo Zhou, Jianjun Zhang, Zhenzhong Liu, Dong Nie, Wanqing Wu, Victor Hugo C. de Albuquerque
2020 J jnl
IEEE Netw.
Zhifan Gao, Heye Zhang, Shizhou Dong, Shanhui Sun, Xin Wang, Guang Yang, Wanqing Wu, Shuo Li, Victor Hugo C. de Albuquerque
2020 J jnl
J. Supercomput.
Kayode Sakariyah Adewole, Tao Han, Wanqing Wu, Houbing Song, Arun Kumar Sangaiah
2019 ed.
ICSAI
Wanqing Wu, Lipo Wang, Chunlei Ji, Niansheng Chen, Qiang Sun, Xiaoyong Song, Xin Wang
2019 J jnl
Future Gener. Comput. Syst.
Sandeep Pirbhulal, Oluwarotimi Williams Samuel, Wanqing Wu, Arun Kumar Sangaiah, Guanglin Li
2019 J jnl
Comput. Networks
Tao Han, Lijuan Zhang, Sandeep Pirbhulal, Wanqing Wu, Victor Hugo C. de Albuquerque
2019 J jnl
Quantum Inf. Process.
Wanqing Wu, Huanguo Zhang
2019 J jnl
Future Gener. Comput. Syst.
Weipeng Liu, Yaoguang Su, Wanqing Wu, Chen Xin, Zeng-Guang Hou, Gui-Bin Bian
2019 J jnl
Comput. Networks
Mohamed Elhoseny, Gui-Bin Bian, S. K. Lakshmanaprabu, K. Shankar, Amit Kumar Singh, Wanqing Wu
2019 J jnl
Pattern Recognit. Lett.
Lucas S. Bernardo, Angeles Quezada, Roberto Muñoz, Fernanda Martins Maia, Clayton R. Pereira, Wanqing Wu, Victor Hugo C. de Albuquerque
2019 conf
ICMSSP
Yun Lu, Mingjiang Wang, Wanqing Wu, Qiquan Zhang, Yufei Han, Ming Liu
2019 J jnl
IEEE Consumer Electron. Mag.
Sandeep Pirbhulal, Wanqing Wu, Guanglin Li, Arun Kumar Sangaiah
2019 J jnl
J. Comput. Sci.
Muhammad Sajjad, Salman Khan, Khan Muhammad, Wanqing Wu, Amin Ullah, Sung Wook Baik
2019 conf
RCAR
Xin Wang, Wanqing Wu, Shixiong Chen, Guanglin Li, Shuting Liu, Mingxing Zhu, Xiaochen Wang, Zhenzhen Liu, Yanbing Jiang, Dan Wang, Peng Li, Oluwarotimi Williams Samuel
2019 J jnl
IEEE J. Biomed. Health Informatics
Wanqing Wu, Sandeep Pirbhulal, Heye Zhang, Subhas Chandra Mukhopadhyay
2019 J jnl
Quantum Inf. Process.
Zhaoxu Ji, Huanguo Zhang, Houzhen Wang, Fusheng Wu, Jianwei Jia, Wanqing Wu
2018 conf
ICDM Workshops
Sandeep Pirbhulal, Wanqing Wu, Guanglin Li
2018 conf
DSP
Haoke Zhang, Wanqing Wu, Sandeep Pirbhulal, Guanglin Li, Hongyi Zhang
2018 A conf
ICST
Sandeep Pirbhulal, Wanqing Wu, Subhas Chandra Mukhopadhyay, Guanglin Li
2018 J jnl
IEEE Access
K. Shankar, Mohamed Elhoseny, E. Dhiravidachelvi, S. K. Lakshmanaprabu, Wanqing Wu
2018 J jnl
Int. J. Distributed Sens. Networks
Ali Hassan Sodhro, Li Chen, Aicha Sekhari, Yacine Ouzrout, Wanqing Wu
2018 J jnl
Comput. Electr. Eng.
Sandeep Pirbhulal, Peng Shang, Wanqing Wu, Arun Kumar Sangaiah, Oluwarotimi Williams Samuel, Guanglin Li
2018 J jnl
IEEE Trans. Biomed. Eng.
Sandeep Pirbhulal, Heye Zhang, Wanqing Wu, Subhas Chandra Mukhopadhyay, Yuan-Ting Zhang
2018 J jnl
IEEE Trans. Medical Imaging
Zhifan Gao, YanJie Li, Yuanyuan Sun, Jiayuan Yang, Huahua Xiong, Heye Zhang, Xin Liu, Wanqing Wu, Dong Liang, Shuo Li
2018 J jnl
Future Gener. Comput. Syst.
Wanqing Wu, Sandeep Pirbhulal, Arun Kumar Sangaiah, Subhas Chandra Mukhopadhyay, Guanglin Li
2017 J jnl
Sensors
Sandeep Pirbhulal, Heye Zhang, Md Eshrat E. Alahi, Hemant Ghayvat, Subhas Chandra Mukhopadhyay, Yuan-Ting Zhang, Wanqing Wu
2017 conf
InterIoT/SaSeIoT
Sandeep Pirbhulal, Ali Hassan Sodhro, Aicha Sekhari, Yacine Ouzrout, Wanqing Wu
2017 J jnl
Sci. China Inf. Sci.
Shaowu Mao, Pei Zhang, Houzhen Wang, Huanguo Zhang, Wanqing Wu
2017 J jnl
Sensors
Sandeep Pirbhulal, Heye Zhang, Md Eshrat E. Alahi, Hemant Ghayvat, Subhas Chandra Mukhopadhyay, Yuan-Ting Zhang, Wanqing Wu
2017 J jnl
Sensors
Sandeep Pirbhulal, Heye Zhang, Subhas Chandra Mukhopadhyay, Chunyue Li, Yumei Wang, Guanglin Li, Wanqing Wu, Yuan-Ting Zhang
2017 J jnl
J. Sensors
Xueliang Xiao, Sandeep Pirbhulal, Ke Dong, Wanqing Wu, Xi Mei
2017 J jnl
Quantum Inf. Process.
Wanqing Wu, Huanguo Zhang
2017 J jnl
Medical Image Anal.
Zhifan Gao, Huahua Xiong, Xin Liu, Heye Zhang, Dhanjoo N. Ghista, Wanqing Wu, Shuo Li
2016 conf
MICCAI (3)
Zhifan Gao, Yuanyuan Sun, Heye Zhang, Dhanjoo N. Ghista, YanJie Li, Huahua Xiong, Xin Liu, Yaoqin Xie, Wanqing Wu, Shuo Li
2016 J jnl
Sci. China Inf. Sci.
Wanqing Wu, Huanguo Zhang, Houzhen Wang, Shaowu Mao, Shuomei Wu, Haiqing Han
2016 J jnl
Sci. China Inf. Sci.
Jinhui Liu, Huanguo Zhang, Jianwei Jia, Houzhen Wang, Shaowu Mao, Wanqing Wu
2016 J jnl
Int. J. Embed. Syst.
Shaowu Mao, Huanguo Zhang, Wanqing Wu, Houzhen Wang
2015 J jnl
Sci. China Inf. Sci.
Wanqing Wu, Huanguo Zhang, Houzhen Wang, Shaowu Mao, Jianwei Jia, Jinhui Liu
2015 J jnl
Sensors
Sandeep Pirbhulal, Heye Zhang, Subhas Chandra Mukhopadhyay, Chunyue Li, Yumei Wang, Guanglin Li, Wanqing Wu, Yuan-Ting Zhang
2015 conf
MICCAI (3)
Zhifan Gao, Huahua Xiong, Heye Zhang, Dan Wu, Minhua Lu, Wanqing Wu, Kelvin Kian Loong Wong, Yuan-Ting Zhang
2015 J jnl
Quantum Inf. Process.
Wanqing Wu, Huanguo Zhang, Houzhen Wang, Shaowu Mao
2015 J jnl
Quantum Inf. Process.
Wanqing Wu, Huanguo Zhang, Shaowu Mao, Houzhen Wang
2012 J jnl
Sensors
Yeongjoon Gil, Wanqing Wu, Jungtae Lee
2012 J jnl
Sensors
Wanqing Wu, Yeongjoon Gil, Jungtae Lee
2011 conf
HISB
Wanqing Wu, Yeongjoon Gil, Jungtae Lee
2010 J jnl
J. Medical Syst.
Haifeng Chen, Wanqing Wu, Jungtae Lee
2010 conf
ISSPIT
Wanqing Wu, Jungtae Lee
2009 conf
IJCBS
Wanqing Wu, Jungtae Lee, Haifeng Chen
2009 C conf
CollaborateCom
Wanqing Wu, Jungtae Lee
1998 A conf
ICDCS
Wanqing Wu, Madalene Spezialetti, Rajiv Gupta
1998 conf
SPDT
Wanqing Wu, Rajiv Gupta, Madalene Spezialetti
1996 B conf
ICECCS
Wanqing Wu, Rajiv Gupta, Madalene Spezialetti
1996 conf
SPDP
Wanqing Wu, Madalene Spezialetti, Rajiv Gupta
1996 A conf
ICDCS
Wanqing Wu, Madalene Spezialetti, Rajiv Gupta
tests/integration/test_pe_extractors.py
← Index tests/integration/test_pe_extractors.py python
"""
Integration tests for PE-specific extractors.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

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


# ============================================================================
# PEFeaturesExtractor Tests
# ============================================================================

class TestPEFeaturesExtractor:
    """Tests for PEFeaturesExtractor class."""

    def test_extract_valid_pe(self, pe_binary_path, mock_logger):
        """Test extracting features from valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.models.dataclasses import PE

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

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

    def test_extract_pe_type(self, pe_binary_path, mock_logger):
        """Test PE type detection (DLL, EXE, DRIVER)."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result.type in ["DLL", "EXE", "DRIVER"]

    def test_extract_architecture(self, pe_binary_path, mock_logger):
        """Test architecture detection."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Architecture should be detected
            assert result.architecture is not None

    def test_extract_entry_point(self, pe_binary_path, mock_logger):
        """Test entry point extraction."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Entry point should be a hex string
            assert result.entry_point.startswith("0x")

    def test_extract_compilation_time(self, pe_binary_path, mock_logger):
        """Test compilation time extraction."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Compilation time should be an integer timestamp
            assert isinstance(result.compilation_time, int)
            assert result.compilation_time_utc is not None

    def test_extract_dotnet_detection(self, pe_binary_path, mock_logger):
        """Test .NET detection."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Should be True for the test .NET binary
            assert isinstance(result.is_dotnet, bool)
            assert result.is_dotnet is True  # Test file is .NET

    def test_extract_headers(self, pe_binary_path, mock_logger):
        """Test header extraction."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result.dos_header is not None
            assert result.nt_header is not None
            assert result.file_header is not None
            assert result.optional_header is not None

    def test_extract_counts(self, pe_binary_path, mock_logger):
        """Test section/import/export counts."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert isinstance(result.number_of_sections, int)
            assert isinstance(result.number_of_imports, int)
            assert isinstance(result.number_of_exports, int)
            assert isinstance(result.number_of_resources, int)

    def test_extract_rich_header(self, pe_binary_path, mock_logger):
        """Test Rich header extraction."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Rich header may or may not be present
            # If present, should be JSON string
            if result.rich_header_dump is not None:
                assert isinstance(result.rich_header_dump, str)

    def test_extract_version_info(self, pe_binary_path, mock_logger):
        """Test version info extraction."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Version info may or may not be present
            if result.version_info is not None:
                assert isinstance(result.version_info, list)


# ============================================================================
# PEImportExtractor Tests
# ============================================================================

class TestPEImportExtractor:
    """Tests for PEImportExtractor class."""

    def test_extract_imports(self, pe_binary_path, mock_logger):
        """Test import extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.models.dataclasses import PEImport

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None:
                assert isinstance(result, PEImport)
                assert isinstance(result.pe_imports_total, int)

    def test_extract_import_libraries(self, pe_binary_path, mock_logger):
        """Test import library extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and result.pe_import_libraryName is not None:
                assert isinstance(result.pe_import_libraryName, list)

    def test_extract_import_functions(self, pe_binary_path, mock_logger):
        """Test import function extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and result.pe_import_functions is not None:
                assert isinstance(result.pe_import_functions, list)

    def test_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test ClickHouse export preparation."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.prepare_export_data("ClickHouseExporter")

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


# ============================================================================
# PESectionExtractor Tests
# ============================================================================

class TestPESectionExtractor:
    """Tests for PESectionExtractor class."""

    def test_extract_sections(self, pe_binary_path, mock_logger):
        """Test section extraction."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor
        from redb.models.dataclasses import PESection

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

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

    def test_section_properties(self, pe_binary_path, mock_logger):
        """Test section property extraction."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and len(result) > 0:
                section = result[0]
                assert section.section_name is not None
                assert section.section_entropy >= 0
                assert section.section_sha256 is not None
                assert section.section_md5 is not None
                assert section.section_size >= 0

    def test_section_entropy_range(self, pe_binary_path, mock_logger):
        """Test that section entropy is in valid range."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None:
                for section in result:
                    assert 0 <= section.section_entropy <= 8

    def test_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test ClickHouse export preparation."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            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
                assert 'section_sha256' in column_names


# ============================================================================
# PEResourceExtractor Tests
# ============================================================================

class TestPEResourceExtractor:
    """Tests for PEResourceExtractor class."""

    def test_extract_resources(self, pe_binary_path, mock_logger):
        """Test resource extraction."""
        from redb.extractors.pe_extractors.pe_resources import PEResourceExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

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

    def test_resource_properties(self, pe_binary_path, mock_logger):
        """Test resource property extraction."""
        from redb.extractors.pe_extractors.pe_resources import PEResourceExtractor
        from redb.models.dataclasses import PEResource

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and len(result) > 0:
                resource = result[0]
                assert isinstance(resource, PEResource)
                assert resource.resource_type is not None


# ============================================================================
# PEOverlayExtractor Tests
# ============================================================================

class TestPEOverlayExtractor:
    """Tests for PEOverlayExtractor class."""

    def test_extract_overlay(self, pe_binary_path, mock_logger):
        """Test overlay extraction."""
        from redb.extractors.pe_extractors.pe_overlay import PEOverlayExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May be None if no overlay
            # If present, should have overlay properties
            if result is not None:
                assert hasattr(result, 'overlay_size')

    def test_has_overlay_check(self, pe_binary_path, mock_logger):
        """Test overlay detection."""
        from redb.extractors.pe_extractors.pe_overlay import PEOverlayExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            has_overlay = extractor._has_overlay()
            assert isinstance(has_overlay, bool)


# ============================================================================
# PESignatureExtractor Tests
# ============================================================================

class TestPESignatureExtractor:
    """Tests for PESignatureExtractor class."""

    def test_extract_signature(self, pe_binary_path, mock_logger):
        """Test signature extraction."""
        from redb.extractors.pe_extractors.pe_signature import PESignatureExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May be None if not signed
            # Result type depends on implementation

    def test_is_signed_check(self, pe_binary_path, mock_logger):
        """Test signature detection."""
        from redb.extractors.pe_extractors.pe_signature import PESignatureExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            is_signed = extractor._is_signed()
            assert isinstance(is_signed, bool)


# ============================================================================
# PEDotNetExtractor Tests
# ============================================================================

class TestPEDotNetExtractor:
    """Tests for PEDotNetExtractor class."""

    def test_extract_dotnet(self, pe_binary_path, mock_logger):
        """Test .NET metadata extraction."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # The test file is a .NET binary
            if extractor._check_dotnet():
                assert result is not None

    def test_check_dotnet(self, pe_binary_path, mock_logger):
        """Test .NET detection."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            is_dotnet = extractor._check_dotnet()
            assert isinstance(is_dotnet, bool)
            # Test file should be .NET
            assert is_dotnet is True


# ============================================================================
# PEInconsistencyTestsExtractor Tests
# ============================================================================

class TestPEInconsistencyTestsExtractor:
    """Tests for PEInconsistencyTestsExtractor class."""

    def test_extract_inconsistency_tests(self, pe_binary_path, mock_logger):
        """Test inconsistency tests extraction."""
        from redb.extractors.pe_extractors.pe_inconsistency_tests import PEInconstistencyTestsExtractor as PEInconsistencyTestsExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # extract() returns True if tests were performed, False otherwise
            # The actual test results are stored in extractor.pe_inconsistency_tests
            # and extractor.dotnet_inconsistency_tests
            assert result in (True, False)

            if result:
                # Check that test results were stored
                assert extractor.pe_inconsistency_tests is not None or extractor.dotnet_inconsistency_tests is not None


# ============================================================================
# PEExtraFindings Tests
# ============================================================================

class TestPEExtraFindings:
    """Tests for PEExtraFindings class."""

    def test_extract_extra_findings(self, pe_binary_path, mock_logger):
        """Test extra findings extraction."""
        from redb.extractors.pe_extractors.pe_extra_findings import PEExtraFindings

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May return None or list of findings
            if result is not None:
                assert isinstance(result, list)


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

class TestPEExtractorIntegration:
    """Integration tests for PE extractors."""

    def test_all_extractors_same_pe_object(self, pe_binary_path, mock_logger, pe_object):
        """Test that extractors can share the same PE object."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            # Create extractors sharing the same PE object
            features_ext = PEFeaturesExtractor(pe_binary_path, mock_logger, pe=pe_object)
            imports_ext = PEImportExtractor(pe_binary_path, mock_logger, pe=pe_object)
            sections_ext = PESectionExtractor(pe_binary_path, mock_logger, pe=pe_object)

            # All should use the same PE object
            assert features_ext.pe is pe_object
            assert imports_ext.pe is pe_object
            assert sections_ext.pe is pe_object

            # All should extract successfully
            features_result = features_ext.extract()
            imports_result = imports_ext.extract()
            sections_result = sections_ext.extract()

            assert features_result is not None
            # imports and sections may be None if not present

    def test_hash_consistency_across_extractors(self, pe_binary_path, mock_logger):
        """Test that hashes are consistent across all extractors."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            features_ext = PEFeaturesExtractor(pe_binary_path, mock_logger)
            imports_ext = PEImportExtractor(pe_binary_path, mock_logger)

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