Odysseas Papapetrou

58 papers A* 3A 1B 9C 1Misc 2Journal 23Unranked 18
YearRankTypeTitle / Venue / Authors
2026 J jnl
VLDB J.
Wieger R. Punter, Odysseas Papapetrou, Minos N. Garofalakis
2025 J jnl
Proc. ACM Manag. Data
Jens E. d'Hondt, Haojun Li, Fan Yang, Odysseas Papapetrou, John Paparrizos
2025 J jnl
CoRR
Jens E. d'Hondt, Wieger R. Punter, Odysseas Papapetrou
2025 J jnl
CoRR
Jens E. d'Hondt, Teun Kortekaas, Odysseas Papapetrou, Themis Palpanas
2025 J jnl
Proc. VLDB Endow.
Jens E. d'Hondt, Teun Kortekaas, Odysseas Papapetrou, Themis Palpanas
2025 J jnl
SIGMOD Rec.
Wieger R. Punter, Odysseas Papapetrou, Minos N. Garofalakis
2025 B conf
EDBT
Jacco Johannes Egbert Kiezebrink, Wieger R. Punter, Odysseas Papapetrou, Kevin Verbeek
2024 J jnl
CoRR
John Paparrizos, Haojun Li, Fan Yang, Kaize Wu, Jens E. d'Hondt, Odysseas Papapetrou
2024 conf
ICDEW
Jens E. d'Hondt, Odysseas Papapetrou, John Paparrizos
2024 J jnl
VLDB J.
Jens E. d'Hondt, Koen Minartz, Odysseas Papapetrou
2024 A* conf
ICDE
Odysseas Papapetrou, Jens E. d'Hondt
2023 conf
DEBS
George Siachamis, Kyriakos Psarakis, Marios Fragkoulis, Odysseas Papapetrou, Arie van Deursen, Asterios Katsifodimos
2023 J jnl
CoRR
Wieger R. Punter, Odysseas Papapetrou, Minos N. Garofalakis
2023 J jnl
Proc. VLDB Endow.
Wieger R. Punter, Odysseas Papapetrou, Minos N. Garofalakis
2022 J jnl
Proc. VLDB Endow.
Koen Minartz, Jens E. d'Hondt, Odysseas Papapetrou
2022 J jnl
Proc. VLDB Endow.
Alexandros Zeakis, Dimitrios Skoutas, Dimitris Sacharidis, Odysseas Papapetrou, Manolis Koubarakis
2022 B conf
IEEE Big Data
Hamid Shahrivari, Odysseas Papapetrou, George Fletcher
2021 conf
EDBT/ICDT Workshops
Ylaise van den Wildenberg, Wouter W. L. Nuijten, Odysseas Papapetrou
2020 B conf
EDBT
Hamid Shahrivari, Matthaios Olma, Odysseas Papapetrou, Dimitrios Skoutas, Anastasia Ailamaki
2019 B conf
FPL
Grigorios Chrysos, Odysseas Papapetrou, Dionisios N. Pnevmatikatos, Apostolos Dollas, Minos N. Garofalakis
2019 B conf
SSTD
Kaijie Zhu, George H. L. Fletcher, Nikolay Yakovets, Odysseas Papapetrou, Yuqing Wu
2019 A* conf
ICDE
Matthaios Olma, Odysseas Papapetrou, Raja Appuswamy, Anastasia Ailamaki
2018 J jnl
Distributed Parallel Databases
Odysseas Papapetrou, Minos N. Garofalakis
2018 J jnl
ACM Trans. Database Syst.
Ioannis Demertzis, Stavros Papadopoulos, Odysseas Papapetrou, Antonios Deligiannakis, Minos N. Garofalakis, Charalampos Papamanthou
2016 conf
SIGMOD Conference
Ioannis Demertzis, Stavros Papadopoulos, Odysseas Papapetrou, Antonios Deligiannakis, Minos N. Garofalakis
2015 J jnl
Peer-to-Peer Netw. Appl.
Odysseas Papapetrou, Wolf Siberski, Stefan Siersdorfer
2015 J jnl
VLDB J.
Odysseas Papapetrou, Minos N. Garofalakis, Antonios Deligiannakis
2014 A* conf
ICDE
Odysseas Papapetrou, Minos N. Garofalakis
2014 conf
PIR@SIGIR
Sergej Zerr, Odysseas Papapetrou, Elena Demidova
2013 J jnl
SIGMOD Rec.
Stavros Christodoulakis, Minos N. Garofalakis, Euripides G. M. Petrakis, Antonios Deligiannakis, Vasilis Samoladas, Ekaterini Ioannou, Odysseas Papapetrou, Stelios Sotiriadis
2013 conf
BD3@VLDB
Christine Kopp, Michael Mock, Odysseas Papapetrou, Michael May
2012 J jnl
IEEE Trans. Knowl. Data Eng.
Odysseas Papapetrou, Wolf Siberski, Norbert Fuhr
2012 J jnl
CoRR
Odysseas Papapetrou, Minos N. Garofalakis, Antonios Deligiannakis
2012 J jnl
Proc. VLDB Endow.
Odysseas Papapetrou, Minos N. Garofalakis, Antonios Deligiannakis
2011
Odysseas Papapetrou
2011 conf
WWW (Companion Volume)
Odysseas Papapetrou, Wolf Siberski, Stefan Siersdorfer
2011 B conf
EDBT
Odysseas Papapetrou, Ekaterini Ioannou, Dimitrios Skoutas
2011 conf
DASFAA (1)
Odysseas Papapetrou, Ling Chen
2010 J jnl
Distributed Parallel Databases
Odysseas Papapetrou, Wolf Siberski, Wolfgang Nejdl
2010 conf
ESWC (2)
Ekaterini Ioannou, Odysseas Papapetrou, Dimitrios Skoutas, Wolfgang Nejdl
2010 B conf
ICWE
Odysseas Papapetrou, George Papadakis, Ekaterini Ioannou, Dimitrios Skoutas
2010 conf
Peer-to-Peer Computing
Odysseas Papapetrou, Sukriti Ramesh, Stefan Siersdorfer, Wolfgang Nejdl
2010 J jnl
Comput. Networks
Odysseas Papapetrou, Wolf Siberski, Wolfgang Nejdl
2010 A conf
ECIR
Odysseas Papapetrou, Wolf Siberski, Norbert Fuhr
2008 conf
DBISP2P
Odysseas Papapetrou, Wolf Siberski, Fabian Leitritz, Wolfgang Nejdl
2008 Misc conf
ICDCIT
Sukriti Ramesh, Odysseas Papapetrou, Wolf Siberski
2007 conf
WEBIST (3)
Juri Luca De Coi, Eelco Herder, Arne Wolf Koesling, Christoph Lofi, Daniel Olmedilla, Odysseas Papapetrou, Wolf Siberski
2007 B conf
AINA
Odysseas Papapetrou, Wolf Siberski, Wolf-Tilo Balke, Wolfgang Nejdl
2007 B conf
AINA
Loizos Michael, Wolfgang Nejdl, Odysseas Papapetrou, Wolf Siberski
2006 J jnl
Sci. Comput. Program.
George A. Papadopoulos, Aristos Stavrou, Odysseas Papapetrou
2005 conf
OTM Conferences (1)
Odysseas Papapetrou, Sebastian Michel, Matthias Bender, Gerhard Weikum
2004 Misc conf
SAC
Odysseas Papapetrou, George A. Papadopoulos
2004 conf
WWW (Alternate Track Papers & Posters)
Odysseas Papapetrou, George Samaras
2004 conf
International Conference on Internet Computing
Odysseas Papapetrou, George Samaras
2004 conf
ADBIS (Local Proceedings)
Odysseas Papapetrou, George Samaras
2004 conf
CoopIS/DOA/ODBASE (1)
Odysseas Papapetrou, George Samaras
2003 conf
WWW (Posters)
Odysseas Papapetrou, Stavros Papastavrou, George Samaras
2003 C conf
ADBIS
Odysseas Papapetrou, Stavros Papastavrou, George Samaras
tests/integration/test_pe_extractor.py
← Index tests/integration/test_pe_extractor.py python
"""
Integration tests for the PEExtractor base class.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

pytestmark = [pytest.mark.integration, pytest.mark.pe]


class TestPEExtractorInitialization:
    """Tests for PEExtractor initialization."""

    def test_pe_extractor_with_valid_pe(self, pe_binary_path, mock_logger):
        """Test PEExtractor initialization with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            assert extractor.pe is not None
            assert extractor.filepath == pe_binary_path

    def test_pe_extractor_with_provided_pe_object(self, pe_binary_path, mock_logger, pe_object):
        """Test PEExtractor initialization with pre-existing PE object."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger, pe=pe_object)

            # Should use the provided PE object, not create a new one
            assert extractor.pe is pe_object

    def test_pe_extractor_with_invalid_file(self, elf_binary_path, mock_logger):
        """Test PEExtractor initialization with non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return None for pe when file is not a valid PE
            assert extractor.pe is None
            # Logger should have recorded an error
            assert mock_logger.error.called


class TestPEExtractorMethods:
    """Tests for PEExtractor helper methods."""

    def test_check_dotnet_true(self, pe_binary_path, mock_logger):
        """Test _check_dotnet returns True for .NET PE."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            # The test PE file is a .NET binary
            if extractor.pe is not None:
                result = extractor._check_dotnet()
                # d8637bdbcfc9112fcb1f0167b398e771 is a .NET binary
                assert result is True

    def test_check_dotnet_false(self, elf_binary_path, mock_logger):
        """Test _check_dotnet returns False for non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return False when PE is None
            result = extractor._check_dotnet()
            assert result is False

    def test_is_signed_false(self, pe_binary_path, mock_logger):
        """Test _is_signed method."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                result = extractor._is_signed()
                # Result depends on the actual binary
                assert isinstance(result, bool)

    def test_has_overlay(self, pe_binary_path, mock_logger):
        """Test _has_overlay method."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                result = extractor._has_overlay()
                assert isinstance(result, bool)


class TestGeneratePEFileObject:
    """Tests for _generate_pefile_object method."""

    def test_generate_pefile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_pefile_object with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            # The PE object should be created successfully
            assert extractor.pe is not None

    def test_generate_pefile_object_invalid(self, temp_text_file, mock_logger):
        """Test _generate_pefile_object with invalid file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(temp_text_file, mock_logger)

            # Should return None for invalid PE
            assert extractor.pe is None


class TestGenerateDotNetFileObject:
    """Tests for _generate_dotnetfile_object method."""

    def test_generate_dotnetfile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with .NET PE file."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEDotNetExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None and extractor._check_dotnet():
                dotnet, error = extractor._generate_dotnetfile_object()
                # Should create dotnet object for .NET PE
                assert dotnet is not None
                assert error is None

    def test_generate_dotnetfile_object_invalid(self, elf_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with non-.NET file."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

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

            dotnet, error = extractor._generate_dotnetfile_object()
            # Should return error for non-.NET file
            assert dotnet is None
            assert error is not None


class TestPEExtractorTag:
    """Tests for tag method in PE extractors."""

    def test_pe_features_tag(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_FEATURES.value

    def test_pe_import_tag(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_IMPORT.value

    def test_pe_section_tag(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_SECTION.value


class TestPEExtractorClickHouseTable:
    """Tests for get_clickhouse_table method in PE extractors."""

    def test_pe_features_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_features"

    def test_pe_import_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_imports"

    def test_pe_section_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_sections"


class TestPEExtractorPrepareExportData:
    """Tests for prepare_export_data method in PE extractors."""

    def test_pe_features_prepare_export_elasticsearch(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ElasticsearchExporter")
                # Should return the pe_features dataclass
                assert result is extractor.pe_features

    def test_pe_features_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ClickHouseExporter")

                # Should return tuple of (data, column_names, column_type_names)
                assert isinstance(result, tuple)
                assert len(result) == 3
                data, column_names, column_type_names = result
                assert isinstance(data, list)
                assert isinstance(column_names, list)
                assert isinstance(column_type_names, list)
                # Column names and types should match in length
                assert len(column_names) == len(column_type_names)