Katherine Driggs-Campbell

64 papers A* 9A 3B 1Journal 42Unranked 9
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Ananya Yammanuru, Maria C. Lusardi, Nancy M. Amato, Katherine Driggs-Campbell
2026 J jnl
IEEE Trans Autom. Sci. Eng.
Shuijing Liu, Haochen Xia, Fatemeh Cheraghi Pouria, Kaiwen Hong, Neeloy Chakraborty, Zichao Hu, Joydeep Biswas, Katherine Driggs-Campbell
2026 J jnl
CoRR
Fatemeh Cheraghi Pouria, Mahsa Golchoubian, Katherine Driggs-Campbell
2026 J jnl
CoRR
Haoran Yuan, Weigang Yi, Zhenyu Zhang, Wendi Chen, Yuchen Mo, Jiashi Yin, Xinzhuo Li, Xiangyu Zeng, Chuan Wen, Cewu Lu, Katherine Driggs-Campbell, Ismini Lourentzou
2025 conf
ITiCSE (1)
Katherine Braught, Yangge Li, Katherine Driggs-Campbell, Sayan Mitra
2025 J jnl
CoRR
Neeloy Chakraborty, John Pohovey, Melkior Ornik, Katherine Driggs-Campbell
2025 J jnl
Int. J. Robotics Res.
Tianchen Ji, Neeloy Chakraborty, Andre Schreiber, Katherine Driggs-Campbell
2025 J jnl
IEEE Robotics Autom. Lett.
Andre Schreiber, Katherine Driggs-Campbell
2025 J jnl
CoRR
Zhe Huang, Ye-Ji Mun, Fatemeh Cheraghi Pouria, Katherine Driggs-Campbell
2025 B conf
FG
Haochen Xia, Aamir Hasan, Haonan Chen, Katherine Driggs-Campbell
2025 conf
CASE
Mahshid Mansouri, Zhe Huang, Yu Chen, Katherine Driggs-Campbell, William R. Norris, João Ramos, Elizabeth T. Hsiao-Wecksler
2025 J jnl
CoRR
W. Jacob Wagner, Ahmet Soylemezoglu, Katherine Driggs-Campbell
2025 A* conf
ICRA
Haonan Chen, Jiaming Xu, Lily Sheng, Tianchen Ji, Shuijing Liu, Yunzhu Li, Katherine Driggs-Campbell
2025 J jnl
IEEE Intell. Transp. Syst. Mag.
Aamir Hasan, Neeloy Chakraborty, Haonan Chen, Cathy Wu, Katherine Driggs-Campbell
2025 J jnl
CoRR
Haonan Chen, Jiaming Xu, Hongyu Chen, Kaiwen Hong, Binghao Huang, Chaoqi Liu, Jiayuan Mao, Yunzhu Li, Yilun Du, Katherine Driggs-Campbell
2025 J jnl
CoRR
Shaoting Peng, Dakarai Crowder, Wenzhen Yuan, Katherine Driggs-Campbell
2025 A* conf
ICRA
Neeloy Chakraborty, Yixiao Fang, Andre Schreiber, Tianchen Ji, Zhe Huang, Aganze Mihigo, Cassidy Wall, Abdulrahman Almana, Katherine Driggs-Campbell
2025 J jnl
CoRR
Shaoting Peng, Katherine Driggs-Campbell, Roy Dong
2024 J jnl
CoRR
Abhi Kamboj, Katherine Driggs-Campbell
2024 J jnl
IEEE Robotics Autom. Lett.
Shuijing Liu, Aamir Hasan, Kaiwen Hong, Runxuan Wang, Peixin Chang, Zachary Mizrachi, Justin Lin, D. Livingston McPherson, Wendy A. Rogers, Katherine Driggs-Campbell
2024 J jnl
CoRR
Zhe Huang, John Pohovey, Ananya Yammanuru, Katherine Driggs-Campbell
2024 J jnl
CoRR
Aamir Hasan, Neeloy Chakraborty, Haonan Chen, Cathy Wu, Katherine Driggs-Campbell
2024 A* conf
ICRA
Zhe Huang, Hongyu Chen, John Pohovey, Katherine Driggs-Campbell
2024 J jnl
IEEE Access
Liangjing Yang, Songjie Xiao, Tengyue Wang, Yunze Shi, Katherine Driggs-Campbell
2024 J jnl
CoRR
Shuijing Liu, Kaiwen Hong, Neeloy Chakraborty, Katherine Driggs-Campbell
2024 J jnl
CoRR
Fatemeh Cheraghi Pouria, Zhe Huang, Ananya Yammanuru, Shuijing Liu, Katherine Driggs-Campbell
2024 J jnl
CoRR
Andre Schreiber, Arun Narenthiran Sivakumar, Peter Du, Mateus Valverde Gasparino, Girish Chowdhary, Katherine Driggs-Campbell
2023 A conf
IROS
Andre Schreiber, Tianchen Ji, D. Livingston McPherson, Katherine Driggs-Campbell
2023 conf
Robotics: Science and Systems
Yixuan Wang, Yunzhu Li, Katherine Driggs-Campbell, Li Fei-Fei, Jiajun Wu
2023 J jnl
CoRR
Yixuan Wang, Yunzhu Li, Katherine Driggs-Campbell, Li Fei-Fei, Jiajun Wu
2023 A* conf
NeurIPS
Sourya Basu, Pulkit Katdare, Prasanna Sattigeri, Vijil Chenthamarakshan, Katherine Driggs-Campbell, Payel Das, Lav R. Varshney
2023 J jnl
IEEE Trans. Autom. Control.
Peter Du, Katherine Driggs-Campbell, Roy Dong
2023 J jnl
CoRR
Peixin Chang, Shuijing Liu, Tianchen Ji, Neeloy Chakraborty, D. Livingston McPherson, Katherine Driggs-Campbell
2023 J jnl
CoRR
Haonan Chen, Ye-Ji Mun, Zhe Huang, Yilong Niu, Yiqing Xie, D. Livingston McPherson, Katherine Driggs-Campbell
2023 J jnl
CoRR
Pulkit Katdare, Nan Jiang, Katherine Driggs-Campbell
2023 J jnl
CoRR
Zhe Huang, Hongyu Chen, Katherine Driggs-Campbell
2023 A* conf
ICRA
Ye-Ji Mun, Masha Itkina, Shuijing Liu, Katherine Driggs-Campbell
2023 conf
ITSC
Aamir Hasan, Neeloy Chakraborty, Haonan Chen, Jung-Hoon Cho, Cathy Wu, Katherine Driggs-Campbell
2023 conf
Humanoids
Yu-Chen Chang, Nitish Gandi, Kazuki Shin, Ye-Ji Mun, Katherine Driggs-Campbell, Joohyung Kim
2023 A* conf
ICRA
Shahabedin Sagheb, Ye-Ji Mun, Neema Ahmadian, Benjamin A. Christie, Andrea Bajcsy, Katherine Driggs-Campbell, Dylan P. Losey
2023 J jnl
CoRR
Zhe Huang, Ye-Ji Mun, Haonan Chen, Yiqing Xie, Yilong Niu, Xiang Li, Ninghan Zhong, Haoyuan You, D. Livingston McPherson, Katherine Driggs-Campbell
2023 J jnl
CoRR
Ye-Ji Mun, Zhe Huang, Haonan Chen, Yilong Niu, Haoyuan You, D. Livingston McPherson, Katherine Driggs-Campbell
2022 conf
ITSC
Yuan Shen, Niviru Wijayaratne, Pranav Sriram, Aamir Hasan, Peter Du, Katherine Driggs-Campbell
2022 conf
ITSC
Haonan Chen, Tianchen Ji, Shuijing Liu, Katherine Driggs-Campbell
2022 J jnl
CoRR
Zhe Huang, Ye-Ji Mun, Xiang Li, Yiqing Xie, Ninghan Zhong, Weihang Liang, Junyi Geng, Tan Chen, Katherine Driggs-Campbell
2022 J jnl
CoRR
Aamir Hasan, Pranav Sriram, Katherine Driggs-Campbell
2022 A conf
IROS
W. Jacob Wagner, Katherine Driggs-Campbell, Ahmet Soylemezoglu
2022 A* conf
ICRA
Masha Itkina, Ye-Ji Mun, Katherine Driggs-Campbell, Mykel J. Kochenderfer
2022 J jnl
CoRR
Ye-Ji Mun, Masha Itkina, Shuijing Liu, Katherine Driggs-Campbell
2022 A* conf
ICRA
Pulkit Katdare, Shuijing Liu, Katherine Driggs-Campbell
2022 J jnl
IEEE Robotics Autom. Lett.
Tianchen Ji, Arun Narenthiran Sivakumar, Girish Chowdhary, Katherine Driggs-Campbell
2022 J jnl
CoRR
Tianchen Ji, Arun Narenthiran Sivakumar, Girish Chowdhary, Katherine Driggs-Campbell
2022 conf
CDC
Tianchen Ji, Junyi Geng, Katherine Driggs-Campbell
2022 J jnl
CoRR
Shahabedin Sagheb, Ye-Ji Mun, Neema Ahmadian, Benjamin A. Christie, Andrea Bajcsy, Katherine Driggs-Campbell, Dylan P. Losey
2022 conf
Robotics: Science and Systems
Tianchen Ji, Roy Dong, Katherine Driggs-Campbell
2022 J jnl
CoRR
Tianchen Ji, Roy Dong, Katherine Driggs-Campbell
2021 J jnl
CoRR
Yuan Shen, Niviru Wijayaratne, Peter Du, Shanduojiao Jiang, Katherine Driggs-Campbell
2021 A* conf
ICRA
Shuijing Liu, Peixin Chang, Weihang Liang, Neeloy Chakraborty, Katherine Driggs-Campbell
2021 J jnl
CoRR
Shuijing Liu, Peixin Chang, Haonan Chen, Neeloy Chakraborty, Katherine Driggs-Campbell
2021 J jnl
CoRR
Masha Itkina, Ye-Ji Mun, Katherine Driggs-Campbell, Mykel J. Kochenderfer
2021 J jnl
CoRR
Pulkit Katdare, Shuijing Liu, Katherine Driggs-Campbell
2021 J jnl
CoRR
Peixin Chang, Shuijing Liu, Katherine Driggs-Campbell
2020 J jnl
CoRR
Shuijing Liu, Peixin Chang, Weihang Liang, Neeloy Chakraborty, Katherine Driggs-Campbell
2020 A conf
IROS
Peixin Chang, Shuijing Liu, Haonan Chen, Katherine Driggs-Campbell
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"
)