Ioannis K. Argyros

252 papers Journal 250
YearRankTypeTitle / Venue / Authors
2026 J jnl
J. Complex.
Amir Naseem, Krzysztof Gdawiec, Sania Qureshi, Ioannis K. Argyros, Muhammad Aziz ur Rehman, Amanullah Soomro, Evren Hincal, Kamyar Hosseini, Ausif Padder
2026 J jnl
Comput. Appl. Math.
Ioannis K. Argyros, Harmandeep Singh, Sunil Kumar, Janak Raj Sharma, Samundra Regmi, Michael I. Argyros
2025 J jnl
Math. Comput. Simul.
Chih-Wen Chang, Sania Qureshi, Ioannis K. Argyros, Francisco I. Chicharro, Amanullah Soomro
2025 J jnl
J. Complex.
Santhosh George, Muniyasamy M, Manjusree Gopal, Chandhini Godavarma, Ioannis K. Argyros
2025 J jnl
Algorithms
Santhosh George, Manjusree Gopal, Samhitha Bhide, Ioannis K. Argyros
2025 J jnl
Axioms
Ioannis K. Argyros, Stepan Shakhno, Mykhailo Shakhov
2025 J jnl
Axioms
Ioannis K. Argyros, Stepan Shakhno, Mykhailo Shakhov
2025 J jnl
Algorithms
Abhishek Kumar Pandey, Kedarnath Senapati, Ioannis K. Argyros, Pateel G. P.
2025 J jnl
Comput.
Nishant Kumar, Jai P. Jaiswal, Ioannis K. Argyros
2025 J jnl
Axioms
Shobha M. Erappa, Suma P. Bheemaiah, Santhosh George, Kanagaraj Karuppaiah, Ioannis K. Argyros
2025 J jnl
J. Comput. Appl. Math.
Doha A. Kattan, Umar Ishtiaq, Muhammad Farhan, Ioannis K. Argyros, Mohammad Akram, Samundra Regmi
2025 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Sania Qureshi, Amanullah Soomro, Ioannis K. Argyros, Krzysztof Gdawiec, Ali Akgül, Marwan Alquran
2024 J jnl
Axioms
Chih-Wen Chang, Sania Qureshi, Ioannis K. Argyros, Khair Muhammad Saraz, Evren Hincal
2024 J jnl
Axioms
Sania Qureshi, Francisco I. Chicharro, Ioannis K. Argyros, Amanullah Soomro, Jihan Alahmadi, Evren Hincal
2024 J jnl
Numer. Algorithms
Sania Qureshi, Ioannis K. Argyros, Amanullah Soomro, Krzysztof Gdawiec, Asif Ali Shaikh, Evren Hincal
2024 J jnl
Symmetry
Ajil Kunnarath, Santhosh George, Jidesh Padikkal, Ioannis K. Argyros
2024 J jnl
Symmetry
Ramandeep Behl, Ioannis K. Argyros
2024 J jnl
Axioms
Ibrahim Alraddadi, Muhammad Din, Umar Ishtiaq, Mohammad Akram, Ioannis K. Argyros
2024 J jnl
Axioms
Higinio Ramos, Ioannis K. Argyros, Ramandeep Behl, Hashim Alshehri
2024 J jnl
Axioms
Mohammad Akram, Salha Alshaikey, Umar Ishtiaq, Muhammad Farhan, Ioannis K. Argyros, Samundra Regmi
2024 J jnl
Algorithms
Ioannis K. Argyros, Santhosh George, Samundra Regmi, Christopher I. Argyros
2024 J jnl
Comput. Appl. Math.
Ramandeep Behl, Ioannis K. Argyros
2024 J jnl
Axioms
Indra Bate, Muniyasamy Murugan, Santhosh George, Kedarnath Senapati, Ioannis K. Argyros, Samundra Regmi
2024 J jnl
J. Complex.
Ioannis K. Argyros, Santhosh George
2024 J jnl
Comput. Appl. Math.
Santhosh George, Ajil Kunnarath, Ramya Sadananda, P. Jidesh, Ioannis K. Argyros
2024 J jnl
Axioms
Ioannis K. Argyros, Santhosh George, Samundra Regmi, Michael I. Argyros
2024 J jnl
Symmetry
Ioannis K. Argyros, Stepan Shakhno, Samundra Regmi, Halyna Yarmola, Michael I. Argyros
2023 J jnl
J. Appl. Math. Comput.
Santhosh George, Muhammed Saeed K, Ioannis K. Argyros, P. Jidesh
2023 J jnl
J. Comput. Sci.
Krzysztof Gdawiec, Ioannis K. Argyros, Sania Qureshi, Amanullah Soomro
2023 J jnl
Axioms
Khaleel Ahmad, Ghulam Murtaza, Salha Alshaikey, Umar Ishtiaq, Ioannis K. Argyros
2023 J jnl
J. Appl. Math. Comput.
Ramya Sadananda, Santhosh George, Ajil Kunnarath, Jidesh Padikkal, Ioannis K. Argyros
2023 J jnl
Comput. Appl. Math.
Samundra Regmi, Ioannis K. Argyros, Santhosh George, Michael I. Argyros
2023 J jnl
Symmetry
Umar Ishtiaq, Fahad Jahangeer, Doha A. Kattan, Ioannis K. Argyros
2023 J jnl
J. Comput. Appl. Math.
Christopher I. Argyros, Michael I. Argyros, Ioannis K. Argyros, Ángel Alberto Magreñán, Íñigo Sarría Martínez de Mendivil
2023 J jnl
Symmetry
Ioannis K. Argyros, Stepan Shakhno, Samundra Regmi, Halyna Yarmola
2023 J jnl
Axioms
Manoj K. Singh, Ioannis K. Argyros, Arvind K. Singh
2023 J jnl
Axioms
Umar Ishtiaq, Fahad Jahangeer, Doha A. Kattan, Ioannis K. Argyros, Samundra Regmi
2023 J jnl
Algorithms
Ioannis K. Argyros, Stepan Shakhno, Samundra Regmi, Halyna Yarmola
2023 J jnl
J. Complex.
Ioannis K. Argyros, Stepan Shakhno, Samundra Regmi, Halyna Yarmola
2023 J jnl
Comput.
Samundra Regmi, Ioannis K. Argyros, Stepan Shakhno, Halyna Yarmola
2022 J jnl
Symmetry
Samundra Regmi, Ioannis K. Argyros, Santhosh George, Christopher I. Argyros
2022 J jnl
J. Appl. Math. Comput.
Ioannis K. Argyros, Debasis Sharma, Christopher I. Argyros, Sanjaya Kumar Parhi, Shanta Kumari Sunanda
2022 J jnl
Symmetry
Krishnendu Remesh, Ioannis K. Argyros, Muhammed Saeed K, Santhosh George, Jidesh Padikkal
2022 J jnl
J. Comput. Appl. Math.
Alejandro Moysi, Michael I. Argyros, Ioannis K. Argyros, Ángel Alberto Magreñán, Íñigo Sarría, Daniel González
2022 J jnl
Axioms
Samundra Regmi, Ioannis K. Argyros, Santhosh George, Christopher I. Argyros
2022 J jnl
Symmetry
Ioannis K. Argyros, Stepan Shakhno, Samundra Regmi, Halyna Yarmola
2022 J jnl
J. Complex.
Ioannis K. Argyros, Santhosh George, Christopher I. Argyros
2022 J jnl
Symmetry
Ioannis K. Argyros, Samundra Regmi, Stepan Shakhno, Halyna Yarmola
2022 J jnl
J. Comput. Appl. Math.
Jitsupa Deepho, Auwal Bala Abubakar, Maulana Malik, Ioannis K. Argyros
2022 J jnl
J. Complex.
Ioannis K. Argyros
2021 J jnl
Symmetry
Nopparat Wairojjana, Ioannis K. Argyros, Meshal Shutaywi, Wejdan Deebani, Christopher I. Argyros
2021 J jnl
Symmetry
Ioannis K. Argyros, Debasis Sharma, Christopher I. Argyros, Sanjaya Kumar Parhi, Shanta Kumari Sunanda
2021 J jnl
Symmetry
Mahmoud S. Alrawashdeh, Seba A. Migdady, Ioannis K. Argyros
2021 J jnl
Symmetry
Kanikar Muangchoo, Nasser Aedh Alreshidi, Ioannis K. Argyros
2021 J jnl
Comput. Math. Methods
Michael I. Argyros, Ioannis K. Argyros, Daniel González, Ángel Alberto Magreñán, Alejandro Moysi, Íñigo Sarría
2021 J jnl
Symmetry
Ramandeep Behl, Ioannis K. Argyros, Fouad Othman Mallawi, Christopher I. Argyros
2021 J jnl
Algorithms
Ioannis K. Argyros, Debasis Sharma, Christopher I. Argyros, Sanjaya Kumar Parhi, Shanta Kumari Sunanda, Michael I. Argyros
2021 J jnl
Comput. Math. Methods
Ioannis K. Argyros, Michael I. Argyros, Johan Ceballos, Mariana Ceballos, Daniel González
2021 J jnl
Symmetry
Harish Bhatt, Janak Joshi, Ioannis K. Argyros
2021 J jnl
Axioms
Ioannis K. Argyros, Stepan Shakhno, Roman Iakymchuk, Halyna Yarmola, Michael I. Argyros
2021 J jnl
Comput. Appl. Math.
Habib Ur Rehman, Poom Kumam, Ioannis K. Argyros, Nasser Aedh Alreshidi
2021 J jnl
Symmetry
Christopher I. Argyros, Ioannis K. Argyros, Janak Joshi, Samundra Regmi, Santhosh George
2021 J jnl
Appl. Math. Comput.
Abdolreza Amiri, Ioannis K. Argyros
2021 J jnl
J. Complex.
Hongmin Ren, Ioannis K. Argyros
2021 J jnl
Comput. Math. Methods
Ramandeep Behl, Ioannis K. Argyros, Christopher I. Argyros
2020 J jnl
Symmetry
Habib Ur Rehman, Poom Kumam, Ioannis K. Argyros, Nasser Aedh Alreshidi, Wiyada Kumam, Wachirapong Jirakitpuwapat
2020 J jnl
Axioms
Nopparat Wairojjana, Habib Ur Rehman, Ioannis K. Argyros, Nuttapol Pakkaranang
2020 J jnl
Int. J. Comput. Math.
Ali Saleh Alshomrani, Ramandeep Behl, Ioannis K. Argyros
2020 J jnl
J. Appl. Math. Comput.
Ioannis K. Argyros, Santhosh George
2020 J jnl
Symmetry
Alejandro Moysi, Ioannis K. Argyros, Samundra Regmi, Daniel González, Ángel Alberto Magreñán, Juan Antonio Sicilia
2020 J jnl
Symmetry
Ioannis K. Argyros, Stepan Shakhno, Halyna Yarmola
2020 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Johan Ceballos, Daniel González, José Manuel Gutiérrez Jiménez
2020 J jnl
Numer. Algorithms
Ioannis K. Argyros, Santhosh George, Kedarnath Senapati
2020 J jnl
Comput.
Ioannis K. Argyros, Stepan Shakhno, Halyna Yarmola
2020 J jnl
Symmetry
Habib Ur Rehman, Poom Kumam, Ioannis K. Argyros, Wejdan Deebani, Wiyada Kumam
2020 J jnl
Algorithms
Samundra Regmi, Ioannis K. Argyros, Santhosh George
2020 J jnl
Symmetry
Ramandeep Behl, Ioannis K. Argyros
2020 J jnl
Algorithms
Janak Raj Sharma, Sunil Kumar, Ioannis K. Argyros
2020 J jnl
Symmetry
Ioannis K. Argyros, Stepan Shakhno, Halyna Yarmola
2020 J jnl
Comput.
Gus I. Argyros, Michael I. Argyros, Samundra Regmi, Ioannis K. Argyros, Santhosh George
2020 J jnl
J. Complex.
Ioannis K. Argyros, Santhosh George
2020 J jnl
J. Comput. Appl. Math.
Sergio Amat, Ioannis K. Argyros, Sonia Busquier, M. A. Hernández-Verón, Dionisio F. Yáñez
2019 J jnl
Symmetry
Janak Raj Sharma, Deepak Kumar, Ioannis K. Argyros
2019 J jnl
Symmetry
Rania A. Alharbey, Ioannis K. Argyros, Ramandeep Behl
2019 J jnl
Symmetry
Ramandeep Behl, Ioannis K. Argyros, Fouad Othman Mallawi, J. A. Tenreiro Machado
2019 J jnl
Symmetry
Janak Raj Sharma, Sunil Kumar, Ioannis K. Argyros
2019 J jnl
Symmetry
Ioannis K. Argyros, Santhosh George, Chandhini Godavarma, Ángel Alberto Magreñán
2019 J jnl
J. Appl. Math. Comput.
C. D. Sreedeep, Santhosh George, Ioannis K. Argyros
2019 J jnl
Optim. Lett.
Ioannis K. Argyros, Gilson N. Silva
2019 J jnl
J. Complex.
Janak Raj Sharma, Sunil Kumar, Ioannis K. Argyros
2019 J jnl
Appl. Math. Lett.
Ioannis K. Argyros, Santhosh George, Ángel Alberto Magreñán
2019 J jnl
Symmetry
Ramandeep Behl, Ioannis K. Argyros, J. A. Tenreiro Machado, Ali Saleh Alshomrani
2019 J jnl
CoRR
Ioannis K. Argyros, Stepan Shakhno
2019 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Ramandeep Behl, J. A. Tenreiro Machado, Ali Saleh Alshomrani
2019 J jnl
Symmetry
Ioannis K. Argyros, Stepan Shakhno, Halyna Yarmola
2019 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Santhosh George
2018 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, J. A. Ezquerro, M. A. Hernández-Verón, Ángel Alberto Magreñán
2018 J jnl
J. Comput. Appl. Math.
Sergio Amat, Ioannis K. Argyros, Sonia Busquier, M. A. Hernández-Verón, Eulalia Martínez
2018 J jnl
Numer. Linear Algebra Appl.
Sergio Amat, Ioannis K. Argyros, Sonia Busquier, M. A. Hernández-Verón
2018 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Stefan Maruster
2017 J jnl
Numer. Algorithms
Sunil Kumar, Amit Kumar, Ioannis K. Argyros
2017 J jnl
Numer. Algorithms
Ioannis K. Argyros, M. A. Hernández-Verón, M. Jóse Rubio
2017 J jnl
Algorithms
Sergio Amat, Ioannis K. Argyros, Miguel Ángel Hernández, Natalia Romero Álvarez
2017 J jnl
J. Complex.
Ioannis K. Argyros, Gilson N. Silva
2017 J jnl
Algorithms
Ioannis K. Argyros, Janak Raj Sharma, Deepak Kumar
2017 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Ángel Alberto Magreñán
2017 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Munish Kansal, Vinay Kanwar, Sugandha Bajaj
2017 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Ángel Alberto Magreñán, Juan Antonio Sicilia
2017 J jnl
Numer. Algorithms
Sergio Amat, Ioannis K. Argyros, Sonia Busquier, Ángel Alberto Magreñán
2017 J jnl
Int. J. Comput. Vis. Robotics
Ioannis K. Argyros, Daniel González
2017 J jnl
Math. Model. Anal.
Ioannis K. Argyros, Santhosh George
2017 J jnl
Int. J. Comput. Sci. Math.
Ioannis K. Argyros, Santhosh George
2017 J jnl
Fundam. Informaticae
George A. Anastassiou, Ioannis K. Argyros, Sunil Kumar
2017 J jnl
Numer. Algorithms
Ioannis K. Argyros, Santhosh George
2017 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Alicia Cordero, Ángel Alberto Magreñán, Juan R. Torregrosa
2017 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Alicia Cordero, Ángel Alberto Magreñán, Juan R. Torregrosa
2016 J jnl
Appl. Math. Comput.
Ramandeep Behl, Ioannis K. Argyros, Sandile Sydney Motsa
2016 J jnl
Numer. Algorithms
Ioannis K. Argyros, Ángel Alberto Magreñán
2016 J jnl
Numer. Algorithms
Ángel Alberto Magreñán, Ioannis K. Argyros
2016 book
George A. Anastassiou, Ioannis K. Argyros
2016 book
George A. Anastassiou, Ioannis K. Argyros
2016 J jnl
Algorithms
Ioannis K. Argyros, Ramandeep Behl, Sandile Sydney Motsa
2016 J jnl
Int. J. Bifurc. Chaos
Ioannis K. Argyros, Ángel Alberto Magreñán Ruiz
2016 J jnl
Math. Comput. Simul.
Ángel Alberto Magreñán, Ioannis K. Argyros
2016 J jnl
J. Complex.
Ioannis K. Argyros, Ramandeep Behl, Sandile Sydney Motsa
2016 J jnl
Appl. Math. Lett.
Ioannis K. Argyros, Santhosh George
2016 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Hongmin Ren
2016 J jnl
J. Comput. Appl. Math.
Ángel Alberto Magreñán, Ioannis K. Argyros
2016 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Saïd Hilout
2016 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Santhosh George
2015 J jnl
J. Complex.
Daya Ram Sahu, Y. J. Cho, Ravi P. Agarwal, Ioannis K. Argyros
2015 J jnl
Numer. Algorithms
Ángel Alberto Magreñán, Ioannis K. Argyros
2015 J jnl
Int. J. Interact. Multim. Artif. Intell.
Ioannis K. Argyros, Santhosh George
2015 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Santhosh George
2015 J jnl
Math. Comput.
Ioannis K. Argyros, Miguel Ángel Hernández-Verón, Saïd Hilout, Natalia Romero Álvarez
2015 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Santhosh George
2015 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Ángel Alberto Magreñán
2015 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Ángel Alberto Magreñán
2015 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Ángel Alberto Magreñán Ruiz
2015 J jnl
Comput. Optim. Appl.
Ioannis K. Argyros, Ángel Alberto Magreñán
2015 J jnl
Int. J. Interact. Multim. Artif. Intell.
Ioannis K. Argyros, Daniel González
2015 J jnl
Algorithms
Ioannis K. Argyros, Ramandeep Behl, Sandile Sydney Motsa
2015 J jnl
Algorithms
Ioannis K. Argyros, Ramandeep Behl, Sandile Sydney Motsa
2015 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Santhosh George, Ángel Alberto Magreñán
2015 J jnl
Appl. Math. Comput.
Ángel Alberto Magreñán, Ioannis K. Argyros
2015 J jnl
Algorithms
George A. Anastassiou, Ioannis K. Argyros
2015 J jnl
Appl. Math. Comput.
Hongmin Ren, Ioannis K. Argyros
2015 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Alicia Cordero, Ángel Alberto Magreñán, Juan R. Torregrosa
2015 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Alicia Cordero, Ángel Alberto Magreñán, Juan R. Torregrosa
2015 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Ángel Alberto Magreñán
2015 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Hongmin Ren
2015 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Ángel Alberto Magreñán
2015 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Sanjay Kumar Khattri
2014 J jnl
J. Optim. Theory Appl.
Sergio Amat, Ioannis K. Argyros, Sonia Busquier, Saïd Hilout
2014 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Saïd Hilout, Sanjay Kumar Khattri
2014 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Ángel Alberto Magreñán
2014 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Daniel González
2014 J jnl
Int. J. Math. Math. Sci.
Ioannis K. Argyros, Santhosh George, Jidesh Pacheeripadikkal
2014 J jnl
J. Appl. Math.
Juan R. Torregrosa, Ioannis K. Argyros, Changbum Chun, Alicia Cordero, Fazlollah Soleymani
2014 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Ángel Alberto Magreñán
2014 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros, Daniel González, Ángel Alberto Magreñán
2014 J jnl
Appl. Math. Comput.
Sergio Amat, Ioannis K. Argyros, Sonia Busquier, Rodrigo A. Castro, Saïd Hilout, Sergio Plaza
2014 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Y. J. Cho, Sanjay Kumar Khattri
2014 J jnl
Appl. Math. Comput.
Ángel Alberto Magreñán, Ioannis K. Argyros
2014 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Saïd Hilout, Ángel Alberto Magreñán
2014 J jnl
J. Complex.
Ángel Alberto Magreñán Ruiz, Ioannis K. Argyros
2014 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Sanjay Kumar Khattri
2014 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros, Saïd Hilout
2013 J jnl
J. Optim. Theory Appl.
Ioannis K. Argyros, Saïd Hilout
2013 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros, Hongmin Ren
2013 J jnl
Numer. Algorithms
Ioannis K. Argyros, Saïd Hilout
2013 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Sanjay Kumar Khattri, Saïd Hilout
2013 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Santhosh George
2013 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Saïd Hilout
2013 J jnl
J. Frankl. Inst.
Ioannis K. Argyros, Saïd Hilout
2013 J jnl
J. Appl. Math.
Juan R. Torregrosa, Ioannis K. Argyros, Changbum Chun, Alicia Cordero, Fazlollah Soleymani
2013 J jnl
Appl. Math. Comput.
Sergio Amat, Ioannis K. Argyros, Sonia Busquier, Rodrigo A. Castro, Saïd Hilout, Sergio Plaza
2013 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Saïd Hilout
2013 J jnl
J. Complex.
Ioannis K. Argyros, Sanjay Kumar Khattri
2013 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Saïd Hilout
2013 J jnl
Appl. Math. Comput.
Hongmin Ren, Long Wu, Weihong Bi, Ioannis K. Argyros
2013 J jnl
Numer. Algorithms
Ioannis K. Argyros, Daniel González
2012 J jnl
Numer. Algorithms
Hongmin Ren, Ioannis K. Argyros
2012 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Saïd Hilout
2012 J jnl
Appl. Math. Comput.
Hongmin Ren, Ioannis K. Argyros
2012 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Saïd Hilout
2012 J jnl
J. Complex.
Ioannis K. Argyros, Saïd Hilout
2012 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Saïd Hilout
2012 J jnl
Appl. Math. Comput.
Hongmin Ren, Ioannis K. Argyros
2012 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Saïd Hilout
2012 J jnl
Numer. Algorithms
Ioannis K. Argyros, Saïd Hilout
2012 J jnl
J. Complex.
Ioannis K. Argyros, Saïd Hilout
2011 J jnl
Numer. Algorithms
Hongmin Ren, Ioannis K. Argyros, Saïd Hilout
2011 J jnl
Math. Comput.
Ioannis K. Argyros
2011 J jnl
J. Complex.
Ioannis K. Argyros, Saïd Hilout
2011 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Saïd Hilout
2011 J jnl
Comput. Math. Appl.
Yeol Je Cho, Ioannis K. Argyros, Saïd Hilout
2011 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Saïd Hilout
2011 J jnl
Numer. Algorithms
Ioannis K. Argyros, Saïd Hilout
2011 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Hongmin Ren
2011 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, J. A. Ezquerro, José Manuel Gutiérrez Jiménez, Miguel Ángel Hernández-Verón, Saïd Hilout
2011 J jnl
Numer. Algorithms
Ioannis K. Argyros, Saïd Hilout
2011 J jnl
Appl. Math. Comput.
Sanjay Kumar Khattri, Ioannis K. Argyros
2011 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Saïd Hilout
2010 J jnl
Numer. Algorithms
Ioannis K. Argyros, Saïd Hilout
2010 J jnl
Numer. Algorithms
Ioannis K. Argyros, Saïd Hilout
2010 J jnl
Computing
Ioannis K. Argyros, Saïd Hilout
2010 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros
2010 J jnl
Comput. Math. Appl.
Yeol Je Cho, Ioannis K. Argyros, Narin Petrot
2010 J jnl
Appl. Math. Comput.
Hongmin Ren, Ioannis K. Argyros
2010 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Saïd Hilout
2010 J jnl
J. Complex.
Ioannis K. Argyros, Saïd Hilout
2010 J jnl
Appl. Math. Lett.
Jinhai Chen, Ioannis K. Argyros
2010 J jnl
J. Complex.
Ioannis K. Argyros, Saïd Hilout
2010 J jnl
Appl. Math. Comput.
Hongmin Ren, Ioannis K. Argyros
2010 J jnl
J. Comput. Appl. Math.
Jinhai Chen, Ioannis K. Argyros, Ravi P. Agarwal
2010 J jnl
Numer. Algorithms
Ioannis K. Argyros
2010 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros, Saïd Hilout
2010 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros
2010 J jnl
J. Comput. Appl. Math.
Hongmin Ren, Ioannis K. Argyros
2010 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Yeol Je Cho, Saïd Hilout
2009 J jnl
Numer. Algorithms
Livinus Ugochukwu Uko, Ioannis K. Argyros
2009 J jnl
Appl. Math. Comput.
Ioannis K. Argyros
2009 J jnl
Numer. Algorithms
Ioannis K. Argyros
2009 J jnl
Numer. Algorithms
Ioannis K. Argyros, Hongmin Ren
2009 J jnl
Appl. Math. Comput.
Hongmin Ren, Ioannis K. Argyros
2009 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros, Jinhai Chen
2009 J jnl
Numer. Algorithms
Ioannis K. Argyros, Saïd Hilout
2009 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Hongmin Ren
2009 J jnl
J. Comput. Appl. Math.
Ioannis K. Argyros, Yeol Je Cho, Xiaolong Qin
2009 J jnl
J. Complex.
Ioannis K. Argyros, Saïd Hilout
2008 J jnl
Numer. Algorithms
Ioannis K. Argyros, Saïd Hilout
2008 J jnl
Appl. Math. Comput.
Ioannis K. Argyros, Saïd Hilout
2008 J jnl
Numer. Algorithms
Ioannis K. Argyros, Livinus Ugochukwu Uko
2007 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros
2007 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros
2005 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros
2005 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros
2004 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros
2003 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros
2001 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros
2000 J jnl
Appl. Math. Lett.
Ioannis K. Argyros
1999 J jnl
Appl. Math. Comput.
Ioannis K. Argyros
1999 J jnl
Appl. Math. Comput.
Ioannis K. Argyros
1999 J jnl
Appl. Math. Comput.
Ioannis K. Argyros
1999 J jnl
Computing
Ioannis K. Argyros
1999 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros
1999 J jnl
Appl. Math. Comput.
Ioannis K. Argyros
1999 J jnl
Appl. Math. Comput.
Ioannis K. Argyros
1998 J jnl
Appl. Math. Comput.
Ioannis K. Argyros
1992 J jnl
Int. J. Comput. Math.
Ioannis K. Argyros
1990 J jnl
Computing
Ioannis K. Argyros
tests/integration/test_basicproperties.py
← Index tests/integration/test_basicproperties.py python
"""
Integration tests for the BasicPropertiesExtractor class.
"""
import pytest
import os
from unittest.mock import Mock, patch, MagicMock

pytestmark = [pytest.mark.integration]


class TestBasicPropertiesExtractorInitialization:
    """Tests for BasicPropertiesExtractor initialization."""

    def test_initialization(self, elf_binary_path, mock_logger):
        """Test basic initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert extractor.filepath == elf_binary_path
            assert extractor.basic_properties is None
            assert extractor.is_packed is None
            assert extractor.is_fat is None
            assert extractor.parent_sha256 is None
            assert extractor.child_sha256 is None
            assert extractor.child_architecture is None
            assert extractor.child_filetype is None

    def test_initialization_with_fat_params(self, elf_binary_path, mock_logger):
        """Test initialization with FAT Mach-O parameters."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            child_hashes = ["abc123", "def456"]
            child_archs = ["x86_64", "arm64"]
            child_types = ["macho", "macho"]

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                is_fat=True,
                child_sha256=child_hashes,
                child_architecture=child_archs,
                child_filetype=child_types
            )

            assert extractor.is_fat is True
            assert extractor.child_sha256 == child_hashes
            assert extractor.child_architecture == child_archs
            assert extractor.child_filetype == child_types

    def test_initialization_with_parent_sha256(self, elf_binary_path, mock_logger):
        """Test initialization with parent_sha256 for slice binaries."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            parent_hash = "parent_sha256_hash_here"

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                parent_sha256=parent_hash
            )

            assert extractor.parent_sha256 == parent_hash

    def test_elastic_index_suffix(self, elf_binary_path, mock_logger):
        """Test that elastic_index has correct suffix."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert "-basic_properties" in extractor.elastic_index


class TestBasicPropertiesExtractorTag:
    """Tests for tag method."""

    def test_tag_value(self, elf_binary_path, mock_logger):
        """Test that tag returns correct value."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor
        from redb.extractors.enum import Tag

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

            assert extractor.tag() == Tag.BASIC_PROPERTIES.value
            assert extractor.tag() == "basic_properties"


class TestBasicPropertiesExtract:
    """Tests for extract method."""

    def test_extract_elf_binary(self, elf_binary_path, mock_logger):
        """Test extracting properties from ELF binary."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor
        from redb.models.dataclasses import BasicProperties

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

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, BasicProperties)
            assert result.sample_name == os.path.basename(elf_binary_path)
            assert result.filesize > 0
            assert result.file_entropy >= 0
            assert result.filetype is not None
            assert result.filetype_mime is not None
            assert result.filetype_magika is not None

    def test_extract_pe_binary(self, pe_binary_path, mock_logger):
        """Test extracting properties from PE binary."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor
        from redb.models.dataclasses import BasicProperties

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

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, BasicProperties)
            assert result.filesize > 0
            # PE file should be detected
            assert "PE" in result.filetype or "executable" in result.filetype.lower()

    def test_extract_text_file(self, temp_text_file, mock_logger):
        """Test extracting properties from text file."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(temp_text_file, mock_logger)

            result = extractor.extract()

            assert result is not None
            assert "text" in result.filetype.lower() or "ASCII" in result.filetype
            assert result.file_entropy >= 0

    def test_extract_stores_in_basic_properties(self, elf_binary_path, mock_logger):
        """Test that extract stores result in basic_properties attribute."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert extractor.basic_properties is None
            result = extractor.extract()
            assert extractor.basic_properties is result


class TestBasicPropertiesFiletype:
    """Tests for file type detection."""

    def test_elf_filetype(self, elf_binary_path, mock_logger):
        """Test ELF file type detection."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            result = extractor.extract()

            assert result is not None
            # Should detect as ELF
            assert "ELF" in result.filetype

    def test_pe_filetype_mime(self, pe_binary_path, mock_logger):
        """Test PE file type MIME detection."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            result = extractor.extract()

            assert result is not None
            # PE MIME types (varies by libmagic version)
            assert "dosexec" in result.filetype_mime or "x-msdownload" in result.filetype_mime or "portable-executable" in result.filetype_mime

    def test_text_filetype_mime(self, temp_text_file, mock_logger):
        """Test text file type MIME detection."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(temp_text_file, mock_logger)

            result = extractor.extract()

            assert result is not None
            # Text MIME types
            assert "text" in result.filetype_mime


class TestBasicPropertiesEntropy:
    """Tests for entropy calculation in BasicPropertiesExtractor."""

    def test_entropy_reasonable_range(self, elf_binary_path, mock_logger):
        """Test that entropy is within reasonable range (0-8)."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            result = extractor.extract()

            assert result is not None
            assert 0 <= result.file_entropy <= 8

    def test_entropy_rounded(self, elf_binary_path, mock_logger):
        """Test that entropy is rounded to 3 decimal places."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            result = extractor.extract()

            assert result is not None
            # Check rounding to 3 decimal places
            entropy_str = str(result.file_entropy)
            if '.' in entropy_str:
                decimal_places = len(entropy_str.split('.')[1])
                assert decimal_places <= 3


class TestBasicPropertiesFilesize:
    """Tests for file size calculation."""

    def test_filesize_matches_actual(self, elf_binary_path, mock_logger):
        """Test that filesize matches actual file size."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            result = extractor.extract()

            actual_size = os.path.getsize(elf_binary_path)
            assert result.filesize == actual_size

    def test_filesize_matches_binary_length(self, elf_binary_path, mock_logger, elf_binary_content):
        """Test that filesize matches binary content length."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            result = extractor.extract()

            assert result.filesize == len(elf_binary_content)


class TestBasicPropertiesPrepareExportData:
    """Tests for prepare_export_data method."""

    def test_prepare_export_elasticsearch(self, elf_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            result = extractor.prepare_export_data("ElasticsearchExporter")

            assert result is extractor.basic_properties

    def test_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            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 len(data) == 1  # One row
            assert isinstance(column_names, list)
            assert isinstance(column_type_names, list)

            # Check expected columns
            assert 'sha256' in column_names
            assert 'md5' in column_names
            assert 'sha1' in column_names
            assert 'filesize' in column_names
            assert 'file_entropy' in column_names
            assert 'filetype' in column_names
            assert 'filetype_mime' in column_names
            assert 'filetype_magika' in column_names
            # New FAT/child columns
            assert 'parent_sha256' in column_names
            assert 'child_sha256' in column_names
            assert 'child_architecture' in column_names
            assert 'child_filetype' in column_names
            assert 'is_fat' in column_names

    def test_prepare_export_clickhouse_data_types(self, elf_binary_path, mock_logger):
        """Test that ClickHouse export data has correct types."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            data, column_names, column_type_names = extractor.prepare_export_data("ClickHouseExporter")

            row = data[0]

            # Check that sha256 is a string with correct length
            sha256_idx = column_names.index('sha256')
            assert isinstance(row[sha256_idx], str)
            assert len(row[sha256_idx]) == 64

            # Check that filesize is an integer
            filesize_idx = column_names.index('filesize')
            assert isinstance(row[filesize_idx], int)

            # Check that file_entropy is a float
            entropy_idx = column_names.index('file_entropy')
            assert isinstance(row[entropy_idx], float)


class TestBasicPropertiesClickHouseTable:
    """Tests for get_clickhouse_table method."""

    def test_clickhouse_table_name(self, elf_binary_path, mock_logger):
        """Test correct ClickHouse table name."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert extractor.get_clickhouse_table() == "redb_basic_properties"


class TestBasicPropertiesExportData:
    """Tests for export_data method."""

    def test_export_data_with_print_exporter(self, elf_binary_path, mock_logger, mock_print_exporter, capsys):
        """Test export_data with PrintExporter."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[mock_print_exporter]
            )

            result = extractor.export_data()

            assert result is True

    def test_export_data_empty_exporters(self, elf_binary_path, mock_logger):
        """Test export_data with no exporters."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[]
            )

            result = extractor.export_data()

            # Should succeed with no exporters
            assert result is True


class TestBasicPropertiesMagika:
    """Tests for Magika file type detection."""

    def test_magika_elf_detection(self, elf_binary_path, mock_logger):
        """Test Magika detection of ELF files."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            result = extractor.extract()

            assert result is not None
            # Magika should detect ELF
            assert result.filetype_magika == "elf" or "elf" in result.filetype_magika.lower()

    def test_magika_pe_detection(self, pe_binary_path, mock_logger):
        """Test Magika detection of PE files."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            result = extractor.extract()

            assert result is not None
            # Magika should detect PE
            assert "pe" in result.filetype_magika.lower() or "exe" in result.filetype_magika.lower()


class TestBasicPropertiesFATSupport:
    """Tests for FAT Mach-O and child file support."""

    def test_extract_with_fat_flag(self, elf_binary_path, mock_logger):
        """Test extraction with is_fat flag set."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            result = extractor.extract()

            assert result is not None
            assert result.is_fat is True

    def test_extract_with_child_hashes(self, elf_binary_path, mock_logger):
        """Test extraction with child_sha256 provided."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            child_hashes = ["abc123def456", "789ghi012jkl"]

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                child_sha256=child_hashes
            )

            result = extractor.extract()

            assert result is not None
            assert result.child_sha256 == child_hashes

    def test_extract_with_child_architecture(self, elf_binary_path, mock_logger):
        """Test extraction with child_architecture provided."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            child_archs = ["x86_64", "arm64"]

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                child_architecture=child_archs
            )

            result = extractor.extract()

            assert result is not None
            assert result.child_architecture == child_archs

    def test_extract_with_child_filetype(self, elf_binary_path, mock_logger):
        """Test extraction with child_filetype provided."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            child_types = ["macho", "macho"]

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                child_filetype=child_types
            )

            result = extractor.extract()

            assert result is not None
            assert result.child_filetype == child_types

    def test_clickhouse_export_with_fat_data(self, elf_binary_path, mock_logger):
        """Test ClickHouse export includes FAT-related fields correctly."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            child_hashes = ["abc123", "def456"]
            child_archs = ["x86_64", "arm64"]
            child_types = ["macho", "macho"]

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                is_fat=True,
                child_sha256=child_hashes,
                child_architecture=child_archs,
                child_filetype=child_types,
                parent_sha256=None  # FAT container has no parent
            )
            extractor.extract()

            data, column_names, column_type_names = extractor.prepare_export_data("ClickHouseExporter")
            row = data[0]

            # Check FAT fields
            is_fat_idx = column_names.index('is_fat')
            assert row[is_fat_idx] is True

            child_sha256_idx = column_names.index('child_sha256')
            assert row[child_sha256_idx] == child_hashes

            child_arch_idx = column_names.index('child_architecture')
            assert row[child_arch_idx] == child_archs

            child_type_idx = column_names.index('child_filetype')
            assert row[child_type_idx] == child_types

    def test_clickhouse_export_for_slice(self, elf_binary_path, mock_logger):
        """Test ClickHouse export for a slice binary with parent_sha256."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            parent_hash = "parent_container_sha256_hash"

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                parent_sha256=parent_hash
            )
            extractor.extract()

            data, column_names, column_type_names = extractor.prepare_export_data("ClickHouseExporter")
            row = data[0]

            parent_idx = column_names.index('parent_sha256')
            assert row[parent_idx] == parent_hash

    def test_default_fat_fields_are_none_or_empty(self, elf_binary_path, mock_logger):
        """Test that FAT-related fields default to None/empty for non-FAT binaries."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            result = extractor.extract()

            assert result is not None
            assert result.is_fat is None
            assert result.child_sha256 is None
            assert result.child_architecture is None
            assert result.child_filetype is None


@pytest.mark.unit
@pytest.mark.dataclass
class TestBasicPropertiesDataclass:
    """Tests for BasicProperties dataclass structure."""

    def test_dataclass_has_all_expected_fields(self):
        """Test that BasicProperties dataclass has all expected fields."""
        from redb.models.dataclasses import BasicProperties

        # Create a sample instance
        bp = BasicProperties(
            filename="test.exe",
            sample_name="test.exe",
            filesize=1024,
            filetype="PE32",
            filetype_mime="application/x-dosexec",
            filetype_magika="pebin",
            file_entropy=6.5
        )

        # Check required fields
        assert bp.filename == "test.exe"
        assert bp.sample_name == "test.exe"
        assert bp.filesize == 1024
        assert bp.filetype == "PE32"
        assert bp.filetype_mime == "application/x-dosexec"
        assert bp.filetype_magika == "pebin"
        assert bp.file_entropy == 6.5

        # Check optional fields default to None
        assert bp.is_packed is None
        assert bp.is_fat is None
        assert bp.child_sha256 is None
        assert bp.child_architecture is None
        assert bp.child_filetype is None

    def test_dataclass_with_optional_fat_fields(self):
        """Test BasicProperties dataclass with FAT-related optional fields."""
        from redb.models.dataclasses import BasicProperties

        bp = BasicProperties(
            filename="universal.app",
            sample_name="universal.app",
            filesize=2048,
            filetype="Mach-O universal",
            filetype_mime="application/x-mach-binary",
            filetype_magika="macho",
            file_entropy=7.2,
            is_fat=True,
            child_sha256=["hash1", "hash2"],
            child_architecture=["x86_64", "arm64"],
            child_filetype=["macho", "macho"]
        )

        assert bp.is_fat is True
        assert bp.child_sha256 == ["hash1", "hash2"]
        assert bp.child_architecture == ["x86_64", "arm64"]
        assert bp.child_filetype == ["macho", "macho"]