Mahmoud Al-Qutayri

183 papers B 8C 17Misc 1Journal 80Unranked 77
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Shimaa Naser, Maryam Tariq, Raneem Abdelrahim, De Mi, Azzam Mourad, Hadi Otrok, Mahmoud Al-Qutayri, Ayman Elnashar, Sami Muhaidat
2025 J jnl
Proc. IEEE
Ghada Alsuhli, Vasilis Sakellariou, Hani Saleh, Mahmoud Al-Qutayri, Baker Mohammad, Thanos Stouraitis
2025 J jnl
IEEE Trans. Emerg. Top. Comput.
Ghada Alsuhli, Hani Saleh, Mahmoud Al-Qutayri, Baker Mohammad, Thanos Stouraitis
2025 J jnl
IEEE J. Sel. Areas Commun.
Esraa M. Ghourab, Mohamed Azab, Denis Gracanin, Mahmoud Al-Qutayri, Sami Muhaidat
2025 J jnl
J. Inf. Secur. Appl.
Ghada Alsuhli, Hani Saleh, Mahmoud Al-Qutayri, Baker Mohammad, Thanos Stouraitis
2025 J jnl
IEEE Trans. Artif. Intell.
Ghadeer A. Jaradat, Mohamed F. Tolba, Ghada Alsuhli, Hani Saleh, Mahmoud Al-Qutayri, Thanos Stouraitis
2025 C conf
ISCAS
Mohammed F. Tolba, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Thanos Stouraitis
2025 J jnl
IEEE Open J. Commun. Soc.
Esraa M. Ghourab, Mohamed Azab, Denis Gracanin, Omar Alhussein, Mahmoud Al-Qutayri, Sami Muhaidat
2025 J jnl
IEEE Trans. Circuits Syst. Artif. Intell.
Huruy Tesfai, Leen Younes, Hani Saleh, Mahmoud Al-Qutayri, Baker Mohammad
2025 conf
NewCAS
Adil Rehman, Mohamed F. Tolba, Hani Saleh, Ahsan Khandoker, Mahmoud Al-Qutayri
2025 J jnl
IEEE Internet Things J.
Nada Abu Hamra, Baker Mohammad, Muhammad Umair Khan, Mahmoud Al-Qutayri
2024 J jnl
IEEE Trans. Inf. Forensics Secur.
Enas E. Abulibdeh, Leen Younes, Baker Mohammad, Khaled Humood, Hani Saleh, Mahmoud Al-Qutayri
2024 J jnl
IEEE Trans. Artif. Intell.
Mohamed F. Tolba, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Ayman Hroub, Thanos Stouraitis
2024 J jnl
CoRR
Ghadeer A. Jaradat, Mohammed F. Tolba, Ghada Alsuhli, Hani Saleh, Mahmoud Al-Qutayri, Thanos Stouraitis, Baker Mohammad
2024 J jnl
Veh. Commun.
Esraa M. Ghourab, Shimaa Naser, Sami Muhaidat, Lina Bariah, Mahmoud Al-Qutayri, Ernesto Damiani, Paschalis C. Sofotasios
2024 J jnl
IEEE Access
Esraa M. Ghourab, Lina Bariah, Sami Muhaidat, Paschalis C. Sofotasios, Mahmoud Al-Qutayri, Ernesto Damiani
2023 J jnl
Internet Things
Ahmed Talal Suliman, Maha Kadadha, Rabeb Mizouni, Hadi Otrok, Ernesto Damiani, Mahmoud Al-Qutayri
2023 conf
ICM
Enas E. Abulibdeh, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri
2023 conf
ICM
Enas E. Abulibdeh, Leen Younes, Baker Mohammad, Hani Saleh, Mahmoud Al-Qutayri, Khaled Humood
2023 C conf
ISCAS
Mohamed F. Tolba, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Thanos Stouraitis
2023 conf
ICM
Mohamed F. Tolba, Hani Saleh, Mahmoud Al-Qutayri, Ayman Hroub, Thanos Stouraitis
2023 conf
ICM
Huruy Tekle Tesfai, Hani Saleh, Mahmoud Méribout, Mahmoud Al-Qutayri, Thanos Stouraitis
2023 conf
AICAS
Fatmah Alantali, Yasmin Halawani, Baker Mohammad, Mahmoud Al-Qutayri
2023 J jnl
IEEE Access
Huruy Tekle Tefai, Hani Saleh, Mahmoud Al-Qutayri, Baker Mohammad, Athanasios Stouraitis
2023 J jnl
CoRR
Ghada Alsuhli, Vasileios Sakellariou, Hani Saleh, Mahmoud Al-Qutayri, Baker Mohammad, Thanos Stouraitis
2023 conf
ICM
Leen Younes, Baker Mohammad, Mahmoud Al-Qutayri, Hani Saleh, Dima Kilani
2022 conf
ICECS 2022
Biyanu Zerom, Mohamed F. Tolba, Huruy Tekle Tefai, Hani Saleh, Mahmoud Al-Qutayri, Thanos Stouraitis, Baker Mohammad, Ghada Alsuhli
2022 J jnl
IEEE Access
Mohamed F. Tolba, Huruy Tekle Tesfai, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri
2022 J jnl
IEEE Open J. Commun. Soc.
Ahmed Y. Al Hammadi, Lina Bariah, Sami Muhaidat, Mahmoud Al-Qutayri, Paschalis C. Sofotasios, Mérouane Debbah
2022 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Lilas Alrahis, Abhrajit Sengupta, Johann Knechtel, Satwik Patnaik, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Ozgur Sinanoglu
2022 J jnl
IEEE Trans. Commun.
Shimaa Naser, Lina Bariah, Sami Muhaidat, Mahmoud Al-Qutayri, Murat Uysal, Paschalis C. Sofotasios
2022 conf
6GNet
Ahmed Y. Al Hammadi, Lina Bariah, Sami Muhaidat, Mahmoud Al-Qutayri, Paschalis C. Sofotasios, Mérouane Debbah
2022 J jnl
IEEE Access
Huruy Tekle Tefai, Hani Saleh, Mahmoud Al-Qutayri, Moath B. Mohammad, Temesghen Tekeste, Ahsan Khandoker, Baker Mohammad
2022 C conf
ISCAS
Mohammed F. Tolba, Hani Saleh, Mahmoud Al-Qutayri, Baker Mohammad
2022 J jnl
IEEE Wirel. Commun.
Shimaa Naser, Lina Bariah, Sami Muhaidat, Paschalis C. Sofotasios, Mahmoud Al-Qutayri, Ernesto Damiani, Mérouane Debbah
2021 conf
CommNet
Khalid AlHamdani, Lina Bariah, Shimaa Naser, Sami Muhaidat, Mahmoud Al-Qutayri, Paschalis C. Sofotasios
2021 J jnl
IEEE Access
Mohamed F. Tolba, Hani Saleh, Yousuf Al Salami, Mahmoud Al-Qutayri, Baker Mohammad
2021 J jnl
CoRR
Mohammed F. Tolba, Huruy Tekle Tesfai, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri
2021 J jnl
Veh. Commun.
Huda Abualola, Hadi Otrok, Hassan R. Barada, Mahmoud Al-Qutayri, Yousof Al-Hammadi
2021 J jnl
IEEE Trans. Veh. Technol.
Ahmed Y. Al Hammadi, Paschalis C. Sofotasios, Sami Muhaidat, Mahmoud Al-Qutayri, Hany Elgala
2021 conf
CommNet
Abubakar S. Ali, Lina Bariah, Sami Muhaidat, Paschalis C. Sofotasios, Mahmoud Al-Qutayri
2021 conf
WCNC Workshops
Shimaa A. Naser, Paschalis C. Sofotasios, Sami Muhaidat, Mahmoud Al-Qutayri
2021 J jnl
IEEE Access
Fatmah Alantali, Yasmin Halawani, Baker Mohammad, Mahmoud Al-Qutayri
2021 J jnl
IEEE Trans. Emerg. Top. Comput.
Lilas Alrahis, Muhammad Yasin, Nimisha Limaye, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Ozgur Sinanoglu
2021 J jnl
CoRR
Shimaa Naser, Lina Bariah, Sami Muhaidat, Mahmoud Al-Qutayri, Murat Uysal, Paschalis C. Sofotasios
2021 J jnl
CoRR
Shimaa Naser, Lina Bariah, Sami Muhaidat, Mahmoud Al-Qutayri, Ernesto Damiani, Mérouane Debbah, Paschalis C. Sofotasios
2021 J jnl
IEEE Trans. Inf. Forensics Secur.
Lilas Alrahis, Satwik Patnaik, Johann Knechtel, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Ozgur Sinanoglu
2020 C conf
ISCAS
Huruy Tekle Tefai, Hani Saleh, Temesghen Tekeste, Mahmoud Al-Qutayri, Baker Mohammad
2020 J jnl
IEEE Access
Mohamed F. Tolba, Yasmin Halawani, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri
2020 J jnl
Sensors
Mamady Kebe, Rida Gadhafi, Baker Mohammad, Mihai Sanduleanu, Hani Saleh, Mahmoud Al-Qutayri
2020 J jnl
CoRR
Ahmed Y. Al Hammadi, Sami Muhaidat, Paschalis C. Sofotasios, Mahmoud Al-Qutayri, Hany Elgala
2020 J jnl
CoRR
Shimaa Naser, Lina Bariah, Sami Muhaidat, Paschalis C. Sofotasios, Wael Jaafar, Mahmoud Al-Qutayri, Octavia A. Dobre
2020 J jnl
CoRR
Lina S. Mohjazi, Sami Muhaidat, Mehrdad Dianati, Mahmoud Al-Qutayri, Naofal Al-Dhahir
2020 J jnl
CoRR
Shimaa Naser, Lina Bariah, Wael Jaafar, Sami Muhaidat, Paschalis C. Sofotasios, Mahmoud Al-Qutayri, Octavia A. Dobre
2020 J jnl
CoRR
Lilas Alrahis, Satwik Patnaik, Johann Knechtel, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Ozgur Sinanoglu
2019 J jnl
Wirel. Pers. Commun.
Hussam M. N. Al Hamadi, Chan Yeob Yeun, Mohamed Jamal Zemerly, Mahmoud Al-Qutayri, Amjad Gawanmeh, Yousof Al-Hammadi, Ernesto Damiani
2019 B conf
WCNC
Ahmed Y. Al Hammadi, Sami Muhaidat, Paschalis C. Sofotasios, Mahmoud Al-Qutayri
2019 J jnl
IEEE Access
Mohamed F. Tolba, Wafaa S. Sayed, Mohammed E. Fouda, Hani Saleh, Mahmoud Al-Qutayri, Baker Mohammad, Ahmed G. Radwan
2019 C conf
ISCAS
Lilas Alrahis, Muhammad Yasin, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri
2019 J jnl
IEEE J. Emerg. Sel. Topics Circuits Syst.
Yasmin Halawani, Baker Mohammad, Muath Abu Lebdeh, Mahmoud Al-Qutayri, Said F. Al-Sarawi
2019 J jnl
IACR Cryptol. ePrint Arch.
Lilas Alrahis, Muhammad Yasin, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Ozgur Sinanoglu
2019 J jnl
CoRR
Lilas Alrahis, Muhammad Yasin, Nimisha Limaye, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Ozgur Sinanoglu
2019 conf
ASP-DAC
Lilas Alrahis, Muhammad Yasin, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Ozgur Sinanoglu
2018 B conf
IWCMC
Maha Kadadha, Hadi Otrok, Hassan R. Barada, Mahmoud Al-Qutayri, Yousof Al-Hammadi
2018 conf
ICM
Yasmin Halawani, Baker Mohammad, Mahmoud Al-Qutayri, Said F. Al-Sarawi
2018 J jnl
Veh. Commun.
Maha Kadadha, Hadi Otrok, Hassan R. Barada, Mahmoud Al-Qutayri, Yousof Al-Hammadi
2018 J jnl
J. Netw. Comput. Appl.
Dina Shehada, Chan Yeob Yeun, M. Jamal Zemerly, Mahmoud Al-Qutayri, Yousof Al-Hammadi, Jiankun Hu
2018 conf
IIT
Tasneem Salah, M. Jamal Zemerly, Chan Yeob Yeun, Mahmoud Al-Qutayri, Yousof Al-Hammadi
2018 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Yasmin Halawani, Baker Mohammad, Mahmoud Al-Qutayri, Said F. Al-Sarawi
2018 conf
ICM
Heba Abunahla, Baker Mohammad, Anas Alazzam, Maguy Abi Jaoude, Mahmoud Al-Qutayri, Said F. Al-Sarawi
2018 J jnl
IEEE Trans. Green Commun. Netw.
Lina S. Mohjazi, Sami Muhaidat, Mehrdad Dianati, Mahmoud Al-Qutayri
2018 J jnl
IEEE Access
Lina S. Mohjazi, Sami Muhaidat, Mehrdad Dianati, Mahmoud Al-Qutayri, Naofal Al-Dhahir
2018 B conf
GLOBECOM
Tasneem Salah, Haya Hasan, M. Jamal Zemerly, Chan Yeob Yeun, Mahmoud Al-Qutayri, Yousof Al-Hammadi, Jiankun Hu
2018 J jnl
Digit. Commun. Networks
Omar Y. Al-Jarrah, Yousof Al-Hammadi, Paul D. Yoo, Sami Muhaidat, Mahmoud Al-Qutayri
2018 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Yasmin Halawani, Muath Abu Lebdeh, Baker Mohammad, Mahmoud Al-Qutayri, Said F. Al-Sarawi
2017 B conf
IWCMC
Maha Kadadha, Hadi Otrok, Hassan R. Barada, Mahmoud Al-Qutayri, Yousof Al-Hammadi
2017 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Muath Abu Lebdeh, Heba Abunahla, Baker Mohammad, Mahmoud Al-Qutayri
2017 conf
FiCloud
Fatma Mohamed, Rabeb Mizouni, Mohammad Abu-Matar, Mahmoud Al-Qutayri, Jon Whittle
2017 J jnl
Secur. Commun. Networks
Dina Shehada, Chan Yeob Yeun, M. Jamal Zemerly, Mahmoud Al-Qutayri, Yousof Al-Hammadi, Ernesto Damiani, Jiankun Hu
2017 J jnl
Comput. Commun.
Doaa Al-Terri, Hadi Otrok, Hassan R. Barada, Mahmoud Al-Qutayri, Yousof Al-Hammadi
2017 J jnl
IEEE Commun. Lett.
Lina S. Mohjazi, Imtiaz Ahmed, Sami Muhaidat, Mehrdad Dianati, Mahmoud Al-Qutayri
2017 J jnl
Int. J. E Health Medical Commun.
Hussam M. N. Al Hamadi, Amjad Gawanmeh, Mahmoud Al-Qutayri
2017 J jnl
Wirel. Pers. Commun.
Hussam M. N. Al Hamadi, Amjad Gawanmeh, Joonsang Baek, Mahmoud Al-Qutayri
2017 conf
ICC Workshops
Hussam M. N. Al Hamadi, Amjad Gawanmeh, Mahmoud Al-Qutayri
2017 C conf
ISCAS
Heba Abunahla, Baker Mohammad, Maguy Abi Jaoude, Mahmoud Al-Qutayri
2017 conf
VTC Fall
Lina S. Mohjazi, Sami Muhaidat, Mehrdad Dianati, Mahmoud Al-Qutayri
2017 Misc conf
ICIN
Tasneem Salah, Mohamed Jamal Zemerly, Chan Yeob Yeun, Mahmoud Al-Qutayri, Yousof Al-Hammadi
2017 B conf
WiMob
Haya Hasan, Tasneem Salah, Dina Shehada, M. Jamal Zemerly, Chan Yeob Yeun, Mahmoud Al-Qutayri, Yousof Al-Hammadi
2017 J jnl
CoRR
Lina S. Mohjazi, Sami Muhaidat, Mehrdad Dianati, Mahmoud Al-Qutayri
2016 conf
MWSCAS
Hamad Marzouqi, Mahmoud Al-Qutayri, Khaled Salah, Hani Saleh
2016 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Hamad Marzouqi, Mahmoud Al-Qutayri, Khaled Salah, Dimitrios Schinianakis, Thanos Stouraitis
2016 J jnl
CoRR
Ehab Salahat, Saleh R. Al-Araji, Mahmoud Al-Qutayri
2016 conf
MWSCAS
Hussam M. N. Al Hamadi, Amjad Gawanmeh, Mahmoud Al-Qutayri
2016 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Yasmin Halawani, Baker Mohammad, Dirar Homouz, Mahmoud Al-Qutayri, Hani Saleh
2016 conf
MWSCAS
Heba Abunahla, Maguy Abi Jaoude, Ilhaam Aziz Omar, Baker Mohammad, Mahmoud Al-Qutayri
2016 conf
LCN Workshops
Hussam M. N. Al Hamadi, Amjad Gawanmeh, Mahmoud Al-Qutayri
2016 conf
ICITST
Tasneem Salah, M. Jamal Zemerly, Chan Yeob Yeun, Mahmoud Al-Qutayri, Yousof Al-Hammadi
2016 conf
SIMPDA (Revised Selected Papers)
Hamda Al-Ali, Ernesto Damiani, Mahmoud Al-Qutayri, Mohammad Abu-Matar, Rabeb Mizouni
2016 J jnl
IEEE Trans. Veh. Technol.
Ahmed Y. Al Hammadi, Omar Alhussein, Paschalis C. Sofotasios, Sami Muhaidat, Mahmoud Al-Qutayri, Saleh R. Al-Araji, George K. Karagiannidis, Jie Liang
2015 C conf
IECON
Ehab Salahat, Hani Saleh, Andrzej Sluzek, Mahmoud Al-Qutayri, Baker Mohammad, Mohammad Ismail
2015 conf
ICCSPA
Ehab Salahat, Hani Saleh, M. Sami Zitouni, Andrzej S. Sluzek, Baker Mohammad, Mahmoud Al-Qutayri, Mohammad Ismail
2015 C conf
ISCAS
Temesghen Tekeste, Nourhan Bayasi, Hani Saleh, Ahsan Khandoker, Baker Mohammad, Mahmoud Al-Qutayri, Mohammed Ismail
2015 conf
IDT
Hussam M. N. Al Hamadi, Amjad Gawanmeh, Mahmoud Al-Qutayri
2015 J jnl
CoRR
Paschalis C. Sofotasios, Lina S. Mohjazi, Sami Muhaidat, Mahmoud Al-Qutayri, George K. Karagiannidis
2015 conf
VTC Fall
Ehab Salahat, Hani Saleh, Andrzej Sluzek, Mahmoud Al-Qutayri, Baker Mohammad, Mohammed Ismail
2015 conf
ICCSPA
Ahmed Rashed Kulaib, Raed M. Shubair, Mahmoud Al-Qutayri, Jason W. P. Ng
2015 J jnl
Secur. Commun. Networks
Joonsang Baek, Young-Ji Byon, Eman Hableel, Mahmoud Al-Qutayri
2015 C conf
ISCAS
Yasmin Halawani, Baker Mohammad, Mahmoud Al-Qutayri, Hani Saleh
2015 C conf
IGARSS
Ehab Salahat, Hani Saleh, Andrzej S. Sluzek, Baker Mohammad, Mahmoud Al-Qutayri, Mohammad Ismail
2015 C conf
IECON
Ehab Salahat, Hani Saleh, Andrzej Sluzek, Mahmoud Al-Qutayri, Baker Mohammad, Mohammad Ismail
2015 J jnl
CoRR
Omar Alhussein, Ahmed Y. Al Hammadi, Paschalis C. Sofotasios, Sami Muhaidat, Jie Liang, Mahmoud Al-Qutayri, George K. Karagiannidis
2015 B conf
WiMob
Omar Alhussein, Ahmed Y. Al Hammadi, Paschalis C. Sofotasios, Sami Muhaidat, Jie Liang, Mahmoud Al-Qutayri, George K. Karagiannidis
2015 B conf
IWCMC
Doaa Al-Terri, Hadi Otrok, Hassan R. Barada, Mahmoud Al-Qutayri, Raed M. Shubair, Yousof Al-Hammadi
2015 J jnl
CoRR
Lina S. Mohjazi, Mehrdad Dianati, George K. Karagiannidis, Sami Muhaidat, Mahmoud Al-Qutayri
2015 J jnl
IEEE Commun. Mag.
Lina S. Mohjazi, Mehrdad Dianati, George K. Karagiannidis, Sami Muhaidat, Mahmoud Al-Qutayri
2015 C conf
HealthCom
Amjad Gawanmeh, Hussam M. N. Al Hamadi, Mahmoud Al-Qutayri, Shiu-Kai Chin, Kashif Saleem
2015 J jnl
Microprocess. Microsystems
Hamad Marzouqi, Mahmoud Al-Qutayri, Khaled Salah
2015 J jnl
CoRR
Ahmed Y. Al Hammadi, Omar Alhussein, Sami Muhaidat, Mahmoud Al-Qutayri, Saleh R. Al-Araji, George K. Karagiannidis
2014 conf
CSNDSP
Rami Al-Dalky, Omar Abduljaleel, Khaled Salah, Hadi Otrok, Mahmoud Al-Qutayri
2014 conf
ICECS
Hamad Marzouqi, Mahmoud Al-Qutayri, K. Salati
2014 conf
BHI
Hussam M. N. Al Hamadi, Amjad Gawanmeh, Mahmoud Al-Qutayri
2014 conf
ICECS
Ehab Salahat, Mahmoud Al-Qutayri, Saleh R. Al-Araji, Hani Saleh
2014 B conf
IWCMC
Rami Al-Dalky, Khaled Salah, Hadi Otrok, Mahmoud Al-Qutayri
2014 conf
ICCVE
Ahmed Y. Al Hammadi, Omar Altrad, Sami Muhaidat, Mahmoud Al-Qutayri, Saleh R. Al-Araji
2014 conf
CSNDSP
Omar Al-Kharji Al-Ali, Nader Anani, Mahmoud Al-Qutayri, Saleh R. Al-Araji, Prasad V. S. Ponnapalli
2014 C conf
Healthcom
Hussam M. N. Al Hamadi, Amjad Gawanmeh, Mahmoud Al-Qutayri
2014 conf
CSNDSP
Rami Al-Dalky, Khaled Salah, Mahmoud Al-Qutayri, Hadi Otrok
2014 conf
VTC Fall
Ehab Salahat, Mahmoud Al-Qutayri, Saleh R. Al-Araji
2014 C conf
CloudCom
Fatma Mohamed, Mohammad Abu-Matar, Rabeb Mizouni, Mahmoud Al-Qutayri, Zaid Al Mahmoud
2013 conf
ICECS
Ehab Salahat, Saleh R. Al-Araji, Mahmoud Al-Qutayri
2013 conf
3PGCIC
Joonsang Baek, Young-Ji Byon, Eman Hableel, Mahmoud Al-Qutayri
2013 conf
ICECS
Hamad Marzouqi, Mahmoud Al-Qutayri, Khaled Salah
2013 conf
ICECS
Ehab Salahat, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Andrzej Sluzek, Mohammed Ismail
2013 conf
WMNC
S. Al Muaini, Arafat Al-Dweik, Mahmoud Al-Qutayri
2013 conf
ICECS
Lina S. Mohjazi, Mahmoud Al-Qutayri, Hassan R. Barada, Kin Fai Poon
2013 conf
ICECS
Omar Al-Kharji Al-Ali, Saleh R. Al-Araji, Mahmoud Al-Qutayri, Nader Anani
2013 conf
ICECS
Yasmin Halawani, Baker Mohammad, Mahmoud Al-Qutayri, Hani Saleh
2013 conf
ICECS
Yasmin Halawani, Baker Mohammad, Dirar Homouz, Mahmoud Al-Qutayri, Hani Saleh
2013 conf
DTIS
Mohammad Alhawari, Ahsan Khandoker, Baker Mohammad, Hani Saleh, Kinda Khalaf, Mahmoud Al-Qutayri, Murat Kaya Yapici, Shakti Singh, Mohammed Ismail
2013 conf
ICECS
Hussam M. N. Al Hamadi, Amjad Gawanmeh, Mahmoud Al-Qutayri
2013 conf
ICECS
Ahmed Rashed Kulaib, Raed M. Shubair, Mahmoud Al-Qutayri, Jason W. P. Ng
2013 conf
IDT
Yasmin Halawani, Baker Mohammad, Dirar Humouz, Mahmoud Al-Qutayri, Hani Saleh
2013 conf
ICECS
Yasmin Halawani, Baker Mohammad, Mahmoud Al-Qutayri, Hani Saleh
2013 conf
IDT
Hamad Marzouqi, Mahmoud Al-Qutayri, Khaled Salah
2013 conf
ICECS
Temesghen Tekeste, Hani Saleh, Baker Mohammad, Mahmoud Al-Qutayri, Mohammed Ismail
2013 conf
ICECS
Hend Al Tair, Jorge Manuel Miranda Dias, Mahmoud Al-Qutayri
2012 J jnl
J. Commun.
Ahmed Rashed Kulaib, Raed M. Shubair, Mahmoud Al-Qutayri, Jason W. P. Ng
2012 conf
ICITST
Omniyah Gul, Mahmoud Al-Qutayri, Quang Hieu Vu, Chan Yeob Yeun
2012 J jnl
Int. J. Interact. Mob. Technol.
Hend Al Tair, Mohamed Jamal Zemerly, Mahmoud Al-Qutayri, Marcello Leida
2012 conf
ICECS
Mahmoud Al-Qutayri, Saleh R. Al-Araji, Jeedella S. Jeedella, Omar Al-Kharji Al-Ali, Nader Anani
2012 conf
CSNDSP
Omar Al-Kharji Al-Ali, Nader Anani, Mahmoud Al-Qutayri, Saleh R. Al-Araji, Prasad V. S. Ponnapalli
2012 J jnl
J. Comput. Networks Commun.
Lina S. Mohjazi, Mahmoud Al-Qutayri, Hassan R. Barada, Kin Fai Poon, Raed M. Shubair
2011 J jnl
Int. J. Comput. Aided Eng. Technol.
Mahmoud Al-Qutayri, Hassan R. Barada, Tariq Al-Hawi
2011 conf
ICITST
Hamad Marzouqi, Khaled Salah, Mahmoud Al-Qutayri, Chan Yeob Yeun
2011 conf
ICECS
Mahmoud Al-Qutayri, Saleh R. Al-Araji, Omar Al-Kharji Al-Ali, Nader Anani
2011 conf
EUROCON
Omar Al-Kharji Al-Ali, Nader Anani, Prasad V. S. Ponnapalli, Saleh R. Al-Araji, Mahmoud Al-Qutayri
2011 conf
ICITST
Hussam M. N. Al Hamadi, Chan Yeob Yeun, Mohamed Jamal Zemerly, Mahmoud Al-Qutayri, Amjad Gawanmeh
2011 conf
ICECS
Lina S. Mohjazi, Mahmoud Al-Qutayri, Hassan R. Barada, Kin Fai Poon
2011 conf
ICECS
Ahmed Rashed Kulaib, Raed M. Shubair, Mahmoud Al-Qutayri, Jason W. P. Ng
2011 conf
ICITST
Hend Al Tair, Mohamed Jamal Zemerly, Mahmoud Al-Qutayri, Marcello Leida
2011 conf
EUROCON
Nader Anani, Omar Al-Kharji Al-Ali, Prasad V. S. Ponnapalli, Saleh R. Al-Araji, Mahmoud Al-Qutayri
2010 conf
ISSPA
Omar Al-Kharji Al-Ali, Saleh R. Al-Araji, Nader Anani, Mahmoud Al-Qutayri, Prasad V. S. Ponnapalli
2010 J jnl
Int. J. Comput. Aided Eng. Technol.
Mahmoud Al-Qutayri, Hassan R. Barada, Saeed O. Al Mehairi
2010 conf
ISSPA
Arafat Al-Dweik, Mahmoud Al-Qutayri, Ridha Hamila
2010 conf
CSNDSP
Omar Al-Kharji Al-Ali, Nader Anani, Prasad V. S. Ponnapalli, Saleh R. Al-Araji, Mahmoud Al-Qutayri
2010 J jnl
Int. J. Comput. Aided Eng. Technol.
Mahmoud Al-Qutayri, Jeedella S. Jeedella
2010 conf
ICECS
Omar Al-Kharji Al-Ali, Nader Anani, Prasad V. S. Ponnapalli, Mahmoud Al-Qutayri, Saleh R. Al-Araji
2010 conf
CSNDSP
Omar Al-Kharji Al-Ali, Nader Anani, Mahmoud Al-Qutayri, Saleh R. Al-Araji, Prasad V. S. Ponnapalli
2009 J jnl
Int. J. Commun. Netw. Syst. Sci.
Mahmoud Al-Qutayri, Saleh R. Al-Araji, Abdulrahman Al-Humaidan
2009 J jnl
Int. J. Commun. Netw. Syst. Sci.
Mahmoud Al-Qutayri, Saleh R. Al-Araji, Abdulrahman Al-Humaidan
2009 conf
ICECS
Mahmoud Al-Qutayri, Saleh R. Al-Araji, Omar Al-Kharji Al-Ali, Nader Anani
2007 J jnl
J. Commun.
Raed M. Shubair, Mahmoud Al-Qutayri, Jassim M. Samhan
2007 conf
ISSPA
Saleh R. Al-Araji, Mahmoud Al-Qutayri, Khalfan Belhaj, Nidal Al-Shwawreh
2007 C conf
AICCSA
Saeed O. Al Mehairi, Hassan R. Barada, Mahmoud Al-Qutayri
2006 C conf
ISCAS
Saleh R. Al-Araji, Mahmoud Al-Qutayri, Abdallah Al-Zaabi
2006 C conf
AICCSA
Mahmoud Al-Qutayri, Hassan R. Barada, Ahmed Al-Kindi
2006 conf
APCCAS
Abdulrahman Al-Humaidan, Saleh R. Al-Araji, Mahmoud Al-Qutayri
2006 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Mahmoud Al-Qutayri, Saleh R. Al-Araji, N. I. Al-Moosa
2005 conf
ICECS
Abdallah Al-Zaabi, Mahmoud Al-Qutayri, Saleh R. Al-Araji
2003 conf
ICECS
Mahmoud Al-Qutayri
2002 conf
ICECS
Mahmoud Al-Qutayri
2000 conf
ICECS
Mahmoud Al-Qutayri
1997 J jnl
VLSI Design
Mahmoud Al-Qutayri, Peter R. Shepherd
tests/integration/test_pe_extractors.py
← Index tests/integration/test_pe_extractors.py python
"""
Integration tests for PE-specific extractors.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

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


# ============================================================================
# PEFeaturesExtractor Tests
# ============================================================================

class TestPEFeaturesExtractor:
    """Tests for PEFeaturesExtractor class."""

    def test_extract_valid_pe(self, pe_binary_path, mock_logger):
        """Test extracting features from valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.models.dataclasses import PE

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

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

    def test_extract_pe_type(self, pe_binary_path, mock_logger):
        """Test PE type detection (DLL, EXE, DRIVER)."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result.type in ["DLL", "EXE", "DRIVER"]

    def test_extract_architecture(self, pe_binary_path, mock_logger):
        """Test architecture detection."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Architecture should be detected
            assert result.architecture is not None

    def test_extract_entry_point(self, pe_binary_path, mock_logger):
        """Test entry point extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Entry point should be a hex string
            assert result.entry_point.startswith("0x")

    def test_extract_compilation_time(self, pe_binary_path, mock_logger):
        """Test compilation time extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Compilation time should be an integer timestamp
            assert isinstance(result.compilation_time, int)
            assert result.compilation_time_utc is not None

    def test_extract_dotnet_detection(self, pe_binary_path, mock_logger):
        """Test .NET detection."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Should be True for the test .NET binary
            assert isinstance(result.is_dotnet, bool)
            assert result.is_dotnet is True  # Test file is .NET

    def test_extract_headers(self, pe_binary_path, mock_logger):
        """Test header extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result.dos_header is not None
            assert result.nt_header is not None
            assert result.file_header is not None
            assert result.optional_header is not None

    def test_extract_counts(self, pe_binary_path, mock_logger):
        """Test section/import/export counts."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert isinstance(result.number_of_sections, int)
            assert isinstance(result.number_of_imports, int)
            assert isinstance(result.number_of_exports, int)
            assert isinstance(result.number_of_resources, int)

    def test_extract_rich_header(self, pe_binary_path, mock_logger):
        """Test Rich header extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Rich header may or may not be present
            # If present, should be JSON string
            if result.rich_header_dump is not None:
                assert isinstance(result.rich_header_dump, str)

    def test_extract_version_info(self, pe_binary_path, mock_logger):
        """Test version info extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Version info may or may not be present
            if result.version_info is not None:
                assert isinstance(result.version_info, list)


# ============================================================================
# PEImportExtractor Tests
# ============================================================================

class TestPEImportExtractor:
    """Tests for PEImportExtractor class."""

    def test_extract_imports(self, pe_binary_path, mock_logger):
        """Test import extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.models.dataclasses import PEImport

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None:
                assert isinstance(result, PEImport)
                assert isinstance(result.pe_imports_total, int)

    def test_extract_import_libraries(self, pe_binary_path, mock_logger):
        """Test import library extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and result.pe_import_libraryName is not None:
                assert isinstance(result.pe_import_libraryName, list)

    def test_extract_import_functions(self, pe_binary_path, mock_logger):
        """Test import function extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and result.pe_import_functions is not None:
                assert isinstance(result.pe_import_functions, list)

    def test_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test ClickHouse export preparation."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.prepare_export_data("ClickHouseExporter")

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


# ============================================================================
# PESectionExtractor Tests
# ============================================================================

class TestPESectionExtractor:
    """Tests for PESectionExtractor class."""

    def test_extract_sections(self, pe_binary_path, mock_logger):
        """Test section extraction."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor
        from redb.models.dataclasses import PESection

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

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

    def test_section_properties(self, pe_binary_path, mock_logger):
        """Test section property extraction."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and len(result) > 0:
                section = result[0]
                assert section.section_name is not None
                assert section.section_entropy >= 0
                assert section.section_sha256 is not None
                assert section.section_md5 is not None
                assert section.section_size >= 0

    def test_section_entropy_range(self, pe_binary_path, mock_logger):
        """Test that section entropy is in valid range."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None:
                for section in result:
                    assert 0 <= section.section_entropy <= 8

    def test_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test ClickHouse export preparation."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            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
                assert 'section_sha256' in column_names


# ============================================================================
# PEResourceExtractor Tests
# ============================================================================

class TestPEResourceExtractor:
    """Tests for PEResourceExtractor class."""

    def test_extract_resources(self, pe_binary_path, mock_logger):
        """Test resource extraction."""
        from redb.extractors.pe_extractors.pe_resources import PEResourceExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

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

    def test_resource_properties(self, pe_binary_path, mock_logger):
        """Test resource property extraction."""
        from redb.extractors.pe_extractors.pe_resources import PEResourceExtractor
        from redb.models.dataclasses import PEResource

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and len(result) > 0:
                resource = result[0]
                assert isinstance(resource, PEResource)
                assert resource.resource_type is not None


# ============================================================================
# PEOverlayExtractor Tests
# ============================================================================

class TestPEOverlayExtractor:
    """Tests for PEOverlayExtractor class."""

    def test_extract_overlay(self, pe_binary_path, mock_logger):
        """Test overlay extraction."""
        from redb.extractors.pe_extractors.pe_overlay import PEOverlayExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May be None if no overlay
            # If present, should have overlay properties
            if result is not None:
                assert hasattr(result, 'overlay_size')

    def test_has_overlay_check(self, pe_binary_path, mock_logger):
        """Test overlay detection."""
        from redb.extractors.pe_extractors.pe_overlay import PEOverlayExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            has_overlay = extractor._has_overlay()
            assert isinstance(has_overlay, bool)


# ============================================================================
# PESignatureExtractor Tests
# ============================================================================

class TestPESignatureExtractor:
    """Tests for PESignatureExtractor class."""

    def test_extract_signature(self, pe_binary_path, mock_logger):
        """Test signature extraction."""
        from redb.extractors.pe_extractors.pe_signature import PESignatureExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May be None if not signed
            # Result type depends on implementation

    def test_is_signed_check(self, pe_binary_path, mock_logger):
        """Test signature detection."""
        from redb.extractors.pe_extractors.pe_signature import PESignatureExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            is_signed = extractor._is_signed()
            assert isinstance(is_signed, bool)


# ============================================================================
# PEDotNetExtractor Tests
# ============================================================================

class TestPEDotNetExtractor:
    """Tests for PEDotNetExtractor class."""

    def test_extract_dotnet(self, pe_binary_path, mock_logger):
        """Test .NET metadata extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # The test file is a .NET binary
            if extractor._check_dotnet():
                assert result is not None

    def test_check_dotnet(self, pe_binary_path, mock_logger):
        """Test .NET detection."""
        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 None:
                pytest.skip("PE parsing failed")

            is_dotnet = extractor._check_dotnet()
            assert isinstance(is_dotnet, bool)
            # Test file should be .NET
            assert is_dotnet is True


# ============================================================================
# PEInconsistencyTestsExtractor Tests
# ============================================================================

class TestPEInconsistencyTestsExtractor:
    """Tests for PEInconsistencyTestsExtractor class."""

    def test_extract_inconsistency_tests(self, pe_binary_path, mock_logger):
        """Test inconsistency tests extraction."""
        from redb.extractors.pe_extractors.pe_inconsistency_tests import PEInconstistencyTestsExtractor as PEInconsistencyTestsExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # extract() returns True if tests were performed, False otherwise
            # The actual test results are stored in extractor.pe_inconsistency_tests
            # and extractor.dotnet_inconsistency_tests
            assert result in (True, False)

            if result:
                # Check that test results were stored
                assert extractor.pe_inconsistency_tests is not None or extractor.dotnet_inconsistency_tests is not None


# ============================================================================
# PEExtraFindings Tests
# ============================================================================

class TestPEExtraFindings:
    """Tests for PEExtraFindings class."""

    def test_extract_extra_findings(self, pe_binary_path, mock_logger):
        """Test extra findings extraction."""
        from redb.extractors.pe_extractors.pe_extra_findings import PEExtraFindings

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May return None or list of findings
            if result is not None:
                assert isinstance(result, list)


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

class TestPEExtractorIntegration:
    """Integration tests for PE extractors."""

    def test_all_extractors_same_pe_object(self, pe_binary_path, mock_logger, pe_object):
        """Test that extractors can share the same PE object."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            # Create extractors sharing the same PE object
            features_ext = PEFeaturesExtractor(pe_binary_path, mock_logger, pe=pe_object)
            imports_ext = PEImportExtractor(pe_binary_path, mock_logger, pe=pe_object)
            sections_ext = PESectionExtractor(pe_binary_path, mock_logger, pe=pe_object)

            # All should use the same PE object
            assert features_ext.pe is pe_object
            assert imports_ext.pe is pe_object
            assert sections_ext.pe is pe_object

            # All should extract successfully
            features_result = features_ext.extract()
            imports_result = imports_ext.extract()
            sections_result = sections_ext.extract()

            assert features_result is not None
            # imports and sections may be None if not present

    def test_hash_consistency_across_extractors(self, pe_binary_path, mock_logger):
        """Test that hashes are consistent across all extractors."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            features_ext = PEFeaturesExtractor(pe_binary_path, mock_logger)
            imports_ext = PEImportExtractor(pe_binary_path, mock_logger)

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