Xiaojun Wang

110 papers A* 1A 3B 7C 6Misc 1Journal 65Unranked 27
YearRankTypeTitle / Venue / Authors
2024 J jnl
IEEE Trans. Cogn. Commun. Netw.
Xiaojuan Wang, Zikui Lu, Xinlei Wang, Mingshu He, Xiaojun Wang
2023 J jnl
KSII Trans. Internet Inf. Syst.
Chao Ma, Xiaojun Jin, Song Luo, Yifei Wei, Xiaojun Wang
2023 J jnl
Sensors
Liu Yang, Yifei Wei, Xiaojun Wang
2023 J jnl
KSII Trans. Internet Inf. Syst.
Xinzhu Liu, Zhiguo Qu, Xiubo Chen, Xiaojun Wang
2022 J jnl
Clust. Comput.
Yongli Tang, Yanpeng Ba, Lixiang Li, Xiaojun Wang, Xixi Yan
2022 J jnl
Entropy
Gang Xu, Tianai Zhou, Xiu-Bo Chen, Xiaojun Wang
2021 J jnl
Adv. Comput.
Jinxia Yu, Huanhuan Lian, Zongqu Zhao, Yongli Tang, Xiaojun Wang
2021 J jnl
Sensors
Zhonghui Pei, Xiaojun Wang, Zhen Lei, Hongjiang Zheng, Luyao Du, Wei Chen
2021 B conf
GLOBECOM
Yousheng Zhou, Yang Luo, Mohammad S. Obaidat, Pandi Vijayakumar, Xiaojun Wang
2021 B conf
IWQoS
Wenquan Xu, Xuefeng Ji, Chuwen Zhang, Beichuan Zhang, Yu Wang, Xiaojun Wang, Yunsheng Wang, Jianping Wang, Bin Liu
2020 J jnl
Int. J. Embed. Syst.
Yinxiang Qu, Yifei Wei, Mei Song, Dan Liu, Xiaojun Wang
2020 J jnl
Quantum Inf. Process.
Zhiguo Qu, Siyi Chen, Xiaojun Wang
2020 J jnl
Int. J. Sens. Networks
Zhiguo Qu, Zhexi Zhang, Mingming Wang, Shengyao Wu, Xiaojun Wang
2020 J jnl
Int. J. Comput. Sci. Eng.
Li Li, Yifei Wei, Mei Song, Xiaojun Wang
2020 J jnl
IACR Cryptol. ePrint Arch.
Mingxing Luo, Xiaojun Wang
2019 J jnl
IEEE Access
Zeeshan Haider, Khalid Javeed, Mei Song, Xiaojun Wang
2019 J jnl
Multim. Tools Appl.
Zhiguo Qu, Zhenwen Cheng, Wenjie Liu, Xiaojun Wang
2019 J jnl
Int. J. Sens. Networks
Yifei Wei, Bo Gu, Yali Wang, Mei Song, Xiaojun Wang
2019 J jnl
Int. J. Sens. Networks
Yifei Wei, Li Li, Zihan Jia, Xiaojun Wang
2019 J jnl
Trans. Emerg. Telecommun. Technol.
Ali Ghiasian, Pengcheng Liu, Xiaojun Wang, Martin Collier
2019 B conf
GLOBECOM
Xiaowei Liu, Yifei Wei, Bo Gu, Mei Song, Xiaojun Wang
2019 conf
NMIC@ICDCS
Xuefeng Ji, Wenquan Xu, Chuwen Zhang, Tong Yun, Gong Zhang, Xiaojun Wang, Yunsheng Wang, Bin Liu
2019 J jnl
IEEE Access
Zhiguo Qu, Zhenwen Cheng, Xiaojun Wang
2019 J jnl
IEEE Trans. Green Commun. Netw.
Pengcheng Liu, Saqib Rasool Chaudhry, Tao Huang, Xiaojun Wang, Martin Collier
2019 J jnl
IEEE Access
Pengcheng Liu, Saqib Rasool Chaudhry, Xiaojun Wang, Martin Collier
2019 J jnl
IEEE Access
Zhiguo Qu, Zhengyan Li, Gang Xu, Shengyao Wu, Xiaojun Wang
2019 J jnl
J. Circuits Syst. Comput.
Yasir Ali Shah, Khalid Javeed, Shoaib Azmat, Xiaojun Wang
2018 J jnl
Sensors
Yongli Tang, Huanhuan Lian, Lixiang Li, Xiaojun Wang, Xixi Yan
2018 J jnl
Int. J. Circuit Theory Appl.
Yasir Ali Shah, Khalid Javeed, Shoaib Azmat, Xiaojun Wang
2018 J jnl
Mob. Inf. Syst.
Yousheng Zhou, Siling Liu, Min Xiao, Shaojiang Deng, Xiaojun Wang
2018 J jnl
Neural Comput. Appl.
Chao Tong, Larry R. Medsker, Long Cheng, Amir Jafari, Xiaojun Wang
2018 J jnl
Quantum Inf. Process.
Le Sun, Shengyao Wu, Zhiguo Qu, Mingming Wang, Xiaojun Wang
2017 conf
ICC Workshops
Pengcheng Liu, Ali Ghiasian, Xiaojun Wang, Martin Collier
2017 J jnl
Sensors
Yousheng Zhou, Xiaofeng Zhao, Yi Jiang, Fengjun Shang, Shaojiang Deng, Xiaojun Wang
2017 J jnl
Comput. Electr. Eng.
Yousheng Zhou, Feng Wang, Fei Tang, Xiaojun Wang
2017 J jnl
Quantum Inf. Process.
Zhiguo Qu, Shengyao Wu, Mingming Wang, Le Sun, Xiaojun Wang
2017 conf
HCC
Zhiqiang Zhang, Yifei Wei, Bo Gu, Xiaojun Wang, Mei Song
2017 J jnl
J. Commun. Networks
Li Li, Yifei Wei, Mei Song, Xiaojun Wang
2017 J jnl
Microprocess. Microsystems
Khalid Javeed, Xiaojun Wang, Mike Scott
2017 J jnl
Int. J. Circuit Theory Appl.
Khalid Javeed, Xiaojun Wang
2017 J jnl
Quantum Inf. Process.
Mingxing Luo, Hui-Ran Li, Hong Lai, Xiaojun Wang
2016 J jnl
Int. J. Sens. Networks
Shushan Hu, Cunchen Tang, Feng Liu, Xiaojun Wang
2016 J jnl
Int. J. Sens. Networks
Shushan Hu, Feng Liu, Cunchen Tang, Xiaojun Wang
2016 J jnl
Wirel. Commun. Mob. Comput.
Yousheng Zhou, Guangxia Xu, Yong Wang, Xiaojun Wang
2016 conf
ICCCS (1)
Khalid Javeed, Daniel Irwin, Xiaojun Wang
2016 J jnl
Wirel. Commun. Mob. Comput.
Chen Sun, Weidong Wang, Yinghai Zhang, Xiaojun Wang
2016 J jnl
Int. J. Reconfigurable Comput.
Khalid Javeed, Xiaojun Wang
2016 conf
HCC
Jianbin Chuan, Yifei Wei, Yi Man, Mei Song, Siyuan Sun, Xiaojun Wang
2016 conf
HCC
Feng Guo, Mei Song, Yifei Wei, Luigi Sambolino, Pengcheng Liu, Xiaojun Wang, Martin Collier
2016 J jnl
J. Commun. Networks
Yifei Wei, Xiaojun Wang, Leonardo Fialho, Roberto Bruschi, Olga Ormond, Martin Collier
2016 J jnl
Sci. China Inf. Sci.
Feng Wang, Mingxing Luo, Hui-Ran Li, Zhiguo Qu, Xiaojun Wang
2016 J jnl
Sci. China Inf. Sci.
Feng Wang, Mingxing Luo, Hui-Ran Li, Zhiguo Qu, Xiaojun Wang
2016 J jnl
IACR Cryptol. ePrint Arch.
Khalid Javeed, Xiaojun Wang
2016 J jnl
IEEE J. Sel. Areas Commun.
Tian Song, Zheng Jiang, Yu Wei, Xiangjun Shi, Xiaowei Ma, Olga Ormond, Martin Collier, Xiaojun Wang
2015 C conf
IPCCC
Chen Sun, Jian Shu, Wei Zheng, Zhiyong Yang, Xiaojun Wang
2015 J jnl
J. Intell. Fuzzy Syst.
Shushan Hu, Feng Liu, Cunchen Tang, Xiaojun Wang, Huaibei Zhou
2015 J jnl
Quantum Inf. Process.
Mingxing Luo, Song-Ya Ma, Yun Deng, Xiaojun Wang
2015 conf
ICC
Yifei Wei, Xiaojun Wang, Feng Guo, Gabriel Hogan, Martin Collier
2015 J jnl
Quantum Inf. Process.
Mingxing Luo, Yun Deng, Hui-Ran Li, Xiaojun Wang
2015 conf
SoCC
Jie Jin, Lingling Sun, Feng Guo, Xiaojun Wang
2015 B conf
FPL
Khalid Javeed, Xiaojun Wang, Mike Scott
2014 J jnl
Comput. Commun.
Xing Zheng, Xiaojun Wang
2014 conf
CSNDSP
Khalid Javeed, Xiaojun Wang
2014 C conf
LANMAN
Tian Song, Wenliang Fu, Olga Ormond, Martin Collier, Xiaojun Wang
2014 J jnl
IEEE J. Sel. Areas Commun.
Xiaofei Wang, Bin Liu, Junchen Jiang, Yang Xu, Yi Wang, Xiaojun Wang
2014 B conf
FPL
Khalid Javeed, Xiaojun Wang
2014 J jnl
IET Networks
Chen Sun, Weidong Wang, Gaofeng Cui, Xiaojun Wang
2014 J jnl
Int. J. Inf. Secur. Priv.
Xiaojun Wang, Brendan Cronin
2014 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Alan Kennedy, Xiaojun Wang
2013 J jnl
J. Commun. Networks
Ming Zhao, Changchuan Yin, Xiaojun Wang
2013 conf
ICCT
Wencong Qin, Yinglei Teng, Mei Song, Yinghai Zhang, Xiaojun Wang
2013 J jnl
Int. J. Wavelets Multiresolution Inf. Process.
Sheng Zheng, Changcai Yang, Emile A. Hendriks, Xiaojun Wang
2013 J jnl
J. Networks
Ming Zhao, Tao Luo, Changchuan Yin, Guangxin Yue, Xiaojun Wang
2013 J jnl
IET Inf. Secur.
Brendan Cronin, Xiaojun Wang
2013 J jnl
Int. J. Secur. Networks
Brendan Cronin, Xiaojun Wang
2013 conf
ICPCA/SWS
Lili Kong, Yali Wang, Yifei Wei, Haolong Wang, Yi Man, Xiaojun Wang
2013 J jnl
J. Comput.
Shushan Hu, Cunchen Tang, Riji Yu, Xiaojun Wang, Mei Lei
2013 J jnl
IEEE Syst. J.
Xiaofei Wang, Yang Xu, Junchen Jiang, Olga Ormond, Bin Liu, Xiaojun Wang
2012 conf
ANCS
Wenliang Fu, Tian Song, Shian Wang, Xiaojun Wang
2012 conf
ICC
Yachao Zhou, Tian Song, Xiaojun Wang
2012 conf
VTC Spring
Yifei Wei, Chaowei Wang, Mei Song, Yue Ma, Xiaojun Wang
2012 J jnl
J. Networks
Yixian Yang, Xiaojun Wang
2012 J jnl
IET Commun.
Chengchen Hu, Xiaojun Wang, Keqiang He, Bin Liu
2012 conf
WCSP
Ming Zhao, Tao Luo, Guangxin Yue, Xiaojun Wang
2012 conf
OnlineGreenComm
Feng Guo, Olga Ormond, Martin Collier, Xiaojun Wang
2011 conf
CCIS
Zhifeng He, Yong Zhang, Yinglei Teng, Yinghe Wang, Xiaojun Wang
2011 conf
VTC Fall
Li Wang, Mei Song, Yue Ma, Chao Dai, Tenghui Ke, Xiaojun Wang
2011 conf
Integrated Network Management
Xiaofei Wang, Xiaojun Wang, Chengchen Hu, Keqiang He, Junchen Jiang, Bin Liu
2011 conf
ICC
Xiaofei Wang, Junchen Jiang, Yi Tang, Bin Liu, Xiaojun Wang
2010 J jnl
Commun. Netw.
David Bermingham, Zhen Liu, Xiaojun Wang
2010 A conf
DATE
Alan Kennedy, Xiaojun Wang, Zhen Liu, Bin Liu
2009 B conf
ICPADS
David Bermingham, Zhen Liu, Xiaojun Wang, Bin Liu
2009 B conf
ICCCN
Alan Kennedy, Zhen Liu, Xiaojun Wang, Bin Liu
2009 J jnl
ERCIM News
Zhen Liu, Alan Kennedy, Olga Ormond, Xiaojun Wang
2008 A conf
IPDPS
Alan Kennedy, Xiaojun Wang, Bin Liu
2008 conf
ANCS
Alan Kennedy, Xiaojun Wang, Zhen Liu, Bin Liu
2008 C conf
DSD
Zhen Liu, Jia Yu, Xiaojun Wang, Bin Liu, Laxmi N. Bhuyan
2008 conf
ANCS
David Bermingham, Liu Zhen, Xiaojun Wang
2006 A* conf
INFOCOM
Xin Zhang, Bin Liu, Wei Li, Ying Xi, David Bermingham, Xiaojun Wang
2004 J jnl
J. Electron. Test.
Valentin Muresan, Xiaojun Wang, Valentina Muresan, Mircea Vladutiu
2004 conf
ESA/VLSI
Li-Chuan Weng, Xiaojun Wang, Alan P. Su, Bin Liu
2003 conf
IWSOC
Li-Chuan Weng, Xiaojun Wang, Bin Liu
2001 conf
ISCAS (5)
Valentina Muresan, Xiaojun Wang, Mircea Vladutiu
2001 C conf
IEEE International Workshop on Rapid System Prototyping
Valentin Muresan, Xiaojun Wang, Valentina Muresan, Mircea Vladutiu
2000 A conf
ITC
Valentin Muresan, Xiaojun Wang, Valentina Muresan, Mircea Vladutiu
2000 conf
ISQED
Jin Ding, David Moloney, Xiaojun Wang
2000 conf
Asian Test Symposium
Valentin Muresan, Xiaojun Wang, Valentina Muresan, Mircea Vladutiu
2000 C conf
IEEE International Workshop on Rapid System Prototyping
Valentin Muresan, Xiaojun Wang, Valentina Muresan, Mircea Vladutiu
2000 Misc conf
VTS
Valentin Muresan, Xiaojun Wang, Valentina Muresan, Mircea Vladutiu
2000 C conf
ISCAS
Valentin Muresan, Xiaojun Wang, Mircea Vladutiu
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"
)