Karim Djemame

148 papers A 2B 4C 19Misc 13Journal 47Unranked 56
YearRankTypeTitle / Venue / Authors
2026 J jnl
Future Gener. Comput. Syst.
Fatemeh Banaie, Karim Djemame, Abdulaziz Alhindi, Vasilios I. Kelefouras
2026 J jnl
IEEE Access
Dino Budi Prakoso, Muhammad Salman, Riri Fitri Sari, Karim Djemame
2026 J jnl
Future Gener. Comput. Syst.
Shuyi Chen, Panagiotis Oikonomou, Zhengchang Hua, Nikos Tziritas, Karim Djemame, Nan Zhang, Georgios K. Theodoropoulos
2025 conf
ICA3PP (6)
Zhengchang Hua, Panagiotis Oikonomou, Karim Djemame, Nikos Tziritas, Georgios Theodoropoulos
2025 J jnl
CoRR
Zhengchang Hua, Panagiotis Oikonomou, Karim Djemame, Nikos Tziritas, Georgios Theodoropoulos
2025 J jnl
CoRR
Shuyi Chen, Panagiotis Oikonomou, Zhengchang Hua, Nikos Tziritas, Karim Djemame, Nan Zhang, Georgios Theodoropoulos
2025 ed.
GECON
Maurizio Naldi, Karim Djemame, Jörn Altmann, José Ángel Bañares
2025 J jnl
CoRR
Zeinab Nezami, Syed Danial Ali Shah, Maryam Hafeez, Karim Djemame, Syed Ali Raza Zaidi
2025 J jnl
Frontiers Commun. Networks
Zeinab Nezami, Syed Danial Ali Shah, Maryam Hafeez, Karim Djemame, Syed Ali Raza Zaidi
2025 conf
ICC
Zeinab Nezami, Maryam Hafeez, Karim Djemame, Syed Ali Raza Zaidi
2025 Misc conf
UCC
Karim Djemame, Ben Norton
2025 Misc conf
UCC
Latifah Alsalem, Karim Djemame
2025 J jnl
Frontiers Artif. Intell.
Zeinab Nezami, Syed Ali Raza Zaidi, Maryam Hafeez, Jie Xu, Karim Djemame
2024 Misc conf
WSC
Zhengchang Hua, Karim Djemame, Nikos Tziritas, Georgios Theodoropoulos
2024 conf
GECON
Shuyi Chen, Panagiotis Oikonomou, Zhengchang Hua, Nikos Tziritas, Karim Djemame, Nan Zhang, Georgios Theodoropoulos
2024 J jnl
CoRR
Fatemeh Banaie, Karim Djemame, Abdulaziz Alhindi, Vasilios I. Kelefouras
2024 Misc conf
UCC
Latifah Alsalem, Karim Djemame
2024 J jnl
CoRR
Zeinab Nezami, Maryam Hafeez, Karim Djemame, Syed Ali Raza Zaidi
2024 C conf
WINCOM
Maha Alruwail, Karim Djemame, Li Zhang
2024 Misc conf
UCC
Abdulaziz Alhindi, Karim Djemame
2024 conf
GECON
Raulian Chiorescu, Karim Djemame
2023 ed.
GECON
José Ángel Bañares, Jörn Altmann, Orna Agmon Ben-Yehuda, Karim Djemame, Vlado Stankovski, Bruno Tuffin
2022 J jnl
Int. J. Parallel Program.
Vasilios I. Kelefouras, Karim Djemame, Georgios Keramidas, Nikolaos S. Voros
2022 conf
GECON
Fatemeh Banaie, Karim Djemame
2022 Misc conf
UCC
Angel Cañete, Karim Djemame, Mercedes Amor, Lidia Fuentes, Abdullah Fawaz Aljulayfi
2022 C conf
CLOSER
Karim Djemame, Daniel Datsev, Vasilios I. Kelefouras
2022 Misc conf
UCC
Abdulaziz Alhindi, Karim Djemame, Fatemeh Banaie Heravan
2022 conf
GECON
Karim Djemame
2022 J jnl
J. Parallel Distributed Comput.
Vasilios I. Kelefouras, Karim Djemame
2021 C conf
CLOSER
Abdullah Fawaz Aljulayfi, Karim Djemame
2021 conf
SAMOS
Vasilios I. Kelefouras, Karim Djemame, Georgios Keramidas, Nikolaos S. Voros
2021 J jnl
IEEE Access
Zeinab Nezami, Kamran Zamanifar, Karim Djemame, Evangelos Pournaras
2021 ed.
GECON
Konstantinos Tserpes, Jörn Altmann, José Ángel Bañares, Orna Agmon Ben-Yehuda, Karim Djemame, Vlado Stankovski, Bruno Tuffin
2021 J jnl
Int. J. Parallel Emergent Distributed Syst.
Karim Djemame, Mohamed Bettaz
2021 conf
GECON
Karim Djemame
2021 conf
CLOSER (Selected Papers)
Abdullah Fawaz Aljulayfi, Karim Djemame
2020 J jnl
IEEE Access
Muhammad Ibrahim, Said Nabi, Abdullah Baz, Hosam Alhakami, Muhammad Summair Raza, Altaf Hussain, Khaled Salah, Karim Djemame
2020 J jnl
CoRR
Zeinab Nezami, Kamran Zamanifar, Karim Djemame, Evangelos Pournaras
2020 ed.
GECON
Karim Djemame, Jörn Altmann, José Ángel Bañares, Orna Agmon Ben-Yehuda, Vlado Stankovski, Bruno Tuffin
2020 J jnl
IEEE Trans. Sustain. Comput.
Richard E. Kavanagh, Karim Djemame, Jorge Ejarque, Rosa M. Badia, David García-Pérez
2020 conf
GECON
Karim Djemame, Hamish A. Carr
2020 Misc conf
UCC
Karim Djemame, Matthew Parker, Daniel Datsev
2020 J jnl
Int. J. Networked Distributed Comput.
Thongchai Chuachan, Karim Djemame, Somnuk Puangpronpitag
2019 J jnl
J. Supercomput.
Vasilios I. Kelefouras, Karim Djemame
2019 ed.
GECON
Karim Djemame, Jörn Altmann, José Ángel Bañares, Orna Agmon Ben-Yehuda, Maurizio Naldi
2019 J jnl
Future Gener. Comput. Syst.
Mohammad Aldossary, Karim Djemame, Ibrahim Alzamil, Alexandros Kostopoulos, Antonis Dimakis, Eleni Agiatzidou
2019 J jnl
J. Inf. Secur. Appl.
James Dyer, Martin E. Dyer, Karim Djemame
2019 J jnl
KSII Trans. Internet Inf. Syst.
Piyawad Kasabai, Karim Djemame, Somnuk Puangpronpitag
2019 J jnl
Concurr. Comput. Pract. Exp.
Richard E. Kavanagh, Karim Djemame
2018 conf
CF
Vasilios I. Kelefouras, Karim Djemame
2018 B conf
SEAA
Mohammad Aldossary, Karim Djemame
2018 C conf
CLOSER
Mohammad Aldossary, Karim Djemame
2018 Misc conf
HiPC
Vasilios I. Kelefouras, Karim Djemame
2017 ch.
New Technology, Big Data and the Law
Marcelo Corrales, Karim Djemame
2017 conf
UKPEW
Abdulaziz S. Alnori, Karim Djemame
2017 J jnl
IEEE Trans. Sustain. Comput.
Karim Djemame, Raimon Bosch, Richard E. Kavanagh, Pol Álvarez, Jorge Ejarque, Jordi Guitart, Lorenzo Blasi
2017 conf
GECON
Mohammad Aldossary, Ibrahim Alzamil, Karim Djemame
2017 J jnl
J. Cloud Comput.
Django Armstrong, Karim Djemame, Richard E. Kavanagh
2016 J jnl
IEEE Trans. Cloud Comput.
Karim Djemame, Django Armstrong, Jordi Guitart, Mario Macías
2016 Misc conf
UCC
Peter Garraghan, Yaser Al-Anii, Jon Summers, Harvey Thompson, Nik Kapur, Karim Djemame
2016 B conf
CLOUD
Richard E. Kavanagh, Django Armstrong, Karim Djemame
2016 conf
GECON
Karim Djemame, Richard E. Kavanagh, Django Armstrong, Francesc Lordan, Jorge Ejarque, Mario Macías, Raül Sirvent, Jordi Guitart, Rosa M. Badia
2016 conf
GECON
Ibrahim Alzamil, Karim Djemame
2016 Misc conf
UCC
Bernhard Primas, Peter Garraghan, Karim Djemame, Natalia V. Shakhlevich
2016 J jnl
CoRR
Karim Djemame, Django Armstrong, Richard E. Kavanagh, Jean-Christophe Deprez, Ana Juan Ferrer, David García-Pérez, Rosa M. Badia, Raül Sirvent, Jorge Ejarque, Yiannis Georgiou
2015 J jnl
Concurr. Comput. Pract. Exp.
Richard E. Kavanagh, Karim Djemame
2015 J jnl
Soc. Netw. Anal. Min.
Adriano Galati, Karim Djemame, Chris Greenhalgh
2015 J jnl
J. Cloud Comput.
Django Armstrong, Daniel Espling, Johan Tordsson, Karim Djemame, Erik Elmroth
2015 J jnl
Serv. Oriented Comput. Appl.
Sanaa Abdullah M. Sharaf, Karim Djemame
2015 conf
GECON
Richard E. Kavanagh, Django Armstrong, Karim Djemame, Davide Sommacampagna, Lorenzo Blasi
2015 conf
ICC Workshops
Django Armstrong, Richard E. Kavanagh, Karim Djemame
2014 J jnl
IEEE Trans. Intell. Transp. Syst.
Ben W. Kolosz, Susan Grant-Muller, Karim Djemame
2014 conf
GECON
Adriano Galati, Karim Djemame, Martyn Fletcher, Mark Jessop, Michael Weeks, John McAvoy
2014 C conf
SIN
Ahmad Kamal Ramli, Karim Djemame
2014 conf
ICT4S (Workshops)
Karim Djemame, Django Armstrong, Richard E. Kavanagh, Ana Juan Ferrer, David García-Pérez, David Antona, Jean-Christophe Deprez, Christophe Ponsard, David Ortiz, Mario Macías, Jordi Guitart, Francesc Lordan, Jorge Ejarque, Raül Sirvent, Rosa M. Badia, Michael Kammer, Odej Kao, Eleni Agiatzidou, Antonis Dimakis, Costas Courcoubetis, Lorenzo Blasi
2014 conf
UKPEW
Ibrahim Alzamil, Karim Djemame, Django Armstrong, Richard E. Kavanagh
2014 C conf
CLOSER
Silvana de Gyvés Avila, Karim Djemame
2014 J jnl
J. Syst. Softw.
Raid Alsoghayer, Karim Djemame
2014 J jnl
Future Gener. Comput. Syst.
Tom Kirkham, Django Armstrong, Karim Djemame, Ming Jiang
2013 conf
SOSE
Valentina Viduto, Paul Townend, Jie Xu, Karim Djemame, Alexey Bochenkov
2013 J jnl
Int. J. Cloud Comput.
Shahzad Ahmed Nizamani, Peter M. Dew, Karim Djemame
2013 C conf
ISORC
Anthony Sargeant, Paul Townend, Jie Xu, Karim Djemame
2013 C conf
CLOSER
Ming Jiang, James Byrne, Karsten Molka, Django Armstrong, Karim Djemame, Tom Kirkham
2013 conf
SOSE
Silvana de Gyvés Avila, Karim Djemame
2013 conf
SimuTools
Adriano Galati, Karim Djemame, Chris Greenhalgh
2013 J jnl
Environ. Model. Softw.
Ben W. Kolosz, Susan Grant-Muller, Karim Djemame
2013 conf
SOSE
Paul Townend, David Webster, Colin C. Venters, Vania Dimitrova, Karim Djemame, Lydia Lau, Jie Xu, Sarah Fores, Valentina Viduto, Charlie Dibsdale, Nick Taylor, Jim Austin, John McAvoy, Stephen Hobson
2013 conf
CloudCom (2)
Tom Kirkham, Brian Matthews, Keith G. Jeffery, Karim Djemame, Django Armstrong
2013 conf
IEEE SCC
Paul Townend, Valentina Viduto, David Webster, Karim Djemame, Lydia Lau, Vania Dimitrova, Jie Xu, Sarah Fores, Charlie Dibsdale, Jim Austin, John McAvoy, Stephen Hobson
2013 conf
CloudCom (1)
Jordi Guitart, Mario Macías, Karim Djemame, Tom Kirkham, Ming Jiang, Django Armstrong
2012 conf
ISORC Workshops
Paul Townend, Colin C. Venters, Lydia Lau, Karim Djemame, Vania Dimitrova, Alison Marshall, Jie Xu, Charlie Dibsdale, Nick Taylor, Jim Austin, John McAvoy, Martyn Fletcher, Stephen Hobson
2012 conf
DEST
Asif Sangrasi, Karim Djemame
2012 B conf
TrustCom
Tom Kirkham, Django Armstrong, Karim Djemame, Marcelo Corrales, Mariam Kiran, Iheanyi Nwankwo, Ming Jiang, Nikolaus Forgó
2012 conf
WISE Workshops
Adriano Galati, Karim Djemame, Martyn Fletcher, Mark Jessop, Michael Weeks, Simon J. Hickinbotham, John McAvoy
2012 conf
HASE
Anthony Sargeant, Paul Townend, Jie Xu, Karim Djemame
2012 J jnl
Future Gener. Comput. Syst.
Ana Juan Ferrer, Francisco Hernández-Rodriguez, Johan Tordsson, Erik Elmroth, Ahmed Ali-Eldin, Csilla Zsigri, Raül Sirvent, Jordi Guitart, Rosa M. Badia, Karim Djemame, Wolfgang Ziegler, Theo Dimitrakos, Srijith K. Nair, George Kousiouris, Kleopatra Konstanteli, Theodora A. Varvarigou, Benoit Hudzia, Alexander Kipp, Stefan Wesner, Marcelo Corrales, Nikolaus Forgó, Tabassum Sharif, Craig Sheridan
2012 conf
Wireless Days
Adriano Galati, Karim Djemame, Chris Greenhalgh
2012 Misc conf
DCAI
Asif Sangrasi, Karim Djemame
2012 conf
ICITST
Tom Kirkham, Karim Djemame, Mariam Kiran, Ming Jiang, Django Armstrong, George Kousiouris, George Vafiadis, Athanasia Evangelinou
2012 conf
Euro-Par Workshops
Django Armstrong, Daniel Espling, Johan Tordsson, Karim Djemame, Erik Elmroth
2012 C conf
CloudCom
Afnan Ullah Khan, Manuel Oriol, Mariam Kiran, Ming Jiang, Karim Djemame
2012 conf
GECON
Richard E. Kavanagh, Karim Djemame
2012 conf
Euro-Par
Erik Elmroth, Paraskevi Fragopoulou, Artur Andrzejak, Ivona Brandic, Karim Djemame, Paolo Romano
2011 conf
EPEW
Richard E. Kavanagh, Karim Djemame
2011 J jnl
Int. J. Parallel Emergent Distributed Syst.
Abdulla Othman, Iain Gourlay, Karim Djemame
2011 J jnl
Concurr. Comput. Pract. Exp.
Karim Djemame, James Padgett, Iain Gourlay, Django Armstrong
2011 C conf
CloudCom
Björn-Ole Gerckens, Karim Djemame, Marc de Kamps
2011 C conf
CLOSER
Django Armstrong, Karim Djemame
2011 conf
ServiceWave
Rosa M. Badia, Marcelo Corrales, Theo Dimitrakos, Karim Djemame, Erik Elmroth, Ana Juan Ferrer, Nikolaus Forgó, Jordi Guitart, Francisco Hernández-Rodriguez, Benoit Hudzia, Alexander Kipp, Kleopatra Konstanteli, George Kousiouris, Srijith K. Nair, Tabassum Sharif, Craig Sheridan, Raül Sirvent, Johan Tordsson, Theodora A. Varvarigou, Stefan Wesner, Wolfgang Ziegler, Csilla Zsigri
2011 J jnl
Comput. J.
Django Armstrong, Karim Djemame
2011 conf
SOSE
Colin C. Venters, Paul Townend, Lydia Lau, Karim Djemame, Vania Dimitrova, Alison Marshall, Jie Xu, Charlie Dibsdale, Nick Taylor, Jim Austin, John McAvoy, Martyn Fletcher, Stephen Hobson
2011 C conf
CloudCom
Django Armstrong, Karim Djemame, Srijith Krishnan Nair, Johan Tordsson, Wolfgang Ziegler
2011 C conf
DASC
Mariam Kiran, Ming Jiang, Django Armstrong, Karim Djemame
2010 conf
GCA
Raid Alsoghayer, Karim Djemame
2010 C conf
CIT
Anthony Sargeant, David Webster, Karim Djemame, Jie Xu
2010 conf
ServiceWave Workshops
Andy Lawrence, Karim Djemame, Oliver Wäldrich, Wolfgang Ziegler, Csilla Zsigri
2009 conf
GCA
Sanaa Abdullah M. Sharaf, Karim Djemame
2009 C conf
HPCC
Iain Gourlay, Karim Djemame, James Padgett
2009 conf
AINA Workshops
James Padgett, Karim Djemame, Iain Gourlay, Django Armstrong
2008 conf
GECON
Dominic Battré, Karim Djemame, Iain Gourlay, Matthias Hovestadt, Odej Kao, James Padgett, Kerstin Voß, Daniel Warneke
2007 J jnl
Int. J. Bus. Process. Integr. Manag.
Duncan Russell, Peter M. Dew, Karim Djemame
2007 conf
GECON
Kerstin Voß, Karim Djemame, Iain Gourlay, James Padgett
2007 C conf
SecureComm
Dominic Battré, Karim Djemame, Odej Kao, Kerstin Voß
2007 conf
User Modeling
Minh Dang Thang, Vania Dimitrova, Karim Djemame
2006 B conf
e-Science
Karim Djemame, Iain Gourlay, James Padgett, Georg Birkenheuer, Matthias Hovestadt, Odej Kao, Kerstin Voß
2005 conf
ICIC (2)
Jin Wu, Karim Djemame
2005 J jnl
Comput. J.
Mohammed H. Haji, Iain Gourlay, Karim Djemame, Peter M. Dew
2005 conf
ICCNMC
Jin Wu, Karim Djemame
2005 conf
EGC
James Padgett, Karim Djemame, Peter M. Dew
2005 conf
ICCSA (4)
James Padgett, Mohammed H. Haji, Karim Djemame
2005 conf
IEEE SCC
Duncan Russell, Peter M. Dew, Karim Djemame
2004 conf
ICCSA (2)
Abdulla Othman, Karim Djemame, Iain Gourlay
2004 A conf
IPDPS
Mohammed H. Haji, Peter M. Dew, Karim Djemame, Iain Gourlay
2004 conf
FORTE Workshops
Iain Gourlay, Mohammed H. Haji, Karim Djemame, Peter M. Dew
2004 J jnl
Concurr. Pract. Exp.
Iain Gourlay, Peter M. Dew, Karim Djemame, John F. Snowdon, Gordon A. Russell
2003 C conf
CLUSTER
Abdulla Othman, Peter M. Dew, Karim Djemame, Iain Gourlay
2003 conf
ICON
Somnuk Puangpronpitag, Roger Boyle, Karim Djemame
2002 A conf
IPDPS
Iain Gourlay, Peter M. Dew, Karim Djemame
2002 conf
ICON
Riri Fitri Sari, Karim Djemame
2002 J jnl
Simul.
Karim Djemame, Mourad Kara
2001 J jnl
Comput. Commun.
Karim Djemame, Mourad Kara
2000 conf
ICON
Karim Djemame, Mourad Kara
2000 J jnl
Comput. Commun.
Karim Djemame, Mourad Kara, R. S. Banwait
1999
Karim Djemame
1998 C conf
PDP
Karim Djemame, Mohamed Bettaz
1998 J jnl
J. Syst. Archit.
Karim Djemame, Dennis C. Gilles, Lewis M. Mackenzie, Mohamed Bettaz
1996 C conf
PDP
Karim Djemame, Dennis C. Gilles, Lewis M. Mackenzie, Mohamed Bettaz
1996 Misc conf
WSC
Karim Djemame, Mohamed Bettaz, Dennis C. Gilles, Lewis M. Mackenzie
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)