Calin Vaida

42 papers B 1Journal 15Unranked 26
YearRankTypeTitle / Venue / Authors
2026 J jnl
Robotics
Alexandru Pusca, Razvan Ciocan, Bogdan Gherman, Andra Ciocan, Andrei Caprariu, Nadim Al Hajjar, Calin Vaida, Adrian Pisla, Corina Radu, Andrei Cailean, Paul Tucan, Damien Chablat, Doina Pisla
2026 J jnl
Robotics
Calin Vaida, Ionut Zima, Florin Graur, Bogdan Gherman, Vasile Bulbucan, Paul Tucan, Alexandru Pusca, Florin Zaharie, Pierre Mougenot, Adrian Pisla, Damien Chablat, Nadim Al Hajjar, Doina Pisla
2025 B conf
ICCP
Paul Tucan, Mihaela Hedesiu, Vasile Bublucan, Rares Mocan, Daria Pisla, Calin Vaida, Bogdan Gherman, Cristian Dinu, Doina Pisla
2025 J jnl
Inf.
Doina Pisla, Nadim Al Hajjar, Gabriela Rus, Calin Popa, Bogdan Gherman, Andra Ciocan, Andrei Cailean, Corina Radu, Damien Chablat, Calin Vaida, Anca-Elena Iordan
2025 J jnl
CoRR
Calin Vaida, Iosif Birlescu, Bogdan Gherman, Daniel Condurache, Damien Chablat, Doina Pisla
2025 J jnl
CoRR
Gabriela Rus, Nadim Al Hajjar, Ionut Zima, Calin Vaida, Corina Radu, Damien Chablat, Andra Ciocan, Doina Pîsla
2025 J jnl
CoRR
Doina Pisla, Alexandru Pusca, Andrei Caprariu, Adrian Pisla, Bogdan Gherman, Calin Vaida, Damien Chablat
2025 conf
ICINCO (2)
Simona-Daiana Sim, Alexandru Pusca, Paul Tucan, Iuliu Nadas, Vasile Bulbucan, Andrei Cailean, Dragos Sebeni, Alexandru Banica, Daniela-Corina Jucan, Radu Morariu, Calin Vaida, Petru Dobra, José Machado, Doina Pisla
2025 J jnl
CoRR
Paul Tucan, Nadim Al Hajjar, Calin Vaida, Alexandru Pusca, Tiberiu Antal, Corina Radu, Daniela-Corina Jucan, Adrian Pisla, Damien Chablat, Doina Pisla
2025 conf
ICINCO (2)
Doina Pisla, Andra Ciocan, Bogdan Gherman, Diana Schlanger, Alexandru Pusca, Nadim Al Hajjar, Emil Mois, Andrei Cailean, Nicoleta Pop, Calin Vaida, Paul Tucan, Ionut Zima
2024 conf
AQTR
Simona-Daiana Sim, Attila Medgyesi, Zsófia Lendek, Mircea Susca, Vlad Mihaly, Doina Pisla, Calin Vaida, Petru Dobra, Anca Elena Pica
2024 conf
AQTR
Florin Covaciu, Bogdan Gherman, Gabriela Rus, Calin Vaida, Ionut Zima, Doina Pisla
2024 J jnl
CoRR
Calin Vaida, Bogdan Gherman, Iosif Birlescu, Paul Tucan, Alexandru Pusca, Gabriela Rus, Damien Chablat, Doina Pisla
2024 J jnl
CoRR
Gabriela Rus, Nadim Al Hajjar, Paul Tucan, Andra Ciocan, Calin Vaida, Corina Radu, Damien Chablat, Doina Pisla
2024 J jnl
CoRR
Gabriela Rus, Nadim Al Hajjar, Paul Tucan, Ionut Zima, Calin Vaida, Corina Radu, Daniela-Corina Jucan, Damien Chablat, Doina Pisla
2023 J jnl
Sensors
Florin Covaciu, Nicolae Crisan, Calin Vaida, Iulia Andras, Alexandru Pusca, Bogdan Gherman, Corina Radu, Paul Tucan, Nadim Al Hajjar, Doina Pisla
2022 conf
ARK
Iosif Birlescu, Calin Vaida, Alexandru Pusca, Gabriela Rus, Doina Pisla
2022 conf
IHAW
Gabriela Rus, Laurentiu Nae, Bogdan Gherman, Calin Vaida, Michel Deriaz, Eduard Oprea, Doina Pisla
2022 conf
AQTR
Ionut-Mihai Ulinici, Nicolae Crisan, Calin Vaida, Iulia Andras, Doina Pisla
2022 conf
AQTR
Alin Burz, Paul Tucan, Nicoleta Tohanean, Bogdan Gherman, Calin Vaida, Cristian Abrudan, Giuseppe Carbone, Doina Pisla
2022 conf
ICSTCC
Alin Burz, Nadim Al Hajjar, Paul Tucan, Corina Radu, Adrian Pisla, Florin Graur, Calin Vaida, Calin Popa, Tiberiu Antal, Doina Pisla
2021 conf
ICSTCC
Bogdan Gherman, Alexandru Banica, Paul Tucan, Calin Vaida, Tiberiu Antal, Doina Pisla
2021 conf
ICSTCC
Calin Vaida, Iulia Andras, Iosif Birlescu, Nicolae Crisan, Nicolae Plitea, Doina Pisla
2021 conf
IHAW
Bogdan Gherman, Laurentiu Nae, Adrian Pisla, Eduard Oprea, Calin Vaida, Doina Pisla
2020 conf
AQTR
Florin Covaciu, Adrian Pisla, Calin Vaida, Bogdan Gherman, Doina Pisla
2020 conf
ARK
Iosif Birlescu, Manfred Husty, Calin Vaida, Bogdan Gherman, Ionut Ulinici, Remus Bogateanu, Doina Pisla
2020 J jnl
IEEE Access
Calin Vaida, Iosif Birlescu, Adrian Pisla, Ionut Ulinici, Daniela Tarnita, Giuseppe Carbone, Doina Pisla
2019 J jnl
Symmetry
Iosif Birlescu, Manfred L. Husty, Calin Vaida, Nicolae Plitea, Abhilash Nayak, Doina Pisla
2018 conf
AQTR
Viorela Alexandra Lazar, Doina Pisla, Calin Vaida, Daniele Cafolla, Marco Ceccarelli, Giuseppe Carbone, Jhon Freddy Rodriguez Leon
2018 conf
ARK
Iosif Birlescu, Doina Pisla, Bogdan Gherman, Adrian Pisla, Calin Vaida, Giuseppe Carbone, Nicolae Plitea
2018 conf
AQTR
Florin Covaciu, Adrian Pisla, Giuseppe Carbone, Ferenc Puskas, Calin Vaida, Doina Pisla
2017 conf
RAAD
Giuseppe Carbone, Bogdan Gherman, Ionut Ulinici, Calin Vaida, Doina Pisla
2017 conf
CSCS
Paul Tucan, Florin Craciun, Calin Vaida, Bogdan Gherman, Doina Pisla, Corina Radu, Nicolae Crisan
2017 J jnl
Int. J. Prod. Res.
Doina Pisla, Bogdan Galdau, Florin Covaciu, Calin Vaida, Daniela Popescu, Nicolae Plitea
2016 conf
ARK
Josef Schadlbauer, Calin Vaida, Paul Tucan, Doina Pisla, Manfred L. Husty, Nicolae Plitea
2016 conf
AQTR
Doina Pisla, Darius Ani, Calin Vaida, Bogdan Gherman, Paul Tucan, Nicolae Plitea
2016 conf
AQTR
Calin Vaida, Doina Pisla, Florin Covaciu, Bogdan Gherman, Adrian Pisla, Nicolae Plitea
2015 conf
RAAD
Doina Pîsla, Bogdan Gherman, Florin Girbacia, Calin Vaida, Silviu Butnariu, Teodora Gîrbacia, Nicolae Plitea
2014 conf
AQTR
Bogdan Galdau, Nicolae Plitea, Calin Vaida, Florin Covaciu, Doina Pisla
2012 J jnl
Robotica
Doina Pisla, Bogdan Gherman, Calin Vaida, Nicolae Plitea
2012 conf
ARK
A. Szilaghyi, Alin Stoica, Doina Pisla, Calin Vaida, Nicolae Plitea
2008 conf
ICINCO-RA (2)
Doina Pisla, Calin Vaida, Nicolae Plitea, Jürgen Hesselbach, Annika Raatz, Marc Simnofske, Arne Burisch, Liviu Vlad
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)