Na Chen

114 papers B 2C 1Journal 83Unranked 28
YearRankTypeTitle / Venue / Authors
2026 J jnl
Discret. Math.
Na Chen, Hongxi Liu
2026 J jnl
Comput. Animat. Virtual Worlds
Na Chen, Haoyu Wang, Yitong Hu, Ruifang Zhang, Zhipeng Zhang
2026 J jnl
IEEE Trans. Image Process.
Yi Huang, Jiangtao Peng, Weiwei Sun, Na Chen, Zhijing Ye, Qian Du
2026 J jnl
Int. J. Hum. Comput. Interact.
Yaxi Wang, Tong Jiang, Jiani Jiang, Yaru Huang, Na Chen
2026 J jnl
IEICE Trans. Commun.
Rizky Pratama Hudhajanto, Quang-Thang Duong, Na Chen, Minoru Okada
2026 J jnl
Finite Fields Their Appl.
Na Chen, Haiyan Zhou
2025 J jnl
ACM Trans. Intell. Syst. Technol.
Na Chen, Ping Li, Jincheng Huang, Kai Zhang
2025 J jnl
IEEE J. Biomed. Health Informatics
Bingtao Zhang, Chonghui Wang, Na Chen, Yuze Song, Junwen Mo, Hanshu Cai
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Chao Huang, Zhubin Zheng, Yunmei Li, Heng Lyu, Changchun Huang, Jingli Ren, Na Chen, Shun Bi, Ge Liu, Yuan Li, Yulong Guo, Shaohua Lei, Runfei Zhang, Jianzhong Li
2025 J jnl
Syst.
Hongbo Kou, Rui Tang, Na Chen
2025 conf
CVPR Workshops
Ruihan Zhang, Borou Yu, Jiajian Min, Yetong Xin, Zheng Wei, Juncheng Nemo Shi, Mingzhen Huang, Xianghao Kong, Nix Liu Xin, Shanshan Jiang, Praagya Bahuguna, Mark Chan, Khushi Hora, Lijian Yang, Yongqi Liang, Runhe Bian, Yunlei Liu, Isabela Campillo Valencia, Patricia Morales Tredinick, Ilia Kozlov, Sijia Jiang, Peiwen Huang, Na Chen, Xuanxuan Liu, Anyi Rao
2025 J jnl
CoRR
Ruihan Zhang, Borou Yu, Jiajian Min, Yetong Xin, Zheng Wei, Juncheng Nemo Shi, Mingzhen Huang, Xianghao Kong, Nix Liu Xin, Shanshan Jiang, Praagya Bahuguna, Mark Chan, Khushi Hora, Lijian Yang, Yongqi Liang, Runhe Bian, Yunlei Liu, Isabela Campillo Valencia, Patricia Morales Tredinick, Ilia Kozlov, Sijia Jiang, Peiwen Huang, Na Chen, Xuanxuan Liu, Anyi Rao
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jiajia Bai, Na Chen, Jiangtao Peng, Lanxin Wu, Weiwei Sun, Zhijing Ye
2025 J jnl
Neurocomputing
Wenjun Liu, Na Chen, Jiangtao Peng, Shuoshuo Hui
2025 J jnl
IEICE Electron. Express
Jingtao Zhao, Jiaxing Lei, Shu Zheng, Nan Wang, Wei Kang, Na Chen, Zhi Wu
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Ri Ming, Na Chen, Jiangtao Peng, Weiwei Sun, Zhijing Ye
2025 J jnl
BMC Medical Informatics Decis. Mak.
Yirong Wu, Mudan Ren, Na Chen, Liu Yang
2025 conf
HCI (17)
Na Chen, Xinyue Zhang
2025 J jnl
Int. J. Hum. Comput. Interact.
Na Chen, Jing yin Zuo, Yao Zu
2025 J jnl
Int. J. Wavelets Multiresolution Inf. Process.
Na Chen, Deliang Zhu, Yi Huang, Yujie Ning, Jiangtao Peng, Weiwei Sun
2024 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Jianzhong Li, Zhubin Zheng, Yunmei Li, Heng Lyu, Jingli Ren, Xiaolan Cai, Chao Du, Na Chen, Ge Liu, Shaohua Lei, Runfei Zhang, Chao Huang
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yi Huang, Jiangtao Peng, Genwei Zhang, Weiwei Sun, Na Chen, Qian Du
2024 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Xiaohan Yu, Junsen Wang, Yang Cui, Shaohua Jin, Gang Bian, Na Chen
2024 conf
HCI (70)
Hao Yang, Na Chen, Quanxin Jin, Ying Zhao
2024 J jnl
Int. J. Soc. Robotics
Na Chen, Xiaoyu Liu, Xueyan Hu
2024 J jnl
ISPRS Int. J. Geo Inf.
Mingwei He, Na Chen, Yueren He, Jianbo Li, Yang Liu
2024 J jnl
Expert Syst. Appl.
Na Chen, Xianming Kuang, Feiyu Liu, Kehao Wang, Lijun Zhang, Qun Chen
2024 J jnl
Simul. Model. Pract. Theory
Junjie Zhang, Haijian Li, Yongfeng Ma, Chenxiao Zhang, Lingqiao Qin, Na Chen
2024 J jnl
ACM Trans. Knowl. Discov. Data
Jincheng Huang, Ping Li, Rui Huang, Na Chen, Acong Zhang
2024 J jnl
Int. J. Soc. Robotics
Na Chen, Jiajia Cao, Xueyan Hu
2024 J jnl
Hum. Factors
Jiajia Cao, Na Chen
2023 J jnl
IEEE Access
Na Chen, Jingyu Zhou, Hui Guan, Nan Xu, Sheng Xue, Shuting Li, Zhiqiong Liu
2023 J jnl
IEEE Geosci. Remote. Sens. Lett.
Wenhui Hou, Na Chen, Jiangtao Peng, Weiwei Sun
2023 conf
ASICON
Yande Jiang, Na Chen, Huiquan Wang, Guangda Zhang, Jun Xia, Xiaobo Yan
2023 J jnl
Neural Comput. Appl.
Rongli Gai, Na Chen, Hai Yuan
2023 conf
ICIEAI
Hongli Deng, Gaochao Huang, Na Chen, Xianying Wang
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Quanyong Liu, Jiangtao Peng, Na Chen, Weiwei Sun, Yujie Ning, Qian Du
2023 J jnl
J. Glob. Inf. Manag.
Lei Li, Shuili Yang, Na Chen
2023 J jnl
Remote. Sens.
Jianzhong Li, Zhubin Zheng, Ge Liu, Na Chen, Shaohua Lei, Chao Du, Jie Xu, Yuan Li, Runfei Zhang, Chao Huang
2023 J jnl
CoRR
Na Chen, Xianming Kuang, Feiyu Liu, Kehao Wang, Qun Chen
2023 conf
ICA3PP (1)
Yuan Cao, Yaru Gao, Na Chen, Jiacheng Lin, Sheng Chen
2023 conf
BDMIP
Na Chen, Shengjie Zhou, Mingxiang Liu
2023 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Wenhui Hou, Na Chen, Jiangtao Peng, Weiwei Sun, Qian Du
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Quanyong Liu, Jiangtao Peng, Yujie Ning, Na Chen, Weiwei Sun, Qian Du, Yicong Zhou
2023 J jnl
J. Glob. Inf. Manag.
Na Chen, Shuili Yang, Lei Li
2023 conf
HCI (13)
Yao Zu, Na Chen
2023 J jnl
CAAI Trans. Intell. Technol.
Erxin Xie, Na Chen, Jiangtao Peng, Weiwei Sun, Qian Du, Xinge You
2023 conf
ICIEAI
Yi Li, Hongli Deng, Na Chen, Xianying Wang, Jinfeng He
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Linzhou Yu, Jiangtao Peng, Na Chen, Weiwei Sun, Qian Du
2022 J jnl
Comput. Biol. Medicine
Junyi Jiang, Wei Lyu, Na Chen
2022 J jnl
Briefings Bioinform.
Qian Ding, Wenyi Yang, Meng Luo, Chang Xu, Zhaochun Xu, Fenglan Pang, Yideng Cai, Anastasia A. Anashkina, Xi Su, Na Chen, Qinghua Jiang
2022 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jiangtao Peng, Yi Huang, Weiwei Sun, Na Chen, Yujie Ning, Qian Du
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Na Chen, Bart van Arem, Meng Wang
2022 B conf
Creativity & Cognition
Sang-Na Lin, Meng-Yang Chen, Na Chen, Min-Zhi Shao
2022 J jnl
Remote. Sens.
Xiang Chen, Na Chen, Jiangtao Peng, Weiwei Sun
2022 J jnl
Expert Syst. Appl.
Xiaoling Sun, Na Chen, Kun Ding
2022 J jnl
Comput. Biol. Medicine
Xiaoyu Lin, Huan Nie, Ran Tang, Pingping Wang, Xiyun Jin, Qinghua Jiang, Fang Han, Na Chen, Yu Li
2022 J jnl
IEEE Access
Yuepeng Cheng, Bo Li, Na Chen
2022 conf
DTPI
Jia Zhang, Na Chen, Jiangtao Peng, Feng Cui
2022 conf
ITQM
Zhen Zhou, Yuhan Mei, Na Chen, Haitao Zhu
2022 conf
HCI (13)
Yang Liu, Zainur Akbar, Na Chen
2022 J jnl
Int. J. Soc. Robotics
Na Chen, Yanan Zhai, Xiaoyu Liu
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yi Huang, Jiangtao Peng, Weiwei Sun, Na Chen, Qian Du, Yujie Ning, Han Su
2021 J jnl
IEEE Trans. Intell. Transp. Syst.
Na Chen, Bart van Arem, Tom Alkim, Meng Wang
2021 conf
HPCC/DSS/SmartCity/DependSys
Rongli Gai, Mengke Li, Na Chen
2021 B conf
NSS
Na Chen, Yuan Cao, Chao Liu
2021 conf
HCI (12)
Yanan Zhai, Na Chen, Jiajia Cao
2021 J jnl
Int. J. Inf. Technol. Syst. Approach
Chunqiong Wu, Bingwen Yan, Rongrui Yu, Zhangshu Huang, Baoqin Yu, Yanliang Yu, Na Chen, Xiukao Zhou
2021 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Ning Ye, Justin Morgenroth, Cong Xu, Na Chen
2021 conf
DASC/PiCom/CBDCom/CyberSciTech
Na Chen, Shengling Geng, Lin Li
2021 conf
DTPI
Siyu Chen, Na Chen, Zhao Sun, Ran Meng
2021 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Na Chen, Nandin-Erdene Tsendbazar, Eliakim Hamunyela, Jan Verbesselt, Martin Herold
2021 J jnl
Complex.
Chunqiong Wu, Bingwen Yan, Rongrui Yu, Baoqin Yu, Xiukao Zhou, Yanliang Yu, Na Chen
2020 J jnl
Comput. Commun.
Chunqiong Wu, Bingwen Yan, Rongrui Yu, Zhangshu Huang, Baoqin Yu, Na Chen
2020 J jnl
J. Intell. Fuzzy Syst.
Chunqiong Wu, Rongrui Yu, Bingwen Yan, Zhangshu Huang, Baoqin Yu, Yanliang Yu, Na Chen, Xiukao Zhou
2020 J jnl
ISPRS Int. J. Geo Inf.
Faming Huang, Jianbo Yang, Biao Zhang, Yijing Li, Jinsong Huang, Na Chen
2020 conf
HCI (44)
Na Chen, Xiaoyu Liu, Yue Sun
2020 J jnl
Nucleic Acids Res.
Jiayi Yin, Wen Sun, Feng Cheng Li, Jiajun Hong, Xiao Xu Li, Ying Zhou, Yinjing Lu, Mengzhi Liu, Xue Zhang, Na Chen, Xiuping Jin, Jia Xue, Su Zeng, Lushan Yu, Feng Zhu
2020 J jnl
Nucleic Acids Res.
Jiayi Yin, Wen Sun, Fengcheng Li, Jiajun Hong, Xiaoxu Li, Ying Zhou, Yinjing Lu, Mengzhi Liu, Xue Zhang, Na Chen, Xiuping Jin, Jia Xue, Su Zeng, Lushan Yu, Feng Zhu
2019 conf
KST
Na Chen, Xiaofeng Jiang, Katsumi Watanabe
2019 J jnl
Neurocomputing
Jiangtao Peng, Xue Jiang, Na Chen, Huijing Fu
2019 J jnl
Vis. Comput. Ind. Biomed. Art
Xiaoqin Zhang, Jingyi Yang, Na Chen, Shaoxiang Zhang, Yifa Xu, Liwen Tan
2018 conf
HCI (11)
Na Chen
2018 J jnl
Int. J. Wavelets Multiresolution Inf. Process.
Fen Chen, Bin Zou, Na Chen
2017 J jnl
Comput. Geosci.
Na Chen, John Kemeny, Qinghui Jiang, Zhiwen Pan
2017 J jnl
Sensors
Wei Wei, Jinpeng Nong, Guiwen Zhang, Linlong Tang, Xiao Jiang, Na Chen, Suqin Luo, Guilian Lan, Yong Zhu
2016 conf
Earth Observing Systems
Xiaoxiong Xiong, Na Chen, Yonghong Li, Truman Wilson
2016 conf
Earth Observing Systems
Yonghong Li, Amit Angal, Na Chen, Xu Geng, Daniel Link, Zhipeng Wang, Aisheng Wu, Xiaoxiong (Jack) Xiong
2016 J jnl
IEEE Geosci. Remote. Sens. Lett.
Chen Chen, Na Chen, Jiangtao Peng
2016 J jnl
IEEE Trans. Geosci. Remote. Sens.
Sriharsha Madhavan, Xiaoxiong Xiong, Aisheng Wu, Brian N. Wenny, Kwo-Fu Chiang, Na Chen, Zhipeng Wang, Yonghong Li
2016 J jnl
Int. J. Wavelets Multiresolution Inf. Process.
Chen Chen, Na Chen
2016 J jnl
Int. J. Semantic Web Inf. Syst.
Ying Zhang, Chaopeng Li, Na Chen, Shaowen Liu, Liming Du, Zhuxiao Wang, Miaomiao Ma
2015 J jnl
Biomed. Signal Process. Control.
Le Ma, Yuan Y. Yang, Na Chen, Rong Song, Le Li
2015 J jnl
Inf. Sci.
Na Chen, Zeshui Xu
2015 conf
Earth Observing Systems
Xu Geng, Sriharsha Madhavan, Na Chen, Xiaoxiong Xiong
2015 J jnl
Int. J. Wavelets Multiresolution Inf. Process.
Shouyin Chen, Na Chen
2015 conf
FSKD
Chunlei Ye, Dongmei Liu, Na Chen, Li Lin
2015 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xiaoxiong Xiong, Aisheng Wu, Brian N. Wenny, Sriharsha Madhavan, Zhipeng Wang, Yonghong Li, Na Chen, William L. Barnes, Vincent V. Salomonson
2015 J jnl
Control. Intell. Syst.
Yanping Jing, Bo Li, Na Chen, Xiaofeng Li, Jie Hu, Feng Zhu
2015 J jnl
Int. J. Inf. Technol. Decis. Mak.
Na Chen, Zeshui Xu, Meimei Xia
2015 J jnl
计算机科学
Na Chen, Yun Jiang, Li Zou, Jian Shen, Xuewei Hu, Zhilei Li
2014 J jnl
J. Intell. Fuzzy Syst.
Na Chen, Zeshui Xu
2014 conf
Earth Observing Systems
Xiaoxiong Xiong, Brian N. Wenny, Aisheng Wu, Amit Angal, Xu Geng, Hongda Chen, Jennifer L. Dodd, Daniel O. Link, Sriharsha Madhavan, Na Chen, Yonghong Li, Sean Iacangelo, William L. Barnes, Vince Salomonson
2014 J jnl
J. Robotics
Lingfeng Sang, Hongbo Wang, Shuaishuai Wang, Na Chen, Yuehua Wen
2013 C conf
CIS
Guocheng Xie, Yun Jiang, Na Chen
2013 J jnl
Knowl. Based Syst.
Na Chen, Zeshui Xu, Meimei Xia
2013 conf
ITSC
Honghui Dong, Mingchao Wu, Qingchao Shan, Na Chen, Siyang Qin, Yin Tian, Limin Jia, Yong Qin
2012 J jnl
Int. J. Wavelets Multiresolution Inf. Process.
Hong Li, Na Chen, Luoqing Li
2012 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Hong Li, Na Chen, Luoqing Li
2011 J jnl
Int. J. Uncertain. Fuzziness Knowl. Based Syst.
Meimei Xia, Zeshui Xu, Na Chen
2011 conf
ICAIC (2)
Na Chen, Shaopu Yang, Cunzhi Pan, Erfu Guo
2010 J jnl
Int. J. Wavelets Multiresolution Inf. Process.
Hong Li, Na Chen, Yuan Yan Tang
2009 conf
ICNC (2)
Xiang Chen, Weihua Cai, Na Chen
2007 conf
ICIC (2)
Yonghong Xu, Wenxue Hong, Na Chen, Xin Li, Wenyuan Liu, Tao Zhang
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