Xianzhong Xie

109 papers B 5C 2Misc 1Journal 73Unranked 27
YearRankTypeTitle / Venue / Authors
2025 J jnl
Appl. Intell.
Yi Wan, Junfan Chen, Xiong Yang, Hailong Zhang, Chao Huang, Xianzhong Xie
2025 J jnl
Biomed. Signal Process. Control.
Xianzhong Xie, Mingzhu Zhu, Weijian Chen, Jie Xu, Bingwei He
2024 conf
ISMSI
Lingjie Yi, Xianzhong Xie, Bo Jiang
2024 J jnl
Future Gener. Comput. Syst.
Yi Wan, Xianzhong Xie, Junfan Chen, Kunpeng Xie, Dezhi Yi, Ye Lu, Keke Gai
2024 J jnl
J. Supercomput.
Yi Wan, Lingjie Yi, Bo Jiang, Junfan Chen, Yi Jiang, Xianzhong Xie
2024 J jnl
IEEE Syst. J.
Xiaoyu Ou, Xianzhong Xie, Huabing Lu, Helin Yang
2024 J jnl
Int. J. Distributed Sens. Networks
Lingjie Yi, Xianzhong Xie, Yi Wan, Bo Jiang, Junfan Chen
2024 J jnl
IEEE Trans. Wirel. Commun.
Zhaoyuan Shi, Xianzhong Xie, Huabing Lu, Helin Yang, Zehui Xiong, Jun Cai, Zhiguo Ding
2024 conf
ISMSI
Bo Jiang, Xianzhong Xie, Lingjie Yi
2024 conf
VTC Spring
Shihao Chen, Helin Yang, Liang Xiao, Changyuan Xu, Xianzhong Xie, Wanting Yang, Zehui Xiong
2024 J jnl
IEEE Trans. Wirel. Commun.
Huabing Lu, Xianzhong Xie, Zhaoyuan Shi, Hongjiang Lei, Nan Zhao, Jun Cai
2024 J jnl
J. Syst. Archit.
Yi Wan, Xianzhong Xie, Lingjie Yi, Bo Jiang, Junfan Chen, Yi Jiang
2024 J jnl
IEEE Signal Process. Lett.
Guo-Jun Liao, Lin Zhou, Ran An, Chen Chen, Xianzhong Xie
2023 J jnl
IEEE Trans. Commun.
Zhaoyuan Shi, Huabing Lu, Xianzhong Xie, Helin Yang, Chongwen Huang, Jun Cai, Zhiguo Ding
2023 J jnl
CoRR
Zhaoyuan Shi, Huabing Lu, Xianzhong Xie, Helin Yang, Chongwen Huang, Jun Cai, Zhiguo Ding
2023 J jnl
IEEE Commun. Lett.
Qiu-Fang Lian, Qiwang Chen, Lin Zhou, Yu-Cheng He, Xianzhong Xie
2023 J jnl
IEEE Trans. Wirel. Commun.
Huabing Lu, Xianzhong Xie, Zhaoyuan Shi, Hongjiang Lei, Helin Yang, Jun Cai
2023 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Xianzhong Xie, Mingzhu Zhu, Bingwei He, Jie Xu
2023 J jnl
IEEE Trans. Commun.
Xiaoyu Ou, Xianzhong Xie, Huabing Lu, Helin Yang
2023 J jnl
IEEE Trans. Veh. Technol.
Xianzhong Xie, Min Li, Zhaoyuan Shi, Helin Yang, Qian Huang, Zehui Xiong
2022 J jnl
CoRR
Shu Tang, Yang Wu, Hongxing Qin, Xianzhong Xie, Shuli Yang, Jing Wang
2022 conf
ISMSI
Chang Su, Haoxiang Feng, Xianzhong Xie
2022 conf
PRCV (2)
Shu Tang, Junlin Qiu, Xianzhong Xie, Haiheng Ran, Guoli Zhang
2022 J jnl
IET Signal Process.
Qian Huang, Xianzhong Xie, Hong Tang
2022 Misc conf
HIPC
Chang Su, Linglin Wei, Xianzhong Xie
2022 J jnl
IEEE Trans. Commun.
Zhaoyuan Shi, Xianzhong Xie, Huabing Lu, Helin Yang, Jun Cai, Zhiguo Ding
2022 J jnl
IEEE Trans. Veh. Technol.
Xiaoyu Ou, Xianzhong Xie, Huabing Lu, Helin Yang, Hong Tang
2022 J jnl
IEEE Syst. J.
Xianzhong Xie, Hong Tang, Helin Yang, Qian Huang, Dong Pu
2022 conf
WTS
Kun Du, Xianzhong Xie, Zhaoyuan Shi, Min Li
2022 J jnl
CoRR
Huabing Lu, Xianzhong Xie, Zhaoyuan Shi, Hongjiang Lei, Nan Zhao, Jun Cai
2022 conf
ISMSI
Chang Su, Ya Tan, Xianzhong Xie, Yong Liu
2021 conf
ISMSI
Chang Su, Zongchao Hu, Xianzhong Xie
2021 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Shengdao Wan, Shu Tang, Xianzhong Xie, Jia Gu, Rong Huang, Bin Ma, Lei Luo
2021 B conf
GLOBECOM
Zhaoyuan Shi, Xianzhong Xie, Sahil Garg, Huabing Lu, Helin Yang, Zehui Xiong
2021 J jnl
IEEE Wirel. Commun. Lett.
Zhaoyuan Shi, Xianzhong Xie, Huabing Lu, Helin Yang, Jun Cai
2021 J jnl
CoRR
Zhaoyuan Shi, Xianzhong Xie, Huabing Lu, Helin Yang, Jun Cai, Zhiguo Ding
2021 J jnl
IEEE Internet Things J.
Zhaoyuan Shi, Xianzhong Xie, Huabing Lu, Helin Yang, Michel Kadoch, Mohamed Cheriet
2021 conf
ICSCA
Chang Su, Min Chen, Xianzhong Xie
2021 J jnl
IEEE Commun. Lett.
Xianzhong Xie, Xiaoyu Ou, Huabing Lu, Qian Huang
2021 J jnl
Digit. Signal Process.
Weijia Lei, Weihan Zhang, Miaomiao Yang, Hongjiang Lei, Xianzhong Xie
2021 conf
AICCC
Chang Su, Bin Gong, Xianzhong Xie
2021 J jnl
EURASIP J. Wirel. Commun. Netw.
Xianzhong Xie, Min Li, Zhaoyuan Shi, Hong Tang, Qian Huang
2021 J jnl
Signal Image Video Process.
Shangbo Zhou, Xia Wu, Ying Qi, Shuyue Luo, Xianzhong Xie
2020 B conf
IWCMC
Zhaoyuan Shi, Xianzhong Xie, Michel Kadoch, Mohamed Cheriet
2020 J jnl
CoRR
Huabing Lu, Xianzhong Xie, Zhaoyuan Shi, Hongjiang Lei, Helin Yang, Jun Cai
2020 J jnl
IEEE Syst. J.
Helin Yang, Xianzhong Xie
2020 J jnl
IEEE Trans. Wirel. Commun.
Helin Yang, Wen-De Zhong, Chen Chen, Arokiaswami Alphones, Pengfei Du, Sheng Zhang, Xianzhong Xie
2020 J jnl
IEEE Internet Things J.
Helin Yang, Wen-De Zhong, Chen Chen, Arokiaswami Alphones, Xianzhong Xie
2020 C conf
ICCC
Xiping Chen, Xianzhong Xie, Zhaoyuan Shi, Zishen Fan
2020 J jnl
IEEE Syst. J.
Helin Yang, Xianzhong Xie
2020 J jnl
IEEE Syst. J.
Huabing Lu, Xianzhong Xie, Zhaoyuan Shi, Helin Yang
2020 J jnl
IEEE Access
Chang Su, Zongchao Hu, Xianzhong Xie
2020 conf
ISMSI
Chang Su, Tonglu Zhang, Xianzhong Xie
2020 J jnl
Multim. Tools Appl.
Changjiang Jiang, Hantao Li, Shangbo Zhou, Zihan Zhang, Jim Yu, Long Chen, Xianzhong Xie
2020 J jnl
IEEE Trans. Ind. Informatics
Helin Yang, Arokiaswami Alphones, Wen-De Zhong, Chen Chen, Xianzhong Xie
2020 J jnl
IEEE Netw.
Helin Yang, Xianzhong Xie, Michel Kadoch
2020 J jnl
IEEE Trans. Veh. Technol.
Huabing Lu, Xianzhong Xie, Zhaoyuan Shi, Jun Cai
2020 B conf
IWCMC
Huabing Lu, Xianzhong Xie, Zhaoyuan Shi, Michel Kadoch, Mohamed Cheriet, Jun Cai
2020 conf
INFOCOM Workshops
Chang Su, Jin Wang, Xianzhong Xie
2020 J jnl
EURASIP J. Wirel. Commun. Netw.
Qian Huang, Xianzhong Xie, Mohamed Cheriet
2020 conf
ISTT
Hong Tang, Xianzhong Xie, Min Li, Qian Huang
2019 J jnl
IEEE Access
Zhaoyuan Shi, Xianzhong Xie, Huabing Lu
2019 J jnl
IEEE Trans. Veh. Technol.
Helin Yang, Xianzhong Xie, Michel Kadoch
2019 B conf
IWCMC
Chang Su, Pengfei Wu, Xianzhong Xie
2019 J jnl
IEEE Netw.
Qian Huang, Xianzhong Xie, Hong Tang, Tao Hong, Michel Kadoch, Kim Khoa Nguyen, Mohamed Cheriet
2019 J jnl
IEEE Access
Shu Tang, Wanpeng Zheng, Xianzhong Xie, Tao He, Peng Yang, Lei Luo, Zhixing Li, Yu Hu, Hao Zhao
2019 J jnl
IEEE Access
Chang Su, Qiuli Zhou, Xianzhong Xie, Dezheng Wu
2019 conf
ICSCA
Chang Su, Hao Li, Xianzhong Xie
2019 ed.
RACS
Chih-Cheng Hung, Qianbin Chen, Xianzhong Xie, Christian Esposito, Jun Huang, Juw Won Park, Qinghua Zhang
2019 conf
Innovate-Data
Chang Su, Ningning Liu, Xianzhong Xie, Shaowen Peng
2019 J jnl
计算机科学
Chang Su, Pengfei Wu, Xianzhong Xie, Ning Li
2019 J jnl
计算机科学
Jie Chen, Xianzhong Xie, Qian Huang, Jia Li
2019 J jnl
计算机科学
Chang Su, Shaowen Peng, Xianzhong Xie, Ningning Liu
2018 J jnl
Entropy
Xiaoran Lin, Shangbo Zhou, Hongbin Tang, Ying Qi, Xianzhong Xie
2018 J jnl
Int. J. Distributed Sens. Networks
Xianzhong Xie, Chuanwen Li, Shuangguo Cheng, Helin Yang, Shu Tang
2018 conf
SPAC
Bin Ma, Qianqian Zhang, Xianzhong Xie
2018 J jnl
IEEE Access
Xianzhong Xie, Jiujiu Chen, Yuxi Fu
2018 J jnl
Signal Process. Image Commun.
Shu Tang, Xianzhong Xie, Ming Xia, Lei Luo, Peisong Liu, Zhixing Li
2018 B conf
PRIMA
Shaowen Peng, Xianzhong Xie, Tsunenori Mine, Chang Su
2018 conf
WOCC
Hong Tang, Xianzhong Xie, Jiujiu Chen
2017 conf
SPAC
Ming Xia, Shu Tang, Xianzhong Xie
2017 J jnl
Int. J. Auton. Adapt. Commun. Syst.
Xianzhong Xie, Helin Yang, Xiaofeng Hu, Bin Ma
2017 J jnl
IEEE Access
Bin Ma, Dong Wang, Shuangguo Cheng, Xianzhong Xie
2017 J jnl
IEEE Access
Xianzhong Xie, Helin Yang, Athanasios V. Vasilakos
2017 J jnl
CoRR
Xianzhong Xie, Helin Yang, Athanasios V. Vasilakos
2017 conf
SPAC
Shu Tang, Xianzhong Xie, Xiao Luan, Ming Xia, Peisong Liu
2016 J jnl
Wirel. Pers. Commun.
Helin Yang, Xianzhong Xie, Athanasios V. Vasilakos
2016 J jnl
IEEE Trans. Veh. Technol.
Helin Yang, Xianzhong Xie, Athanasios V. Vasilakos
2015 conf
WI-IAT (1)
Chang Su, Xiaotao Jia, Xianzhong Xie, Yue Yu
2015 C conf
ISCC
Xianzhong Xie, Yuanyuan Liu, Weijia Lei
2015 J jnl
Int. J. Distributed Sens. Networks
Helin Yang, Xianzhong Xie, Athanasios V. Vasilakos
2015 J jnl
J. Commun.
Helin Yang, Xianzhong Xie
2014 J jnl
J. Commun.
Xianzhong Xie, Ting Song, Bin Ma, Xiaofeng Hu
2014 J jnl
J. Comput.
Xianzhong Xie, Lu He, Helin Yang, Bin Ma
2014 conf
ICOIN
Yannan Zou, Xianzhong Xie, Xiaofeng Hu, Ting Song
2014 J jnl
J. Commun. Networks
Xianzhong Xie, Helin Yang, Athanasios V. Vasilakos, Lu He
2014 J jnl
Int. J. Distributed Sens. Networks
Xianzhong Xie, Xiaofeng Hu, Bin Ma, Ting Song
2014 J jnl
Wirel. Pers. Commun.
Bin Ma, Xianzhong Xie, Xiaofeng Liao
2014 conf
VTC Spring
Xianzhong Xie, Helin Yang, Weijia Lei, Bin Ma
2013 J jnl
Int. J. Wirel. Mob. Comput.
Weijia Lei, Xianzhong Xie, Xiangming Li
2013 J jnl
J. Softw.
Bin Ma, Xiaofeng Liao, Xianzhong Xie
2012 conf
BMEI
Bin Ma, Xiaofeng Liao, Xianzhong Xie
2011 J jnl
IEEE Wirel. Commun.
Xianzhong Xie, Bo Rong, Tao Zhang, Weijia Lei
2011 conf
WCSP
Huifeng Liu, Weijia Lei, Xianzhong Xie
2010 J jnl
KSII Trans. Internet Inf. Syst.
Weijia Lei, Xianzhong Xie, Xiangming Li
2010 J jnl
J. Commun.
Weijia Lei, Xianzhong Xie, Guangjun Li
2008 conf
AICT
Qinghua Chen, Xianzhong Xie
2008 conf
FGCN (2)
Hai Hu, Yutang Min, Xianzhong Xie, Furong Wang, Jun Yuan
2007 conf
EUROMICRO-SEAA
Jie Hu, Xianzhong Xie, Xing Xu
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"
)