Kaili Wang

88 papers A* 1A 3B 4Journal 56Unranked 23
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Netw.
Kaili Wang, Muqing Wu, Min Zhao, Tianze Zhao
2026 J jnl
Knowl. Based Syst.
Yanglan Gan, Lideng Cai, Kaili Wang, Guangwei Xu, Guobing Zou
2026 J jnl
J. Chem. Inf. Model.
Yanglan Gan, Jieli Su, Kaili Wang, Guangwei Xu, Guobing Zou
2025 J jnl
Neurocomputing
Kaili Wang, Muqing Wu, Min Zhao
2025 J jnl
Comput. Electron. Agric.
Kaili Wang, Wei Li, Xiao Wu, Jingwen Xu, Zhi-Wen Wang, Siyu Yang
2025 J jnl
CAAI Trans. Intell. Technol.
Kaili Wang, Xinwei Sun, Huijie He, Fenhua Bai, Tao Shen
2025 J jnl
IEEE J. Biomed. Health Informatics
Xiao Jia, Xinliang Sun, Kaili Wang, Min Li
2025 B conf
WCNC
Kaili Wang, Muqing Wu, Min Zhao
2025 J jnl
Digit. Signal Process.
Kaili Wang, Chi Zhou, Yuanlin Shi, Tianquan Wu, Chen Chen
2025 J jnl
Expert Syst. Appl.
Xinjing Gong, Xihai Zhang, Jin Cheng, Hao Wang, Kaili Wang, Fanfeng Meng
2025 J jnl
CoRR
Kaili Wang, Leonardo Ravaglia, Roberto Longo, Lore Goetschalckx, David Van Hamme, Julie Moeyersoms, Ben Stoffelen, Tom De Schepper
2025 J jnl
Inf. Res.
Guiyan Ou, Haodong Chen, Kaili Wang, Jiang Wu
2025 J jnl
Libr. Hi Tech
Kaili Wang, Ke Dong, Jiachun Wu, Jiang Wu
2025 J jnl
J. Imaging
Leonardo Ravaglia, Roberto Longo, Kaili Wang, David Van Hamme, Julie Moeyersoms, Ben Stoffelen, Tom De Schepper
2025 J jnl
Eng. Appl. Artif. Intell.
Shengnan Li, Chi Zhou, Kaili Wang
2024 J jnl
Inf. Process. Manag.
Yu Liu, Duantengchuan Li, Kaili Wang, Zhuoran Xiong, Fobo Shi, Jian Wang, Bing Li, Bo Hang
2024 B conf
CNSM
Kaili Wang, Muqing Wu, Min Zhao
2024 J jnl
Neurocomputing
Kaili Wang, Xinwei Sun, Tao Shen
2024 conf
IEEE SENSORS
Kaili Wang, Leonardo Ravaglia, Roberto Longo, Lore Goetschalckx, David Van Hamme, Julie Moeyersoms, Ben Stoffelen, Tom De Schepper
2024 J jnl
J. Chem. Inf. Model.
Lei Song, Huimin Zhu, Kaili Wang, Min Li
2023 conf
ANT/EDI40
Sk. Md. Mashrur, Brenden Lavoie, Kaili Wang, Khandker Nurul Habib
2023 J jnl
Symmetry
Hongliang Zhu, Li Fan, Yuxuan Wang, Kaili Wang, Hao Liu, Jiawei Zhang, Shancheng Yan
2023 J jnl
CoRR
Zhangli Lu, Chuqi Lei, Kaili Wang, Libo Qin, Jing Tang, Min Li
2023 J jnl
IEEE J. Biomed. Health Informatics
Kaili Wang, Min Li
2023 J jnl
Bioinform.
Kaili Wang, Renyi Zhou, Jing Tang, Min Li
2023 conf
AISNS
Shengnan Li, Chi Zhou, Kaili Wang
2023 conf
DeFi@CCS
Kaili Wang, Qinchen Wang, Calvin Cai, Dan Boneh
2023 J jnl
CoRR
Kaili Wang, Qinchen Wang, Calvin Cai, Dan Boneh
2023 J jnl
Briefings Bioinform.
Kaili Wang, Renyi Zhou, Yifan Wu, Min Li
2023 J jnl
Sensors
Yunkun Shen, Kaili Wang, Hao Liu, Liping Chen, Zhihan Jin, Shancheng Yan
2023 J jnl
Ecol. Informatics
Pengpeng Dou, Jie Wang, Zhengzhou Miao, Yanbo Zhao, Qian Gao, Jing Huang, Lili Hou, Kaili Wang, Chuchen Chang, Tianyu Cai, Xu Wang, Kun Wang
2022 J jnl
Inf. Sci.
Lirong Sun, Kaili Wang, Lini Xu, Chonghui Zhang, Tomas Balezentis
2022 conf
ADHIP (1)
Yu Chen, Kaili Wang
2022 J jnl
Appl. Intell.
Xinyu Wang, Yaohua Yi, Jibing Peng, Kaili Wang
2022 A* conf
ICRA
Yefei Wang, Kaili Wang, Yi Wang, Di Guo, Huaping Liu, Fuchun Sun
2022 conf
ADHIP (1)
Kaili Wang, Yu Chen
2022 J jnl
CoRR
Kaili Wang, Qinchen Wang, Dan Boneh
2022 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Xinzhong Qiu, Xuechun Lu, Kaili Wang
2022 J jnl
Comput. Electron. Agric.
Yang Liu, Shuang Liu, Jingwen Xu, Xiangna Kong, Liao Xie, Keyu Chen, Yunyuan Liao, Bowei Fan, Kaili Wang
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yanping Li, Yue Wang, Rui Wang, Yi Wang, Kaili Wang, Xiangyang Wang, Wenming Cao, Wei Xiang
2022 conf
AIPR
Hao Liang, Xiaopeng Cao, Kaili Wang
2022 conf
BECB
Yangyun Lou, Ting Li, Kaili Wang, Zheyi Gong, Guofang An, Meitao Sun, Zheng Wang
2022 J jnl
CoRR
Yicong Liu, Kaili Wang, Patrick Loa, Khandker Nurul Habib
2022 conf
AIPR
Kaili Wang, Xiaopeng Cao, Xiao Yang, Yuanshuo Cao
2022 J jnl
Ecol. Informatics
Kaili Wang, Keyu Chen, Huiyu Du, Shuang Liu, Jingwen Xu, Junfang Zhao, Houlin Chen, Yujun Liu, Yang Liu
2022 J jnl
CoRR
Mike Wu, Will McTighe, Kaili Wang, István András Seres, Nick Bax, Manuel Puebla, Mariano Mendez, Federico Carrone, Tomás De Mattey, Herman O. Demaestri, Mariano Nicolini, Pedro Fontana
2021 conf
RWS
Kazuki Arai, Kaili Wang, Toshiya Mitomo, Makoto Higaki, Kohei Onizuka
2021 conf
ACIIDS (Companion)
Haiming Li, Kaili Wang, Yunyun Sun, Xuefeng Mou
2021 J jnl
CoRR
Yefei Wang, Kaili Wang, Yi Wang, Di Guo, Huaping Liu, Fuchun Sun
2021 J jnl
Inf. Process. Manag.
Jiang Wu, Kaili Wang, Chaocheng He, Xiao Huang, Ke Dong
2021
Kaili Wang
2021 J jnl
Briefings Bioinform.
Kaili Wang, Renyi Zhou, Yaohang Li, Min Li
2021 J jnl
Expert Syst. Appl.
Lirong Sun, Kaili Wang, Tomas Balezentis, Dalia Streimikiene, Chonghui Zhang
2021 A conf
BMVC
Kaili Wang, José Oramas, Tinne Tuytelaars
2021 J jnl
CoRR
Kaili Wang, José Oramas M., Tinne Tuytelaars
2021 J jnl
Appl. Soft Comput.
Kaili Wang, Yaohua Yi, Ziwei Tang, Jibing Peng
2021 J jnl
J. Informetrics
Ke Dong, Jiang Wu, Kaili Wang
2021 A conf
SIGCSE
Maxwell Bigman, Ethan Roy, Jorge Garcia, Miroslav Suzara, Kaili Wang, Chris Piech
2021 J jnl
CoRR
Kaili Wang, José Oramas M., Tinne Tuytelaars
2020 J jnl
IEEE Geosci. Remote. Sens. Lett.
Dongran Yu, Ming Yao, Kai Yuan, Xiaohua Deng, Yajing Guo, Kaili Wang
2020 J jnl
IEEE Access
Jun Ai, Zhan Su, Kaili Wang, Chunxue Wu, Dunlu Peng
2020 J jnl
J. Comput. Biol.
Zhenan Zhang, Yuqin Liu, Wei Wang, Yue Xing, Nanyang Jiang, Hongrui Zhang, Hanwen Zhang, Lei He, Wei Yue, Lianju Jiang, Kaili Wang
2020 conf
ACCV (6)
Kaili Wang, José Oramas M., Tinne Tuytelaars
2020 J jnl
Neurocomputing
Kaili Wang, Yaohua Yi, Junjie Liu, Liqiong Lu, Ying Song
2020 conf
ACCV (5)
Kaili Wang, José Oramas M., Tinne Tuytelaars
2020 J jnl
CoRR
Kaili Wang, José Oramas M., Tinne Tuytelaars
2020 conf
JCDL
Chaocheng He, Kaili Wang, Jiang Wu
2020 B conf
ICIP
Kaili Wang, Liqian Ma, José Oramas M., Luc Van Gool, Tinne Tuytelaars
2019 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Bin Xiao, Kaili Wang, Xiuli Bi, Weisheng Li, Junwei Han
2019 J jnl
CoRR
Kaili Wang, José Oramas M., Tinne Tuytelaars
2019 J jnl
IEEE Access
Rui Wang, Kaili Wang, Wenming Cao, Xiangyang Wang
2019 J jnl
IEEE Access
Liqiong Lu, Yaohua Yi, Faliang Huang, Kaili Wang, Qi Wang
2019 conf
BNAIC/BENELEARN
José Oramas M., Kaili Wang, Tinne Tuytelaars
2019 J jnl
Int. J. Syst. Sci.
Weiwei Sun, Xinyu Lv, Kaili Wang, Liping Wang
2019 conf
ICLR (Poster)
José Oramas M., Kaili Wang, Tinne Tuytelaars
2018 A conf
WACV
Kaili Wang, Yu-Hui Huang, José Oramas M., Luc Van Gool, Tinne Tuytelaars
2018 J jnl
CoRR
Kaili Wang, Liqian Ma, José Oramas M., Luc Van Gool, Tinne Tuytelaars
2018 J jnl
Bioinform.
Kaili Wang, Yiren Jian, Huiwen Wang, Chen Zeng, Yunjie Zhao
2017 J jnl
CoRR
Kaili Wang, Yu-Hui Huang, Luc Van Gool, José Oramas M., Tinne Tuytelaars
2017 J jnl
CoRR
José Oramas M., Kaili Wang, Tinne Tuytelaars
2016 B conf
PIMRC
Kaili Wang, Muqing Wu, Min Zhao, Yanqing Cheng
2016 conf
ISWCS
Yanqing Cheng, Muqing Wu, Min Zhao, Kaili Wang
2011 conf
ICICA (1)
Zhijiang Wang, Kaili Wang, Shujiang An
2010 conf
ICICA (2)
Zhijiang Wang, Kaili Wang, Huancheng Zhang
2010 conf
CCTA (1)
Kaili Wang, Guanhua Huang
2010 conf
ICICA (1)
Ling Wang, Dianxuan Gong, Kaili Wang, Yuhuan Cui, Shiqiu Zheng
2010 conf
ICICA (2)
Xuebing Han, Kaili Wang
2010 conf
ICICA (2)
Kaili Wang, Xuebing Han
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