Madanlal Musuvathi

94 papers A* 30A 14B 8C 1Misc 4Journal 16Unranked 17
YearRankTypeTitle / Venue / Authors
2024 A* conf
SOSP
Bogdan Alexandru Stoica, Utsav Sethi, Yiming Su, Cyrus Zhou, Shan Lu, Jonathan Mace, Madanlal Musuvathi, Suman Nath
2024 conf
ICSE Companion
Sarah Fakhoury, Saikat Chakraborty, Madanlal Musuvathi, Shuvendu K. Lahiri
2023 conf
ASPLOS (2)
Meghan Cowan, Saeed Maleki, Madanlal Musuvathi, Olli Saarikivi, Yifan Xiong
2023 conf
EMNLP (Findings)
Saikat Chakraborty, Shuvendu K. Lahiri, Sarah Fakhoury, Akash Lal, Madanlal Musuvathi, Aseem Rastogi, Aditya Senthilnathan, Rahul Sharma, Nikhil Swamy
2023 J jnl
CoRR
Saikat Chakraborty, Shuvendu K. Lahiri, Sarah Fakhoury, Madanlal Musuvathi, Akash Lal, Aseem Rastogi, Aditya Senthilnathan, Rahul Sharma, Nikhil Swamy
2023 A conf
EuroSys
Bogdan Alexandru Stoica, Shan Lu, Madanlal Musuvathi, Suman Nath
2022 A* conf
ASPLOS
Abhinav Jangda, Jun Huang, Guodong Liu, Amir Hossein Nodehi Sabet, Saeed Maleki, Youshan Miao, Madanlal Musuvathi, Todd Mytkowicz, Olli Saarikivi
2022 A* conf
OSDI
Utsav Sethi, Haochen Pan, Shan Lu, Madanlal Musuvathi, Suman Nath
2022 A* conf
NeurIPS
Jeevana Priya Inala, Chenglong Wang, Mei Yang, Andrés Codas, Mark Encarnación, Shuvendu K. Lahiri, Madanlal Musuvathi, Jianfeng Gao
2022 J jnl
CoRR
Jeevana Priya Inala, Chenglong Wang, Mei Yang, Andrés Codas, Mark Encarnación, Shuvendu K. Lahiri, Madanlal Musuvathi, Jianfeng Gao
2022 J jnl
CoRR
Shuvendu K. Lahiri, Aaditya Naik, Georgios Sakkas, Piali Choudhury, Curtis von Veh, Madanlal Musuvathi, Jeevana Priya Inala, Chenglong Wang, Jianfeng Gao
2022 J jnl
CoRR
Meghan Cowan, Saeed Maleki, Madanlal Musuvathi, Olli Saarikivi, Yifan Xiong
2021 J jnl
CoRR
Abhinav Jangda, Jun Huang, Guodong Liu, Amir Hossein Nodehi Sabet, Saeed Maleki, Youshan Miao, Madanlal Musuvathi, Todd Mytkowicz, Olli Saarikivi
2021 J jnl
ACM Trans. Program. Lang. Syst.
Lun Liu, Todd D. Millstein, Madanlal Musuvathi
2021 A* conf
ASPLOS
Guangpu Li, Dongjie Chen, Shan Lu, Madanlal Musuvathi, Suman Nath
2021 B conf
PPoPP
Zixian Cai, Zhengyang Liu, Saeed Maleki, Madanlal Musuvathi, Todd Mytkowicz, Jacob Nelson, Olli Saarikivi
2020 conf
ICSE (Companion Volume)
Muhammad Ali Gulzar, Madanlal Musuvathi, Miryung Kim
2019 A* conf
PLDI
Lun Liu, Todd D. Millstein, Madanlal Musuvathi
2019 A* conf
PLDI
Roshan Dathathri, Olli Saarikivi, Hao Chen, Kim Laine, Kristin E. Lauter, Saeed Maleki, Madanlal Musuvathi, Todd Mytkowicz
2019 J jnl
CoRR
Roshan Dathathri, Blagovesta Kostova, Olli Saarikivi, Wei Dai, Kim Laine, Madanlal Musuvathi
2019 A* conf
SOSP
Guangpu Li, Shan Lu, Madanlal Musuvathi, Suman Nath, Rohan Padhye
2019 conf
ESEC/SIGSOFT FSE
Muhammad Ali Gulzar, Shaghayegh Mardani, Madanlal Musuvathi, Miryung Kim
2018 J jnl
CoRR
Roshan Dathathri, Olli Saarikivi, Hao Chen, Kim Laine, Kristin E. Lauter, Saeed Maleki, Madanlal Musuvathi, Todd Mytkowicz
2018 A conf
IPDPS
Saeed Maleki, Madanlal Musuvathi, Todd Mytkowicz
2017 J jnl
Proc. ACM Program. Lang.
Lun Liu, Todd D. Millstein, Madanlal Musuvathi
2017 J jnl
CoRR
Saeed Maleki, Madanlal Musuvathi, Todd Mytkowicz
2017 B conf
PPoPP
Michael Vollmer, Ryan G. Scott, Madanlal Musuvathi, Ryan R. Newton
2017 conf
ESEC/SIGSOFT FSE
Diego Garbervetsky, Zvonimir Pavlinovic, Michael Barnett, Madanlal Musuvathi, Todd Mytkowicz, Edgardo Zoppi
2016 A* conf
SIGCOMM
Jonathan Mace, Peter Bodík, Madanlal Musuvathi, Rodrigo Fonseca, Krishnan Varadarajan
2016 J jnl
ACM Trans. Program. Lang. Syst.
Daniel Marino, Abhayendra Singh, Todd D. Millstein, Madanlal Musuvathi, Satish Narayanasamy
2016 J jnl
Commun. ACM
Saeed Maleki, Madanlal Musuvathi, Todd Mytkowicz
2016 J jnl
ACM Trans. Parallel Comput.
Saeed Maleki, Madanlal Musuvathi, Todd Mytkowicz
2016 Misc conf
ICASSP
Charith Mendis, Jasha Droppo, Saeed Maleki, Madanlal Musuvathi, Todd Mytkowicz, Geoffrey Zweig
2015 A conf
HotOS
Baris Kasikci, Cristiano Pereira, Gilles Pokam, Benjamin Schubert, Madanlal Musuvathi, George Candea
2015 A conf
MobiSys
Eduardo Cuervo, Alec Wolman, Landon P. Cox, Kiron Lebeck, Ali Razeen, Stefan Saroiu, Madanlal Musuvathi
2015 A* conf
SOSP
Veselin Raychev, Madanlal Musuvathi, Todd Mytkowicz
2015 Misc conf
NSDI
Jonathan Mace, Peter Bodík, Rodrigo Fonseca, Madanlal Musuvathi
2015 J jnl
Proc. VLDB Endow.
Yufei Ding, Xipeng Shen, Madanlal Musuvathi, Todd Mytkowicz
2015 conf
SNAPL
Daniel Marino, Todd D. Millstein, Madanlal Musuvathi, Satish Narayanasamy, Abhayendra Singh
2015 A* conf
ICML
Yufei Ding, Yue Zhao, Xipeng Shen, Madanlal Musuvathi, Todd Mytkowicz
2014 A* conf
ASPLOS
Todd Mytkowicz, Madanlal Musuvathi, Wolfram Schulte
2014 A conf
MobiSys
Eduardo Cuervo, Alec Wolman, Landon P. Cox, Stefan Saroiu, Madanlal Musuvathi, Ali Razeen
2014 conf
USENIX ATC
Baris Kasikci, Thomas Ball, George Candea, John Erickson, Madanlal Musuvathi
2014 B conf
PPoPP
Saeed Maleki, Madanlal Musuvathi, Todd Mytkowicz
2014 conf
HotDep
Jonathan Mace, Peter Bodík, Rodrigo Fonseca, Madanlal Musuvathi
2013 J jnl
IEEE Micro
Abhayendra Singh, Satish Narayanasamy, Daniel Marino, Todd D. Millstein, Madanlal Musuvathi
2013 C conf
ISMM
Madanlal Musuvathi
2012 A conf
ESOP
Sebastian Burckhardt, Alexey Gotsman, Madanlal Musuvathi, Hongseok Yang
2012 B conf
RV
John Erickson, Stephen N. Freund, Madanlal Musuvathi
2012 A* conf
ISCA
Abhayendra Singh, Satish Narayanasamy, Daniel Marino, Todd D. Millstein, Madanlal Musuvathi
2012 A* conf
PLDI
Santosh Nagarakatte, Sebastian Burckhardt, Milo M. K. Martin, Madanlal Musuvathi
2012 ed.
WODA@ISSTA
Eric Bodden, Madanlal Musuvathi
2012 A conf
DISC
Alexey Gotsman, Madanlal Musuvathi, Hongseok Yang
2012 A conf
ESOP
Mohamed Faouzi Atig, Ahmed Bouajjani, Sebastian Burckhardt, Madanlal Musuvathi
2011 A* conf
PLDI
Daniel Marino, Abhayendra Singh, Todd D. Millstein, Madanlal Musuvathi, Satish Narayanasamy
2011 A* conf
ASPLOS
Abhayendra Singh, Daniel Marino, Satish Narayanasamy, Todd D. Millstein, Madanlal Musuvathi
2011 A* conf
SIGCOMM
Nupur Kothari, Ratul Mahajan, Todd D. Millstein, Ramesh Govindan, Madanlal Musuvathi
2011 ed.
SPIN
Alex Groce, Madanlal Musuvathi
2011 A conf
SIGCSE
Caitlin Sadowski, Thomas Ball, Judith Bishop, Sebastian Burckhardt, Ganesh Gopalakrishnan, Joseph Mayo, Madanlal Musuvathi, Shaz Qadeer, Stephen Toub
2011 ed.
MSPC
Jeffrey S. Vetter, Madanlal Musuvathi, Xipeng Shen
2010 A* conf
ASPLOS
Sebastian Burckhardt, Pravesh Kothari, Madanlal Musuvathi, Santosh Nagarakatte
2010 A* conf
PLDI
Daniel Marino, Abhayendra Singh, Todd D. Millstein, Madanlal Musuvathi, Satish Narayanasamy
2010 A* conf
OSDI
John Erickson, Madanlal Musuvathi, Sebastian Burckhardt, Kirk Olynyk
2010 conf
SoCC
Emre Kiciman, V. Benjamin Livshits, Madanlal Musuvathi, Kevin C. Webb
2010 B conf
PPoPP
Katherine E. Coons, Sebastian Burckhardt, Madanlal Musuvathi
2010 A* conf
PLDI
Sebastian Burckhardt, Chris Dern, Madanlal Musuvathi, Roy Tan
2010 A* conf
POPL
Mohamed Faouzi Atig, Ahmed Bouajjani, Sebastian Burckhardt, Madanlal Musuvathi
2010 A conf
TACAS
Thomas Ball, Sebastian Burckhardt, Katherine E. Coons, Madanlal Musuvathi, Shaz Qadeer
2010 B conf
CC
Sebastian Burckhardt, Madanlal Musuvathi, Vasu Singh
2009 conf
PLOS@SOSP
Emre Kiciman, Benjamin Livshits, Madanlal Musuvathi
2009 conf
ICSE Companion
Thomas Ball, Sebastian Burckhardt, Jonathan de Halleux, Madanlal Musuvathi, Shaz Qadeer
2009 A conf
HotOS
Emre Kiciman, V. Benjamin Livshits, Madanlal Musuvathi
2009 A conf
EuroSys
Alexander Rasmussen, Emre Kiciman, V. Benjamin Livshits, Madanlal Musuvathi
2009 A* conf
PLDI
Daniel Marino, Madanlal Musuvathi, Satish Narayanasamy
2009 A* conf
PLDI
Erez Petrank, Madanlal Musuvathi, Bjarne Steensgaard
2008 Misc conf
HotNets
Milan Stanojevic, Ratul Mahajan, Todd D. Millstein, Madanlal Musuvathi
2008 A* conf
CAV
Sebastian Burckhardt, Madanlal Musuvathi
2008 A* conf
PLDI
Madanlal Musuvathi, Shaz Qadeer
2008 A* conf
OSDI
Madanlal Musuvathi, Shaz Qadeer, Thomas Ball, Gérard Basler, Piramanayagam Arumuga Nainar, Iulian Neamtiu
2007 A* conf
PLDI
Madanlal Musuvathi, Shaz Qadeer
2006 A conf
IJCAR
Shuvendu K. Lahiri, Madanlal Musuvathi
2006 J jnl
ACM Trans. Comput. Syst.
Junfeng Yang, Paul Twohey, Dawson R. Engler, Madanlal Musuvathi
2005 A conf
CADE
Greta Yorsh, Madanlal Musuvathi
2005 conf
FroCoS
Shuvendu K. Lahiri, Madanlal Musuvathi
2005 conf
PDPAR@CAV
Shuvendu K. Lahiri, Madanlal Musuvathi
2005 conf
SPIN
Madanlal Musuvathi, David L. Dill
2005 B conf
LPAR
Thomas Ball, Shuvendu K. Lahiri, Madanlal Musuvathi
2004
Madanlal Musuvathi
2004 Misc conf
NSDI
Madanlal Musuvathi, Dawson R. Engler
2004 B conf
VMCAI
Dawson R. Engler, Madanlal Musuvathi
2004 A* conf
OSDI
Junfeng Yang, Paul Twohey, Dawson R. Engler, Madanlal Musuvathi
2003 conf
SoftMC@CAV
Madanlal Musuvathi, Dawson R. Engler
2002 A* conf
OSDI
Madanlal Musuvathi, David Y. W. Park, Andy Chou, Dawson R. Engler, David L. Dill
2002 conf
ACM SIGOPS European Workshop
Madanlal Musuvathi, Andy Chou, David L. Dill, Dawson R. Engler
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"
)