M. Carmen Juan

48 papers B 10C 1Journal 17Unranked 19
YearRankTypeTitle / Venue / Authors
2023 J jnl
Behav. Inf. Technol.
M. Carmen Juan, Miguel Estevan, Magdalena Méndez-López, Camino Fidalgo, Javier Lluch, Roberto Vivó
2023 J jnl
Virtual Real.
M. Carmen Juan, Julen Elexpuru, Paulo Dias, Beatriz Sousa Santos, Paula Amorim
2023 J jnl
IEEE Multim.
Mariano Banquiero, Gracia Valdeolivas, Sergio Trincado, Natasha García, M. Carmen Juan
2022 J jnl
J. Multimodal User Interfaces
M. Carmen Juan, Magdalena Méndez-López, Camino Fidalgo, Ramón Mollá, Roberto Vivó, David Paramo
2021 conf
VISIGRAPP (1: GRAPP)
Andrés-Marcelo Calle-Bustos, Jaime Juan, Francisco Abad, Paulo Dias, Magdalena Méndez-López, M. Carmen Juan
2020 J jnl
Multim. Tools Appl.
Pedro Morillo, Inmaculada García-García, Juan M. Orduña, Marcos Fernández, M. Carmen Juan
2019 B conf
ICALT
Andrés-Marcelo Calle-Bustos, M. Carmen Juan, Francisco Abad, Ramón Mollá
2019 J jnl
Frontiers Comput. Sci.
M. Carmen Juan, Jorge L. Charco, Inmaculada García-García, Ramón Mollá
2019 J jnl
IEEE Access
Francisco Munoz-Montoya, M. Carmen Juan, Magdalena Méndez-López, Camino Fidalgo
2017 B conf
ICALT
David Rodríguez-Andrés, M. Carmen Juan, Ramón Mollá Vayá, Magdalena Méndez-López
2017 B conf
ICALT
M. Carmen Juan, Mauricio Loachamin-Valencia, Inmaculada García-García, Jose Manuel Melchor, Josep Benedito
2017 B conf
ICALT
Mauricio Loachamin-Valencia, M. Carmen Juan, Magdalena Méndez-López, Elena Pérez-Hernández
2017 conf
INTERACT (1)
Sonia Cárdenas-Delgado, M. Carmen Juan, Magdalena Méndez-López, Elena Pérez-Hernández
2017 C conf
ACE
Mauricio Loachamín-Valencia, M. Carmen Juan, Magdalena Méndez-López, Elena Pérez-Hernández
2015 J jnl
J. Comput. Assist. Learn.
David Furió, M. Carmen Juan, Ignacio Seguí, Roberto Vivó
2015 conf
GRAPP
Gustavo Rovelo, Francisco Abad, M. Carmen Juan, Emilio Camahort
2015 J jnl
Comput. Educ.
Juan-Fernando Martín-SanJosé, M. Carmen Juan, Ignacio Seguí, Inmaculada García-García
2014 J jnl
Behav. Inf. Technol.
Juan-J. Arino, M. Carmen Juan, José-Antonio Gil-Gómez, Ramón Mollá Vayá
2014 J jnl
Sci. Comput. Program.
Juan-Fernando Martín-SanJosé, M. Carmen Juan, José-Antonio Gil-Gómez, Noemí Rando Aiju
2014 J jnl
J. Ambient Intell. Smart Environ.
Juan-Fernando Martín-SanJosé, M. Carmen Juan, Encarna Torres, M. José Vicent
2013 conf
GRAPP/IVAPP
David Furió, M. Carmen Juan, Ignacio Seguí, M. José Vicent, Francisco Abad
2013 J jnl
Comput. Educ.
David Furió, Santiago González-Gancedo, M. Carmen Juan, Ignacio Seguí, Noemí Rando Aiju
2013 conf
GRAPP/IVAPP
Santiago González-Gancedo, M. Carmen Juan, Ignacio Seguí, Francisco Abad
2013 J jnl
Comput. Educ.
David Furió, Santiago González-Gancedo, M. Carmen Juan, Ignacio Seguí, María Costa
2012 conf
BCS HCI
Gustavo Rovelo, M. Carmen Juan, Francisco Abad, Emilio Camahort
2012 conf
GRAPP/IVAPP
Juan-J. Arino, M. Carmen Juan, Santiago González-Gancedo, Ignacio Seguí, Roberto Vivó
2012 conf
CEIG
David Furió, M. Carmen Juan, Leila Alem, Peta Ashworth
2012 conf
CEIG
Helena Martínez, José-Antonio Gil-Gómez, Javier Martínez-Gramage, M. Carmen Juan
2012 conf
GRAPP/IVAPP
Gustavo Rovelo, Francisco Abad, M. Carmen Juan, Emilio Camahort
2012 conf
GRAPP/IVAPP
Santiago González-Gancedo, M. Carmen Juan, Ignacio Seguí, Noemí Rando Aiju, Juan Cano
2011 J jnl
Int. J. Hum. Comput. Stud.
M. Carmen Juan, Dennis Joele
2011 ch.
Handbook of Augmented Reality
M. Carmen Juan, Francesca Beatrice
2011 conf
Advances in Computer Entertainment Technology
M. Carmen Juan, David Furió, Ignacio Seguí, Noemí Rando Aiju, Juan Cano
2010 B conf
ICALT
M. Carmen Juan, Edith Llop, Francisco Abad, Javier Lluch
2010 B conf
ICALT
M. Carmen Juan, Giacomo Toffetti, Francisco Abad, Juan Cano
2009 conf
CEIG
Gustavo Rovelo, Francisco Abad, M. Carmen Juan, Emilio Camahort
2009 conf
ICCS (2)
Armando de la Re, Francisco Abad, Emilio Camahort, M. Carmen Juan
2009 conf
CEIG
Rafael Gaitán, Javier Lluch, Francisco Abad, M. Carmen Juan
2008 B conf
ICALT
M. Carmen Juan, Francesca Beatrice, Juan Cano
2008 B conf
ICALT
M. Carmen Juan, Raffaela Canu, Miguelón Giménez
2008 J jnl
Comput. Medical Imaging Graph.
Mario Ortega, M. Carmen Juan, Mariano Alcañiz Raya, José-Antonio Gil-Gómez, Carlos Monserrat
2008 conf
CEIG
David Pérez, M. Carmen Juan
2008 conf
GAMEON
M. Carmen Juan, David Furió, Ramón Mollá Vayá, M. José Vicent, Roberto Vivó, Miguelón Giménez
2008 conf
CEIG
M. Carmen Juan
2008 conf
GAMEON
Iñigo Barona, Ramón Mollá Vayá, Francisco López Luro, M. Carmen Juan
2005 J jnl
Cyberpsychology Behav. Soc. Netw.
Cristina Botella, M. Carmen Juan, Rosa María Baños, Mariano Alcañiz Raya, Veronica Guillen, Beatriz Rey
1999 B conf
Image Processing
Christian Juan Knoll, Mariano Luis Alcañiz Raya, Carlos Monserrat, Vicente Grau Colomer, M. Carmen Juan
1997 B conf
Image Processing
Carlos Monserrat, Mariano Luis Alcañiz Raya, M. Carmen Juan, Vicente Grau Colomer, Salvador Estela Albalat
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)