Vassilis Christophides

161 papers A* 10A 7B 18C 3Misc 9Journal 53Unranked 48
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Nikolaos Myrtakis, Ioannis Tsamardinos, Vassilis Christophides
2025 conf
AINA (2)
Jean-Christophe Ricklin, Ines Ben Amor, Raïd Mansi, Vassilis Christophides, Hajer Baazaoui
2025 conf
KDD (1)
Nikolaos Myrtakis, Ioannis Tsamardinos, Vassilis Christophides
2025 J jnl
Inf. Syst.
Tiago Brasileiro Araújo, Vasilis Efthymiou, Vassilis Christophides, Evaggelia Pitoura, Kostas Stefanidis
2025 J jnl
CoRR
Ilias Azizi, Karima Echihabi, Themis Palpanas, Vassilis Christophides
2024 J jnl
Future Gener. Comput. Syst.
Patient Ntumba, Nikolaos Georgantas, Vassilis Christophides
2024 conf
Tannen's Festschrift
Nikolaos Myrtakis, Ioannis Tsamardinos, Vassilis Christophides
2024 A* conf
NeurIPS
Etienne Vareille, Michele Linardi, Ioannis Tsamardinos, Vassilis Christophides
2024 J jnl
ACM Trans. Knowl. Discov. Data
George Paterakis, Stefanos Fafalios, Paulos Charonyktakis, Vassilis Christophides, Ioannis Tsamardinos
2024 J jnl
CoRR
Nikolaos Fanourakis, Fatia Lekbour, Vasilis Efthymiou, Guillaume Renton, Vassilis Christophides
2024 conf
ICAART (3)
Jean-Christophe Ricklin, Ines Ben Amor, Raïd Mansi, Vassilis Christophides, Hajer Baazaoui Zghal
2023 J jnl
VLDB J.
Antonios Ntroumpogiannis, Michail Giannoulis, Nikolaos Myrtakis, Vassilis Christophides, Eric Simon, Ioannis Tsamardinos
2023 B conf
DSAA
Etienne Vareille, Adel Abbas, Michele Linardi, Vassilis Christophides
2023 conf
ISWC (Posters/Demos/Industry)
Nikolaos Fanourakis, Christos Kontousias, Vasilis Efthymiou, Vassilis Christophides, Dimitris Plexousakis
2023 J jnl
Data Min. Knowl. Discov.
Nikolaos Fanourakis, Vasilis Efthymiou, Dimitris Kotzinos, Vassilis Christophides
2023 A* conf
ICCV
Nicolas Larue, Ngoc-Son Vu, Vitomir Struc, Peter Peer, Vassilis Christophides
2023 B conf
ESWC
Nikolaos Fanourakis, Vasilis Efthymiou, Vassilis Christophides, Dimitris Kotzinos, Evaggelia Pitoura, Kostas Stefanidis
2023 C conf
IGARSS
Adel Abbas, Michele Linardi, Etienne Vareille, Vassilis Christophides, Claudia Paris
2022 J jnl
CoRR
Antonios Ntroumpogiannis, Michail Giannoulis, Nikolaos Myrtakis, Vassilis Christophides, Eric Simon, Ioannis Tsamardinos
2022 J jnl
CoRR
Nikolaos Fanourakis, Vasilis Efthymiou, Dimitris Kotzinos, Vassilis Christophides
2022 B conf
SMARTCOMP
Patient Ntumba, Nikolaos Georgantas, Vassilis Christophides
2022 J jnl
CoRR
Nicolas Larue, Ngoc-Son Vu, Vitomir Struc, Peter Peer, Vassilis Christophides
2021 B conf
EDBT
Nikolaos Myrtakis, Vassilis Christophides, Eric Simon
2021 J jnl
ACM Comput. Surv.
Vassilis Christophides, Vasilis Efthymiou, Themis Palpanas, George Papadakis, Kostas Stefanidis
2021 conf
FMEC
Patient Ntumba, Nikolaos Georgantas, Vassilis Christophides
2021 B conf
IJCB
Sandip Purnapatra, Nic Smalt, Keivan Bahmani, Priyanka Das, David Yambay, Amir Mohammadi, Anjith George, Thirimachos Bourlai, Sébastien Marcel, Stephanie Schuckers, Meiling Fang, Naser Damer, Fadi Boutros, Arjan Kuijper, Alperen Kantarci, Basar Demir, Zafer Yildiz, Zabi Ghafoory, Hasan Dertli, Hazim Kemal Ekenel, Son Vu, Vassilis Christophides, Dashuang Liang, Guanghao Zhang, Zhanlong Hao, Junfu Liu, Yufeng Jin, Samo Liu, Samuel Huang, Salieri Kuei, Jag Mohan Singh, Raghavendra Ramachandra
2021 A conf
CIKM
Vasilis Efthymiou, Kostas Stefanidis, Evaggelia Pitoura, Vassilis Christophides
2021 J jnl
CoRR
Nikolaos Myrtakis, Ioannis Tsamardinos, Vassilis Christophides
2021 A* conf
ICDE
Nikolaos Myrtakis, Ioannis Tsamardinos, Vassilis Christophides
2021 conf
EdgeSys@EuroSys
Patient Ntumba, Nikolaos Georgantas, Vassilis Christophides
2020 J jnl
CoRR
Vasilis Efthymiou, Kostas Stefanidis, Vassilis Christophides
2020 J jnl
IEEE Trans. Big Data
Vasilis Efthymiou, Kostas Stefanidis, Vassilis Christophides
2020 conf
MedComNet
Flavia Salutari, Diego N. da Hora, Matteo Varvello, Renata Teixeira, Vassilis Christophides, Dario Rossi
2020 conf
EDBT/ICDT Workshops
Iordanis Xanthopoulos, Ioannis Tsamardinos, Vassilis Christophides, Eric Simon, Alejandro Salinger
2019 J jnl
Mach. Learn.
Ioannis Tsamardinos, Giorgos Borboudakis, Pavlos Katsogridakis, Polyvios Pratikakis, Vassilis Christophides
2019 B conf
MDM
Rachit Agarwal, Shaan Chopra, Vassilis Christophides, Nikolaos Georgantas, Valérie Issarny
2019 J jnl
CoRR
Vassilis Christophides, Vasilis Efthymiou, Themis Palpanas, George Papadakis, Kostas Stefanidis
2019 B conf
EDBT
Vasilis Efthymiou, George Papadakis, Kostas Stefanidis, Vassilis Christophides
2019 J jnl
CoRR
Vasilis Efthymiou, George Papadakis, Kostas Stefanidis, Vassilis Christophides
2018 conf
SIGCOMM Posters and Demos
Diego N. da Hora, Dario Rossi, Vassilis Christophides, Renata Teixeira
2018 B conf
PAM
Diego Neves da Hora, Alemnew Sheferaw Asrese, Vassilis Christophides, Renata Teixeira, Dario Rossi
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Vassilis Christophides
2018 A* conf
ICDE
Vasilis Efthymiou, George Papadakis, Kostas Stefanidis, Vassilis Christophides
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Sihem Amer-Yahia, Themis Palpanas, Mikalai Tsytsarau, Sofia Kleisarchaki, Ahlame Douzal, Vassilis Christophides
2017 C conf
ISCC
Gevorg Poghosyan, Ioannis Pefkianakis, Pascal Le Guyadec, Vassilis Christophides
2017 J jnl
CoRR
Ioannis Tsamardinos, Giorgos Borboudakis, Pavlos Katsogridakis, Polyvios Pratikakis, Vassilis Christophides
2017 conf
ISWC (1)
Vasilis Efthymiou, Oktie Hassanzadeh, Mariano Rodriguez-Muro, Vassilis Christophides
2017 A* conf
ICDE
Kostas Stefanidis, Vassilis Christophides, Vasilis Efthymiou
2016 J jnl
J. ACM
Floris Geerts, Thomas Unger, Grigoris Karvounarakis, Irini Fundulaki, Vassilis Christophides
2016 B conf
EDBT
Katsiaryna Mirylenka, Vassilis Christophides, Themis Palpanas, Ioannis Pefkianakis, Martin May
2016 J jnl
J. Comput. Sci. Technol.
Zeinab Hmedeh, Harris Kourdounakis, Vassilis Christophides, Cédric du Mouza, Michel Scholl, Nicolas Travers
2016 J jnl
CoRR
Nelly Vouzoukidou, Bernd Amann, Vassilis Christophides
2016 conf
ANT/SEIT
Gevorg Poghosyan, Ioannis Pefkianakis, Pascal Le Guyadec, Vassilis Christophides
2016 B conf
EDBT
Vasilis Efthymiou, Kostas Stefanidis, Vassilis Christophides
2016 J jnl
CoRR
Sofia Kleisarchaki, Sihem Amer-Yahia, Ahlame Douzal Chouakria, Vassilis Christophides
2016 conf
Internet-QoE@SIGCOMM
Michalis Katsarakis, Renata Cruz Teixeira, Maria Papadopouli, Vassilis Christophides
2015 conf
IEEE BigData
Vasilis Efthymiou, Kostas Stefanidis, Vassilis Christophides
2015 book
Vassilis Christophides, Vasilis Efthymiou, Kostas Stefanidis
2015 A conf
CIKM
Sofia Kleisarchaki, Sihem Amer-Yahia, Ahlame Douzal Chouakria, Vassilis Christophides
2015 J jnl
SIGMOD Rec.
Vassilis Christophides, Themis Palpanas
2014 conf
WWW (Companion Volume)
Kostas Stefanidis, Vasilis Efthymiou, Melanie Herschel, Vassilis Christophides
2014 A conf
CIKM
Nelly Vouzoukidou, Bernd Amann, Vassilis Christophides
2014 A ed.
ICDT
Nicole Schweikardt, Vassilis Christophides, Vincent Leroy
2014 B ed.
EDBT
Sihem Amer-Yahia, Vassilis Christophides, Anastasios Kementsietsidis, Minos N. Garofalakis, Stratos Idreos, Vincent Leroy
2014 ed.
EDBT/ICDT Workshops
K. Selçuk Candan, Sihem Amer-Yahia, Nicole Schweikardt, Vassilis Christophides, Vincent Leroy
2014 J jnl
Int. J. Web Inf. Syst.
Nicolas Travers, Zeinab Hmedeh, Nelly Vouzoukidou, Cédric du Mouza, Vassilis Christophides, Michel Scholl
2014 conf
IISA
Aleka Seliniotaki, George Tzagkarakis, Vassilis Christophides, Panagiotis Tsakalides
2014 J jnl
Int. J. Monit. Surveillance Technol. Res.
George Tzagkarakis, Aleka Seliniotaki, Vassilis Christophides, Panagiotis Tsakalides
2013 A conf
ICDT
Floris Geerts, Grigoris Karvounarakis, Vassilis Christophides, Irini Fundulaki
2013 J jnl
Knowl. Inf. Syst.
Giorgos Flouris, George Konstantinidis, Grigoris Antoniou, Vassilis Christophides
2013 J jnl
ACM Trans. Database Syst.
Vicky Papavasileiou, Giorgos Flouris, Irini Fundulaki, Dimitris Kotzinos, Vassilis Christophides
2013 ed.
WOD
Vassilis Christophides, Dan Vodislav
2013 conf
In Search of Elegance in the Theory and Practice of Computation
Grigoris Karvounarakis, Irini Fundulaki, Vassilis Christophides
2013 J jnl
Ingénierie des Systèmes d Inf.
Zeinab Hmedeh, Harris Kourdounakis, Vassilis Christophides, Cédric du Mouza, Michel Scholl, Nicolas Travers
2012 conf
ISIP
Sophia Kleisarchaki, Dimitris Kotzinos, Ioannis Tsamardinos, Vassilis Christophides
2012 J jnl
CoRR
Yannis Stavrakas, George Papastefanatos, Theodore Dalamagas, Vassilis Christophides
2012 conf
WOD
Sören Auer, Theodore Dalamagas, Helen E. Parkinson, François Bancilhon, Giorgos Flouris, Dimitris Sacharidis, Peter Buneman, Dimitris Kotzinos, Yannis Stavrakas, Vassilis Christophides, George Papastefanatos, Kostas Thiveos
2012 B conf
EDBT
Petros Tsialiamanis, Lefteris Sidirourgos, Irini Fundulaki, Vassilis Christophides, Peter Boncz
2012 J jnl
Inf. Syst.
Yannis Theoharis, George F. Georgakopoulos, Vassilis Christophides
2012 A conf
CIKM
Nelly Vouzoukidou, Bernd Amann, Vassilis Christophides
2012 J jnl
Ingénierie des Systèmes d Inf.
Jordi Creus Tomàs, Bernd Amann, Vassilis Christophides, Nicolas Travers, Dan Vodislav
2012 B conf
EDBT
Zeinab Hmedeh, Harris Kourdounakis, Vassilis Christophides, Cédric du Mouza, Michel Scholl, Nicolas Travers
2011 B conf
WISE
Zeinab Hmedeh, Nelly Vouzoukidou, Nicolas Travers, Vassilis Christophides, Cédric du Mouza, Michel Scholl
2011 J jnl
ACM Trans. Web
Dimitris Zeginis, Yannis Tzitzikas, Vassilis Christophides
2011 J jnl
IEEE Internet Comput.
Yannis Theoharis, Irini Fundulaki, Grigoris Karvounarakis, Vassilis Christophides
2010 J jnl
ERCIM News
Yannis Tzitzikas, Vassilis Christophides
2009 Misc conf
ISWC
Giorgos Flouris, Irini Fundulaki, Panagiotis Pediaditis, Yannis Theoharis, Vassilis Christophides
2009 ch.
Database Technologies: Concepts, Methodologies, Tools, and Applications
Ioanna Koffina, Giorgos Serfiotis, Vassilis Christophides, Val Tannen
2009 Misc conf
ISWC
Vicky Papavassiliou, Giorgos Flouris, Irini Fundulaki, Dimitris Kotzinos, Vassilis Christophides
2009 conf
Workshop on the Theory and Practice of Provenance
Panagiotis Pediaditis, Giorgos Flouris, Irini Fundulaki, Vassilis Christophides
2009 ch.
Encyclopedia of Database Systems
Vassilis Christophides
2008 A conf
ECAI
George Konstantinidis, Giorgos Flouris, Grigoris Antoniou, Vassilis Christophides
2008 A* conf
ICDE
Periklis Georgiadis, Ioannis Kapantaidakis, Vassilis Christophides, Elhadji Mamadou Nguer, Nicolas Spyratos
2008 J jnl
Distributed Parallel Databases
Lefteris Sidirourgos, Giorgos Kokkinidis, Theodore Dalamagas, Vassilis Christophides, Timos K. Sellis
2008 J jnl
IEEE Trans. Knowl. Data Eng.
Yannis Theoharis, Yannis Tzitzikas, Dimitris Kotzinos, Vassilis Christophides
2008 ch.
The Learning Grid Handbook
Kevin Keenoy, Vassilis Christophides, George Papamarkos, Alexandra Poulovassilis, Dimitris Kotzinos, Philippe Rigaux, Nicolas Spyratos, Peter T. Wood
2008 ed.
SWDB-ODBIS
Vassilis Christophides, Martine Collard, Claudio Gutierrez
2007 conf
DELOS
Stratis Viglas, Theodore Dalamagas, Vassilis Christophides, Timos K. Sellis, Aggeliki Dimitriou
2007 conf
SIGDOC
Periklis Georgiadis, Vassilis Christophides, Nicolas Spyratos
2007 J jnl
Int. J. Web Based Learn. Teach. Technol.
Yannis Tzitzikas, Vassilis Christophides, Giorgos Flouris, Dimitris Kotzinos, Hannu Markkanen, Dimitris Plexousakis, Nicolas Spyratos
2007 conf
SWDB-ODBIS
George Konstantinidis, Giorgos Flouris, Grigoris Antoniou, Vassilis Christophides
2007 conf
ISWC/ASWC
Dimitris Zeginis, Yannis Tzitzikas, Vassilis Christophides
2007 conf
SWDB-ODBIS
Yannis Theoharis, George F. Georgakopoulos, Vassilis Christophides
2007 J jnl
SIGMOD Rec.
Vassilis Christophides, Peter Buneman
2007 J jnl
ERCIM News
Dimitris Kotzinos, Vassilis Christophides, Liisa Ilomäki
2006 conf
EC-TEL Workshops
Yannis Tzitzikas, Vassilis Christophides, Giorgos Flouris, Dimitris Kotzinos, Hannu Markkanen, Dimitris Plexousakis, Nicolas Spyratos
2006 J jnl
Int. J. Semantic Web Inf. Syst.
Ioanna Koffina, Giorgos Serfiotis, Vassilis Christophides, Val Tannen
2006 ch.
Semantic Web and Peer-to-Peer
George Kokkinidis, Lefteris Sidirourgos, Vassilis Christophides
2006 B conf
EC-TEL
Yannis Tzitzikas, Vassilis Christophides, Giorgos Flouris, Dimitris Kotzinos, Hannu Markkanen, Dimitris Plexousakis, Nicolas Spyratos
2005 Misc conf
ISWC
Yannis Theoharis, Vassilis Christophides, Gregory Karvounarakis
2005 Misc conf
ISWC
Giorgos Serfiotis, Ioanna Koffina, Vassilis Christophides, Val Tannen
2005 conf
Semantic Interoperability and Integration
Ioanna Koffina, Giorgos Serfiotis, Vassilis Christophides, Val Tannen, Alin Deutsch
2005 A* conf
WWW
Dimitris Kotzinos, Sofia Pediaditaki, Apostolos Apostolidis, Nikolaos Athanasis, Vassilis Christophides
2005 conf
Federation over the Web
Nicolas Spyratos, Vassilis Christophides
2005 Misc conf
ISWC
Matoula Magiridou, S. Sahtouris, Vassilis Christophides, Manolis Koubarakis
2005 ch.
Encyclopedia of Information Science and Technology (V)
Grigoris Antoniou, Vassilis Christophides, Dimitris Plexousakis
2004 B ed.
EDBT
Elisa Bertino, Stavros Christodoulakis, Dimitris Plexousakis, Vassilis Christophides, Manolis Koubarakis, Klemens Böhm, Elena Ferrari
2004 Misc conf
ISWC
Nikolaos Athanasis, Vassilis Christophides, Dimitris Kotzinos
2004 ed.
MMGPS
Kevin Keenoy, Alexandra Poulovassilis, Vassilis Christophides
2004 J jnl
J. Web Semant.
Vassilis Christophides, Gregory Karvounarakis, Dimitris Plexousakis, Michel Scholl, Sotirios Tourtounis
2004 B conf
ICWE
Kevin Keenoy, Alexandra Poulovassilis, Vassilis Christophides, Philippe Rigaux, George Papamarkos, Aimilia Magkanaraki, Miltos Stratakis, Nicolas Spyratos, Peter T. Wood
2004 J jnl
SIGMOD Rec.
Kevin Keenoy, Alexandra Poulovassilis, Vassilis Christophides, George Loizou, Giorgos Kokkinidis, George Samaras, Nicolas Spyratos
2004 conf
EDBT Workshops
Giorgos Kokkinidis, Vassilis Christophides
2004 J jnl
J. Web Semant.
Aimilia Magkanaraki, Val Tannen, Vassilis Christophides, Dimitris Plexousakis
2003 conf
ICEIS (1)
Catherine E. Houstis, Spyros Lalis, Vassilis Christophides, Dimitris Plexousakis, Manolis Vavalis, Marios Pitikakis, Kyriakos Kritikos, Antonis Smardas
2003 A* conf
PODS
Richard Hull, Michael Benedikt, Vassilis Christophides, Jianwen Su
2003 ed.
WebDB
Vassilis Christophides, Juliana Freire
2003 A* conf
WWW
Vassilis Christophides, Dimitris Plexousakis, Michel Scholl, Sotirios Tourtounis
2003 conf
MMGPS
Kevin Keenoy, Vassilis Christophides
2003 J jnl
Comput. Networks
Gregory Karvounarakis, Aimilia Magkanaraki, Sofia Alexaki, Vassilis Christophides, Dimitris Plexousakis, Michel Scholl, Karsten Tolle
2003 conf
SWDB
Vassilis Christophides, Gregory Karvounarakis, Ioanna Koffina, Giorgos Kokkinidis, Aimilia Magkanaraki, Dimitris Plexousakis, Giorgos Serfiotis, Val Tannen
2003 J jnl
IEEE Data Eng. Bull.
Vassilis Christophides, Gregory Karvounarakis, Aimilia Magkanaraki, Dimitris Plexousakis, Val Tannen
2003 Misc conf
ISWC
Aimilia Magkanaraki, Val Tannen, Vassilis Christophides, Dimitris Plexousakis
2002 conf
WES
Catherine E. Houstis, Spyros Lalis, Vassilis Christophides, Dimitris Plexousakis, Manolis Vavalis, Marios Pitikakis, Kyriakos Kritikos, Antonis Smardas, Charalampos Gikas
2002 Misc conf
ISWC
Aimilia Magkanaraki, Sofia Alexaki, Vassilis Christophides, Dimitris Plexousakis
2002 Misc conf
FLAIRS
Nicolas Spyratos, Yannis Tzitzikas, Vassilis Christophides
2002 A* conf
WWW
Gregory Karvounarakis, Sofia Alexaki, Vassilis Christophides, Dimitris Plexousakis, Michel Scholl
2001 conf
TES
Vassilis Christophides, Richard Hull, Gregory Karvounarakis, Akhil Kumar, Geliang Tong, Ming Xiong
2001 J jnl
Intell.
Panos Constantopoulos, Vassilis Christophides, Dimitris Plexousakis
2001 conf
WebDB
Sofia Alexaki, Vassilis Christophides, Gregory Karvounarakis, Dimitris Plexousakis
2001 conf
BDA
Gregory Karvounarakis, Vassilis Christophides, Dimitris Plexousakis, Sofia Alexaki
2001 B conf
CoopIS
Vassilis Christophides, Richard Hull, Akhil Kumar
2001 J jnl
SIGMOD Rec.
Panos Constantopoulos, Vassilis Christophides, Dimitris Plexousakis
2001 conf
SemWeb
Sofia Alexaki, Vassilis Christophides, Gregory Karvounarakis, Dimitris Plexousakis, Karsten Tolle
2001 J jnl
IEEE Data Eng. Bull.
Vassilis Christophides, Richard Hull, Akhil Kumar, Jérôme Siméon
2000 conf
DELOS
Vassilis Christophides, Dimitris Plexousakis, Gregory Karvounarakis, Sofia Alexaki
2000 conf
ER (Workshops)
Sofia Alexaki, Vassilis Christophides, Gregory Karvounarakis, Dimitris Plexousakis, Karsten Tolle, Bernd Amann, Irini Fundulaki, Michel Scholl, Anne-Marie Vercoustre
2000 conf
SIGMOD Conference
Vassilis Christophides, Sophie Cluet, Jérôme Siméon
2000 J jnl
Int. J. Digit. Libr.
Yannis Velegrakis, Vassilis Christophides, Panos Constantopoulos
1999 conf
ECDL
Yannis Velegrakis, Vassilis Christophides, Panos Constantopoulos
1999 conf
NGITS
Vassilis Christophides, Catherine E. Houstis, Spyros Lalis, Hariklia Tsalapata
1998 J jnl
Netw. Inf. Syst. J.
Vassilis Christophides, Sophie Cluet, Guido Moerkotte, Jérôme Siméon
1998 J jnl
Comput. Networks
Alain Michard, Vassilis Christophides, Michel Scholl, Mike Stapleton, Dale C. Sutcliffe, Anne-Marie Vercoustre
1997 conf
ECDL
Vassilis Christophides, Martin Doerr, Irini Fundulaki
1997 conf
BDA
Vassilis Christophides, Sophie Cluet, Guido Moerkotte, Jérôme Siméon
1997 J jnl
Int. J. Digit. Libr.
Serge Abiteboul, Sophie Cluet, Vassilis Christophides, Tova Milo, Guido Moerkotte, Jérôme Siméon
1996 conf
SIGMOD Conference
Vassilis Christophides, Sophie Cluet, Guido Moerkotte
1994 conf
SIGMOD Conference
Vassilis Christophides, Serge Abiteboul, Sophie Cluet, Michel Scholl
1994 conf
ECHT
Vassilis Christophides, Antoine Rizk
1993 conf
BDA
Bernd Amann, Vassilis Christophides, Michel Scholl
1993 C conf
DEXA
Bernd Amann, Vassilis Christophides, Michel Scholl
tests/integration/test_elf_extractors.py
← Index tests/integration/test_elf_extractors.py python
"""
Integration tests for ELF-specific extractors.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

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


# ============================================================================
# ELFFeaturesExtractor Tests
# ============================================================================

class TestELFFeaturesExtractor:
    """Tests for ELFFeaturesExtractor class."""

    def test_extract_valid_elf(self, elf_binary_path, mock_logger):
        """Test extracting features from valid ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.models.dataclasses import ELFFeatures

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

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, ELFFeatures)

    def test_extract_header_data(self, elf_binary_path, mock_logger):
        """Test ELF header data extraction."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            assert result is not None
            # Check header fields
            assert isinstance(result.ei_class, int)
            assert isinstance(result.ei_data, int)
            assert isinstance(result.e_type, int)
            assert isinstance(result.e_machine, int)
            assert isinstance(result.e_entry, int)

    def test_extract_human_readable_strings(self, elf_binary_path, mock_logger):
        """Test human-readable string fields."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            assert result is not None
            assert result.ei_class_str in ['32-bit', '64-bit', 'unknown']
            assert result.ei_data_str in ['Little-endian', 'Big-endian', 'unknown']
            assert result.e_type_str is not None
            assert result.e_machine_str is not None

    def test_extract_security_properties(self, elf_binary_path, mock_logger):
        """Test security property extraction."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            assert result is not None
            # Security flags should be 0 or 1
            assert result.is_pie in [0, 1]
            assert result.has_canary in [0, 1]
            assert result.has_nx in [0, 1]
            assert result.has_relro in [0, 1]
            assert result.has_fortify in [0, 1]

    def test_extract_counts(self, elf_binary_path, mock_logger):
        """Test section/segment/symbol counts."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            assert result is not None
            assert result.number_of_segments >= 0
            assert result.number_of_sections >= 0
            assert result.number_of_symbols >= 0
            assert result.number_of_dynamic_symbols >= 0
            assert result.number_of_relocations >= 0
            assert result.number_of_dependencies >= 0

    def test_extract_build_info(self, elf_binary_path, mock_logger):
        """Test build information extraction."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            assert result is not None
            # Build ID may or may not be present
            if result.build_id is not None:
                assert isinstance(result.build_id, str)
            assert result.gnu_hash_present in [0, 1]
            assert result.has_debug_info in [0, 1]

    def test_extract_invalid_elf(self, pe_binary_path, mock_logger):
        """Test extraction with non-ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.extract()

            # Should return None for invalid ELF
            assert result is None


# ============================================================================
# ELFSectionExtractor Tests
# ============================================================================

class TestELFSectionExtractor:
    """Tests for ELFSectionExtractor class."""

    def test_extract_sections(self, elf_binary_path, mock_logger):
        """Test section extraction."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, list)
            assert len(result) > 0

    def test_section_properties(self, elf_binary_path, mock_logger):
        """Test section property extraction."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor
        from redb.models.dataclasses import ELFSection

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                section = result[0]
                assert isinstance(section, ELFSection)
                assert section.section_name is not None
                assert isinstance(section.section_type, int)
                assert isinstance(section.section_flags, int)
                assert section.section_entropy >= 0

    def test_section_hashes(self, elf_binary_path, mock_logger):
        """Test section hash computation."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                for section in result:
                    if section.section_sha256:
                        assert len(section.section_sha256) == 64
                    if section.section_md5:
                        assert len(section.section_md5) == 32


# ============================================================================
# ELFSegmentExtractor Tests
# ============================================================================

class TestELFSegmentExtractor:
    """Tests for ELFSegmentExtractor class."""

    def test_extract_segments(self, elf_binary_path, mock_logger):
        """Test segment extraction."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

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

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, list)

    def test_segment_properties(self, elf_binary_path, mock_logger):
        """Test segment property extraction."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor
        from redb.models.dataclasses import ELFSegment

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                segment = result[0]
                assert isinstance(segment, ELFSegment)
                assert isinstance(segment.segment_type, int)
                assert isinstance(segment.segment_flags, int)


# ============================================================================
# ELFSymbolExtractor Tests
# ============================================================================

class TestELFSymbolExtractor:
    """Tests for ELFSymbolExtractor class."""

    def test_extract_symbols(self, elf_binary_path, mock_logger):
        """Test symbol extraction."""
        from redb.extractors.elf_extractors.elf_symbols import ELFSymbolExtractor

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

            result = extractor.extract()

            # May be None if stripped
            if result is not None:
                assert isinstance(result, list)

    def test_symbol_properties(self, elf_binary_path, mock_logger):
        """Test symbol property extraction."""
        from redb.extractors.elf_extractors.elf_symbols import ELFSymbolExtractor
        from redb.models.dataclasses import ELFSymbol

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                symbol = result[0]
                assert isinstance(symbol, ELFSymbol)
                assert symbol.symbol_name is not None
                assert isinstance(symbol.symbol_type, int)
                assert isinstance(symbol.symbol_bind, int)


# ============================================================================
# ELFImportExtractor Tests
# ============================================================================

class TestELFImportExtractor:
    """Tests for ELFImportExtractor class."""

    def test_extract_imports(self, elf_binary_path, mock_logger):
        """Test import extraction."""
        from redb.extractors.elf_extractors.elf_imports import ELFImportExtractor

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

            result = extractor.extract()

            # May be None if no imports
            if result is not None:
                assert hasattr(result, 'elf_imports_total')

    def test_import_functions(self, elf_binary_path, mock_logger):
        """Test import function extraction."""
        from redb.extractors.elf_extractors.elf_imports import ELFImportExtractor
        from redb.models.dataclasses import ELFImport

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

            result = extractor.extract()

            if result is not None:
                assert isinstance(result, ELFImport)
                assert isinstance(result.elf_imports_total, int)


# ============================================================================
# ELFExportExtractor Tests
# ============================================================================

class TestELFExportExtractor:
    """Tests for ELFExportExtractor class."""

    def test_extract_exports(self, elf_binary_path, mock_logger):
        """Test export extraction."""
        from redb.extractors.elf_extractors.elf_exports import ELFExportExtractor

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

            result = extractor.extract()

            # May be None if no exports
            if result is not None:
                assert hasattr(result, 'elf_exports_total')

    def test_export_functions(self, elf_binary_path, mock_logger):
        """Test export function extraction."""
        from redb.extractors.elf_extractors.elf_exports import ELFExportExtractor
        from redb.models.dataclasses import ELFExport

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

            result = extractor.extract()

            if result is not None:
                assert isinstance(result, ELFExport)


# ============================================================================
# ELFDependencyExtractor Tests
# ============================================================================

class TestELFDependencyExtractor:
    """Tests for ELFDependencyExtractor class."""

    def test_extract_dependencies(self, elf_binary_path, mock_logger):
        """Test dependency extraction."""
        from redb.extractors.elf_extractors.elf_dependencies import ELFDependencyExtractor

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

            result = extractor.extract()

            # May be None if no dependencies
            if result is not None:
                assert isinstance(result, list)

    def test_dependency_properties(self, elf_binary_path, mock_logger):
        """Test dependency property extraction."""
        from redb.extractors.elf_extractors.elf_dependencies import ELFDependencyExtractor
        from redb.models.dataclasses import ELFDependency

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                dep = result[0]
                assert isinstance(dep, ELFDependency)
                assert dep.dependency_name is not None


# ============================================================================
# ELFRelocationExtractor Tests
# ============================================================================

class TestELFRelocationExtractor:
    """Tests for ELFRelocationExtractor class."""

    def test_extract_relocations(self, elf_binary_path, mock_logger):
        """Test relocation extraction."""
        from redb.extractors.elf_extractors.elf_relocations import ELFRelocationExtractor

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

            result = extractor.extract()

            # May be None if no relocations
            if result is not None:
                assert isinstance(result, list)

    def test_relocation_properties(self, elf_binary_path, mock_logger):
        """Test relocation property extraction."""
        from redb.extractors.elf_extractors.elf_relocations import ELFRelocationExtractor
        from redb.models.dataclasses import ELFRelocation

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                reloc = result[0]
                assert isinstance(reloc, ELFRelocation)
                assert isinstance(reloc.relocation_offset, int)
                assert isinstance(reloc.relocation_type, int)


# ============================================================================
# ELFNotesExtractor Tests
# ============================================================================

class TestELFNotesExtractor:
    """Tests for ELFNotesExtractor class."""

    def test_extract_notes(self, elf_binary_path, mock_logger):
        """Test notes extraction."""
        from redb.extractors.elf_extractors.elf_notes import ELFNotesExtractor

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

            result = extractor.extract()

            # May be None if no notes
            if result is not None:
                assert isinstance(result, list)

    def test_note_properties(self, elf_binary_path, mock_logger):
        """Test note property extraction."""
        from redb.extractors.elf_extractors.elf_notes import ELFNotesExtractor
        from redb.models.dataclasses import ELFNote

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

            result = extractor.extract()

            if result is not None and len(result) > 0:
                note = result[0]
                assert isinstance(note, ELFNote)
                assert note.note_name is not None
                assert isinstance(note.note_type, int)


# ============================================================================
# Integration Tests
# ============================================================================

class TestELFExtractorIntegration:
    """Integration tests for ELF extractors."""

    def test_all_extractors_valid_elf(self, elf_binary_path, mock_logger):
        """Test all ELF extractors with valid ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            features_ext = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            sections_ext = ELFSectionExtractor(elf_binary_path, mock_logger)
            segments_ext = ELFSegmentExtractor(elf_binary_path, mock_logger)

            features_result = features_ext.extract()
            sections_result = sections_ext.extract()
            segments_result = segments_ext.extract()

            # All should extract something
            assert features_result is not None
            assert sections_result is not None
            assert segments_result is not None

    def test_hash_consistency_across_extractors(self, elf_binary_path, mock_logger):
        """Test that hashes are consistent across all extractors."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            features_ext = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            sections_ext = ELFSectionExtractor(elf_binary_path, mock_logger)

            # Hashes should be the same
            assert features_ext.sha256 == sections_ext.sha256
            assert features_ext.md5 == sections_ext.md5
            assert features_ext.sha1 == sections_ext.sha1

    def test_clickhouse_tables_unique(self, elf_binary_path, mock_logger):
        """Test that each extractor has a unique ClickHouse table."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            features_ext = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            sections_ext = ELFSectionExtractor(elf_binary_path, mock_logger)
            segments_ext = ELFSegmentExtractor(elf_binary_path, mock_logger)

            tables = {
                features_ext.get_clickhouse_table(),
                sections_ext.get_clickhouse_table(),
                segments_ext.get_clickhouse_table(),
            }

            # All tables should be unique
            assert len(tables) == 3


# ============================================================================
# Advanced Binary Tests
# ============================================================================

class TestELFAdvancedBinary:
    """Tests using the hello_advanced binary."""

    def test_advanced_features_extraction(self, elf_advanced_binary_path, mock_logger):
        """Test feature extraction from advanced ELF binary."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_advanced_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            assert result.number_of_sections > 0

    def test_advanced_sections_extraction(self, elf_advanced_binary_path, mock_logger):
        """Test section extraction from advanced ELF binary."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFSectionExtractor(elf_advanced_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            assert len(result) > 0

            # Check for common ELF sections
            section_names = [s.section_name for s in result]
            # Most ELF files have .text section
            assert any('.text' in name for name in section_names)

    def test_advanced_segments_extraction(self, elf_advanced_binary_path, mock_logger):
        """Test segment extraction from advanced ELF binary."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFSegmentExtractor(elf_advanced_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            assert len(result) > 0


# ============================================================================
# Export Data Tests
# ============================================================================

class TestELFExtractorExportData:
    """Tests for export data preparation."""

    def test_features_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test ClickHouse export preparation for features."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

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

            result = extractor.prepare_export_data("ClickHouseExporter")

            assert result is not None
            data, column_names, column_type_names = result

            assert 'sha256' in column_names
            assert 'ei_class' in column_names
            assert 'e_machine' in column_names
            assert 'is_pie' in column_names

    def test_sections_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test ClickHouse export preparation for sections."""
        from redb.extractors.elf_extractors.elf_sections import ELFSectionExtractor

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

            result = extractor.prepare_export_data("ClickHouseExporter")

            if result is not None:
                data, column_names, column_type_names = result
                assert 'section_name' in column_names
                assert 'section_entropy' in column_names

    def test_segments_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test ClickHouse export preparation for segments."""
        from redb.extractors.elf_extractors.elf_segments import ELFSegmentExtractor

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

            result = extractor.prepare_export_data("ClickHouseExporter")

            if result is not None:
                data, column_names, column_type_names = result
                assert 'segment_type' in column_names