Haijian Sun

118 papers B 11C 2Misc 2Journal 79Unranked 24
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Wirel. Commun.
Le Xia, Yao Sun, Haijian Sun, Rose Qingyang Hu, Dusit Niyato, Muhammad Ali Imran
2026 J jnl
CoRR
Chengling Xu, Huiwen Zhang, Haijian Sun, Feng Ye
2026 J jnl
IEEE Trans. Wirel. Commun.
Hanwen Zhang, Mingzhe Chen, Alireza Vahid, Feng Ye, Haijian Sun
2026 J jnl
IEEE Trans. Wirel. Commun.
Lihao Zhang, Haijian Sun, Samuel Berweger, Camillo Gentile, Rose Qingyang Hu
2026 J jnl
CoRR
Haijian Sun, Feng Ye
2026 J jnl
IEEE Trans. Cogn. Commun. Netw.
Hong Guo, Yinghui Ye, Haijian Sun, Liqin Shi, Rose Qingyang Hu
2025 J jnl
IEEE Internet Things J.
Xiang Ma, Haijian Sun, Rose Qingyang Hu, Yi Qian
2025 J jnl
CoRR
Paul S. Kudyba, Haijian Sun
2025 J jnl
IEEE Trans. Commun.
Yuhang Yang, Xiaoli Xu, Yong Zeng, Haijian Sun, Rose Qingyang Hu
2025 conf
ICC
Wenye Guo, Qun Wang, Hao Yue, Haijian Sun, Rose Qingyang Hu
2025 J jnl
CoRR
Wenye Guo, Qun Wang, Hao Yue, Haijian Sun, Rose Qingyang Hu
2025 J jnl
CoRR
Hanwen Zhang, Haijian Sun
2025 J jnl
CoRR
Ke Deng, Hanwen Zhang, Jin Lu, Haijian Sun
2025 J jnl
CoRR
Le Xia, Yao Sun, Haijian Sun, Rose Qingyang Hu, Dusit Niyato, Muhammad Ali Imran
2025 J jnl
IEEE Wirel. Commun. Lett.
Shuang Lu, Yinghui Ye, Haijian Sun, Liqin Shi, Rose Qingyang Hu
2025 conf
ICC
Hanwen Zhang, Mingzhe Chen, Alireza Vahid, Feng Ye, Haijian Sun
2025 J jnl
IACR Cryptol. ePrint Arch.
Showkot Hossain, Wenyi Tang, Changhao Chenli, Haijian Sun, Wen-Zhan Song, Seokki Lee, Mic Bowman, Taeho Jung
2025 J jnl
CoRR
Hanzhi Yu, Yuchen Liu, Zhaohui Yang, Haijian Sun, Mingzhe Chen
2025 J jnl
IEEE Internet Things J.
Hanzhi Yu, Yuchen Liu, Zhaohui Yang, Haijian Sun, Mingzhe Chen
2025 J jnl
IEEE Wirel. Commun.
Haijian Sun, Xiang Ma, Rose Qingyang Hu, Randy Christensen
2025 J jnl
CoRR
Lihao Zhang, Zongtan Li, Haijian Sun
2025 J jnl
CoRR
Hong Guo, Yinghui Ye, Haijian Sun, Liqin Shi, Rose Qingyang Hu
2025 J jnl
IEEE Commun. Mag.
Rui Xu, Yinghui Ye, Haijian Sun, Liqin Shi, Guangyue Lu
2025 J jnl
CoRR
Rui Xu, Yinghui Ye, Haijian Sun, Liqin Shi, Guangyue Lu
2025 B conf
GLOBECOM
John Song, Lihao Zhang, Feng Ye, Haijian Sun
2025 J jnl
CoRR
John Song, Lihao Zhang, Feng Ye, Haijian Sun
2024 J jnl
CoRR
Paul S. Kudyba, Jaya Sravani Mandapaka, Weijie Wang, Logan P. McCorkendale, Zachary J. McCorkendale, Mathias Kidane, Haijian Sun, Eric Adams, Kamesh Namuduri, Fraida Fund, Mihail L. Sichitiu, Özgür Özdemir
2024 J jnl
CoRR
Xiang Ma, Haijian Sun, Rose Qingyang Hu, Yi Qian
2024 J jnl
IEEE Trans. Veh. Technol.
Toan-Van Nguyen, Haijian Sun, Hongjie Wang, Rose Qingyang Hu
2024 conf
VTC Fall
Paul S. Kudyba, Qin Lu, Haijian Sun
2024 J jnl
CoRR
Paul S. Kudyba, Qin Lu, Haijian Sun
2024 conf
ICC
Xiang Ma, Qun Wang, Haijian Sun, Rose Qingyang Hu, Yi Qian
2024 J jnl
CoRR
Yuhang Yang, Xiaoli Xu, Yong Zeng, Haijian Sun, Rose Qingyang Hu
2024 conf
VTC Fall
Nazish Tahir, Ramviyas Parasuraman, Haijian Sun
2024 J jnl
CoRR
Nazish Tahir, Ramviyas Parasuraman, Haijian Sun
2024 conf
ICC Workshops
Hanwen Zhang, Haijian Sun, Tianyi He, Weiming Xiang, Rose Qingyang Hu
2024 J jnl
CoRR
Xiang Ma, Yuan Zhou, Hanwen Zhang, Qun Wang, Haijian Sun, Hongjie Wang, Rose Qingyang Hu
2024 J jnl
CoRR
Ethan Zhu, Haijian Sun, Mingyue Ji
2024 J jnl
IEEE Trans. Commun.
Yihan Cang, Ming Chen, Yijin Pan, Zhaohui Yang, Ye Hu, Haijian Sun, Mingzhe Chen
2024 conf
ICC
Lihao Zhang, Haijian Sun, Jin Sun, Ramviyas Parasuraman, Yinghui Ye, Rose Qingyang Hu
2024 J jnl
CoRR
Hanwen Zhang, Mingzhe Chen, Alireza Vahid, Feng Ye, Haijian Sun
2024 J jnl
CoRR
Hanwen Zhang, Mingzhe Chen, Alireza Vahid, Haijian Sun
2024 J jnl
IEEE Commun. Lett.
Alireza Vahid, Haijian Sun, Shih-Chun Lin
2024 J jnl
IEEE Internet Things J.
Wengang Zhou, Liqin Shi, Yinghui Ye, Xi Song, Haijian Sun, Gan Zheng
2024 J jnl
IEEE Wirel. Commun.
Ethan Zhu, Haijian Sun, Mingyue Ji
2024 J jnl
CoRR
Ethan Zhu, Haijian Sun, Mingyue Ji
2024 J jnl
CoRR
Lihao Zhang, Haijian Sun, Samuel Berweger, Camillo Gentile, Rose Qingyang Hu
2024 J jnl
IEEE Trans. Veh. Technol.
Xi Song, Dongsheng Han, Liqin Shi, Haijian Sun, Rose Qingyang Hu
2024 J jnl
IEEE Netw.
Lihao Zhang, Haijian Sun, Yong Zeng, Rose Qingyang Hu
2024 J jnl
CoRR
Lihao Zhang, Haijian Sun, Yong Zeng, Rose Qingyang Hu
2024 Misc conf
ICNC
Lihao Zhang, Haijian Sun, Jin Sun, Rose Qingyang Hu
2024 conf
INFOCOM (Workshops)
Paul S. Kudyba, Haijian Sun
2023 J jnl
CoRR
Guoyu Lu, Sheng Li, Gengchen Mai, Jin Sun, Dajiang Zhu, Lilong Chai, Haijian Sun, Xianqiao Wang, Haixing Dai, Ninghao Liu, Rui Xu, Daniel Petti, Changying Li, Tianming Liu
2023 conf
WiseML@WiSec
Xiang Ma, Haijian Sun, Rose Qingyang Hu, Yi Qian
2023 J jnl
CoRR
Xiang Ma, Haijian Sun, Rose Qingyang Hu, Yi Qian
2023 J jnl
CoRR
Xiang Ma, Qun Wang, Haijian Sun, Rose Qingyang Hu, Yi Qian
2023 J jnl
CoRR
Hanwen Zhang, Haijian Sun, Tianyi He, Weiming Xiang, Rose Qingyang Hu
2023 conf
ICIT
Yuan Zhou, Haijian Sun, Xiang Ma, Rose Qingyang Hu
2023 conf
ICC Workshops
Yihan Cang, Songtao Gao, Yiming Yu, Zhaohui Yang, Yijin Pan, Haijian Sun, Ming Chen
2023 J jnl
CoRR
Lihao Zhang, Haijian Sun, Jin Sun, Ramviyas Parasuraman, Yinghui Ye, Rose Qingyang Hu
2023 J jnl
CoRR
Haijian Sun, Xiang Ma, Rose Qingyang Hu, Randy Christensen
2023 J jnl
CoRR
Rui Xu, Liqin Shi, Yinghui Ye, Haijian Sun, Gan Zheng
2023 J jnl
IEEE Trans. Veh. Technol.
Rui Xu, Liqin Shi, Yinghui Ye, Haijian Sun, Gan Zheng
2023 B conf
GLOBECOM
Hong Guo, Yinghui Ye, Haijian Sun, Liqin Shi
2023 J jnl
CoRR
Fei Dou, Jin Ye, Geng Yuan, Qin Lu, Wei Niu, Haijian Sun, Le Guan, Guoyu Lu, Gengchen Mai, Ninghao Liu, Jin Lu, Zhengliang Liu, Zihao Wu, Chenjiao Tan, Shaochen Xu, Xianqiao Wang, Guoming Li, Lilong Chai, Sheng Li, Jin Sun, Hongyue Sun, Yunli Shao, Changying Li, Tianming Liu, Wenzhan Song
2023 J jnl
CoRR
Lihao Zhang, Haijian Sun, Jin Sun, Rose Qingyang Hu
2023 J jnl
IEEE Internet Things J.
Liqin Shi, Xiaoli Chu, Haijian Sun, Guangyue Lu
2022 C conf
ICCC
Xiaona Gao, Yinghui Ye, Guangyue Lu, Haijian Sun
2022 B conf
GLOBECOM
Xiang Ma, Haijian Sun, Rose Qingyang Hu, Yi Qian
2022 J jnl
CoRR
Xiang Ma, Haijian Sun, Rose Qingyang Hu, Yi Qian
2022 conf
FNWF
Haijian Sun, Chris Ng, Yiming Huo, Rose Qingyang Hu, Ning Wang, Chi-Ming Chen, Kasturi Vasudevan, Jin Yang, Webert Montlouis, Dauda Ayanda, Kumar Vijay Mishra, Kürsat Tekbiyik, Nasir Hussain, Harish Kumar Sahoo, Yang Miao
2022 J jnl
IEEE Commun. Lett.
Zhipeng Liu, Yinghui Ye, Xiaoli Chu, Haijian Sun
2022 J jnl
CoRR
Qun Wang, Haijian Sun, Rose Qingyang Hu, Arupjyoti Bhuyan
2022 J jnl
IEEE Open J. Commun. Soc.
Qun Wang, Haijian Sun, Rose Qingyang Hu, Arupjyoti Bhuyan
2022 conf
VTC Spring
Rui Xu, Yinghui Ye, Haijian Sun, Guangyue Lu
2021 J jnl
IEEE Trans. Cogn. Commun. Netw.
Yongjun Xu, Haijian Sun, Yinghui Ye
2021 J jnl
CoRR
Qun Wang, Han Hu, Haijian Sun, Rose Qingyang Hu
2021 conf
VTC Fall
Xiang Ma, Haijian Sun, Qun Wang, Rose Qingyang Hu
2021 J jnl
CoRR
Xiang Ma, Haijian Sun, Qun Wang, Rose Qingyang Hu
2020 J jnl
CoRR
Haijian Sun, Xiang Ma, Rose Qingyang Hu
2020 J jnl
IEEE Trans. Veh. Technol.
Haijian Sun, Xiang Ma, Rose Qingyang Hu
2020 C conf
ICCC
Qilie Liu, Jianhong Yang, Yongjun Xu, Guoquan Li, Haijian Sun
2020 J jnl
IEEE Access
Toshiaki Koike-Akino, Pu Wang, Milutin Pajovic, Haijian Sun, Philip V. Orlik
2020 conf
SPAWC
Haijian Sun, Pu Wang, Milutin Pajovic, Toshiaki Koike-Akino, Philip V. Orlik, Akinori Taira, Kenji Nakagawa
2020 conf
GLOBECOM (Workshops)
Jianyuan Yu, Pu Wang, Toshiaki Koike-Akino, Ye Wang, Philip V. Orlik, Haijian Sun
2020 J jnl
IEEE Access
Boyang Liu, Jiajia Song, Jin Wang, Haijian Sun, Qun Wang
2020 B conf
GLOBECOM
Xiang Ma, Haijian Sun, Rose Qingyang Hu
2020 J jnl
CoRR
Xiang Ma, Haijian Sun, Rose Qingyang Hu
2020 Misc conf
SEC
Qun Wang, Han Hu, Haijian Sun, Rose Qingyang Hu
2020 J jnl
IEEE Trans. Veh. Technol.
Yinghui Ye, Liqin Shi, Haijian Sun, Rose Qingyang Hu, Guangyue Lu
2020 J jnl
CoRR
Haijian Sun, Qun Wang, Xiang Ma, Yongjun Xu, Rose Qingyang Hu
2019 B conf
GLOBECOM
Milutin Pajovic, Pu Wang, Toshiaki Koike-Akino, Haijian Sun, Philip V. Orlik
2019 B conf
GLOBECOM
Pu Wang, Milutin Pajovic, Toshiaki Koike-Akino, Haijian Sun, Philip V. Orlik
2019 J jnl
IEEE Trans. Veh. Technol.
Haijian Sun, Fuhui Zhou, Rose Qingyang Hu
2019 J jnl
IEEE J. Sel. Areas Commun.
Haijian Sun, Fuhui Zhou, Rose Qingyang Hu, Lajos Hanzo
2018 J jnl
CoRR
Fuhui Zhou, Zheng Chu, Haijian Sun, Rose Qingyang Hu, Lajos Hanzo
2018 J jnl
IEEE J. Sel. Areas Commun.
Fuhui Zhou, Zheng Chu, Haijian Sun, Rose Qingyang Hu, Lajos Hanzo
2018 B conf
GLOBECOM
Fuhui Zhou, Haijian Sun, Zheng Chu, Rose Qingyang Hu
2018 conf
ICC
Fuhui Zhou, Zheng Chu, Haijian Sun, Victor C. M. Leung
2018 J jnl
CoRR
Fuhui Zhou, Zheng Chu, Haijian Sun, Victor C. M. Leung
2018 conf
ICC
Haijian Sun, Fuhui Zhou, Zekun Zhang
2018 J jnl
CoRR
Haijian Sun, Fuhui Zhou, Rose Qingyang Hu, Lajos Hanzo
2018 conf
ICC
Fuhui Zhou, Yongpeng Wu, Haijian Sun, Zheng Chu
2018 J jnl
CoRR
Fuhui Zhou, Yongpeng Wu, Haijian Sun, Zheng Chu
2018 J jnl
IEEE Veh. Technol. Mag.
Haijian Sun, Zekun Zhang, Rose Qingyang Hu, Yi Qian
2017 J jnl
CoRR
Haijian Sun, Zekun Zhang, Rose Qingyang Hu, Yi Qian
2017 J jnl
IEEE J. Sel. Areas Commun.
Zekun Zhang, Haijian Sun, Rose Qingyang Hu
2017 conf
VTC Spring
Haijian Sun, Qun Wang, Shakil Ahmed, Rose Qingyang Hu
2017 B conf
WCNC
Haijian Sun, Qun Wang, Rose Qingyang Hu, Yi Qian
2016 conf
VTC Spring
Haijian Sun, Yiran Xu, Rose Qingyang Hu
2016 conf
EUSIPCO
Yiran Xu, Haijian Sun, Rose Qingyang Hu
2016 conf
VTC Fall
Haijian Sun, Bei Xie, Rose Qingyang Hu, Geng Wu
2016 B conf
GLOBECOM
Zekun Zhang, Haijian Sun, Rose Qingyang Hu, Yi Qian
2015 B conf
GLOBECOM
Yiran Xu, Haijian Sun, Rose Qingyang Hu, Yi Qian
2011 conf
ICDSC
Jeffrey R. Blum, Haijian Sun, Adriana Olmos, Jeremy R. Cooperstock
1999 J jnl
IEEE Trans. Neural Networks
Haijian Sun, Lin Liu, Aike Guo
1998 B conf
ICONIP
Aike Guo, Haijian Sun, Lin Liu
1997 J jnl
Comput. Graph.
Haijian Sun, Lin Liu, Aike Guo
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"
)