Nageen Himayat

111 papers A* 1B 12Misc 4Journal 63Unranked 30
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Nikita Zeulin, Olga Galinina, Nageen Himayat, Sergey Andreev
2026 J jnl
CoRR
Nikita Zeulin, Olga Galinina, Ravikumar Balakrishnan, Nageen Himayat, Sergey Andreev
2025 J jnl
Trans. Mach. Learn. Res.
Shenghong Dai, Jy-yong Sohn, Yicong Chen, S. M. Iftekharul Alam, Ravikumar Balakrishnan, Suman Banerjee, Nageen Himayat, Kangwook Lee
2025 J jnl
IEEE Trans. Signal Inf. Process. over Networks
Juan Cerviño, Md Asadullah Turja, Hesham Mostafa, Nageen Himayat, Alejandro Ribeiro
2025 J jnl
CoRR
Abhinav Kumar, George Torres, Noah Guzinski, Gaurav Panwar, Reza Tourani, Satyajayant Misra, Marcin Spoczynski, Mona Vij, Nageen Himayat
2025 J jnl
IEEE Trans. Mob. Comput.
Aleksei A. Ponomarenko-Timofeev, Olga Galinina, Ravikumar Balakrishnan, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy
2025 conf
EMNLP (Findings)
Haokun Chen, Sebastian Szyller, Weilin Xu, Nageen Himayat
2025 J jnl
CoRR
Haokun Chen, Sebastian Szyller, Weilin Xu, Nageen Himayat
2024 J jnl
CoRR
Shenghong Dai, Jy-yong Sohn, Yicong Chen, S. M. Iftekharul Alam, Ravikumar Balakrishnan, Suman Banerjee, Nageen Himayat, Kangwook Lee
2024 B conf
PIMRC
Vadim Gromovoy, Dmitri Moltchanov, Srikathyayani Srikanteswara, Yi Zhang, Roman Glazkov, Nageen Himayat
2024 J jnl
CoRR
Juan Cerviño, Md Asadullah Turja, Hesham Mostafa, Nageen Himayat, Alejandro Ribeiro
2024 J jnl
CoRR
Ravikumar Balakrishnan, Marius Arvinte, Nageen Himayat, Hosein Nikopour, Hassnaa Moustafa
2024 J jnl
CoRR
Weilin Xu, Sebastian Szyller, Cory Cornelius, Luis Murillo Rojas, Marius Arvinte, Alvaro Velasquez, Jason Martin, Nageen Himayat
2024 J jnl
Sensors
Roman Glazkov, Dmitri Moltchanov, Srikathyayani Srikanteswara, Andrey Samuylov, Gabriel E. Arrobo, Yi Zhang, Hao Feng, Nageen Himayat, Marcin Spoczynski, Yevgeni Koucheryavy
2023 conf
SPAWC
Ahmet Faruk Saz, Yashas Malur Saidutta, Faramarz Fekri, Mustafa Riza Akdeniz, Brandon Edwards, Nageen Himayat
2023 J jnl
IEEE Commun. Lett.
Nikita Zeulin, Olga Galinina, Nageen Himayat, Sergey Andreev
2023 J jnl
IEEE Trans. Commun.
Nikita Zeulin, Olga Galinina, Nageen Himayat, Sergey Andreev, Robert W. Heath Jr.
2023 B conf
WCNC
Yi Zhang, Srikathyayani Srikanteswara, Hao Feng, Gabriel E. Arrobo, Marcin Spoczynski, Nageen Himayat, Dmitri Moltchanov, Roman Glazkov
2023 J jnl
CoRR
Hesham Mostafa, Adam Grabowski, Md Asadullah Turja, Juan Cerviño, Alejandro Ribeiro, Nageen Himayat
2023 conf
VTC2023-Spring
Roman Kovalchukov, Roman Glazkov, Srikathyayani Srikanteswara, Yi Zhang, Dmitri Moltchanov, Gabriel E. Arrobo, Hao Feng, Marcin Spoczynski, Nageen Himayat
2023 J jnl
CoRR
Marius Arvinte, Cory Cornelius, Jason Martin, Nageen Himayat
2023 conf
ICUMT
Aleksei A. Ponomarenko-Timofeev, Olga Galinina, Ravikumar Balakrishnan, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy
2023 J jnl
CoRR
Aleksei A. Ponomarenko-Timofeev, Olga Galinina, Ravikumar Balakrishnan, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy
2023 conf
CCNC
Shenghong Dai, S. M. Iftekharul Alam, Ravikumar Balakrishnan, Kangwook Lee, Suman Banerjee, Nageen Himayat
2023 J jnl
CoRR
Nikita Zeulin, Olga Galinina, Nageen Himayat, Sergey Andreev
2022 A* conf
ICLR
Ravikumar Balakrishnan, Tian Li, Tianyi Zhou, Nageen Himayat, Virginia Smith, Jeff A. Bilmes
2022 conf
GLOBECOM (Workshops)
Hao Feng, Yi Zhang, Srikathyayani Srikanteswara, Marcin Spoczynski, Gabriel E. Arrobo, Jing Zhu, Nageen Himayat
2022 J jnl
CoRR
Hao Feng, Yi Zhang, Srikathyayani Srikanteswara, Marcin Spoczynski, Gabriel E. Arrobo, Jing Zhu, Nageen Himayat
2022 J jnl
CoRR
Anthony Thomas, Behnam Khaleghi, Gopi Krishna Jha, Sanjoy Dasgupta, Nageen Himayat, Ravi Iyer, Nilesh Jain, Tajana Rosing
2021 J jnl
IEEE Commun. Mag.
Shilpa Talwar, Nageen Himayat, Hosein Nikopour, Feng Xue, Geng Wu, Vida Ilderem
2021 J jnl
CoRR
Shilpa Talwar, Nageen Himayat, Hosein Nikopour, Feng Xue, Geng Wu, Vida Ilderem
2021 J jnl
IEEE J. Sel. Areas Commun.
Saurav Prakash, Sagar Dhakal, Mustafa Riza Akdeniz, Yair Yona, Shilpa Talwar, Salman Avestimehr, Nageen Himayat
2021 J jnl
CoRR
Nikita Zeulin, Olga Galinina, Nageen Himayat, Sergey Andreev, Robert W. Heath Jr.
2021 J jnl
J. Sens. Actuator Networks
Ravikumar Balakrishnan, Mustafa Riza Akdeniz, Sagar Dhakal, Arjun Anand, Ariela Zeira, Nageen Himayat
2020 J jnl
IEEE Commun. Mag.
Nikita Tafintsev, Dmitri Moltchanov, Mikhail Gerasimenko, Margarita Gapeyenko, Jing Zhu, Shu-Ping Yeh, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy, Mikko Valkama
2020 conf
GLOBECOM (Workshops)
Rustam Pirmagomedov, Srikathyayani Srikanteswara, Dmitri Moltchanov, Gabriel E. Arrobo, Yi Zhang, Nageen Himayat, Yevgeni Koucheryavy
2020 J jnl
CoRR
Saurav Prakash, Sagar Dhakal, Mustafa Riza Akdeniz, Amir Salman Avestimehr, Nageen Himayat
2020 J jnl
CoRR
Saurav Prakash, Sagar Dhakal, Mustafa Riza Akdeniz, Yair Yona, Shilpa Talwar, Salman Avestimehr, Nageen Himayat
2020 J jnl
CoRR
Sagar Dhakal, Saurav Prakash, Yair Yona, Shilpa Talwar, Nageen Himayat
2020 conf
ICC Workshops
Margarita Gapeyenko, Vitaly Petrov, Dmitri Moltchanov, Shu-Ping Yeh, Nageen Himayat, Sergey Andreev
2020 J jnl
IEEE Trans. Veh. Technol.
Nikita Tafintsev, Dmitri Moltchanov, Sergey Andreev, Shu-Ping Yeh, Nageen Himayat, Yevgeni Koucheryavy, Mikko Valkama
2020 J jnl
CoRR
Nikita Tafintsev, Dmitri Moltchanov, Sergey Andreev, Shu-Ping Yeh, Nageen Himayat, Yevgeni Koucheryavy, Mikko Valkama
2020 conf
SPAWC
Ravikumar Balakrishnan, Mustafa Riza Akdeniz, Sagar Dhakal, Nageen Himayat
2020 J jnl
IEEE Trans. Mob. Comput.
Margarita Gapeyenko, Andrey Samuylov, Mikhail Gerasimenko, Dmitri Moltchanov, Sarabjot Singh, Mustafa Riza Akdeniz, Ehsan Aryafar, Sergey Andreev, Nageen Himayat, Yevgeni Koucheryavy
2019 J jnl
CoRR
Nikita Tafintsev, Dmitri Moltchanov, Mikhail Gerasimenko, Margarita Gapeyenko, Jing Zhu, Shu-Ping Yeh, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy, Mikko Valkama
2019 conf
VTC Fall
Sagar Dhakal, Saurav Prakash, Yair Yona, Shilpa Talwar, Nageen Himayat
2019 conf
GLOBECOM Workshops
Sagar Dhakal, Saurav Prakash, Yair Yona, Shilpa Talwar, Nageen Himayat
2019 Misc conf
ICASSP
Mark Eisen, Mohammad M. Rashid, Konstantinos Gatsis, Dave Cavalcanti, Nageen Himayat, Alejandro Ribeiro
2019 J jnl
IEEE Internet Things J.
Mark Eisen, Mohammad M. Rashid, Konstantinos Gatsis, Dave Cavalcanti, Nageen Himayat, Alejandro Ribeiro
2019 J jnl
IEEE Wirel. Commun. Lett.
Dmitri Moltchanov, Andrey K. Samuylov, Vitaly Petrov, Margarita Gapeyenko, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy
2019 J jnl
IEEE Trans. Veh. Technol.
Margarita Gapeyenko, Vitaly Petrov, Dmitri Moltchanov, Mustafa Riza Akdeniz, Sergey Andreev, Nageen Himayat, Yevgeni Koucheryavy
2018 conf
SPAWC
Sai Qian Zhang, Feng Xue, Nageen Himayat, Shilpa Talwar, H. T. Kung
2018 conf
mmNets
Margarita Gapeyenko, Vitaly Petrov, Dmitri Moltchanov, Sergey Andreev, Yevgeni Koucheryavy, Mikko Valkama, Mustafa Riza Akdeniz, Nageen Himayat
2018 conf
VTC Fall
Mustafa Riza Akdeniz, Sagar Dhakal, Jan Schreck, Nageen Himayat
2018 J jnl
CoRR
Mark Eisen, Mohammad M. Rashid, Konstantinos Gatsis, Dave Cavalcanti, Nageen Himayat, Alejandro Ribeiro
2018 J jnl
IEEE J. Sel. Areas Commun.
Margarita Gapeyenko, Vitaly Petrov, Dmitri Moltchanov, Sergey Andreev, Nageen Himayat, Yevgeni Koucheryavy
2018 conf
GLOBECOM Workshops
Nikita Tafintsev, Mikhail Gerasimenko, Dmitri Moltchanov, Mustafa Riza Akdeniz, Shu-Ping Yeh, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy, Mikko Valkama
2018 conf
VTC Spring
Dmitrii Solomitckii, Vitaly Petrov, Hosein Nikopour, Mustafa Riza Akdeniz, Oner Orhan, Nageen Himayat, Shilpa Talwar, Sergey Andreev, Yevgeni Koucheryavy
2017 J jnl
IEEE Access
Mikhail Gerasimenko, Dmitri Moltchanov, Sergey Andreev, Yevgeni Koucheryavy, Nageen Himayat, Shu-Ping Yeh, Shilpa Talwar
2017 conf
GLOBECOM Workshops
Dmitrii Solomitckii, Vitaly Petrov, Hosein Nikopour, Mustafa Riza Akdeniz, Oner Orhan, Nageen Himayat, Shilpa Talwar, Sergey Andreev, Yevgeni Koucheryavy
2017 J jnl
CoRR
Margarita Gapeyenko, Andrey K. Samuylov, Mikhail Gerasimenko, Dmitri Moltchanov, Sarabjot Singh, Mustafa Riza Akdeniz, Ehsan Aryafar, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy
2017 J jnl
IEEE Trans. Veh. Technol.
Margarita Gapeyenko, Andrey K. Samuylov, Mikhail Gerasimenko, Dmitri Moltchanov, Sarabjot Singh, Mustafa Riza Akdeniz, Ehsan Aryafar, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy
2016 J jnl
CoRR
Margarita Gapeyenko, Andrey K. Samuylov, Mikhail Gerasimenko, Dmitri Moltchanov, Sarabjot Singh, Ehsan Aryafar, Shu-Ping Yeh, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy
2016 conf
ICC
Margarita Gapeyenko, Andrey K. Samuylov, Mikhail Gerasimenko, Dmitri Moltchanov, Sarabjot Singh, Ehsan Aryafar, Shu-Ping Yeh, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy
2016 conf
GLOBECOM Workshops
Andrey K. Samuylov, Margarita Gapeyenko, Dmitri Moltchanov, Mikhail Gerasimenko, Sarabjot Singh, Nageen Himayat, Sergey Andreev, Yevgeni Koucheryavy
2016 J jnl
CoRR
Sarabjot Singh, Shu-Ping Yeh, Nageen Himayat, Shilpa Talwar
2016 conf
ICC Workshops
Sarabjot Singh, Shu-Ping Yeh, Nageen Himayat, Shilpa Talwar
2016 J jnl
IEEE Commun. Lett.
Sarabjot Singh, Mikhail Geraseminko, Shu-Ping Yeh, Nageen Himayat, Shilpa Talwar
2015 J jnl
IEEE Access
Mikhail Gerasimenko, Dmitri Moltchanov, Roman Florea, Sergey D. Andreev, Yevgeni Koucheryavy, Nageen Himayat, Shu-Ping Yeh, Shilpa Talwar
2015 ch.
Design and Deployment of Small Cell Networks
Nageen Himayat, Shu-Ping Yeh, Shilpa Talwar, Mikhail Gerasimenko, Sergey Andreev, Yevgeni Koucheryavy
2015 conf
VTC Spring
Mikhail Gerasimenko, Dmitri Moltchanov, Roman Florea, Nageen Himayat, Sergey D. Andreev, Yevgeni Koucheryavy
2015 J jnl
CoRR
Sarabjot Singh, Mikhail Geraseminko, Shu-Ping Yeh, Nageen Himayat, Shilpa Talwar
2014 J jnl
IEEE J. Sel. Areas Commun.
Olga Galinina, Sergey D. Andreev, Mikhail Gerasimenko, Yevgeni Koucheryavy, Nageen Himayat, Shu-Ping Yeh, Shilpa Talwar
2014 J jnl
IEEE Wirel. Commun.
Sergey D. Andreev, Mikhail Gerasimenko, Olga Galinina, Yevgeni Koucheryavy, Nageen Himayat, Shu-Ping Yeh, Shilpa Talwar
2014 Misc conf
ICNC
Nageen Himayat, Shu-Ping Yeh, Ali Y. Panah, Shilpa Talwar, Mikhail Gerasimenko, Sergey D. Andreev, Yevgeni Koucheryavy
2013 conf
GLOBECOM Workshops
Mikhail Gerasimenko, Nageen Himayat, Shu-Ping Yeh, Shilpa Talwar, Sergey D. Andreev, Yevgeni Koucheryavy
2013 J jnl
EURASIP J. Wirel. Commun. Netw.
Chenzi Jiang, Leonard J. Cimini Jr., Nageen Himayat
2013 conf
VTC Fall
Shu-Ping Yeh, Ali Y. Panah, Nageen Himayat, Shilpa Talwar
2012 conf
GLOBECOM Workshops
Vivek Gupta, Srinivasa Somayazulu, Nageen Himayat, Harsh Verma, Mohan Bisht, Vikram Nandwani
2012 J jnl
Comput. Commun.
Sergey D. Andreev, Pavel Gonchukov, Nageen Himayat, Yevgeni Koucheryavy, Andrey M. Turlikov
2012 conf
ICC
Fangfang Liu, Xiangwei Zhou, Nageen Himayat, Shu-Ping Yeh, Srikathyayani Srikanteswara, Shilpa Talwar, Chunyan Feng, Geoffrey Ye Li
2012 J jnl
IEEE Trans. Commun.
Guowang Miao, Nageen Himayat, Geoffrey Ye Li, Shilpa Talwar
2012 conf
GLOBECOM Workshops
Ali Y. Panah, Shu-Ping Yeh, Nageen Himayat, Shilpa Talwar
2011 J jnl
IEEE Wirel. Commun.
Shu-Ping Yeh, Shilpa Talwar, Geng Wu, Nageen Himayat, Kerstin Johnsson
2011 J jnl
IEEE Trans. Wirel. Commun.
Guowang Miao, Nageen Himayat, Geoffrey Ye Li, Shilpa Talwar
2011 J jnl
IEEE Commun. Mag.
Geng Wu, Shilpa Talwar, Kerstin Johnsson, Nageen Himayat, Nageen D. Johnson
2011 B conf
WCNC
Chenzi Jiang, Leonard J. Cimini Jr., Nageen Himayat
2010 J jnl
IEEE Trans. Commun.
Guowang Miao, Nageen Himayat, Geoffrey Ye Li
2010 J jnl
IEEE Commun. Mag.
Nageen Himayat, Shilpa Talwar, Anil M. Rao, Robert Soni
2010 Misc conf
CISS
Chenzi Jiang, Leonard J. Cimini Jr., Nageen Himayat
2010 B conf
GLOBECOM
Yongzhao Li, Leonard J. Cimini Jr., Hailin Zhang, Nageen Himayat
2009 J jnl
IEEE Trans. Commun.
Guowang Miao, Geoffrey Ye Li, Nageen Himayat, Shilpa Talwar
2009 J jnl
Wirel. Commun. Mob. Comput.
Guowang Miao, Nageen Himayat, Ye (Geoffrey) Li, Ananthram Swami
2009 conf
ICC
Guowang Miao, Nageen Himayat, Ye (Geoffrey) Li, Ali Taha Koç, Shilpa Talwar
2009 conf
ICC
Guowang Miao, Nageen Himayat, Ye (Geoffrey) Li, Shilpa Talwar
2009 Misc conf
ICASSP
Clark Chen, Yang-Seok Choi, Nageen Himayat, Minnie Ho, Vladimir Kravtsov, Guangjie Li, Qinghua Li, Yuval Lomnitz, Hongmei Sun, Hua Yang, Shilpa Talwar, Hujun Yin, Hongming Zheng, Shanshan Zheng
2009 J jnl
Frontiers Comput. Sci. China
Yongzhao Li, Leonard J. Cimini Jr., Nageen Himayat
2009 B conf
GLOBECOM
Lu Zhang, Yongzhao Li, Leonard J. Cimini Jr., Nageen Himayat
2008 conf
ICC
Guowang Miao, Nageen Himayat, Ye (Geoffrey) Li, David Bormann
2008 B conf
GLOBECOM
Guowang Miao, Nageen Himayat, Ye (Geoffrey) Li
2008 B conf
WCNC
Guowang Miao, Nageen Himayat
2008 B conf
GLOBECOM
Yongzhao Li, Leonard J. Cimini Jr., Nageen Himayat
2007 B conf
WCNC
Wan Choi, Nageen Himayat, Shilpa Talwar, Jin Young Kim, Albert Koo, Jane Choi, Yujin Noh, Josep Kim
2007 B conf
GLOBECOM
Nageen Himayat, Shilpa Talwar, Wan Choi, Jae-Young Kim, J. Koo, Jane Choi, Yujin Noh, Josep Kim
2007 B conf
WCNC
Wan Choi, Nageen Himayat, Shilpa Talwar, Minnie Ho
1997 J jnl
Signal Process.
Visa Koivunen, Nageen Himayat, Saleem A. Kassam
1995 J jnl
IEEE Commun. Mag.
Charles A. Eldering, Nageen Himayat, Floyd M. Gardner
1995 B conf
ICIP
Visa Koivunen, Nageen Himayat, Saleem A. Kassam
1994 J jnl
IEEE Trans. Image Process.
Nageen Himayat, Saleem A. Kassam
1994 conf
ICIP (2)
Visa Koivunen, Nageen Himayat, Saleem A. Kassam
1993 J jnl
IEEE Trans. Signal Process.
Nageen Himayat, Saleem A. Kassam
tests/unit/test_dataclasses.py
← Index tests/unit/test_dataclasses.py python
"""
Unit tests for redb.models.dataclasses.

These tests verify construction, field defaults, and type expectations for
every dataclass in the module (excluding Mach-O dataclasses, which are
covered by test_macho_dataclasses.py).
"""
import pytest
from dataclasses import asdict, fields

pytestmark = [pytest.mark.unit, pytest.mark.dataclass]


# ============================================================================
# Hash / Hashes
# ============================================================================

class TestHashDataclass:
    """Tests for the Hash dataclass."""

    def test_creation(self):
        from redb.models.dataclasses import Hash

        h = Hash(
            md5="d41d8cd98f00b204e9800998ecf8427e",
            sha1="da39a3ee5e6b4b0d3255bfef95601890afd80709",
            sha256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        )
        assert h.md5 == "d41d8cd98f00b204e9800998ecf8427e"
        assert h.sha1 == "da39a3ee5e6b4b0d3255bfef95601890afd80709"
        assert h.sha256 == "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

    def test_asdict(self):
        from redb.models.dataclasses import Hash

        h = Hash(md5="a", sha1="b", sha256="c")
        d = asdict(h)
        assert d == {"md5": "a", "sha1": "b", "sha256": "c"}


class TestHashesDataclass:
    """Tests for the Hashes dataclass."""

    def test_required_fields(self):
        from redb.models.dataclasses import Hashes

        h = Hashes(
            md5="md5val",
            sha1="sha1val",
            sha256="sha256val",
            ssdeep_hash="ssdeep",
            tlsh_hash="tlsh",
        )
        assert h.md5 == "md5val"
        assert h.ssdeep_hash == "ssdeep"

    def test_optional_pe_fields_default_none(self):
        from redb.models.dataclasses import Hashes

        h = Hashes(md5="a", sha1="b", sha256="c", ssdeep_hash="d", tlsh_hash="e")
        assert h.authentihash is None
        assert h.imphash is None
        assert h.richhash is None
        assert h.richpe_hash is None
        assert h.richpv_hash is None
        assert h.richpv_hash_sorted is None
        assert h.typerefhash is None
        assert h.impfuzzy is None

    def test_optional_elf_fields_default_none(self):
        from redb.models.dataclasses import Hashes

        h = Hashes(md5="a", sha1="b", sha256="c", ssdeep_hash="d", tlsh_hash="e")
        assert h.import_hash is None
        assert h.export_hash is None
        assert h.section_hash is None
        assert h.symbol_hash is None
        assert h.dynamic_hash is None

    def test_optional_macho_fields_default_none(self):
        from redb.models.dataclasses import Hashes

        h = Hashes(md5="a", sha1="b", sha256="c", ssdeep_hash="d", tlsh_hash="e")
        assert h.macho_dylib_hash is None
        assert h.macho_import_hash is None
        assert h.macho_export_hash is None
        assert h.macho_entitlement_hash is None
        assert h.macho_symhash is None

    def test_macho_fields_settable(self):
        from redb.models.dataclasses import Hashes

        h = Hashes(
            md5="a", sha1="b", sha256="c", ssdeep_hash="d", tlsh_hash="e",
            macho_dylib_hash="dylib_h",
            macho_import_hash="import_h",
            macho_export_hash="export_h",
            macho_entitlement_hash="ent_h",
            macho_symhash="sym_h",
        )
        assert h.macho_dylib_hash == "dylib_h"
        assert h.macho_import_hash == "import_h"
        assert h.macho_export_hash == "export_h"
        assert h.macho_entitlement_hash == "ent_h"
        assert h.macho_symhash == "sym_h"


# ============================================================================
# BasicProperties
# ============================================================================

class TestBasicPropertiesDataclass:
    """Tests for the BasicProperties dataclass."""

    def test_required_fields(self):
        from redb.models.dataclasses import BasicProperties

        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,
        )
        assert bp.filename == "test.exe"
        assert bp.filesize == 1024
        assert bp.file_entropy == 6.5

    def test_optional_fields_default_none(self):
        from redb.models.dataclasses import BasicProperties

        bp = BasicProperties(
            filename="x", sample_name="x", filesize=0,
            filetype="t", filetype_mime="m", filetype_magika="k", file_entropy=0.0,
        )
        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_fat_fields(self):
        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 len(bp.child_sha256) == 2
        assert bp.child_architecture == ["x86_64", "arm64"]

    def test_asdict_roundtrip(self):
        from redb.models.dataclasses import BasicProperties

        bp = BasicProperties(
            filename="f", sample_name="s", filesize=10,
            filetype="t", filetype_mime="m", filetype_magika="k", file_entropy=1.0,
        )
        d = asdict(bp)
        assert d["filename"] == "f"
        assert d["is_fat"] is None


# ============================================================================
# DIEinfo / CAPA
# ============================================================================

class TestDIEinfoDataclass:
    def test_creation(self):
        from redb.models.dataclasses import DIEinfo

        d = DIEinfo(die_full_dump="dump_text")
        assert d.die_full_dump == "dump_text"
        assert d.die_info == {}

    def test_with_info(self):
        from redb.models.dataclasses import DIEinfo

        d = DIEinfo(die_full_dump="x", die_info={"packer": "UPX"})
        assert d.die_info["packer"] == "UPX"


class TestCAPADataclass:
    def test_creation(self):
        from redb.models.dataclasses import CAPA

        c = CAPA(
            capa_dump="dump",
            capabilities=["cap1"],
            namespaces=["ns1"],
            attack_dump="attack",
            tactics=["TA0001"],
            techniques=["T1059"],
            techniques_id=["T1059.001"],
            mbc_dump="mbc",
            mbc_objectives=["obj1"],
            mbc_behaviors=["beh1"],
            mbc_behaviors_id=["B0001"],
        )
        assert c.capa_dump == "dump"
        assert "cap1" in c.capabilities
        assert "TA0001" in c.tactics


# ============================================================================
# Malcontent
# ============================================================================

class TestMalcontentDataclass:
    def test_creation(self):
        from redb.models.dataclasses import Malcontent

        m = Malcontent(
            malcontent_dump='{"RiskScore": 2}',
            version="malcontent v1.0.0",
            risk_score=2,
            risk_level="MEDIUM"
        )
        assert m.malcontent_dump == '{"RiskScore": 2}'
        assert m.version == "malcontent v1.0.0"
        assert m.risk_score == 2
        assert m.risk_level == "MEDIUM"

    def test_with_json_content(self):
        from redb.models.dataclasses import Malcontent
        import json

        # Now stores unwrapped content (without Files/<path> wrapper)
        file_content = {
            "RiskScore": 3,
            "RiskLevel": "HIGH",
            "IsMalcontent": True,
            "Behaviors": [
                {"RuleName": "exec/shell", "RiskLevel": "HIGH", "Description": "executes shell commands"}
            ]
        }
        m = Malcontent(
            malcontent_dump=json.dumps(file_content),
            version="v0.5.0",
            risk_score=3,
            risk_level="HIGH"
        )
        parsed = json.loads(m.malcontent_dump)
        assert parsed["RiskLevel"] == "HIGH"
        assert parsed["Behaviors"][0]["RuleName"] == "exec/shell"

    def test_asdict(self):
        from redb.models.dataclasses import Malcontent
        from dataclasses import asdict

        m = Malcontent(malcontent_dump="{}", version="v1", risk_score=0, risk_level="")
        d = asdict(m)
        assert d == {"malcontent_dump": "{}", "version": "v1", "risk_score": 0, "risk_level": ""}


# ============================================================================
# String
# ============================================================================

class TestStringDataclass:
    def test_creation(self):
        from redb.models.dataclasses import String

        s = String(string="hello", string_length=5, string_entropy=2.3, string_frequency=10)
        assert s.string == "hello"
        assert s.md5 == []
        assert s.sha1 == []
        assert s.sha256 == []

    def test_with_hashes(self):
        from redb.models.dataclasses import String

        s = String(
            string="test", string_length=4, string_entropy=2.0, string_frequency=1,
            md5=["abc"], sha256=["def"],
        )
        assert s.md5 == ["abc"]
        assert s.sha256 == ["def"]


# ============================================================================
# PE Dataclasses
# ============================================================================

class TestPEDataclass:
    def test_required_fields(self):
        from redb.models.dataclasses import PE

        pe = PE(
            dos_header="dos", nt_header="nt", optional_header="opt",
            file_header="fh", magic="0x10b", entry_point="0x1000",
            major_linker_version=14, minor_linker_version=0,
            target_machine="I386", architecture="x86",
            compilation_time=1609459200, compilation_time_utc="2021-01-01T00:00:00",
            is_dotnet=False, is_signed=False, has_overlay=False,
            number_of_sections=4, number_of_imports=10,
            number_of_exports=0, number_of_resources=2,
            type="EXE",
        )
        assert pe.architecture == "x86"
        assert pe.type == "EXE"

    def test_optional_fields_default_none(self):
        from redb.models.dataclasses import PE

        pe = PE(
            dos_header="d", nt_header="n", optional_header="o",
            file_header="f", magic="m", entry_point="e",
            major_linker_version=0, minor_linker_version=0,
            target_machine="t", architecture="a",
            compilation_time=0, compilation_time_utc="",
            is_dotnet=False, is_signed=False, has_overlay=False,
            number_of_sections=0, number_of_imports=0,
            number_of_exports=0, number_of_resources=0,
            type="DLL",
        )
        assert pe.dbg_struct is None
        assert pe.tls_struct is None
        assert pe.rich_header_dump is None
        assert pe.version_info is None


class TestPEImportDataclass:
    def test_creation(self):
        from redb.models.dataclasses import PEImport

        pi = PEImport(pe_imports_total=5)
        assert pi.pe_imports_total == 5
        assert pi.pe_import_libraryName is None
        assert pi.pe_import_functions is None


class TestPESectionDataclass:
    def test_creation(self):
        from redb.models.dataclasses import PESection

        ps = PESection(
            _id="sec_id", section_entropy=6.5, section_sha256="sha",
            section_md5="md5", section_name=".text", section_name_b64=".text",
            section_pointer_to_raw_data="0x400",
            section_size=4096, section_v_addr="0x1000",
            section_v_addr_hex="0x1000", section_v_size=8192,
        )
        assert ps.section_name == ".text"
        assert ps.section_entropy == 6.5


class TestPEResourceDataclass:
    def test_creation(self):
        from redb.models.dataclasses import PEResource

        pr = PEResource(
            _id="res_id", resource_type="RT_ICON", resource_entropy=3.5,
            resource_sha256="sha", resource_filetype="image/png",
            resource_magika="png", resource_language="LANG_ENGLISH",
            resource_sub_lang="SUBLANG_DEFAULT",
            resource_rva="0x2000", resource_size=1024,
        )
        assert pr.resource_type == "RT_ICON"


class TestPEOverlayDataclass:
    def test_creation(self):
        from redb.models.dataclasses import PEOverlay

        po = PEOverlay(
            _id="ovl_id", overlay_size=512, overlay_entropy=7.9,
            overlay_offset="0x5000", overlay_mimetype="application/octet-stream",
            overlay_type="data", overlay_magika="unknown",
            overlay_sha256="sha", overlay_sha1="sha1", overlay_md5="md5",
        )
        assert po.overlay_size == 512


class TestPESignerDataclass:
    def test_creation(self):
        from redb.models.dataclasses import PESigner

        ps = PESigner(
            signer_serial_number="01", signer_subject="CN=Test",
            signer_issuer="CN=CA", signer_valid_from="2021-01-01",
            signer_valid_to="2025-01-01", signer_thumbprint="aabb",
            signer_algorithm="sha256WithRSAEncryption",
        )
        assert ps.signer_subject == "CN=Test"


class TestPECertificateDataclass:
    def test_creation(self):
        from redb.models.dataclasses import PECertificate

        pc = PECertificate(
            certificate_serial_number="02", certificate_subject="CN=Cert",
            certificate_issuer="CN=CA", certificate_valid_from="2021-01-01",
            certificate_valid_to="2025-01-01", certificate_thumbprint="ccdd",
            certificate_algorithm="sha256",
        )
        assert pc.certificate_serial_number == "02"


class TestPECodeSigningInfoDataclass:
    def test_creation(self):
        from redb.models.dataclasses import PECodeSigningInfo

        cs = PECodeSigningInfo(
            _id="cs_id", signature_verified=True, number_of_certificates=2,
        )
        assert cs.signature_verified is True
        assert cs.x509_certificates is None

    def test_with_certificates(self):
        from redb.models.dataclasses import PECodeSigningInfo

        cs = PECodeSigningInfo(
            _id="cs_id", signature_verified=False, number_of_certificates=0,
            x509_certificates=[{"cn": "test"}],
        )
        assert len(cs.x509_certificates) == 1


class TestPEExtraFindingDataclass:
    def test_creation(self):
        from redb.models.dataclasses import PEExtraFinding

        ef = PEExtraFinding(context="anomaly_detection")
        assert ef.context == "anomaly_detection"
        assert ef.finding is None


class TestPEDotNetDataclass:
    def test_creation(self):
        from redb.models.dataclasses import PEDotNet

        dn = PEDotNet()
        assert dn.dotnet == {}

    def test_with_data(self):
        from redb.models.dataclasses import PEDotNet

        dn = PEDotNet(dotnet={"runtime": "v4.0.30319"})
        assert dn.dotnet["runtime"] == "v4.0.30319"


class TestDotNetInconsistencyTestsDataclass:
    def test_creation(self):
        from redb.models.dataclasses import DotNetInconsistencyTests

        it = DotNetInconsistencyTests(
            test_dotnet_data_dir_hidden=False,
            test_dotnet_fake_types=True,
            test_dotnet_extra_data=None,
            test_dotnet_invalid_type_ref=False,
            test_dotnet_fake_datastreams=False,
            test_dotnet_extra_module_table=None,
            test_dotnet_extra_assembly_table=False,
            test_dotnet_invalid_strings_stream=False,
            test_dotnet_streams_mixed_case=True,
            test_dotnet_method_def_invalid_table=False,
            test_dotnet_max_len_exceeding_strings=False,
        )
        assert it.test_dotnet_fake_types is True
        assert it.test_dotnet_extra_data is None


class TestPEInconsistencyTestsDataclass:
    def test_creation(self):
        from redb.models.dataclasses import PEInconsistencyTests

        it = PEInconsistencyTests(
            test_rich_header_checksum=True,
            test_rich_header_duplicate=False,
            test_rich_header_linker=None,
            test_rich_header_import_count=True,
        )
        assert it.test_rich_header_checksum is True
        assert it.test_rich_header_linker is None


# ============================================================================
# YARA Dataclasses
# ============================================================================

class TestYaraRuleDataclass:
    def test_creation(self):
        from redb.models.dataclasses import YaraRule

        yr = YaraRule(
            rule_name="test_rule",
            rule_tags=["malware", "trojan"],
            rule_meta={"author": "test", "description": "A test rule"},
        )
        assert yr.rule_name == "test_rule"
        assert "malware" in yr.rule_tags


class TestYaraMatchDataclass:
    def test_creation(self):
        from redb.models.dataclasses import YaraMatch

        ym = YaraMatch(rule_name="test_rule", match_strings=["$s1", "$s2"])
        assert ym.rule_name == "test_rule"
        assert len(ym.match_strings) == 2


# ============================================================================
# ELF Dataclasses
# ============================================================================

class TestELFFeaturesDataclass:
    def test_creation(self):
        from redb.models.dataclasses import ELFFeatures

        ef = ELFFeatures(
            ei_class=2, ei_data=1, ei_version=1, ei_osabi=0, ei_abiversion=0,
            e_type=2, e_machine=62, e_version=1, e_entry=0x400000, e_flags=0,
            ei_class_str="ELFCLASS64", ei_data_str="ELFDATA2LSB",
            ei_osabi_str="ELFOSABI_SYSV", e_type_str="ET_EXEC",
            e_machine_str="EM_X86_64",
            is_64bit=1, is_stripped=0, is_pie=0, has_canary=1, has_nx=1,
            has_relro=1, has_fortify=0,
            number_of_segments=9, number_of_sections=31,
            number_of_symbols=100, number_of_dynamic_symbols=50,
            number_of_relocations=25, number_of_dependencies=5,
            gnu_hash_present=1, has_debug_info=0,
        )
        assert ef.ei_class == 2
        assert ef.e_machine_str == "EM_X86_64"
        assert ef.build_id is None

    def test_with_build_id(self):
        from redb.models.dataclasses import ELFFeatures

        ef = ELFFeatures(
            ei_class=2, ei_data=1, ei_version=1, ei_osabi=0, ei_abiversion=0,
            e_type=3, e_machine=62, e_version=1, e_entry=0, e_flags=0,
            ei_class_str="64", ei_data_str="LE", ei_osabi_str="SYSV",
            e_type_str="DYN", e_machine_str="X86_64",
            is_64bit=1, is_stripped=1, is_pie=1, has_canary=0, has_nx=1,
            has_relro=1, has_fortify=0,
            number_of_segments=8, number_of_sections=28,
            number_of_symbols=0, number_of_dynamic_symbols=30,
            number_of_relocations=10, number_of_dependencies=3,
            gnu_hash_present=1, has_debug_info=0,
            build_id="abc123def456",
        )
        assert ef.build_id == "abc123def456"


class TestELFDependencyDataclass:
    def test_creation(self):
        from redb.models.dataclasses import ELFDependency

        dep = ELFDependency(
            dependency_name="libc.so.6",
            dependency_type=1,
            dependency_type_str="NEEDED",
        )
        assert dep.dependency_name == "libc.so.6"


class TestELFImportDataclass:
    def test_creation(self):
        from redb.models.dataclasses import ELFImport

        ei = ELFImport(elf_imports_total=3)
        assert ei.elf_imports_total == 3
        assert ei.elf_import_libraries == []
        assert ei.elf_import_functions == []


class TestELFExportDataclass:
    def test_creation(self):
        from redb.models.dataclasses import ELFExport

        ee = ELFExport(elf_exports_total=5)
        assert ee.elf_exports_total == 5
        assert ee.elf_export_functions == []


class TestELFSectionDataclass:
    def test_creation(self):
        from redb.models.dataclasses import ELFSection

        es = ELFSection(
            section_name=".text", section_type=1, section_type_str="SHT_PROGBITS",
            section_flags=6, section_flags_str=["SHF_ALLOC", "SHF_EXECINSTR"],
            section_addr=0x400000, section_offset=0x1000, section_size=4096,
            section_link=0, section_info=0, section_addralign=16, section_entsize=0,
            section_entropy=6.8, section_sha256="sha", section_md5="md5",
        )
        assert es.section_name == ".text"
        assert "SHF_ALLOC" in es.section_flags_str


class TestELFSegmentDataclass:
    def test_creation(self):
        from redb.models.dataclasses import ELFSegment

        seg = ELFSegment(
            segment_type=1, segment_type_str="PT_LOAD",
            segment_flags=5, segment_flags_str=["PF_R", "PF_X"],
            segment_offset=0, segment_vaddr=0x400000, segment_paddr=0x400000,
            segment_filesz=0x1000, segment_memsz=0x1000, segment_align=0x200000,
            segment_entropy=5.5, segment_sha256="sha", segment_md5="md5",
        )
        assert seg.segment_type_str == "PT_LOAD"


class TestELFSymbolDataclass:
    def test_creation(self):
        from redb.models.dataclasses import ELFSymbol

        sym = ELFSymbol(
            symbol_name="main", symbol_value=0x401000, symbol_size=100,
            symbol_type=2, symbol_type_str="STT_FUNC",
            symbol_bind=1, symbol_bind_str="STB_GLOBAL",
            symbol_visibility=0, symbol_visibility_str="STV_DEFAULT",
            symbol_section_index=14, symbol_section_index_str="14",
            is_dynamic=0,
        )
        assert sym.symbol_name == "main"
        assert sym.symbol_type_str == "STT_FUNC"


class TestELFRelocationDataclass:
    def test_creation(self):
        from redb.models.dataclasses import ELFRelocation

        rel = ELFRelocation(
            relocation_offset=0x601000, relocation_type=7,
            relocation_type_str="R_X86_64_JUMP_SLOT",
            relocation_symbol_index=1, relocation_symbol_name="printf",
            relocation_section=".rela.plt",
        )
        assert rel.relocation_addend is None

    def test_with_addend(self):
        from redb.models.dataclasses import ELFRelocation

        rel = ELFRelocation(
            relocation_offset=0x601000, relocation_type=7,
            relocation_type_str="R_X86_64_JUMP_SLOT",
            relocation_symbol_index=1, relocation_symbol_name="printf",
            relocation_section=".rela.plt",
            relocation_addend=-4,
        )
        assert rel.relocation_addend == -4


class TestELFNoteDataclass:
    def test_creation(self):
        from redb.models.dataclasses import ELFNote

        note = ELFNote(
            note_name="GNU", note_type=3,
            note_type_str="NT_GNU_BUILD_ID",
            note_desc="abc123", note_section=".note.gnu.build-id",
        )
        assert note.note_name == "GNU"
        assert note.note_type_str == "NT_GNU_BUILD_ID"


# ============================================================================
# Decompiled
# ============================================================================

class TestDecompiledDataclass:
    def test_creation(self):
        from redb.models.dataclasses import Decompiled

        d = Decompiled(
            _id="func_hash",
            decompiled_function_name="main",
            decompiled_function_address="0x401000",
            decompiled_function="int main() { return 0; }",
        )
        assert d.decompiled_function_name == "main"