Rama Akkiraju

82 papers A* 6A 18C 2Journal 21Unranked 33
YearRankTypeTitle / Venue / Authors
2026 conf
EACL (Industry Track)
Aaditya Shukla, Sidney Knowles, Meenakshi Madugula, David Farris, Ryan Angilly, Santiago Pombo, Lu An, Anbang Xu, Abhinav Balasubramanian, Tan Yu, Jiaxiang Ren, Rama Akkiraju
2025 J jnl
CoRR
Aaditya Shukla, Sidney Knowles, Meenakshi Madugula, Dave Farris, Ryan Angilly, Santiago Pombo, Anbang Xu, Lu An, Abhinav Balasubramanian, Tan Yu, Jiaxiang Ren, Rama Akkiraju
2025 J jnl
CoRR
Shu Zhao, Tan Yu, Anbang Xu, Japinder Singh, Aaditya Shukla, Rama Akkiraju
2024 J jnl
CoRR
Rama Akkiraju, Anbang Xu, Deepak Bora, Tan Yu, Lu An, Vishal Seth, Aaditya Shukla, Pritam Gundecha, Hridhay Mehta, Ashwin Jha, Prithvi Raj, Abhinav Balasubramanian, Murali Maram, Guru Muthusamy, Shivakesh Reddy Annepally, Sidney Knowles, Min Du, Nick Burnett, Sean Javiya, Ashok Marannan, Mamta Kumari, Surbhi Jha, Ethan Dereszenski, Anupam Chakraborty, Subhash Ranjan, Amina Terfai, Anoop Surya, Tracey Mercer, Vinodh Kumar Thanigachalam, Tamar Bar, Sanjana Krishnan, Samy Kilaru, Jasmine Jaksic, Nave Algarici, Jacob Liberman, Joey Conway, Sonu Nayyar, Justin Boitano
2024 J jnl
CoRR
Tan Yu, Anbang Xu, Rama Akkiraju
2022 conf
HICSS
Xiaotong Liu, Anbang Xu, Rama Akkiraju
2022 C conf
CLOSER
Lu An, An-Jie Tu, Xiaotong Liu, Rama Akkiraju
2022 conf
CASCON
Luis F. Rivera, Norha M. Villegas, Gabriel Tamura, Hausi A. Müller, Rama Akkiraju, Ian Watts, Eric Erpenbach
2021 conf
IntelliSys (3)
Mingkun Gao, Xiaotong Liu, Anbang Xu, Rama Akkiraju
2021 A conf
Conference on Designing Interactive Systems
Mingkun Gao, Xiaotong Liu, Anbang Xu, Rama Akkiraju
2021 conf
CASCON
Hausi A. Müller, Luis F. Rivera, Miguel Jiménez, Norha M. Villegas, Gabriel Tamura, Rama Akkiraju, Ian Watts, Eric Erpenbach
2020 conf
CHI Extended Abstracts
Jiawei Chen, Anbang Xu, Zhe Liu, Yufan Guo, Xiaotong Liu, Yingbei Tong, Rama Akkiraju, John M. Carroll
2020 A conf
BPM
Rama Akkiraju, Vibha Sinha, Anbang Xu, Jalal Mahmud, Pritam Gundecha, Zhe Liu, Xiaotong Liu, John Schumacher
2020 conf
ICSOC Workshops
Xiaotong Liu, Yingbei Tong, Anbang Xu, Rama Akkiraju
2019 J jnl
CoRR
Xiaotong Liu, Yingbei Tong, Anbang Xu, Rama Akkiraju
2019 conf
CHI Extended Abstracts
Xiaotong Liu, Anbang Xu, Zhe Liu, Yufan Guo, Rama Akkiraju
2019 J jnl
J. Manag. Inf. Syst.
Yuheng Hu, Anbang Xu, Yili Hong, David Gal, Vibha Sinha, Rama Akkiraju
2019 J jnl
ACM Trans. Interact. Intell. Syst.
Shereen Oraby, Mansurul Bhuiyan, Pritam Gundecha, Jalal Mahmud, Rama Akkiraju
2018 J jnl
CoRR
Siwei Fu, Anbang Xu, Xiaotong Liu, Huimin Zhou, Rama Akkiraju
2018 J jnl
CoRR
Rama Akkiraju, Vibha Sinha, Anbang Xu, Jalal Mahmud, Pritam Gundecha, Zhe Liu, Xiaotong Liu, John Schumacher
2018 J jnl
CoRR
Mansurul Bhuiyan, Amita Misra, Saurabh Tripathy, Jalal Mahmud, Rama Akkiraju
2018 A* conf
CHI
Zhe Liu, Anbang Xu, Yufan Guo, Jalal U. Mahmud, Haibin Liu, Rama Akkiraju
2018 A* conf
CHI
Tianran Hu, Anbang Xu, Zhe Liu, Quanzeng You, Yufan Guo, Vibha Sinha, Jiebo Luo, Rama Akkiraju
2018 J jnl
CoRR
Tianran Hu, Anbang Xu, Zhe Liu, Quanzeng You, Yufan Guo, Vibha Sinha, Jiebo Luo, Rama Akkiraju
2018 conf
CHI Extended Abstracts
Xiaotong Liu, Anbang Xu, Vibha Sinha, Rama Akkiraju
2017 J jnl
CoRR
Shereen Oraby, Pritam Gundecha, Jalal Mahmud, Mansurul Bhuiyan, Rama Akkiraju
2017 A conf
IUI
Shereen Oraby, Pritam Gundecha, Jalal Mahmud, Mansurul Bhuiyan, Rama Akkiraju
2017 A conf
ICWSM
Pierre-Hadrien Arnoux, Anbang Xu, Neil H. Boyette, Jalal Mahmud, Rama Akkiraju, Vibha Sinha
2017 J jnl
CoRR
Pierre-Hadrien Arnoux, Anbang Xu, Neil H. Boyette, Jalal Mahmud, Rama Akkiraju, Vibha Sinha
2017 A* conf
CHI
Anbang Xu, Zhe Liu, Yufan Guo, Vibha Sinha, Rama Akkiraju
2017 conf
HT
Zhe Liu, Anbang Xu, Yi Wang, Jerald Schoudt, Jalal Mahmud, Rama Akkiraju
2017 conf
CHI Extended Abstracts
Xiaotong Liu, Anbang Xu, Rama Akkiraju, Vibha Sinha
2016 A conf
ICWSM
Anbang Xu, Haibin Liu, Liang Gou, Rama Akkiraju, Jalal Mahmud, Vibha Sinha, Yuheng Hu, Mu Qiao
2016 conf
VAST
Xiaotong Liu, Anbang Xu, Liang Gou, Haibin Liu, Rama Akkiraju, Han-Wei Shen
2016 conf
SocInfo (2)
Zhe Liu, Yi Wang, Jalal Mahmud, Rama Akkiraju, Jerald Schoudt, Anbang Xu, Bryan Donovan
2014 C conf
ICMLA
Haibin Liu, Mu Qiao, Daniel B. Greenia, Rama Akkiraju, Stephen Dill, Taiga Nakamura, Yang Song, Hamid R. Motahari Nezhad
2014 conf
SRII Global Conference
Daniel B. Greenia, Mu Qiao, Rama Akkiraju
2014 conf
IEEE SCC
Hamid R. Motahari Nezhad, Daniel B. Greenia, Taiga Nakamura, Rama Akkiraju
2014 conf
SRII Global Conference
Rama Akkiraju, Mark Smith, Daniel B. Greenia, Shun Jiang, Taiga Nakamura, Debdoot Mukherjee, Shyam Pusapaty
2014 conf
Business Process Management Workshops
Hamid R. Motahari Nezhad, Rama Akkiraju
2013 A conf
ICSOC
Debdoot Mukherjee, Jeanette Blomberg, Rama Akkiraju, Dinesh Raghu, Monika Gupta, Sugata Ghosal, Mu Qiao, Taiga Nakamura
2013 conf
IEEE SCC
Rama Akkiraju, Mark Smith, Shun Jiang, Daniel B. Greenia, Shyam Pusapaty
2012 conf
SRII Global Conference
Nitin Nayak, Rama Akkiraju
2012 conf
SRII Global Conference
Rama Akkiraju, Ruoyi Zhou
2012 conf
SRII Global Conference
Rama Akkiraju, Toby Lehman, Neil H. Boyette, Haijing Fang, Mario Lichtsinn, Ben Shaw
2012 J jnl
J. Serv. Sci. Res.
Rama Akkiraju, Debarun Bhattacharjya, Sammukh Gupta
2011 A conf
BPM
Mu Qiao, Rama Akkiraju, Aubrey J. Rembert
2010 conf
SOLI
Rama Akkiraju, Nitin Nayak, Robert Torok, Jürg von Kaenel
2010 A conf
ICSOC
Rama Akkiraju, Anca Ivan
2010 A conf
ICWS
Rama Akkiraju, Hendrik van Geel
2010 A conf
ICSOC
Pietro Mazzoleni, Aubrey J. Rembert, Rama Akkiraju, Rong Emily Liu
2009 J jnl
Decis. Sci.
Ning Su, Rama Akkiraju, Nitin Nayak, Richard Goodwin
2009 conf
SERVICES I
Rama Akkiraju, Tilak Mitra, Nilay Ghosh, Dipankar Saha, Usha Thulasiram, Soham Chakraborthy
2009 conf
SERVICES I
Hua Fang Tan, Rama Akkiraju, Anca-Andreea Ivan, Richard Goodwin, Diane Knappenberger
2008 conf
IEEE SCC (2)
Juhnyoung Lee, Rama Akkiraju, Chunhua Tian, Shun Jiang, Sivaprashanth Danturthy, Ponn Sundhararajan, Carl Nordman, Rakesh Mohan, Hitansh Singala, Wei Ding
2008 A conf
BPM
Juhnyoung Lee, Rama Akkiraju, Chunhua Tian, Shun Jiang, Sivaprashanth Danturthy, Ponn Sundhararajan
2008 A conf
ICWS
Hazem Elmeleegy, Anca Ivan, Rama Akkiraju, Richard Goodwin
2008 A conf
ICWS
Rama Akkiraju, Tilak Mitra, Pankaj Dhoolia, Wei Zhao, Shiwa Fu, Manisha Bhandar, Nilay Ghosh, Dipankar Saha
2007 A conf
ICWS
Hui Guo, Anca Ivan, Rama Akkiraju, Richard Goodwin
2007 A* conf
WWW
Hui Guo, Anca-Andreea Ivan, Rama Akkiraju, Richard Goodwin
2007 J jnl
IBM Syst. J.
Naoki Abe, Rama Akkiraju, Stephen J. Buckley, Markus Ettl, Pu Huang, Dharmashankar Subramanian, Fateh Tipu
2006 ch.
Semantic Web Services, Processes and Applications
Tanveer Fathima Syeda-Mahmood, Richard Goodwin, Rama Akkiraju, Anca-Andreea Ivan
2006 A* conf
AAAI
Rama Akkiraju, Biplav Srivastava, Anca-Andreea Ivan, Richard Goodwin, Tanveer Fathima Syeda-Mahmood
2006 A* conf
ICAPS
Rama Akkiraju, Biplav Srivastava, Anca-Andreea Ivan, Richard Goodwin, Tanveer Fathima Syeda-Mahmood
2006 A conf
ICWS
Rama Akkiraju, Biplav Srivastava, Anca-Andreea Ivan, Richard Goodwin, Tanveer Fathima Syeda-Mahmood
2006 conf
CEC/EEE
Rama Akkiraju, Anca Ivan, Richard Goodwin, Biplav Srivastava, Tanveer Fathima Syeda-Mahmood
2005 J jnl
Int. J. Web Serv. Res.
Prashant Doshi, Richard Goodwin, Rama Akkiraju, Kunal Verma
2005 A conf
ICWS
Tanveer Fathima Syeda-Mahmood, Gauri Shah, Rama Akkiraju, Anca-Andreea Ivan, Richard Goodwin
2005 conf
SDWP@ICWS
Kunal Verma, Rama Akkiraju, Richard Goodwin
2004 A conf
ICWS
Prashant Doshi, Richard Goodwin, Rama Akkiraju, Kunal Verma
2004 A conf
ICWS
John Colgrave, Rama Akkiraju, Richard Goodwin
2003 conf
IIWeb
Rama Akkiraju, Richard Goodwin, Prashant Doshi, Sascha Roeder
2003 ch.
Handbook of Metaheuristics
Sarosh Talukdar, Sesh Murthy, Rama Akkiraju
2002 conf
AAAI/IAAI
Richard Goodwin, Rama Akkiraju, Frederick Y. Wu
2002 conf
International Conference on Internet Computing
David Flaxer, Rama Akkiraju, Ray M. Yeh, Frederick Y. Wu, Hung-Yang Chang, Liang-Jie Zhang, Tian Chao, Jen-Yao Chung
2002 J jnl
Oper. Res.
Pinar Keskinocak, Frederick Y. Wu, Richard Goodwin, Sesh Murthy, Rama Akkiraju, Santhosh Kumaran, Annap Derebail
2001 J jnl
Appl. Intell.
Rama Akkiraju, Pinar Keskinocak, Sesh Murthy, Frederick Y. Wu
2001 J jnl
Electron. Commer. Res.
Pinar Keskinocak, Richard Goodwin, Frederick Y. Wu, Rama Akkiraju, Sesh Murthy
1999 J jnl
Interfaces
Sesh Murthy, Rama Akkiraju, Richard Goodwin, Pinar Keskinocak, John Rachlin, Frederick Y. Wu, James Yeh, Robert Fuhrer, Santhosh Kumaran, Alok Aggarwal, Martin C. Sturzenbecker, Ranga Jayaraman, Robert Daigle
1998 conf
ATAL
John Rachlin, Richard Goodwin, Sesh Murthy, Rama Akkiraju, Frederick Y. Wu, Santhosh Kumaran, Raja Das
1998 conf
AAAI/IAAI
Rama Akkiraju, Pinar Keskinocak, Sesh Murthy, Frederick Y. Wu
1997 conf
AAAI Workshop: Constraints & Agents
Seshashayee S. Murthy, John Rachlin, Rama Akkiraju, Frederick Y. Wu
tests/unit/test_macho_dataclasses.py
← Index tests/unit/test_macho_dataclasses.py python
"""
Unit tests for Mach-O dataclasses.
"""
import pytest
from typing import List, Dict, Optional

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


class TestMachODataclass:
    """Tests for MachO dataclass."""

    def test_macho_required_fields(self):
        """Test MachO dataclass with required fields."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_NOUNDEFS", "MH_DYLDLINK", "MH_TWOLEVEL", "MH_PIE"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=True
        )

        assert macho.magic == 0xFEEDFACF
        assert macho.cputype == 0x01000007
        assert macho.is_64bit is True
        assert macho.is_signed is True
        assert macho.magic_str == "MH_MAGIC_64"
        assert macho.filetype_str == "MH_EXECUTE"

    def test_macho_optional_fields_defaults(self):
        """Test MachO dataclass optional fields default to correct values."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_NOUNDEFS"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=False
        )

        assert macho.number_of_load_commands == 0
        assert macho.load_commands_set is None
        assert macho.number_of_segments == 0
        assert macho.number_of_dylibs == 0
        assert macho.number_of_imports == 0
        assert macho.number_of_exports == 0
        assert macho.entry_point is None
        assert macho.uuid is None
        assert macho.version_info is None
        assert macho.version_info_str is None

    def test_macho_with_all_fields(self):
        """Test MachO dataclass with all fields populated."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_PIE"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=True,
            number_of_load_commands=15,
            load_commands_set=["LC_SEGMENT_64", "LC_DYLD_INFO_ONLY"],
            number_of_segments=4,
            number_of_dylibs=5,
            number_of_imports=100,
            number_of_exports=10,
            entry_point=0x100001234,
            uuid="12345678-1234-1234-1234-123456789012",
            version_info={"min_os": "10.15"},
            version_info_str={"min_os": "macOS 10.15"}
        )

        assert macho.number_of_load_commands == 15
        assert macho.uuid == "12345678-1234-1234-1234-123456789012"
        assert macho.entry_point == 0x100001234


class TestMachOSegmentDataclass:
    """Tests for MachOSegment dataclass."""

    def test_segment_creation(self):
        """Test MachOSegment dataclass creation."""
        from redb.models.dataclasses import MachOSegment

        segment = MachOSegment(
            segment_name="__TEXT",
            segment_vaddr=0x100000000,
            segment_vsize=0x1000,
            segment_offset=0,
            segment_size=0x1000,
            segment_max_vm_protection=7,
            segment_initial_vm_protection=5,
            segment_nsects=4,
            segment_flags=0,
            segment_entropy=6.5,
            segment_sha256="abc123def456789012345678901234567890123456789012345678901234"
        )

        assert segment.segment_name == "__TEXT"
        assert segment.segment_vaddr == 0x100000000
        assert segment.segment_entropy == 6.5


class TestMachOImportDataclass:
    """Tests for MachOImport dataclass."""

    def test_import_creation(self):
        """Test MachOImport dataclass creation."""
        from redb.models.dataclasses import MachOImport

        import_info = MachOImport(
            macho_imports_total=50,
            macho_import_libraryName=["libSystem.B.dylib", "CoreFoundation"],
            macho_import_functions=["_printf", "_malloc", "_free"]
        )

        assert import_info.macho_imports_total == 50
        assert len(import_info.macho_import_libraryName) == 2
        assert "_printf" in import_info.macho_import_functions

    def test_import_optional_fields(self):
        """Test MachOImport with optional fields as None."""
        from redb.models.dataclasses import MachOImport

        import_info = MachOImport(macho_imports_total=0)

        assert import_info.macho_imports_total == 0
        assert import_info.macho_import_libraryName is None
        assert import_info.macho_import_functions is None


class TestMachOExportDataclass:
    """Tests for MachOExport dataclass."""

    def test_export_creation(self):
        """Test MachOExport dataclass creation."""
        from redb.models.dataclasses import MachOExport

        export_info = MachOExport(
            macho_exports_total=10,
            macho_export_symbols=["_main", "_helper_func"]
        )

        assert export_info.macho_exports_total == 10
        assert "_main" in export_info.macho_export_symbols


class TestMachODylibDataclass:
    """Tests for MachODylib dataclass."""

    def test_dylib_creation(self):
        """Test MachODylib dataclass creation."""
        from redb.models.dataclasses import MachODylib

        dylib = MachODylib(
            dylib_name="/usr/lib/libSystem.B.dylib",
            dylib_timestamp=2,
            dylib_current_version=0x04E10200,
            dylib_compat_version=0x00010000
        )

        assert dylib.dylib_name == "/usr/lib/libSystem.B.dylib"
        assert dylib.dylib_timestamp == 2


class TestMachOLoadCommandDataclass:
    """Tests for MachOLoadCommand dataclass."""

    def test_load_command_creation(self):
        """Test MachOLoadCommand dataclass creation."""
        from redb.models.dataclasses import MachOLoadCommand

        lc = MachOLoadCommand(
            load_command=0x19,
            load_command_str="LC_SEGMENT_64",
            load_command_size=72
        )

        assert lc.load_command == 0x19
        assert lc.load_command_str == "LC_SEGMENT_64"
        assert lc.load_command_size == 72


class TestMachOUniversalDataclass:
    """Tests for MachOUniversal dataclass."""

    def test_universal_fat_binary(self):
        """Test MachOUniversal for FAT binary."""
        from redb.models.dataclasses import MachOUniversal

        universal = MachOUniversal(
            is_fat=True,
            architecture_count=2,
            architectures=["x86_64", "arm64"],
            architecture_info=[
                {"arch": "x86_64", "offset": 0x1000},
                {"arch": "arm64", "offset": 0x10000}
            ],
            fat_hash="abc123def456789012345678901234567890123456789012345678901234",
            fat_md5="abc123def456789012345678901234",
            fat_sha1="abc123def456789012345678901234567890"
        )

        assert universal.is_fat is True
        assert universal.architecture_count == 2
        assert "x86_64" in universal.architectures
        assert "arm64" in universal.architectures

    def test_universal_single_arch(self):
        """Test MachOUniversal for single-architecture binary."""
        from redb.models.dataclasses import MachOUniversal

        universal = MachOUniversal(
            is_fat=False,
            architecture_count=1,
            architectures=["arm64"],
            architecture_info=[{"arch": "arm64", "offset": 0}]
        )

        assert universal.is_fat is False
        assert universal.architecture_count == 1
        assert universal.fat_hash is None


class TestMachOCertificateDataclass:
    """Tests for MachOCertificate dataclass."""

    def test_certificate_creation(self):
        """Test MachOCertificate dataclass creation."""
        from redb.models.dataclasses import MachOCertificate

        cert = MachOCertificate(
            subject="CN=Apple Development",
            issuer="CN=Apple Worldwide Developer Relations",
            serial_number="123456789",
            not_before="2023-01-01T00:00:00Z",
            not_after="2024-01-01T00:00:00Z",
            thumbprint="abc123def456789012345678901234567890",
            certificate_type="leaf",
            order=0,
            algorithm="sha256WithRSAEncryption",
            common_name="Apple Development",
            organizational_unit="Development",
            organization="Apple Inc."
        )

        assert cert.subject == "CN=Apple Development"
        assert cert.certificate_type == "leaf"
        assert cert.order == 0


class TestMachOCodeDirectoryDataclass:
    """Tests for MachOCodeDirectory dataclass."""

    def test_code_directory_creation(self):
        """Test MachOCodeDirectory dataclass creation."""
        from redb.models.dataclasses import MachOCodeDirectory

        cd = MachOCodeDirectory(
            identifier="com.example.app",
            team_id="ABC123DEF",
            flags=0x10000,
            cd_hash="abc123def456789012345678901234567890123456789012345678901234"
        )

        assert cd.identifier == "com.example.app"
        assert cd.team_id == "ABC123DEF"
        assert cd.flags == 0x10000


class TestMachOCodeSigningInfoDataclass:
    """Tests for MachOCodeSigningInfo dataclass."""

    def test_code_signing_info_unsigned(self):
        """Test MachOCodeSigningInfo for unsigned binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="unsigned",
            has_signature=False,
            number_of_certificates=0
        )

        assert info.signing_type == "unsigned"
        assert info.has_signature is False
        assert info.number_of_certificates == 0

    def test_code_signing_info_signed(self):
        """Test MachOCodeSigningInfo for signed binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo, MachOCodeDirectory

        cd = MachOCodeDirectory(
            identifier="com.example.app",
            team_id="ABC123DEF"
        )

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="certificate",
            has_signature=True,
            number_of_certificates=3,
            code_directories=[cd],
            entitlements={"com.apple.security.app-sandbox": True},
            has_hardened_runtime=True,
            has_library_validation=True
        )

        assert info.signing_type == "certificate"
        assert info.has_signature is True
        assert info.number_of_certificates == 3
        assert info.has_hardened_runtime is True

    def test_code_signing_info_adhoc(self):
        """Test MachOCodeSigningInfo for ad-hoc signed binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="ad-hoc",
            has_signature=True,
            number_of_certificates=0,
            arch_identifier="x86_64"
        )

        assert info.signing_type == "ad-hoc"
        assert info.number_of_certificates == 0
        assert info.arch_identifier == "x86_64"


class TestMachOEntitlementDataclass:
    """Tests for MachOEntitlement dataclass."""

    def test_entitlement_boolean(self):
        """Test MachOEntitlement with boolean value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.security.app-sandbox",
            value_type="boolean",
            value_bool=True
        )

        assert ent.key == "com.apple.security.app-sandbox"
        assert ent.value_type == "boolean"
        assert ent.value_bool is True

    def test_entitlement_string(self):
        """Test MachOEntitlement with string value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.developer.team-identifier",
            value_type="string",
            value_string="ABC123DEF"
        )

        assert ent.key == "com.apple.developer.team-identifier"
        assert ent.value_type == "string"
        assert ent.value_string == "ABC123DEF"

    def test_entitlement_array(self):
        """Test MachOEntitlement with array value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.security.application-groups",
            value_type="array",
            value_array=["group.com.example.app", "group.com.example.shared"]
        )

        assert ent.key == "com.apple.security.application-groups"
        assert ent.value_type == "array"
        assert len(ent.value_array) == 2