Weimin Li

124 papers A* 1B 5C 4Misc 2Journal 89Unranked 23
YearRankTypeTitle / Venue / Authors
2026 J jnl
Appl. Intell.
Weimin Li, Yue Jiang, Mengying Dai, Yan Zhao, Bin Sheng, Quan-Ke Pan, Qun Jin, Can Wang
2026 J jnl
Inf. Process. Manag.
Junnan Gu, Weimin Li, Fangfang Liu, Wei Liu, Hao Wang
2026 J jnl
Expert Syst. Appl.
Jingchao Wang, Weimin Li, Xinyi Zhang, Qunpeng Hu, Alex Munyole Luvembe, Ruishen Liu, Fangyu Liu, Qun Jin
2026 J jnl
IEEE Trans. Comput. Soc. Syst.
Shaohua Li, Weimin Li, Chunlei Chai, Alex Munyole Luvembe, Weiqin Tong
2026 J jnl
Expert Syst. Appl.
Bing-Tao Wang, Quan-Ke Pan, Shengxiang Yang, Xue-Lei Jing, Weimin Li
2025 J jnl
Expert Syst. Appl.
Zhong-Kai Li, Nan Li, Quan-Ke Pan, Liang Gao, Weimin Li
2025 J jnl
Expert Syst. Appl.
Alex Munyole Luvembe, Weimin Li, Shaohua Li, Guiqiong Xu, Xing Wu, Fangfang Liu
2025 J jnl
Expert Syst. Appl.
Cun-Hai Wang, Quan-Ke Pan, Wei Zhang, Zhong-Hua Miao, Xue-Lei Jing, Weimin Li, Bing Wang
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Zhong-Kai Li, Quanke Pan, Zhonghua Miao, Hongyan Sang, Weimin Li
2025 J jnl
Inf. Process. Manag.
Wei Liu, Yixue He, Chao Wang, Shaorong Xie, Weimin Li
2025 A* conf
AAAI
Yifan Feng, Weimin Li, Yue Wang, Jingchao Wang, Fangfang Liu, Zhongming Han
2025 J jnl
IEEE Trans. Evol. Comput.
Qiu-Ying Li, Quan-Ke Pan, Ling Wang, Liang Gao, Weimin Li
2025 J jnl
Expert Syst. Appl.
Jingchao Wang, Weimin Li, Alex Munyole Luvembe, Xiao Yu, Xinyi Zhang, Fangyu Liu, Fangfang Liu, Hao Wang, Zhenhai Wang, Qun Jin
2025 J jnl
Inf. Process. Manag.
Xiaoyang Li, Weimin Li, Xiao Yu, Zhongming Han, Qun Jin
2025 J jnl
Inf. Process. Manag.
Yue Wang, Shizhong Yuan, Weimin Li, Yifan Feng, Xiao Yu, Fangfang Liu, Can Wang, Quanke Pan
2025 J jnl
Biomed. Signal Process. Control.
Yuxue Yang, Xiao Liu, Weimin Li, Shizhong Yuan, Xing Wu, Ruiqiang Guo
2025 J jnl
Knowl. Based Syst.
Mengying Dai, Weimin Li, Xinyi Zhang, Fangfang Liu, Mingjun Xin, Can Wang
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Xiao Liu, Shaohua Li, Weimin Li, Xiao Yu, Jingchao Wang, Alex Munyole Luvembe, Quan-Ke Pan, Fangfang Liu
2025 J jnl
Biomed. Signal Process. Control.
Qingguo Xu, Yidan Zhang, Weimin Li, Jiajie Zhu
2025 conf
PAKDD (4)
Tong Xin, Wei Liu, Weimin Li
2024 J jnl
IEEE Intell. Syst.
Jingchao Wang, Xiao Liu, Weimin Li, Fangfang Liu, Xing Wu, Qun Jin
2024 J jnl
Bioinform.
Nan Chen, Xiao Yu, Weimin Li, Fangfang Liu, Yin Luo, Zhongkun Zuo
2024 J jnl
Inf. Process. Manag.
Alex Munyole Luvembe, Weimin Li, Shaohau Li, Fangfang Liu, Xing Wu
2024 J jnl
Appl. Intell.
Xing Wu, Shaoqi Peng, Jingwen Li, Jian Zhang, Qun Sun, Weimin Li, Quan Qian, Yue Liu, Yike Guo
2024 J jnl
Expert Syst. Appl.
Jingchao Wang, Weimin Li, Fangfang Liu, Zhenhai Wang, Alex Munyole Luvembe, Qun Jin, Quanke Pan, Fangyu Liu
2024 J jnl
IEEE Trans. Comput. Biol. Bioinform.
Xiao Yu, Weimin Li, Jianjia Wang, Xing Wu, Bin Sheng
2024 J jnl
Biomed. Signal Process. Control.
Xing Wu, Zhi Li, Chenjie Tao, Xianhua Han, Yen-Wei Chen, Junfeng Yao, Jian Zhang, Qun Sun, Weimin Li, Yue Liu, Yike Guo
2024 J jnl
Biomed. Signal Process. Control.
Hongli Cheng, Shizhong Yuan, Weimin Li, Xiao Yu, Fangyu Liu, Xiao Liu, Tsigabu T. Bezabih
2024 J jnl
IEEE Trans. Comput. Soc. Syst.
Shaohua Li, Weimin Li, Alex Munyole Luvembe, Weiqin Tong
2024 J jnl
IEEE Intell. Syst.
Jingchao Wang, Xinyi Zhang, Weimin Li, Xiao Yu, Fangfang Liu, Qun Jin
2024 J jnl
Comput. Biol. Medicine
Xiao Liu, Weimin Li, Shang Miao, Fangyu Liu, Ke Han, Tsigabu T. Bezabih
2024 J jnl
Inf. Process. Manag.
Yaqiong Li, Tun Lu, Weimin Li, Peng Zhang
2024 J jnl
Knowl. Based Syst.
Chang Guo, Weimin Li, Jingchao Wang, Xiao Yu, Xiao Liu, Alex Munyole Luvembe, Can Wang, Qun Jin
2024 J jnl
Neurocomputing
Chang Guo, Weimin Li, Fangfang Liu, Kexin Zhong, Xing Wu, Yougang Zhao, Qun Jin
2024 J jnl
Expert Syst. Appl.
Yan Zhao, Weimin Li, Fangfang Liu, Jingchao Wang, Alex Munyole Luvembe
2024 J jnl
Neural Process. Lett.
Zhenhai Wang, Yuhao Xu, Zhiru Wang, Rong Fan, Yunlong Guo, Weimin Li
2024 J jnl
Int. J. Imaging Syst. Technol.
Shang Miao, Qun Xu, Weimin Li, Chao Yang, Bin Sheng, Fangyu Liu, Tsigabu T. Bezabih, Xiao Yu
2024 J jnl
Multim. Tools Appl.
Wei Liu, Aiqun Ren, Chao Wang, Yan Peng, Shaorong Xie, Weimin Li
2024 J jnl
Biomed. Signal Process. Control.
Fangyu Liu, Shizhong Yuan, Weimin Li, Qun Xu, Xing Wu, Ke Han, Jingchao Wang, Shang Miao
2024 conf
ADMA (6)
Zhenhai Wang, Yunlong Guo, Weimin Li, Hongyu Tian
2024 J jnl
Inf. Fusion
Xiao Yu, Weimin Li, Bing Yang, Xiaorong Li, Jie Chen, Guohua Fu
2024 J jnl
Future Gener. Comput. Syst.
Weimin Li, Lu Liu, Kevin I-Kai Wang, Qun Jin
2024 J jnl
J. Supercomput.
Rong Fan, Zhenhai Wang, Yunlong Guo, Yuhao Xu, Zhiru Wang, Weimin Li
2024 J jnl
Comput. Ind. Eng.
Bing-Tao Wang, Quan-Ke Pan, Liang Gao, Weimin Li
2024 J jnl
Inf. Process. Manag.
Xiao Yu, Weimin Li, Cai Zhang, Jingchao Wang, Yan Zhao, Fangfang Liu, Quanke Pan, Huazhong Liu, Jihong Ding, Dehua Chen
2023 J jnl
Comput. Ind. Eng.
Mei-Chen Yang, Quan-Ke Pan, Hongyan Sang, Weimin Li, Yu-Long Wang
2023 J jnl
Comput. Biol. Chem.
Mengying Wang, Weimin Li, Xiao Yu, Yin Luo, Ke Han, Can Wang, Qun Jin
2023 J jnl
Knowl. Based Syst.
Weimin Li, Chang Guo, Zhibin Deng, Fangfang Liu, Jianjia Wang, Ruiqiang Guo, Can Wang, Qun Jin
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Xiaolong Xu, Chenyi Yang, Muhammad Bilal, Weimin Li, Huihui Wang
2023 J jnl
Inf. Process. Manag.
Alex Munyole Luvembe, Weimin Li, Shaohua Li, Fangfang Liu, Guiqiong Xu
2023 J jnl
Expert Syst. Appl.
Weimin Li, Cai Zhang, Xiaokang Zhou, Qun Jin
2023 J jnl
IEEE Internet Things J.
Xiaokang Zhou, Wei Liang, Ke Yan, Weimin Li, Kevin I-Kai Wang, Jianhua Ma, Qun Jin
2023 J jnl
Appl. Intell.
Jingchao Wang, Weimin Li, Wei Liu, Can Wang, Qun Jin
2023 conf
NLPCC (2)
Wei Liu, Qi Wu, Shaorong Xie, Weimin Li
2023 conf
ICONIP (13)
Shaohua Li, Weimin Li, Alex Munyole Luvembe, Weiqin Tong
2023 J jnl
Knowl. Based Syst.
Jingchao Wang, Weimin Li, Fangfang Liu, Bin Sheng, Wei Liu, Qun Jin
2023 J jnl
Neural Comput. Appl.
Ye Tao, Can Wang, Lina Yao, Weimin Li, Yonghong Yu
2023 conf
NLPCC (2)
Wei Liu, Zhangdeng Pang, Shaorong Xie, Weimin Li
2023 J jnl
IEEE Trans. Comput. Soc. Syst.
Cai Zhang, Weimin Li, Dingmei Wei, Yanxia Liu, Zheng Li
2023 J jnl
Biomed. Signal Process. Control.
Fangyu Liu, Shizhong Yuan, Weimin Li, Qun Xu, Bin Sheng
2023 conf
ICONIP (15)
Shaohua Li, Weimin Li, Alex Munyole Luvembe, Weiqin Tong
2023 J jnl
Inf. Sci.
Weimin Li, Chang Guo, Yanxia Liu, Xiaokang Zhou, Qun Jin, Mingjun Xin
2023 conf
ICONIP (10)
Yixing Guo, Weimin Li, Jingchao Wang, Shaohua Li
2023 J jnl
Appl. Intell.
Xing Wu, Chenjie Tao, Jian Zhang, Qun Sun, Jianjia Wang, Weimin Li, Yue Liu, Yike Guo
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Wenya Hu, Weimin Li, Xiaokang Zhou, Akira Kawai, Kaoru Fueda, Quan Qian, Jianjia Wang
2022 J jnl
Inf. Process. Manag.
Weimin Li, Yaqiong Li, Wei Liu, Can Wang
2022 J jnl
Knowl. Based Syst.
Weimin Li, Lin Ni, Jianjia Wang, Can Wang
2022 J jnl
Concurr. Comput. Pract. Exp.
Weimin Li, Dingmei Wei, Xiaokang Zhou, Shaohua Li, Qun Jin
2022 J jnl
IEEE Internet Things J.
Xiaokang Zhou, Wei Liang, Weimin Li, Ke Yan, Shohei Shimizu, Kevin I-Kai Wang
2022 conf
ChineseCSCW (1)
Yan Zhao, Chang Guo, Weimin Li, Dingmei Wei, Heng Zhu
2022 J jnl
Concurr. Comput. Pract. Exp.
Weimin Li, Zhibin Deng, Xiaokang Zhou, Qun Jin, Bin Sheng
2022 J jnl
Future Internet
Zhao Wang, Qingguo Xu, Weimin Li
2022 J jnl
Inf. Fusion
Weimin Li, Xiaokang Zhou, Chao Yang, Yuting Fan, Zhao Wang, Yanxia Liu
2022 B conf
ICTAI
Jingchao Wang, Weimin Li, Yixing Guo, Xiaokang Zhou
2021 J jnl
Expert Syst. Appl.
Weimin Li, Kexin Zhong, Jianjia Wang, Dehua Chen
2021 C conf
KSEM
Chang Ni, Wei Liu, Weimin Li, Jinliang Wu, Haiyang Ren
2021 C conf
KSEM
Tingting Tang, Wei Liu, Weimin Li, Jinliang Wu, Haiyang Ren
2021 J jnl
Expert Syst. Appl.
Weimin Li, Heng Zhu, Shaohua Li, Hao Wang, Hongning Dai, Can Wang, Qun Jin
2021 B conf
IJCNN
Shuai Ma, Jian-wei Liu, Xin Zuo, Weimin Li
2021 J jnl
Inf. Sci.
Weimin Li, Zheng Li, Alex Munyole Luvembe, Chao Yang
2021 J jnl
Neurocomputing
Xiaokang Zhou, Shaohua Li, Zheng Li, Weimin Li
2021 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Dehua Chen, Meihua Huang, Weimin Li
2021 conf
MMM (1)
Ze-Yu Liu, Jian-wei Liu, Xin Zuo, Weimin Li
2021 conf
ICANN (1)
Ming-fei Hu, Jian-wei Liu, Weimin Li
2021 J jnl
IEEE Trans. Comput. Soc. Syst.
Wenmin Lin, Xuyun Zhang, Lianyong Qi, Weimin Li, Shancang Li, Victor S. Sheng, Surya Nepal
2021 B conf
IJCNN
Runkun Lu, Jian-wei Liu, Xin Zuo, Weimin Li
2021 J jnl
Pattern Recognit.
Jianjia Wang, Xingchen Guo, Weimin Li, Xing Wu, Zhihong Zhang, Edwin R. Hancock
2021 B conf
IJCNN
Lu-ning Zhang, Jian-wei Liu, Zhi-yan Song, Xin Zuo, Weimin Li, Ze-Yu Liu
2020 J jnl
Comput. Electr. Eng.
Jiulei Jiang, Hanxu Wang, Weimin Li
2020 conf
CollaborateCom (1)
Lu Fang, Tong Liu, Honghao Gao, Chenhong Cao, Weimin Li, Weiqin Tong
2020 conf
ICANN (1)
Wei Liu, Yusen Wu, Lei Jiang, Jianfeng Fu, Weimin Li
2020 conf
ICONIP (2)
Ze-Yu Liu, Jian-wei Liu, Weimin Li, Xin Zuo
2020 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Xiaolong Xu, Shucun Fu, Weimin Li, Fei Dai, Honghao Gao, Victor Chang
2020 B conf
IJCNN
Ye Tao, Can Wang, Lina Yao, Weimin Li, Yonghong Yu
2020 J jnl
CoRR
Ye Tao, Can Wang, Lina Yao, Weimin Li, Yonghong Yu
2020 J jnl
World Wide Web
Weimin Li, Yuting Fan, Jun Mo, Wei Liu, Can Wang, Minjun Xin, Qun Jin
2020 J jnl
IEEE Access
Wei Liu, Lei Jiang, Yusen Wu, Tingting Tang, Weimin Li
2019 J jnl
IEEE Access
Weimin Li, Yuting Fan, Wei Liu, Minjun Xin, Hao Wang, Qun Jin
2019 conf
iThings/GreenCom/CPSCom/SmartData
Dehua Chen, Shujun Liu, Weimin Li
2019 C conf
CollaborateCom
Yue Ren, Xinyuan Zhang, Liting Xia, Yongze Lin, Yue Zhao, Weimin Li
2019 Misc conf
ICMLC
Lu-ning Zhang, Xin Zuo, Jianwei Liu, Weimin Li, Nobuyasu Ito
2019 J jnl
IEEE Trans. Comput. Soc. Syst.
Qun Jin, Weimin Li, Song Guo, Sethuraman Panchanathan
2019 conf
ITQM
Xing Wu, Jianxing Xu, Jianjia Wang, Yufeng Li, Weimin Li, Yike Guo
2019 conf
DASC/PiCom/DataCom/CyberSciTech
Guijiang Wang, Jiulei Jiang, Weimin Li, Can Wang
2019 J jnl
IEEE Access
Weimin Li, Xiaokang Zhou, Shohei Shimizu, Mingjun Xin, Jiulei Jiang, Honghao Gao, Qun Jin
2019 Misc conf
ICMLC
Jianwei Liu, Zhi-Juan Cao, Jing Liu, Xiong-Lin Luo, Weimin Li, Nobuyasu Ito, Long-Chuan Guo
2019 C conf
ADMA
Yunwei Zhao, Can Wang, Han Han, Willem-Jan van den Heuvel, Chi-Hung Chi, Weimin Li
2018 conf
DASC/PiCom/DataCom/CyberSciTech
Weimin Li, Heng Zhu, Xiaokang Zhou, Shohei Shimizu, Mingjun Xin, Qun Jin
2018 J jnl
IEEE Access
Weimin Li, Heng Zhu, Wei Liu, Dehua Chen, Jiulei Jiang, Qun Jin
2018 J jnl
J. Parallel Distributed Comput.
Weimin Li, Jun Mo, Minjun Xin, Qun Jin
2018 J jnl
Expert Syst. Appl.
Weimin Li, Jun Xie, Mingjun Xin, Jun Mo
2018 J jnl
Future Gener. Comput. Syst.
Xiaokang Zhou, Albert Y. Zomaya, Weimin Li, Ivan Ruchkin
2018 J jnl
Neurocomputing
Yi Xu, Zhi Zhuang, Weimin Li, Xiaokang Zhou
2018 J jnl
Future Gener. Comput. Syst.
Weimin Li, Shu Jiang, Qun Jin
2018 conf
DASC/PiCom/DataCom/CyberSciTech
Weimin Li, Jun Mo, Yue Liu, Nobuyasu Ito, Yohsuke Murase, Jianwei Liu
2017 J jnl
Multim. Tools Appl.
Weimin Li, Zhengbo Ye, Minjun Xin, Qun Jin
2016 conf
DASC/PiCom/DataCom/CyberSciTech
Weimin Li, Shu Jiang, Huaikou Miao, Xiaokang Zhou, Qun Jin
2016 conf
DASC/PiCom/DataCom/CyberSciTech
Xiaokang Zhou, Bo Wu, Qun Jin, Jianhua Ma, Weimin Li, Neil Y. Yen
2015 J jnl
Hum. centric Comput. Inf. Sci.
Weimin Li, Xunfeng Li, Mengke Yao, Jiulei Jiang, Qun Jin
2014 J jnl
J. Supercomput.
Weimin Li, Mengke Yao, Xiaokang Zhou, Shoji Nishimura, Qun Jin
2014 conf
CBD
Weimin Li, Yikai Ni, Minye Wu, Zhengbo Ye, Qun Jin
2013 conf
MUSIC
Weimin Li, Xiaohua Zhao, Jiulei Jiang, Xiaokang Zhou, Qun Jin
2008 J jnl
Neural Comput. Appl.
Weimin Li, Yishu Luo, Qin Zhu, Jianwei Liu, Jiajin Le
2005 conf
ISCIS
Weimin Li, Jianwei Liu, Jiajin Le
tests/integration/test_base_extractor.py
← Index tests/integration/test_base_extractor.py python
"""
Integration tests for the base Extractor class.
"""
import pytest
import hashlib
import math
from unittest.mock import Mock, patch, MagicMock
from collections import Counter

pytestmark = [pytest.mark.integration]


class TestExtractorStaticMethods:
    """Tests for static methods in Extractor class."""

    def test_process_binary_string_printable(self):
        """Test processing a printable binary string."""
        from redb.extractors.extractor import Extractor

        # Test with printable ASCII characters
        input_bytes = b"Hello World\x00\x00\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert result == "Hello World"

    def test_process_binary_string_non_printable(self):
        """Test processing a string with non-printable characters."""
        from redb.extractors.extractor import Extractor

        # Test with non-printable characters
        input_bytes = b"\x01\x02Hello\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert "\\x01" in result
        assert "\\x02" in result
        assert "Hello" in result

    def test_process_binary_string_empty(self):
        """Test processing an empty binary string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"\x00\x00\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert result == ""

    def test_process_binary_string_all_printable(self):
        """Test processing a fully printable string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"TestString123"
        result = Extractor.process_binary_string(input_bytes)
        assert result == "TestString123"

    def test_remove_non_utf8_valid(self):
        """Test removing non-UTF8 characters from valid UTF8 string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"Hello World"
        result = Extractor.remove_non_utf8(input_bytes)
        assert result == b"Hello World"

    def test_remove_non_utf8_with_invalid(self):
        """Test removing non-UTF8 characters from mixed string."""
        from redb.extractors.extractor import Extractor

        # Mix of valid UTF8 and invalid bytes
        input_bytes = b"Hello\xff\xfeWorld"
        result = Extractor.remove_non_utf8(input_bytes)
        # Should remove the invalid bytes
        assert b"\xff" not in result
        assert b"\xfe" not in result
        assert b"Hello" in result
        assert b"World" in result

    def test_remove_non_utf8_empty(self):
        """Test removing non-UTF8 from empty string."""
        from redb.extractors.extractor import Extractor

        result = Extractor.remove_non_utf8(b"")
        assert result == b""


class TestExtractorEntropyCalculation:
    """Tests for entropy calculation in Extractor class."""

    def test_calculate_entropy_empty_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with empty data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(b"")
            assert result == 0.0

    def test_calculate_entropy_uniform_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with uniform (low entropy) data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # All same bytes = 0 entropy
            uniform_data = b"\x00" * 256
            result = extractor.calculate_entropy(uniform_data)
            assert result == 0.0

    def test_calculate_entropy_random_data(self, elf_binary_path, mock_logger, high_entropy_data):
        """Test entropy calculation with random (high entropy) data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(high_entropy_data)
            # Random data should have entropy close to 8 (max for bytes)
            assert result > 7.0

    def test_calculate_entropy_binary_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with binary data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # Two equally distributed values = 1 bit entropy
            binary_data = b"\x00\x01" * 128
            result = extractor.calculate_entropy(binary_data)
            assert abs(result - 1.0) < 0.01

    def test_calculate_entropy_string_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with string data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # String with two equally distributed characters
            string_data = "ab" * 100
            result = extractor.calculate_entropy(string_data)
            assert abs(result - 1.0) < 0.01


class TestExtractorInitialization:
    """Tests for Extractor initialization."""

    def test_extractor_hashes_computed_on_init(self, elf_binary_path, mock_logger, known_hashes):
        """Test that hashes are computed during initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert extractor.md5 == known_hashes['md5']
            assert extractor.sha1 == known_hashes['sha1']
            assert extractor.sha256 == known_hashes['sha256']

    def test_extractor_hash_dataclass_created(self, elf_binary_path, mock_logger, known_hashes):
        """Test that Hash dataclass is created during initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert extractor.hash.md5 == known_hashes['md5']
            assert extractor.hash.sha1 == known_hashes['sha1']
            assert extractor.hash.sha256 == known_hashes['sha256']

    def test_extractor_binary_cached_property(self, elf_binary_path, mock_logger, elf_binary_content):
        """Test that binary content is loaded as cached property."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            # Access binary property
            binary = extractor.binary
            assert binary == elf_binary_content

            # Second access should return cached value (same id)
            assert extractor.binary is binary

    def test_extractor_with_exporters(self, elf_binary_path, mock_logger, mock_print_exporter):
        """Test extractor initialization with exporters."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[mock_print_exporter]
            )

            assert len(extractor.exporters) == 1
            assert extractor.exporters[0] is mock_print_exporter

    def test_extractor_with_index_prefix(self, elf_binary_path, mock_logger):
        """Test extractor initialization with custom index prefix."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                index_prefix="custom_prefix"
            )

            assert "custom_prefix" in extractor.elastic_index

    def test_extractor_known_benign_flag(self, elf_binary_path, mock_logger):
        """Test extractor with known_benign flag."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert extractor.known_benign is True
            assert extractor.known_malicious is False

    def test_extractor_known_malicious_flag(self, elf_binary_path, mock_logger):
        """Test extractor with known_malicious flag."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert extractor.known_benign is False
            assert extractor.known_malicious is True


class TestExtractorExportData:
    """Tests for export_data method."""

    def test_export_data_with_print_exporter(self, elf_binary_path, mock_logger, mock_print_exporter, capsys):
        """Test export_data with PrintExporter."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[mock_print_exporter]
            )

            result = extractor.export_data()
            # Should succeed with PrintExporter
            assert result is True

    def test_export_data_no_exporters(self, elf_binary_path, mock_logger):
        """Test export_data with no exporters configured."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[]
            )

            result = extractor.export_data()
            # Should succeed with no exporters (nothing to export)
            assert result is True


class TestExtractorEdgeCases:
    """Tests for edge cases in Extractor class."""

    def test_extractor_with_nonexistent_file(self, mock_logger):
        """Test extractor with non-existent file."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            with pytest.raises(FileNotFoundError):
                BasicPropertiesExtractor("/nonexistent/file.bin", mock_logger)

    def test_entropy_none_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with None returns 0."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(None)
            assert result == 0.0

    def test_process_binary_string_high_bytes(self):
        """Test processing binary string with high byte values."""
        from redb.extractors.extractor import Extractor

        # Characters above 126 are non-printable
        input_bytes = b"\x7f\x80\x81\xff"
        result = Extractor.process_binary_string(input_bytes)
        assert "\\x7f" in result
        assert "\\x80" in result
        assert "\\xff" in result