Kai Wang

55 papers B 1Journal 47Unranked 7
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Dependable Secur. Comput.
Shuaiyi Lyu, Kai Wang, Yang Liu, Bailing Wang
2026 J jnl
IEEE Trans. Mob. Comput.
Kai Wang, Qiguang Jiang, Bailing Wang, Yulei Wu, Hongke Zhang
2025 J jnl
CoRR
Kai Wang, Zhen Sun, Bailing Wang, Qilin Fan, Ming Li, Hongke Zhang
2025 J jnl
Appl. Intell.
Haotian Li, Bailing Wang, Kai Wang, Rui Zhang, Yuliang Wei
2025 J jnl
IEEE Internet Things J.
Kai Wang, Shuaiyi Lyu, Bailing Wang, Yongzheng Zhang
2025 J jnl
IEEE Trans. Netw. Serv. Manag.
Qifeng Liu, Qilin Fan, Xu Zhang, Xiuhua Li, Kai Wang, Qingyu Xiong
2025 J jnl
IEEE Trans. Netw. Sci. Eng.
Kai Wang, Shuaiyi Lyu, Yang Liu, Bailing Wang
2025 J jnl
Future Gener. Comput. Syst.
Renlong Chen, Hui Xia, Kai Wang, Shuo Xu, Rui Zhang
2025 J jnl
Knowl. Based Syst.
Haotian Li, Bin Yu, Yuliang Wei, Kai Wang, Richard Yi Da Xu, Bailing Wang
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Aiheng Zhang, Zhen Sun, Qiguang Jiang, Kai Wang, Ming Li, Bailing Wang
2025 J jnl
IEEE Trans. Serv. Comput.
Haiwen Du, Kai Wang, Yulei Wu, Hongke Zhang
2025 J jnl
CoRR
Wenhan Jiang, Tingting Chai, Hongri Liu, Kai Wang, Hongke Zhang
2025 J jnl
IEEE Trans. Inf. Forensics Secur.
Qiguang Jiang, Kai Wang, Yuliang Wei, Hongri Liu, Bailing Wang
2024 J jnl
IEEE Trans. Consumer Electron.
Rui Zhang, Hui Xia, Zijun Chen, Zi Kang, Kai Wang, Wei Gao
2024 J jnl
CoRR
Haotian Li, Rui Zhang, Lingzhi Wang, Bin Yu, Youwei Wang, Yuliang Wei, Kai Wang, Richard Yi Da Xu, Bailing Wang
2024 J jnl
IEEE Trans. Netw. Serv. Manag.
Jingyuan Liu, Zheng Chang, Kai Wang, Zhiwei Zhao, Timo Hämäläinen
2024 J jnl
Comput. Networks
Kunkun Jia, Hui Xia, Rui Zhang, Yue Sun, Kai Wang
2024 B conf
GLOBECOM
Jingyuan Liu, Zheng Chang, Kai Wang, Geyong Min
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Kai Wang, Aiheng Zhang, Haoran Sun, Bailing Wang
2023 J jnl
CoRR
Kai Wang, Qiguang Jiang, Bailing Wang, Yongzheng Zhang, Yulei Wu
2023 J jnl
ACM Trans. Intell. Syst. Technol.
Shuaiyi L(y)u, Kai Wang, Yuliang Wei, Hongri Liu, Qilin Fan, Bailing Wang
2023 J jnl
CoRR
Aiheng Zhang, Kai Wang, Bailing Wang, Yulei Wu
2023 J jnl
Pattern Recognit.
Shuaiyi L(y)u, Kai Wang, Liren Zhang, Bailing Wang
2022 J jnl
J. Ambient Intell. Humaniz. Comput.
Ming Wan, Jinfang Li, Kai Wang, Bailing Wang
2022 J jnl
Expert Syst. Appl.
Shuaiyi L(y)u, Kai Wang, Liren Zhang, Bailing Wang
2022 J jnl
Knowl. Based Syst.
Kai Wang, Yanwei Yu, Chao Huang, Zhongying Zhao, Junyu Dong
2022 conf
SmartWorld/UIC/ScalCom/DigitalTwin/PriComp/Meta
Zhiying Xiong, Qilin Fan, Kai Wang, Xiuhua Li, Xu Zhang, Qingyu Xiong
2021 J jnl
Algorithms
Yajing Zhang, Kai Wang, Jinghui Zhang
2021 J jnl
Complex.
Kai Wang, Xiao Fan Liu, Dongchao Guo
2021 J jnl
IEEE Trans. Netw. Serv. Manag.
Qilin Fan, Xiuhua Li, Jian Li, Qiang He, Kai Wang, Junhao Wen
2020 J jnl
Wirel. Commun. Mob. Comput.
Yajing Zhang, Jia Wei, Kai Wang
2020 J jnl
IEEE Syst. J.
Kai Wang, Dongchao Guo, Wei Quan
2020 conf
ML4CS (1)
Ming Wan, Jinfang Li, Hao Luo, Kai Wang, Yingjie Wang, Bailing Wang
2020 J jnl
Comput. Secur.
Jiaqing Dong, Kai Wang, Wei Quan, Hao Yin
2020 J jnl
Inf. Sci.
Weiqing Yan, Guanghui Yue, Jindong Xu, Yanwei Yu, Kai Wang, Chang Tang, Xiangrong Tong
2019 J jnl
ACM Trans. Internet Techn.
Kai Wang, Wei Quan, Nan Cheng, Mingyuan Liu, Yu Liu, H. Anthony Chan
2019 J jnl
Int. J. Digit. Multim. Broadcast.
Yuanlong Cao, Yuming Fang, Jiyan Wu, Wei Quan, Kai Wang
2019 J jnl
Inf. Sci.
Dongchao Guo, Jiaqing Dong, Kai Wang
2019 J jnl
IEEE Access
Kai Wang, Jiaqing Dong, Ying Wang, Hao Yin
2018 J jnl
Int. J. Sens. Networks
Yingjie Wang, Xiangrong Tong, Kai Wang, Baode Fan, Zaobo He, Guisheng Yin
2018 J jnl
Internet Technol. Lett.
Gang Liu, Wei Quan, Nan Cheng, Kai Wang, Hongke Zhang
2018 J jnl
IEEE Netw.
Kai Wang, Hao Yin, Wei Quan, Geyong Min
2018 J jnl
IEEE Netw.
Hao Yin, Dongchao Guo, Kai Wang, Zexun Jiang, Yongqiang Lyu, Ju Xing
2018 conf
ICA3PP (4)
Jiaqing Dong, Kai Wang, Yongqiang Lyu, Libo Jiao, Hao Yin
2018 J jnl
IET Networks
Kai Wang, Yude Zhao, Shugang Liu, Xiangrong Tong
2018 J jnl
Wirel. Commun. Mob. Comput.
Wei Quan, Kai Wang, Yana Liu, Nan Cheng, Hongke Zhang, Xuemin (Sherman) Shen
2017 J jnl
KSII Trans. Internet Inf. Syst.
Kai Wang, Wei Bao, Yingjie Wang, Xiangrong Tong
2017 J jnl
Expert Syst. Appl.
Xuejiao Sun, Jinglei Liu, Kai Wang
2016 conf
BDCloud-SocialCom-SustainCom
Yingjie Wang, Xiangrong Tong, Zaobo He, Yang Gao, Kai Wang
2014 J jnl
Soft Comput.
Kai Wang, Huachun Zhou, Yajuan Qin, Hongke Zhang
2014 J jnl
Secur. Commun. Networks
Kai Wang, Huachun Zhou, Hongbin Luo, Jianfeng Guan, Yajuan Qin, Hongke Zhang
2014 J jnl
Int. J. Commun. Syst.
Kai Wang, Jia Chen, Huachun Zhou, Yajuan Qin, Hongke Zhang
2013 conf
GLOBECOM Workshops
Kai Wang, Huachun Zhou, Yajuan Qin, Jia Chen, Hongke Zhang
2013 conf
IMIS
Kai Wang, Huachun Zhou, Jia Chen, Yajuan Qin
2012 conf
IMIS
Jianfeng Guan, Changqiao Xu, Kai Wang, Huachun Zhou, Hongke Zhang
tests/integration/test_pe_extractor.py
← Index tests/integration/test_pe_extractor.py python
"""
Integration tests for the PEExtractor base class.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

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


class TestPEExtractorInitialization:
    """Tests for PEExtractor initialization."""

    def test_pe_extractor_with_valid_pe(self, pe_binary_path, mock_logger):
        """Test PEExtractor initialization with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            assert extractor.pe is not None
            assert extractor.filepath == pe_binary_path

    def test_pe_extractor_with_provided_pe_object(self, pe_binary_path, mock_logger, pe_object):
        """Test PEExtractor initialization with pre-existing PE object."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should use the provided PE object, not create a new one
            assert extractor.pe is pe_object

    def test_pe_extractor_with_invalid_file(self, elf_binary_path, mock_logger):
        """Test PEExtractor initialization with non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return None for pe when file is not a valid PE
            assert extractor.pe is None
            # Logger should have recorded an error
            assert mock_logger.error.called


class TestPEExtractorMethods:
    """Tests for PEExtractor helper methods."""

    def test_check_dotnet_true(self, pe_binary_path, mock_logger):
        """Test _check_dotnet returns True for .NET PE."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # The test PE file is a .NET binary
            if extractor.pe is not None:
                result = extractor._check_dotnet()
                # d8637bdbcfc9112fcb1f0167b398e771 is a .NET binary
                assert result is True

    def test_check_dotnet_false(self, elf_binary_path, mock_logger):
        """Test _check_dotnet returns False for non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return False when PE is None
            result = extractor._check_dotnet()
            assert result is False

    def test_is_signed_false(self, pe_binary_path, mock_logger):
        """Test _is_signed method."""
        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 not None:
                result = extractor._is_signed()
                # Result depends on the actual binary
                assert isinstance(result, bool)

    def test_has_overlay(self, pe_binary_path, mock_logger):
        """Test _has_overlay method."""
        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 not None:
                result = extractor._has_overlay()
                assert isinstance(result, bool)


class TestGeneratePEFileObject:
    """Tests for _generate_pefile_object method."""

    def test_generate_pefile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_pefile_object with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # The PE object should be created successfully
            assert extractor.pe is not None

    def test_generate_pefile_object_invalid(self, temp_text_file, mock_logger):
        """Test _generate_pefile_object with invalid file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return None for invalid PE
            assert extractor.pe is None


class TestGenerateDotNetFileObject:
    """Tests for _generate_dotnetfile_object method."""

    def test_generate_dotnetfile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with .NET PE file."""
        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 not None and extractor._check_dotnet():
                dotnet, error = extractor._generate_dotnetfile_object()
                # Should create dotnet object for .NET PE
                assert dotnet is not None
                assert error is None

    def test_generate_dotnetfile_object_invalid(self, elf_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with non-.NET file."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

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

            dotnet, error = extractor._generate_dotnetfile_object()
            # Should return error for non-.NET file
            assert dotnet is None
            assert error is not None


class TestPEExtractorTag:
    """Tests for tag method in PE extractors."""

    def test_pe_features_tag(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_FEATURES.value

    def test_pe_import_tag(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_IMPORT.value

    def test_pe_section_tag(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_SECTION.value


class TestPEExtractorClickHouseTable:
    """Tests for get_clickhouse_table method in PE extractors."""

    def test_pe_features_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

    def test_pe_import_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

    def test_pe_section_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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


class TestPEExtractorPrepareExportData:
    """Tests for prepare_export_data method in PE extractors."""

    def test_pe_features_prepare_export_elasticsearch(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        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 not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ElasticsearchExporter")
                # Should return the pe_features dataclass
                assert result is extractor.pe_features

    def test_pe_features_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        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 not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ClickHouseExporter")

                # Should return tuple of (data, column_names, column_type_names)
                assert isinstance(result, tuple)
                assert len(result) == 3
                data, column_names, column_type_names = result
                assert isinstance(data, list)
                assert isinstance(column_names, list)
                assert isinstance(column_type_names, list)
                # Column names and types should match in length
                assert len(column_names) == len(column_type_names)