Cassio P. de Campos

77 papers A* 10A 5B 3C 4Journal 39Unranked 15
YearRankTypeTitle / Venue / Authors
2025 J jnl
Int. J. Approx. Reason.
Soroush Ghandi, Benjamin Quost, Cassio P. de Campos
2024 J jnl
Int. J. Approx. Reason.
Jasper De Bock, Gert de Cooman, Cassio P. de Campos
2024 A conf
AISTATS
Gennaro Gala, Cassio P. de Campos, Robert Peharz, Antonio Vergari, Erik Quaeghebeur
2024 A* conf
NeurIPS
Gennaro Gala, Cassio P. de Campos, Antonio Vergari, Erik Quaeghebeur
2023 A* conf
AAAI
Alvaro H. C. Correia, Gennaro Gala, Erik Quaeghebeur, Cassio P. de Campos, Robert Peharz
2023 J jnl
CoRR
Gennaro Gala, Cassio P. de Campos, Robert Peharz, Antonio Vergari, Erik Quaeghebeur
2022 J jnl
CoRR
Alvaro H. C. Correia, Gennaro Gala, Erik Quaeghebeur, Cassio P. de Campos, Robert Peharz
2022 J jnl
ACM Trans. Knowl. Discov. Data
Kevin O'Hare, Anna Jurek-Loughrey, Cassio P. de Campos
2021 B conf
DSAA
Alessio Benavoli, Cassio P. de Campos
2021 J jnl
CoRR
Alessio Benavoli, Cassio P. de Campos
2021 A ed.
UAI
Cassio P. de Campos, Marloes H. Maathuis, Erik Quaeghebeur
2020 J jnl
Inf. Comput.
Cassio P. de Campos, Georgios Stamoulis, Dennis Weyland
2020 conf
PGM
Cassio P. de Campos
2020 A* conf
NeurIPS
Alvaro H. C. Correia, Robert Peharz, Cassio P. de Campos
2020 J jnl
CoRR
Alvaro H. C. Correia, Robert Peharz, Cassio P. de Campos
2020 A conf
AISTATS
Alvaro Henrique Chaim Correia, James Cussens, Cassio P. de Campos
2020 J jnl
CoRR
Alvaro H. C. Correia, Robert Peharz, Cassio P. de Campos
2019 J jnl
Int. J. Approx. Reason.
Diarmaid Conaty, Jesús Martínez del Rincón, Cassio P. de Campos
2019 conf
ISIPTA
Alvaro Henrique Chaim Correia, Cassio P. de Campos, Linda C. van der Gaag
2019 J jnl
Data Knowl. Eng.
Kevin O'Hare, Anna Jurek-Loughrey, Cassio P. de Campos
2019 ed.
ISIPTA
Jasper De Bock, Cassio P. de Campos, Gert de Cooman, Erik Quaeghebeur, Gregory R. Wheeler
2019 J jnl
CoRR
Alvaro H. C. Correia, James Cussens, Cassio P. de Campos
2019 conf
ISIPTA
Rob Wit, Cassio P. de Campos, Diarmaid Conaty, Jesús Martínez del Rincón
2019 conf
SUM
Alvaro H. C. Correia, Cassio P. de Campos
2018 J jnl
Inf. Syst.
Kevin O'Hare, Anna Jurek, Cassio P. de Campos
2018 conf
PGM
Diarmaid Conaty, Jesús Martínez del Rincón, Cassio P. de Campos
2018 J jnl
Artif. Intell.
Cassio P. de Campos, Mauro Scanagatta, Giorgio Corani, Marco Zaffalon
2017 J jnl
CoRR
Cassio P. de Campos, Georgios Stamoulis, Dennis Weyland
2017 A conf
UAI
Diarmaid Conaty, Cassio P. de Campos, Denis Deratani Mauá
2017 J jnl
CoRR
Denis Deratani Mauá, Cassio P. de Campos
2017 conf
ISIPTA
Denis Deratani Mauá, Fábio Gagliardi Cozman, Diarmaid Conaty, Cassio P. de Campos
2017 J jnl
Int. J. Approx. Reason.
Siqi Nie, Cassio P. de Campos, Qiang Ji
2017 J jnl
CoRR
Cassio P. de Campos, Mauro Scanagatta, Giorgio Corani, Marco Zaffalon
2017 J jnl
Int. J. Approx. Reason.
Cassio P. de Campos, Paola M. V. Rancoita
2017 J jnl
New Gener. Comput.
Cassio P. de Campos, Alessio Benavoli
2017 A* conf
AAAI
Tameem Adel, Cassio P. de Campos
2016 J jnl
Entropy
Alessio Benavoli, Cassio P. de Campos
2016 J jnl
Comput. Stat. Data Anal.
Paola M. V. Rancoita, Marco Zaffalon, Emanuele Zucca, Francesco Bertoni, Cassio P. de Campos
2016 A* conf
AAAI
Siqi Nie, Cassio P. de Campos, Qiang Ji
2016 J jnl
CoRR
Tameem Adel, Cassio P. de Campos
2016 J jnl
CoRR
Mauro Scanagatta, Giorgio Corani, Cassio P. de Campos, Marco Zaffalon
2016 conf
NIPS
Mauro Scanagatta, Giorgio Corani, Cassio P. de Campos, Marco Zaffalon
2016 J jnl
Int. J. Approx. Reason.
Cassio P. de Campos, Giorgio Corani, Mauro Scanagatta, Marco Cuccu, Marco Zaffalon
2016 J jnl
Entropy
Cassio P. de Campos, Carlos Alberto De Bragança Pereira, Paola M. V. Rancoita, Adriano Polpo
2015 J jnl
Int. J. Approx. Reason.
Alessandro Antonucci, Cassio P. de Campos, David Huber, Marco Zaffalon
2015 J jnl
Entropy
Aaron Meehan, Cassio P. de Campos
2015 J jnl
IEEE Intell. Informatics Bull.
Cassio P. de Campos, Alessandro Antonucci
2015 conf
NIPS
Mauro Scanagatta, Cassio P. de Campos, Giorgio Corani, Marco Zaffalon
2015 C conf
ECSQARU
Siqi Nie, Cassio P. de Campos, Qiang Ji
2015 conf
AMBN@JSAI-isAI
Alessio Benavoli, Cassio P. de Campos
2015 A* conf
IJCAI
Denis Deratani Mauá, Cassio P. de Campos, Fábio Gagliardi Cozman
2014 conf
NIPS
Siqi Nie, Denis Deratani Mauá, Cassio P. de Campos, Qiang Ji
2014 conf
Probabilistic Graphical Models
Cassio P. de Campos, Marco Cuccu, Giorgio Corani, Marco Zaffalon
2014 conf
NIPS
Jasper De Bock, Cassio P. de Campos, Alessandro Antonucci
2014 conf
Probabilistic Graphical Models
Mauro Scanagatta, Cassio P. de Campos, Marco Zaffalon
2014 J jnl
J. Artif. Intell. Res.
Denis Deratani Mauá, Cassio P. de Campos, Alessio Benavoli, Alessandro Antonucci
2014 J jnl
Comput. Stat. Data Anal.
Adriano Polpo, Cassio P. de Campos, Debajyoti Sinha, Stuart R. Lipsitz, Jianhang Lin
2013 J jnl
Electron. Colloquium Comput. Complex.
Cassio P. de Campos, Georgios Stamoulis, Dennis Weyland
2013 C conf
ECSQARU
Alessandro Antonucci, Cassio P. de Campos, David Huber, Marco Zaffalon
2012 J jnl
J. Artif. Intell. Res.
Denis Deratani Mauá, Cassio P. de Campos, Marco Zaffalon
2012 J jnl
Int. J. Approx. Reason.
Denis Deratani Mauá, Cassio P. de Campos, Marco Zaffalon
2011 C conf
ECSQARU
Cassio P. de Campos, Qiang Ji
2011 J jnl
J. Mach. Learn. Res.
Cassio P. de Campos, Qiang Ji
2011 J jnl
CoRR
Giorgio Corani, Cassio P. de Campos
2011 A* conf
IJCAI
Cassio P. de Campos, Alessio Benavoli
2011 A* conf
IJCAI
Cassio P. de Campos
2010 J jnl
Int. J. Approx. Reason.
Giorgio Corani, Cassio P. de Campos
2010 B conf
ICPR
Cassio P. de Campos, Zhi Zeng, Qiang Ji
2010 J jnl
Int. J. Approx. Reason.
Alessandro Antonucci, Yi Sun, Cassio P. de Campos, Marco Zaffalon
2010 J jnl
CoRR
Cassio P. de Campos
2010 A* conf
AAAI
Cassio P. de Campos, Qiang Ji
2009 C conf
ECSQARU
Alessio Benavoli, Cassio P. de Campos
2009 A* conf
ICML
Cassio P. de Campos, Zhi Zeng, Qiang Ji
2008 conf
ECCV (3)
Cassio P. de Campos, Yan Tong, Qiang Ji
2008 B conf
ICPR
Cassio P. de Campos, Qiang Ji
2008 A conf
UAI
Cassio P. de Campos, Qiang Ji
2006 conf
IBERAMIA-SBIA
Fábio Gagliardi Cozman, Cassio P. de Campos, José Carlos Ferreira da Rocha
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)