Othman Isam Younus

29 papers B 3Journal 10Unranked 16
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE J. Sel. Areas Commun.
Rida Zia-ul-Mustafa, Hoa Le Minh, Zabih Ghassemlooy, Stanislav Zvánovec, Othman Isam Younus, Xicong Li, Anh T. Pham
2025 J jnl
CoRR
Othman Isam Younus, Behnaz Majlesein, Richard Nacke, Isaac N. O. Osahon, Carmine Pellegrino, Sina Babadi, Iman Tavakkolnia, Henning Helmers, Harald Haas
2025 J jnl
IEEE Veh. Technol. Mag.
Aravindh Krishnamoorthy, Hossein Safi, Othman Isam Younus, Hossein Kazemi, Isaac N. O. Osahon, Mingqing Liu, Yi Liu, Sina Babadi, Rizwana Ahmad, Asim Ihsan, Behnaz Majlesein, Yifan Huang, Johannes Herrnsdorf, Sujan Rajbhandari, Jonathan J. D. McKendry, Iman Tavakkolnia, Humeyra Caglayan, Henning Helmers, Graham A. Turnbull, Ifor D. W. Samuel, Martin D. Dawson, Robert Schober, Harald Haas
2025 J jnl
Sci. China Inf. Sci.
Shivani Rajendra Teli, Vicente Matus, Othman Isam Younus, Klára Eöllos-Jarosíikovára, Xicong Li, Navid Bani Hassan, Bangjiang Lin, Monica Figueiredo, Luís Nero Alves, Anna Maria Vegni, Stanislav Zvanovec, Rafael Pérez Jiménez, Zabih Ghassemlooy
2025 B conf
GLOBECOM
Hossien B. Eldeeb, Othman Isam Younus, Sina Babadi, Isaac N. O. Osahon, Rizwana Ahmad, Iman Tavakkolnia, Harald Haas
2024 conf
CSNDSP
Mircea Hulea, George-Iulian Uleru, Alexandru Barleanu, Othman Isam Younus
2024 conf
CSNDSP
Raul Zamorano-Illanes, Zabih Ghassemlooy, Othman Isam Younus, Xicong Li, Stanislav Zvánovec, Ismael Soto, Sebastián Gutiérrez
2024 conf
CSNDSP
Miguel Rêgo, Vicente Matus, Othman Isam Younus, Alexis A. Dowhuszko, Zabih Ghassemlooy, Monica Figueiredo, Pedro Fonseca, Luís Nero Alves
2024 conf
CSNDSP
Nithin Mohan, Zabih Ghassemlooy, Stanislav Zvanovec, Othman Isam Younus, Mohammad Ali Khalighi, Thomas Kamalakis
2024 conf
CSNDSP
Carlos Iván del Valle Morales, Othman Isam Younus, Juan Carlos Torres Zafra, Zabih Ghassemlooy, Iñaki Martínez-Sarriegui, José Manuel Sánchez Peña
2023 conf
EuCNC/6G Summit
Juan A. Apolo, Othman Isam Younus, Beatriz Ortega, Vicenç Almenar, Zabih Ghassemlooy
2023 conf
ConTEL
Vaigai Nayaki Yokar, Hoa Le Minh, Zabih Ghassemlooy, Othman Isam Younus, Luís Nero Alves, Wai Lok Woo, Turky Almutairi
2022 conf
CSNDSP
Ningcong Jiang, Bangjiang Lin, Zabih Ghassemlooy, Tianming Huang, Zhuo Huang, Othman Isam Younus
2022 conf
CSNDSP
Neha Chaudhary, Othman Isam Younus, Luís Nero Alves, Zabih Ghassemlooy, Stanislav Zvanovec
2022 conf
CSNDSP
Ezgi Ertunc, Othman Isam Younus, Ernesto Ciaramella, Zabih Ghassemlooy
2022 conf
CSNDSP
Othman Isam Younus, Eleni Niarchou, Shivani Rajendra Teli, Zabih Ghassemlooy, Stanislav Zvanovec, Hoa Le Minh
2022 conf
CSNDSP
George-Iulian Uleru, Mircea Hulea, Othman Isam Younus, Zabih Ghassemlooy, Sujan Rajbhandari
2022 J jnl
Sensors
Neha Chaudhary, Othman Isam Younus, Luís Nero Alves, Zabih Ghassemlooy, Stanislav Zvanovec
2021 B conf
PIMRC
Neha Chaudhary, Othman Isam Younus, Zahra Nazari Chaleshtori, Luís Nero Alves, Zabih Ghassemlooy, Stanislav Zvanovec
2021 J jnl
Sensors
Neha Chaudhary, Othman Isam Younus, Luís Nero Alves, Zabih Ghassemlooy, Stanislav Zvanovec, Hoa Le Minh
2021 conf
ISWCS
Mircea Hulea, Othman Isam Younus, Zabih Ghassemlooy, Sujan Rajbhandari
2021 J jnl
Sensors
Elizabeth Eso, Zabih Ghassemlooy, Stanislav Zvanovec, Juna Sathian, Mojtaba Mansour Abadi, Othman Isam Younus
2021 B conf
PIMRC
Othman Isam Younus, Neha Chaudhary, Zahra Nazari Chaleshtori, Zabih Ghassemlooy, Luís Nero Alves, Stanislav Zvanovec
2021 J jnl
Sensors
Othman Isam Younus, Navid Bani Hassan, Zabih Ghassemlooy, Stanislav Zvanovec, Luís Nero Alves, Hoa Le Minh
2020 conf
CSNDSP
Othman Isam Younus, Navid Bani Hassan, Zabih Ghassemlooy, Stanislav Zvanovec, Luís Nero Alves, Paul Anthony Haigh, Hoa Le Minh
2020 J jnl
IEEE Access
Othman Isam Younus, Navid Bani Hassan, Zabih Ghassemlooy, Paul Anthony Haigh, Stanislav Zvanovec, Luís Nero Alves, Hoa Le Minh
2020 J jnl
Sensors
Mircea Hulea, Zabih Ghassemlooy, Sujan Rajbhandari, Othman Isam Younus, Alexandru Barleanu
2020 conf
CSNDSP
Miguel Roque Soares, Neha Chaudhary, Elizabeth Eso, Othman Isam Younus, Luís Nero Alves, Zabih Ghassemlooy
2020 conf
CSNDSP
Elizabeth Eso, Othman Isam Younus, Zabih Ghassemlooy, Stanislav Zvanovec, Mojtaba Mansour Abadi
tests/integration/test_pe_extractor.py
← Index tests/integration/test_pe_extractor.py python
"""
Integration tests for the PEExtractor base class.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

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


class TestPEExtractorInitialization:
    """Tests for PEExtractor initialization."""

    def test_pe_extractor_with_valid_pe(self, pe_binary_path, mock_logger):
        """Test PEExtractor initialization with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            assert extractor.pe is not None
            assert extractor.filepath == pe_binary_path

    def test_pe_extractor_with_provided_pe_object(self, pe_binary_path, mock_logger, pe_object):
        """Test PEExtractor initialization with pre-existing PE object."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should use the provided PE object, not create a new one
            assert extractor.pe is pe_object

    def test_pe_extractor_with_invalid_file(self, elf_binary_path, mock_logger):
        """Test PEExtractor initialization with non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return None for pe when file is not a valid PE
            assert extractor.pe is None
            # Logger should have recorded an error
            assert mock_logger.error.called


class TestPEExtractorMethods:
    """Tests for PEExtractor helper methods."""

    def test_check_dotnet_true(self, pe_binary_path, mock_logger):
        """Test _check_dotnet returns True for .NET PE."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # The test PE file is a .NET binary
            if extractor.pe is not None:
                result = extractor._check_dotnet()
                # d8637bdbcfc9112fcb1f0167b398e771 is a .NET binary
                assert result is True

    def test_check_dotnet_false(self, elf_binary_path, mock_logger):
        """Test _check_dotnet returns False for non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return False when PE is None
            result = extractor._check_dotnet()
            assert result is False

    def test_is_signed_false(self, pe_binary_path, mock_logger):
        """Test _is_signed method."""
        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 not None:
                result = extractor._is_signed()
                # Result depends on the actual binary
                assert isinstance(result, bool)

    def test_has_overlay(self, pe_binary_path, mock_logger):
        """Test _has_overlay method."""
        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 not None:
                result = extractor._has_overlay()
                assert isinstance(result, bool)


class TestGeneratePEFileObject:
    """Tests for _generate_pefile_object method."""

    def test_generate_pefile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_pefile_object with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # The PE object should be created successfully
            assert extractor.pe is not None

    def test_generate_pefile_object_invalid(self, temp_text_file, mock_logger):
        """Test _generate_pefile_object with invalid file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return None for invalid PE
            assert extractor.pe is None


class TestGenerateDotNetFileObject:
    """Tests for _generate_dotnetfile_object method."""

    def test_generate_dotnetfile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with .NET PE file."""
        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 not None and extractor._check_dotnet():
                dotnet, error = extractor._generate_dotnetfile_object()
                # Should create dotnet object for .NET PE
                assert dotnet is not None
                assert error is None

    def test_generate_dotnetfile_object_invalid(self, elf_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with non-.NET file."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

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

            dotnet, error = extractor._generate_dotnetfile_object()
            # Should return error for non-.NET file
            assert dotnet is None
            assert error is not None


class TestPEExtractorTag:
    """Tests for tag method in PE extractors."""

    def test_pe_features_tag(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_FEATURES.value

    def test_pe_import_tag(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_IMPORT.value

    def test_pe_section_tag(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_SECTION.value


class TestPEExtractorClickHouseTable:
    """Tests for get_clickhouse_table method in PE extractors."""

    def test_pe_features_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

    def test_pe_import_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

    def test_pe_section_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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


class TestPEExtractorPrepareExportData:
    """Tests for prepare_export_data method in PE extractors."""

    def test_pe_features_prepare_export_elasticsearch(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        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 not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ElasticsearchExporter")
                # Should return the pe_features dataclass
                assert result is extractor.pe_features

    def test_pe_features_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        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 not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ClickHouseExporter")

                # Should return tuple of (data, column_names, column_type_names)
                assert isinstance(result, tuple)
                assert len(result) == 3
                data, column_names, column_type_names = result
                assert isinstance(data, list)
                assert isinstance(column_names, list)
                assert isinstance(column_type_names, list)
                # Column names and types should match in length
                assert len(column_names) == len(column_type_names)