Man-Fai Leung

69 papers A* 1B 5C 4Journal 56Unranked 3
YearRankTypeTitle / Venue / Authors
2026 A* conf
WWW
Rongzheng Wang, Shuang Liang, Qizhi Chen, Yihong Huang, Muquan Li, Yizhuo Ma, Dongyang Zhang, Ke Qin, Man-Fai Leung
2026 J jnl
Intell. Syst. Appl.
Pritam Chakraborty, Anjan Bandyopadhyay, Kushagra Agrawal, Jin Zhang, Man-Fai Leung
2026 J jnl
IEEE Trans. Signal Inf. Process. over Networks
Qianlong Zhou, Yuqi Yang, Hangjun Che, Xing He, Man-Fai Leung, Shahid Mumtaz
2026 J jnl
IEEE Trans. Consumer Electron.
Chaozhi Yu, Zhizhe Lin, Hongnan Cheng, Chunjie Cao, Teng Zhou, Man-Fai Leung
2026 J jnl
Future Gener. Comput. Syst.
Dongmin Li, Xiurui Xie, Dongyang Zhang, Athanasios V. Vasilakos, Man-Fai Leung
2026 J jnl
Neural Networks
Yiran Cai, Hangjun Che, Wei Guo, Baicheng Pan, Man-Fai Leung
2026 J jnl
IEEE Trans. Knowl. Data Eng.
Liang Peng, Yixuan Ye, Cheng Liu, Hangjun Che, Man-Fai Leung, Si Wu, Hau-San Wong
2025 J jnl
IEEE Trans. Signal Inf. Process. over Networks
Xuanhao Yang, Hangjun Che, Man-Fai Leung, Cheng Liu, Shiping Wen
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Cheng Liu, Rui Li, Hangjun Che, Man-Fai Leung, Si Wu, Zhiwen Yu, Hau-San Wong
2025 J jnl
Neurocomputing
Liaqat Ali, Man-Fai Leung, Muhammad Asghar Khan, Redhwan Nour, Yakubu Imrana, Athanasios V. Vasilakos
2025 J jnl
IEEE Trans. Consumer Electron.
Zhenyu Wu, Xuxu Ma, Fei Chang, Chuandong Li, Zhen Luo, Man-Fai Leung
2025 J jnl
Axioms
Shiju Yang, Hongsen He, Man-Fai Leung, Yiting Tang, Li Yan
2025 J jnl
IEEE Internet Things J.
Hangjun Che, Qianlong Zhou, Xuanhao Yang, You Zhao, Man-Fai Leung
2025 J jnl
IEEE Trans. Consumer Electron.
Man-Fai Leung, Nian Zhang, Guo Chen, Junjian Huang
2025 J jnl
IEEE Trans. Comput. Soc. Syst.
Man-Fai Leung, Shiping Wen, Wenqi Fan, Tingwen Huang
2025 J jnl
Appl. Intell.
Wei Guo, Hangjun Che, Man-Fai Leung
2025 J jnl
IEEE Trans. Consumer Electron.
Danqi Cai, Kunwei Chen, Zhizhe Lin, Duo Li, Teng Zhou, Man-Fai Leung
2025 J jnl
IEEE Trans. Consumer Electron.
Youyi Song, Yuanlin Liu, Zhizhe Lin, Jinglin Zhou, Duo Li, Teng Zhou, Man-Fai Leung
2025 J jnl
IEEE Trans. Comput. Biol. Bioinform.
Hangjun Che, Wei Guo, Man-Fai Leung, Yuting Cao, Cheng Liu
2025 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Hangjun Che, Chenglu Li, Man-Fai Leung, Deqiang Ouyang, Xiangguang Dai, Shiping Wen
2025 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Qianlong Zhou, Hangjun Che, Wei Guo, Xing He, Man-Fai Leung, Shiping Wen
2025 J jnl
Inf. Fusion
Wei Guo, Hangjun Che, Man-Fai Leung, Long Jin, Shiping Wen
2025 J jnl
Big Data Min. Anal.
Jiyang Yu, Hangjun Che, Man-Fai Leung, Cheng Liu, Wenhui Wu, Zheng Yan
2025 C conf
ISNN
M. R. Ezilarasan, V. Muthu, G. Kavitha, Man-Fai Leung, Jin Zhang, Xiangguang Dai, Yuming Feng
2025 J jnl
Inf. Fusion
Xuanhao Yang, Hangjun Che, Man-Fai Leung
2025 J jnl
CoRR
Liang Peng, Yixuan Ye, Cheng Liu, Hangjun Che, Man-Fai Leung, Si Wu, Hau-San Wong
2025 J jnl
IEEE Trans. Ind. Informatics
Xuanhao Yang, Hangjun Che, Man-Fai Leung, Shiping Wen
2025 J jnl
Comput. Mater. Continua
Darthy Rabecka V, J. Britto Pari, Man-Fai Leung
2025 J jnl
Digit. Signal Process.
Youyang Tao, Hangjun Che, Chenglu Li, Baicheng Pan, Man-Fai Leung
2024 J jnl
Big Data Cogn. Comput.
Govindan Rajesh, Nandagopal Malarvizhi, Man-Fai Leung
2024 J jnl
Internet Things
Wei Guo, Hangjun Che, Man-Fai Leung, Zheng Yan
2024 J jnl
Inf.
M. R. Ezilarasan, Man-Fai Leung
2024 J jnl
Signal Process.
Yuzhu Dong, Hangjun Che, Man-Fai Leung, Cheng Liu, Zheng Yan
2024 C conf
ISNN
Faidat Adekemi Akorede, Man-Fai Leung, Hangjun Che
2024 J jnl
IEEE Trans. Knowl. Data Eng.
Cheng Liu, Rui Li, Hangjun Che, Man-Fai Leung, Si Wu, Zhiwen Yu, Hau-San Wong
2024 J jnl
IEEE Trans. Consumer Electron.
Baicheng Pan, Chuandong Li, Hangjun Che, Man-Fai Leung, Keping Yu
2024 C conf
ISNN
M. R. Ezilarasan, D. Preethi, Man-Fai Leung, Hangjun Che, Xiangguang Dai
2024 J jnl
Inf. Fusion
Yiran Cai, Hangjun Che, Baicheng Pan, Man-Fai Leung, Cheng Liu, Shiping Wen
2024 J jnl
IEEE Trans. Comput. Soc. Syst.
Xinyu Pu, Hangjun Che, Baicheng Pan, Man-Fai Leung, Shiping Wen
2024 J jnl
Neural Networks
Xuanhao Yang, Hangjun Che, Man-Fai Leung, Shiping Wen
2024 J jnl
IEEE Trans. Comput. Soc. Syst.
Hangjun Che, Baicheng Pan, Man-Fai Leung, Yuting Cao, Zheng Yan
2024 J jnl
IEEE Trans. Consumer Electron.
Wei Guo, Hangjun Che, Man-Fai Leung
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Duo Li, Junqing Tang, Bei Zhou, Peng Cao, Jia Hu, Man-Fai Leung, Yonggang Wang
2023 J jnl
Sensors
Abayomi Bello, Sin Chun Ng, Man-Fai Leung
2023 J jnl
Appl. Intell.
Xuanhao Yang, Hangjun Che, Man-Fai Leung, Cheng Liu
2023 J jnl
Complex Intell. Syst.
Man-Chung Yuen, Sin Chun Ng, Man-Fai Leung, Hangjun Che
2023 J jnl
Neural Comput. Appl.
Keyi Chen, Hangjun Che, Xinqi Li, Man-Fai Leung
2023 J jnl
J. Circuits Syst. Comput.
M. R. Ezilarasan, J. Britto Pari, Man-Fai Leung
2023 conf
ICACI
Wei Guo, Hangjun Che, Man-Fai Leung, Nankun Mu, Xiangguang Dai, Yuming Feng
2023 J jnl
Inf. Sci.
Chenglu Li, Hangjun Che, Man-Fai Leung, Cheng Liu, Zheng Yan
2023 J jnl
Memetic Comput.
Zhenkun Wang, Man-Fai Leung, Hangjun Che, Carlos A. Coello Coello
2022 J jnl
Complex Intell. Syst.
Man-Chung Yuen, Sin Chun Ng, Man-Fai Leung, Hangjun Che
2022 J jnl
Neural Networks
Man-Fai Leung, Jun Wang
2022 J jnl
Neural Networks
Man-Fai Leung, Jun Wang, Hangjun Che
2022 J jnl
IEEE Trans. Cybern.
Man-Fai Leung, Jun Wang, Duan Li
2022 J jnl
Frontiers Comput. Neurosci.
Bhuvaneshwari Chakravarthi, Sin Chun Ng, M. R. Ezilarasan, Man-Fai Leung
2021 J jnl
Cybern. Syst.
Man-Chung Yuen, Sin Chun Ng, Man-Fai Leung
2021 J jnl
Int. J. Artif. Intell. Tools
Chengchen Dai, Hangjun Che, Man-Fai Leung
2021 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Man-Fai Leung, Jun Wang
2021 conf
IEEE BigData
Andrew Kwok-Fai Lui, Yin-Hei Chan, Man-Fai Leung
2020 J jnl
IEEE Access
Man-Fai Leung, Carlos Artemio Coello Coello, Chi-Chung Cheung, Sin Chun Ng, Andrew Kwok-Fai Lui
2020 B conf
CEC
Man-Fai Leung, Sin Chun Ng
2019 conf
ISNN (1)
Man-Fai Leung, Jun Wang
2018 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Man-Fai Leung, Jun Wang
2018 C conf
ISNN
Man-Fai Leung, Jun Wang
2017 B conf
CEC
Hiu-Hin Tam, Sin Chun Ng, Andrew K. Lui, Man-Fai Leung
2016 B conf
CEC
Hiu-Hin Tam, Man-Fai Leung, Zhenkun Wang, Sin Chun Ng, Chi-Chung Cheung, Andrew K. Lui
2015 B conf
CEC
Man-Fai Leung, Sin Chun Ng, Chi-Chung Cheung, Andrew K. Lui
2014 B conf
IEEE Congress on Evolutionary Computation
Man-Fai Leung, Sin Chun Ng, Chi-Chung Cheung, Andrew K. Lui
tests/conftest.py
← Index tests/conftest.py python
"""
Pytest configuration and shared fixtures for REDB unit tests.
"""
import os
import sys
import pytest
import logging
import tempfile
import hashlib
from unittest.mock import Mock, MagicMock, patch
from pathlib import Path

# Add the project root to the path
sys.path.insert(0, str(Path(__file__).parent.parent))

# Test files directory
TEST_FILES_DIR = Path(__file__).parent.parent / "test_files"


# ============================================================================
# Logger Fixtures
# ============================================================================

@pytest.fixture
def mock_logger():
    """Create a mock logger for testing."""
    logger = Mock()
    logger.debug = Mock()
    logger.info = Mock()
    logger.warning = Mock()
    logger.error = Mock()
    return logger


@pytest.fixture
def real_logger():
    """Create a real logger for testing with debug output."""
    logger = logging.getLogger("test_logger")
    logger.setLevel(logging.DEBUG)
    if not logger.handlers:
        handler = logging.StreamHandler()
        handler.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(levelname)s - %(message)s')
        handler.setFormatter(formatter)
        logger.addHandler(handler)
    return logger


# ============================================================================
# Test Binary Files Fixtures
# ============================================================================

@pytest.fixture
def elf_binary_path():
    """Path to the ELF test binary."""
    path = TEST_FILES_DIR / "hello"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def elf_advanced_binary_path():
    """Path to the advanced ELF test binary."""
    path = TEST_FILES_DIR / "hello_advanced"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def pe_binary_path():
    """Path to the PE test binary (.NET PE)."""
    path = TEST_FILES_DIR / "d8637bdbcfc9112fcb1f0167b398e771"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def elf_binary_content(elf_binary_path):
    """Read the ELF test binary content."""
    with open(elf_binary_path, "rb") as f:
        return f.read()


@pytest.fixture
def pe_binary_content(pe_binary_path):
    """Read the PE test binary content."""
    with open(pe_binary_path, "rb") as f:
        return f.read()


# ============================================================================
# Temporary Files Fixtures
# ============================================================================

@pytest.fixture
def temp_binary_file():
    """Create a temporary binary file for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".bin") as f:
        # Write some test data
        f.write(b"\x7fELF" + b"\x00" * 100 + b"test data")
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


@pytest.fixture
def temp_text_file():
    """Create a temporary text file for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".txt", mode="w") as f:
        f.write("This is a test file with some text content.")
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


@pytest.fixture
def temp_pe_like_file():
    """Create a temporary file with PE-like header for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".exe") as f:
        # MZ header
        f.write(b"MZ" + b"\x00" * 58)
        # e_lfanew pointing to PE header at offset 64
        f.write(b"\x40\x00\x00\x00")
        # PE signature at offset 64
        f.write(b"PE\x00\x00")
        # Minimal COFF header (20 bytes)
        f.write(b"\x4c\x01")  # Machine (i386)
        f.write(b"\x01\x00")  # NumberOfSections
        f.write(b"\x00" * 16)  # Rest of COFF header
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


# ============================================================================
# Mock Exporter Fixtures
# ============================================================================

@pytest.fixture
def mock_print_exporter(mock_logger):
    """Create a mock PrintExporter."""
    from redb.extractors.database_exporters import PrintExporter
    exporter = PrintExporter(mock_logger, "test_index")
    return exporter


@pytest.fixture
def mock_elasticsearch_exporter(mock_logger):
    """Create a mock ElasticsearchExporter with mocked client."""
    with patch('redb.settings.get_elasticsearch_client') as mock_client:
        mock_client.return_value = Mock()
        from redb.extractors.database_exporters import ElasticsearchExporter
        exporter = ElasticsearchExporter(mock_logger, "test_index")
        return exporter


@pytest.fixture
def mock_clickhouse_exporter(mock_logger):
    """Create a mock ClickHouseExporter with mocked client."""
    with patch('redb.settings.create_clickhouse_client') as mock_client:
        mock_client.return_value = Mock()
        from redb.extractors.database_exporters import ClickHouseExporter
        exporter = ClickHouseExporter(mock_logger, "test_index", client=Mock())
        return exporter


# ============================================================================
# Mock Settings Fixtures
# ============================================================================

@pytest.fixture
def mock_settings():
    """Mock the redb.settings module."""
    with patch.multiple(
        'redb.settings',
        ELASTIC_BINARIES_COLLECTION="test_collection",
        get_elasticsearch_client=Mock(return_value=Mock()),
        create_clickhouse_client=Mock(return_value=Mock()),
    ):
        yield


# ============================================================================
# Hash Fixtures
# ============================================================================

@pytest.fixture
def known_hashes(elf_binary_content):
    """Compute known hashes for the ELF test binary."""
    return {
        'md5': hashlib.md5(elf_binary_content).hexdigest(),
        'sha1': hashlib.sha1(elf_binary_content).hexdigest(),
        'sha256': hashlib.sha256(elf_binary_content).hexdigest(),
    }


@pytest.fixture
def pe_known_hashes(pe_binary_content):
    """Compute known hashes for the PE test binary."""
    return {
        'md5': hashlib.md5(pe_binary_content).hexdigest(),
        'sha1': hashlib.sha1(pe_binary_content).hexdigest(),
        'sha256': hashlib.sha256(pe_binary_content).hexdigest(),
    }


# ============================================================================
# Sample Data Fixtures
# ============================================================================

@pytest.fixture
def sample_binary_data():
    """Sample binary data for entropy and hash testing."""
    return b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" * 16


@pytest.fixture
def high_entropy_data():
    """High entropy random-like data for testing."""
    import random
    random.seed(42)  # Reproducible
    return bytes(random.randint(0, 255) for _ in range(256))


@pytest.fixture
def low_entropy_data():
    """Low entropy repetitive data for testing."""
    return b"\x00" * 256


# ============================================================================
# PE Object Fixtures
# ============================================================================

@pytest.fixture
def pe_object(pe_binary_path):
    """Create a pefile PE object for testing."""
    import pefile
    try:
        pe = pefile.PE(pe_binary_path)
        yield pe
        pe.close()
    except Exception as e:
        pytest.skip(f"Failed to parse PE file: {e}")


# ============================================================================
# ELF Object Fixtures
# ============================================================================

@pytest.fixture
def elf_object(elf_binary_path):
    """Create an ELFFile object for testing."""
    from elftools.elf.elffile import ELFFile
    try:
        with open(elf_binary_path, 'rb') as f:
            elf = ELFFile(f)
            # We need to keep the file open for ELFFile to work
            yield elf
    except Exception as e:
        pytest.skip(f"Failed to parse ELF file: {e}")


# ============================================================================
# Dataclass Fixtures
# ============================================================================

@pytest.fixture
def sample_hash_dataclass():
    """Create a sample Hash dataclass."""
    from redb.models.dataclasses import Hash
    return Hash(
        md5="d41d8cd98f00b204e9800998ecf8427e",
        sha1="da39a3ee5e6b4b0d3255bfef95601890afd80709",
        sha256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    )


@pytest.fixture
def sample_hashes_dataclass():
    """Create a sample Hashes dataclass."""
    from redb.models.dataclasses import Hashes
    return Hashes(
        md5="d41d8cd98f00b204e9800998ecf8427e",
        sha1="da39a3ee5e6b4b0d3255bfef95601890afd80709",
        sha256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        ssdeep_hash="3::",
        tlsh_hash=""
    )


@pytest.fixture
def sample_basic_properties():
    """Create a sample BasicProperties dataclass."""
    from redb.models.dataclasses import BasicProperties
    return BasicProperties(
        filename="test.exe",
        sample_name="test.exe",
        filesize=1024,
        filetype="PE32 executable",
        filetype_mime="application/x-dosexec",
        filetype_magika="pebin",
        file_entropy=6.5
    )


# ============================================================================
# Utility Functions for Tests
# ============================================================================

def compute_entropy(data):
    """Compute entropy of data for verification in tests."""
    import math
    from collections import Counter

    if not data:
        return 0.0

    if isinstance(data, str):
        counts = Counter(data)
        frequencies = (i / len(data) for i in counts.values())
        return -sum(f * math.log(f, 2) for f in frequencies)
    else:
        occurrences = Counter(bytearray(data))
        entropy = 0
        for x in occurrences.values():
            p_x = float(x) / len(data)
            entropy -= p_x * math.log(p_x, 2)
        return entropy


# Make the function available as a fixture
@pytest.fixture
def entropy_calculator():
    """Return the entropy calculation function."""
    return compute_entropy


# ============================================================================
# Skip Markers
# ============================================================================

# Mark tests that require external tools
requires_die = pytest.mark.skipif(
    not os.path.exists("/usr/bin/diec") and not os.path.exists("/usr/local/bin/diec"),
    reason="Detect It Easy (diec) not installed"
)

requires_capa = pytest.mark.skipif(
    not os.path.exists("/usr/bin/capa") and not os.path.exists("/usr/local/bin/capa"),
    reason="capa not installed"
)

requires_floss = pytest.mark.skipif(
    not os.path.exists("/usr/bin/floss") and not os.path.exists("/usr/local/bin/floss"),
    reason="floss not installed"
)