Kate Keahey

66 papers A 6B 11C 2Misc 2Journal 18Unranked 25
YearRankTypeTitle / Venue / Authors
2025 J jnl
Comput. Networks
Taimoor Ul Islam, Joshua Ofori Boateng, Md Nadim, Guoying Zu, Mukaram Shahid, Xun Li, Tianyi Zhang, Salil Reddy, Wei Xu, Ataberk Atalar, Vincent Lee, Yung-Fu Chen, Evan Gossling, Elisabeth Permatasari, Christ Somiah, Owen Perrin, Zhibo Meng, Reshal Afzal, Sarath Babu, Mohammed Soliman, Ali Hussain, Daji Qiao, Mai Zheng, Ozdal Boyraz, Yong Guan, Anish Arora, Mohamed Y. Selim, Arsalan Ahmad, Myra B. Cohen, Mike Luby, Ranveer Chandra, James Gross, Kate Keahey, Hongwei Zhang
2025 conf
ICPP Workshops
Pedro Ramonetti, Ilkay Altintas, Melissa Floca, Kate Keahey, Marc Richardson
2025 B conf
IC2E
S. M. Qasim, Can Hankendi, Michael Sherman, Kate Keahey, Gianluca Stringhini, Ayse K. Coskun
2025 J jnl
CoRR
Kate Keahey, Marc Richardson, Rafael Tolosana-Calasanz, Sascha Hunold, Jay F. Lofstead, Tanu Malik, Christian Pérez
2025 conf
ACM REP
Stephanie Lieggi, Fraida Fund, Kate Keahey, Marc Richardson
2025 conf
SC Workshops
Fraida Fund, Kate Keahey, Cody Hammock, Marc Richardson, Mark Powers, Michael Sherman
2024 conf
FRAME@HPDC
William Fowler, Alicia Esquivel Morel, Kate Keahey
2024 conf
ISC Workshops
Alicia Esquivel Morel, Mark Powers, Kate Keahey, Zack Murry, Tomas Javier Sitzmann, Jianfeng Zhou, Prasad Calyam
2024 J jnl
Dagstuhl Reports
Georg Carle, Serge Fdida, Kate Keahey, Henning Schulzrinne, Sebastian Gallenmüller
2023 conf
SC Workshops
Alicia Esquivel Morel, William Fowler, Kate Keahey, Kyle Zheng, Michael Sherman, Richard Anderson
2023 B conf
e-Science
Kate Keahey, Nick Feamster, Guilherme Martins, Mark Powers, Marc Richardson, Alexis Schrubbe, Michael Sherman
2023 conf
ACM-REP
Daniel Rosendo, Kate Keahey, Alexandru Costan, Matthieu Simonin, Patrick Valduriez, Gabriel Antoniu
2023 J jnl
CoRR
Daniel Rosendo, Kate Keahey, Alexandru Costan, Matthieu Simonin, Patrick Valduriez, Gabriel Antoniu
2023 B conf
e-Science
Kate Keahey, Jason Anderson, Mark Powers, Adam Cooper
2022 conf
PEARC
Kate Keahey, Jason Anderson, Michael Sherman, Cody Hammock, Zhuo Zhen, Jenett Tillotson, Timothy Bargo, Lance Long, Taimoor Ul Islam, Sarath Babu, Hongwei Zhang, François Halbach
2022 conf
PEARC
Jason Anderson, Kate Keahey
2021 J jnl
SoftwareX
Peter Couvares, Kate Keahey, Frédérique Marion
2021 conf
INFOCOM Workshops
Paul Ruth, Kate Keahey, Mert Cevik, Zhuo Zhen, Cong Wang, Jason Anderson
2020 conf
USENIX ATC
Kate Keahey, Jason Anderson, Zhuo Zhen, Pierre Riteau, Paul Ruth, Dan Stanzione, Mert Cevik, Jacob Colleran, Haryadi S. Gunawi, Cody Hammock, Joe Mambretti, Alexander Barnes, François Halbach, Alex Rocha, Joe Stubbs
2020 J jnl
IEEE Internet Comput.
Kate Keahey, Ewa Deelman
2019 C conf
CloudCom
Jason Anderson, Kate Keahey
2019 conf
INFOCOM Workshops
Divyashri Bhat, Jason Anderson, Paul Ruth, Michael Zink, Kate Keahey
2019 B conf
ICNP
Kate Keahey, Joe Mambretti, Paul Ruth, Dan Stanzione
2019 B conf
CLOUD
Kate Keahey, Pierre Riteau, Jason Anderson, Zhuo Zhen
2019 B conf
ICPP
Daniel Zahka, Brian Kocoloski, Kate Keahey
2019 J jnl
CoRR
Mark Berman, Timur Friedman, Abhimanyu Gosain, Kate Keahey, Rick McGeer, Ingrid Moerman, Akihiro Nakao, Lucas Nussbaum, Kristin Rauschenbach, Violet R. Syrotiuk, Malathi Veeraraghavan, Naoaki Yamanaka
2019 conf
INFOCOM Workshops
Mert Cevik, Paul Ruth, Kate Keahey, Pierre Riteau
2018 conf
HPCC/SmartCity/DSS
Qiaobin Fu, Nicholas P. Timkovich, Pierre Riteau, Kate Keahey
2018 A conf
SC
Feng Liu, Kate Keahey, Pierre Riteau, Jon B. Weissman
2017 Misc conf
UCC
Kate Keahey, Pierre Riteau, Nicholas P. Timkovich
2017 J jnl
Future Gener. Comput. Syst.
Umesh Deshpande, Kate Keahey
2016 J jnl
IEEE Trans. Cloud Comput.
Kate Keahey, Ioan Raicu, Kyle Chard, Bogdan Nicolae
2015 conf
ScienceCloud@HPDC
Tonglin Li, Kate Keahey, Ke Wang, Dongfang Zhao, Ioan Raicu
2015 J jnl
Int. J. Distributed Syst. Technol.
Bogdan Nicolae, Pierre Riteau, Kate Keahey
2015 B conf
CCGRID
Umesh Deshpande, Kate Keahey
2014 conf
ScienceCloud@HPDC
Pierre Riteau, Myunghwa Hwang, Anand Padmanabhan, Yizhao Gao, Yan Liu, Kate Keahey, Shaowen Wang
2014 A conf
IPDPS
Bogdan Nicolae, Pierre Riteau, Kate Keahey
2014 J jnl
IEEE Cloud Comput.
Kate Keahey, Manish Parashar
2014 B conf
CCGRID
Radu Tudoran, Kate Keahey, Pierre Riteau, Sergey Panitkin, Gabriel Antoniu
2014 ed.
ScienceCloud@HPDC
Ioan Raicu, Kate Keahey, Kyle Chard, Bogdan Nicolae
2014 Misc conf
UCC
Bogdan Nicolae, Pierre Riteau, Kate Keahey
2013 J jnl
XRDS
Paul Marshall, Henry M. Tufo, Kate Keahey
2013 conf
ScienceCloud@HPDC
Dmitry Duplyakin, Paul Marshall, Kate Keahey, Henry M. Tufo, Ali Alzabarah
2013 J jnl
Int. J. Cloud Comput.
Gabriel Antoniu, Alexandru Costan, Julien Bigot, Frédéric Desprez, Gilles Fedak, Sylvain Gault, Christian Pérez, Anthony Simonet, Bing Tang, Christophe Blanchet, Raphael Terreux, Luc Bougé, François Briant, Franck Cappello, Kate Keahey, Bogdan Nicolae, Frédéric Suter
2012 C conf
ICSOFT
Paul Marshall, Henry M. Tufo, Kate Keahey, David La Bissoniere, Matthew Woitaszek
2012 conf
Euro-Par Workshops
Alexandra Carpen-Amarie, Kate Keahey, John Bresnahan, Gabriel Antoniu
2012 conf
IPDPS Workshops
Paul Marshall, Henry M. Tufo, Kate Keahey
2011 A conf
HPDC
Bogdan Nicolae, John Bresnahan, Kate Keahey, Gabriel Antoniu
2011 B conf
CCGRID
Paul Marshall, Kate Keahey, Timothy Freeman
2011 conf
TG
John Bresnahan, Tim Freeman, David La Bissoniere, Kate Keahey
2010 B conf
CCGRID
Paul Marshall, Kate Keahey, Timothy Freeman
2010 J jnl
ERCIM News
Pierre Riteau, Maurício O. Tsugawa, Andréa M. Matsunaga, José A. B. Fortes, Kate Keahey
2010 A ed.
HPDC
Salim Hariri, Kate Keahey
2009 B conf
SSDBM
Kate Keahey
2009 conf
OOPSLA Companion
Steven Fraser, Robert Biddle, Scott Jordan, Kate Keahey, Bob Marcus, E. Michael Maximilien, Dave A. Thomas
2009 J jnl
CoRR
Omer Khalid, Richard J. Anthony, Paul Nilsson, Kate Keahey, Markus Schulz, Miltos Petridis, Kevin Parrott
2009 conf
VTDC@ICAC
Omer Khalid, Richard J. Anthony, Paul Nilsson, Kate Keahey, Markus Schulz, Kevin Parrott, Miltos Petridis
2009 ed.
VTDC@ICAC
Kate Keahey, Renato Figueiredo
2008 J jnl
Int. J. High Perform. Comput. Netw.
Markus Lorch, Dennis G. Kafura, Ian Fisk, Kate Keahey, Timothy Freeman, Abhishek Singh Rana, Frank Würthwein
2008 A conf
HPDC
Borja Sotomayor, Kate Keahey, Ian T. Foster
2008 conf
eScience
Christina Hoffa, Gaurang Mehta, Timothy Freeman, Ewa Deelman, Kate Keahey, G. Bruce Berriman, John Good
2006 conf
VTDC@SC
Borja Sotomayor, Kate Keahey, Ian T. Foster
2006 A conf
SC
Elizeu Santos-Neto, Kate Keahey
2005 conf
GRID
Markus Lorch, Dennis G. Kafura, Ian Fisk, Kate Keahey, Gabriele Carcassi, Timothy Freeman, Timur Peremutov, Abhishek Singh Rana
2002 J jnl
Concurr. Comput. Pract. Exp.
Manish Parashar, Gregor von Laszewski, Snigdha Verma, Jarek Gawor, Kate Keahey, Nell Rehn
1996 J jnl
Int. J. High Perform. Comput. Appl.
Michael L. Norman, Peter H. Beckman, Greg L. Bryan, John Dubinski, Dennis Gannon, Lars Hernquist, Kate Keahey, Jeremiah P. Ostriker, John Shalf, Joel Welling, Shelby X. Yang
tests/integration/test_base_extractor.py
← Index tests/integration/test_base_extractor.py python
"""
Integration tests for the base Extractor class.
"""
import pytest
import hashlib
import math
from unittest.mock import Mock, patch, MagicMock
from collections import Counter

pytestmark = [pytest.mark.integration]


class TestExtractorStaticMethods:
    """Tests for static methods in Extractor class."""

    def test_process_binary_string_printable(self):
        """Test processing a printable binary string."""
        from redb.extractors.extractor import Extractor

        # Test with printable ASCII characters
        input_bytes = b"Hello World\x00\x00\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert result == "Hello World"

    def test_process_binary_string_non_printable(self):
        """Test processing a string with non-printable characters."""
        from redb.extractors.extractor import Extractor

        # Test with non-printable characters
        input_bytes = b"\x01\x02Hello\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert "\\x01" in result
        assert "\\x02" in result
        assert "Hello" in result

    def test_process_binary_string_empty(self):
        """Test processing an empty binary string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"\x00\x00\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert result == ""

    def test_process_binary_string_all_printable(self):
        """Test processing a fully printable string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"TestString123"
        result = Extractor.process_binary_string(input_bytes)
        assert result == "TestString123"

    def test_remove_non_utf8_valid(self):
        """Test removing non-UTF8 characters from valid UTF8 string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"Hello World"
        result = Extractor.remove_non_utf8(input_bytes)
        assert result == b"Hello World"

    def test_remove_non_utf8_with_invalid(self):
        """Test removing non-UTF8 characters from mixed string."""
        from redb.extractors.extractor import Extractor

        # Mix of valid UTF8 and invalid bytes
        input_bytes = b"Hello\xff\xfeWorld"
        result = Extractor.remove_non_utf8(input_bytes)
        # Should remove the invalid bytes
        assert b"\xff" not in result
        assert b"\xfe" not in result
        assert b"Hello" in result
        assert b"World" in result

    def test_remove_non_utf8_empty(self):
        """Test removing non-UTF8 from empty string."""
        from redb.extractors.extractor import Extractor

        result = Extractor.remove_non_utf8(b"")
        assert result == b""


class TestExtractorEntropyCalculation:
    """Tests for entropy calculation in Extractor class."""

    def test_calculate_entropy_empty_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with empty data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(b"")
            assert result == 0.0

    def test_calculate_entropy_uniform_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with uniform (low entropy) data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # All same bytes = 0 entropy
            uniform_data = b"\x00" * 256
            result = extractor.calculate_entropy(uniform_data)
            assert result == 0.0

    def test_calculate_entropy_random_data(self, elf_binary_path, mock_logger, high_entropy_data):
        """Test entropy calculation with random (high entropy) data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(high_entropy_data)
            # Random data should have entropy close to 8 (max for bytes)
            assert result > 7.0

    def test_calculate_entropy_binary_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with binary data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # Two equally distributed values = 1 bit entropy
            binary_data = b"\x00\x01" * 128
            result = extractor.calculate_entropy(binary_data)
            assert abs(result - 1.0) < 0.01

    def test_calculate_entropy_string_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with string data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # String with two equally distributed characters
            string_data = "ab" * 100
            result = extractor.calculate_entropy(string_data)
            assert abs(result - 1.0) < 0.01


class TestExtractorInitialization:
    """Tests for Extractor initialization."""

    def test_extractor_hashes_computed_on_init(self, elf_binary_path, mock_logger, known_hashes):
        """Test that hashes are computed during initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            assert extractor.md5 == known_hashes['md5']
            assert extractor.sha1 == known_hashes['sha1']
            assert extractor.sha256 == known_hashes['sha256']

    def test_extractor_hash_dataclass_created(self, elf_binary_path, mock_logger, known_hashes):
        """Test that Hash dataclass is created during initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            assert extractor.hash.md5 == known_hashes['md5']
            assert extractor.hash.sha1 == known_hashes['sha1']
            assert extractor.hash.sha256 == known_hashes['sha256']

    def test_extractor_binary_cached_property(self, elf_binary_path, mock_logger, elf_binary_content):
        """Test that binary content is loaded as cached property."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            # Access binary property
            binary = extractor.binary
            assert binary == elf_binary_content

            # Second access should return cached value (same id)
            assert extractor.binary is binary

    def test_extractor_with_exporters(self, elf_binary_path, mock_logger, mock_print_exporter):
        """Test extractor initialization with exporters."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[mock_print_exporter]
            )

            assert len(extractor.exporters) == 1
            assert extractor.exporters[0] is mock_print_exporter

    def test_extractor_with_index_prefix(self, elf_binary_path, mock_logger):
        """Test extractor initialization with custom index prefix."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                index_prefix="custom_prefix"
            )

            assert "custom_prefix" in extractor.elastic_index

    def test_extractor_known_benign_flag(self, elf_binary_path, mock_logger):
        """Test extractor with known_benign flag."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                known_benign=True
            )

            assert extractor.known_benign is True
            assert extractor.known_malicious is False

    def test_extractor_known_malicious_flag(self, elf_binary_path, mock_logger):
        """Test extractor with known_malicious flag."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                known_malicious=True
            )

            assert extractor.known_benign is False
            assert extractor.known_malicious is True


class TestExtractorExportData:
    """Tests for export_data method."""

    def test_export_data_with_print_exporter(self, elf_binary_path, mock_logger, mock_print_exporter, capsys):
        """Test export_data with PrintExporter."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[mock_print_exporter]
            )

            result = extractor.export_data()
            # Should succeed with PrintExporter
            assert result is True

    def test_export_data_no_exporters(self, elf_binary_path, mock_logger):
        """Test export_data with no exporters configured."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[]
            )

            result = extractor.export_data()
            # Should succeed with no exporters (nothing to export)
            assert result is True


class TestExtractorEdgeCases:
    """Tests for edge cases in Extractor class."""

    def test_extractor_with_nonexistent_file(self, mock_logger):
        """Test extractor with non-existent file."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            with pytest.raises(FileNotFoundError):
                BasicPropertiesExtractor("/nonexistent/file.bin", mock_logger)

    def test_entropy_none_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with None returns 0."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(None)
            assert result == 0.0

    def test_process_binary_string_high_bytes(self):
        """Test processing binary string with high byte values."""
        from redb.extractors.extractor import Extractor

        # Characters above 126 are non-printable
        input_bytes = b"\x7f\x80\x81\xff"
        result = Extractor.process_binary_string(input_bytes)
        assert "\\x7f" in result
        assert "\\x80" in result
        assert "\\xff" in result