C. Raghavendra Rao

56 papers B 2C 1Misc 3Journal 14Unranked 36
YearRankTypeTitle / Venue / Authors
2025 conf
MIWAI (1)
Bheekya Dharamsotu, Salman Abdul Moiz, C. Raghavendra Rao
2024 conf
MIWAI (1)
Bheekya Dharamsotu, Salman Abdul Moiz, C. Raghavendra Rao
2019 conf
SOSE
Parwat Singh Anjana, Priyanka Badiwal, Rajeev Wankar, Swaroop Kallakuri, C. Raghavendra Rao
2019 Misc conf
HiPC
Bheekya Dharamsotu, K. Swarupa Rani, Salman Abdul Moiz, C. Raghavendra Rao
2018 J jnl
CoRR
Parwat Singh Anjana, Priyanka Badiwal, Rajeev Wankar, C. Raghavendra Rao
2017 conf
MIWAI
Parwat Singh Anjana, Rajeev Wankar, C. Raghavendra Rao
2017 J jnl
Int. J. Nat. Comput. Res.
Vijaya Lakshmi V. Nadimpalli, Rajeev Wankar, C. Raghavendra Rao
2017 conf
PReMI
Soumen Ghosh, P. S. V. S. Sai Prasad, C. Raghavendra Rao
2016 conf
MIWAI
Kirti, C. Raghavendra Rao, Rajeev Wankar, Arun Agarwal
2016 conf
MIWAI
Morusupalli Raghava, Arun Agarwal, C. Raghavendra Rao
2016 conf
MIWAI
Soumen Ghosh, P. S. V. S. Sai Prasad, C. Raghavendra Rao
2016 J jnl
Softw. Pract. Exp.
Raghavendra Kune, Pramodkumar Konugurthi, Arun Agarwal, C. Raghavendra Rao, Rajkumar Buyya
2014 J jnl
Trans. Rough Sets
P. S. V. S. Sai Prasad, C. Raghavendra Rao
2014 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Munaga V. N. K. Prasad, P. Swathi, C. Raghavendra Rao, B. L. Deekshatulu
2014 J jnl
Int. J. Granul. Comput. Rough Sets Intell. Syst.
P. S. V. S. Sai Prasad, C. Raghavendra Rao
2014 conf
ICVGIP
Tilottama Goswami, Arun Agarwal, C. Raghavendra Rao
2013 B conf
FUZZ-IEEE
Tarun Dhariwal, Arun Agarwal, C. Raghavendra Rao
2013 J jnl
Future Gener. Comput. Syst.
Rafah M. Almuttairi, Rajeev Wankar, Atul Negi, C. Raghavendra Rao, Arun Agarwal, Rajkumar Buyya
2013 J jnl
Future Gener. Comput. Syst.
Mustafa Kaiiali, Rajeev Wankar, C. Raghavendra Rao, Arun Agarwal, Rajkumar Buyya
2013 conf
MIWAI
Vinay Kumar Verma, Rajeev Wankar, C. Raghavendra Rao, Arun Agarwal
2013 B conf
FUZZ-IEEE
P. S. V. S. Sai Prasad, C. Raghavendra Rao
2013 conf
MIWAI
Morusupalli Raghava, Arun Agarwal, C. Raghavendra Rao
2013 Misc conf
ICCS
B. Vikranth, Rajeev Wankar, C. Raghavendra Rao
2012 conf
NDT (1)
Rusydi Umar, Arun Agarwal, C. Raghavendra Rao
2012 J jnl
Fundam. Informaticae
Manish R. Joshi, Pawan Lingras, C. Raghavendra Rao
2012 conf
ICA3PP (2)
Sitaramaiah Ramisetti, Rajeev Wankar, C. Raghavendra Rao
2012 conf
RSKT
K. Swarupa Rani, V. Kamakshi Prasad, C. Raghavendra Rao
2012 conf
RSKT
P. S. V. S. Sai Prasad, C. Raghavendra Rao
2012 conf
SocProS
K. Hima Bindu, C. Raghavendra Rao
2011 conf
ICCCS
Gutha Jaya Krishna, C. Raghavendra Rao, Rajeev Wankar
2011 conf
RSKT
Maramreddy Umadevi, Arun Agarwal, C. Raghavendra Rao
2011 conf
RSKT
P. S. V. S. Sai Prasad, K. Hima Bindu, C. Raghavendra Rao
2011 conf
RSKT
Praveen Ganghishetti, Rajeev Wankar, Rafah M. Almuttairi, C. Raghavendra Rao
2010 C conf
ISDA
Mustafa Kaiiali, Rajeev Wankar, C. Raghavendra Rao, Arun Agarwal
2010 conf
RSKT
Manish R. Joshi, Pawan Lingras, C. Raghavendra Rao
2010 conf
KES (1)
Nekuri Naveen, Vadlamani Ravi, C. Raghavendra Rao
2010 J jnl
Int. J. Bio Inspired Comput.
Nekuri Naveen, Vadlamani Ravi, C. Raghavendra Rao, Nikunj Chauhan
2010 Misc conf
ICDCIT
Mustafa Kaiiali, Rajeev Wankar, C. Raghavendra Rao, Arun Agarwal
2010 J jnl
Int. J. Medical Eng. Informatics
Yarlagadda Padmasai, Kakarla Subba Rao, C. Raghavendra Rao, S. Sita Jayalakshmi
2010 conf
A2CWiC
K. Hima Bindu, P. S. V. S. Sai Prasad, C. Raghavendra Rao
2010 conf
GCA
Rafah M. Almuttairi, Rajeev Wankar, Atul Negi, C. Raghavendra Rao
2009 conf
Asia International Conference on Modelling and Simulation
B. Sandhya, Arun Agarwal, C. Raghavendra Rao, Rajeev Wankar
2009 conf
CICSyN
Omar Al Jadaan, Ahmad Jabas, Wael Abdulal, Lakshmi Rajamani, Essa Zaiton, C. Raghavendra Rao
2009 conf
Asia International Conference on Modelling and Simulation
M. Uma Devi, Arun Agarwal, C. Raghavendra Rao
2009 conf
RSFDGrC
P. S. V. S. Sai Prasad, C. Raghavendra Rao
2009 conf
HIMA
Omar Al Jadaan, Lakshmi Rajamani, C. Raghavendra Rao
2009 conf
CICSyN
Wael Abdulal, Omar Al Jadaan, Ahmad Jabas, Ramachandram Sirandas, Mustafa Kaiiali, C. Raghavendra Rao
2009 conf
CASE
Nekuri Naveen, Vadlamani Ravi, C. Raghavendra Rao
2009 conf
Asia International Conference on Modelling and Simulation
Omar Al Jadaan, C. Raghavendra Rao, Lakshmi Rajamani
2007 conf
ICECS
Yarlagadda Padmasai, Kakarla Subba Rao, C. Raghavendra Rao, S. Sita Jayalakshmi
2007 conf
World Congress on Engineering
A. Nagaraju, Ramachandram Sirandas, C. Raghavendra Rao
2007 conf
IICAI
A. Nagaraju, Ramachandram Sirandas, C. Raghavendra Rao
2007 J jnl
Eng. Lett.
G. Ganesan, D. Latha, C. Raghavendra Rao
2007 J jnl
Eng. Lett.
J. Umakant, K. Sudhakar, P. M. Mujumdar, C. Raghavendra Rao
2007 J jnl
Eng. Lett.
Bhadra Mani, C. Raghavendra Rao, P. Anantha Lakshmi, Asima Pradhan, Prasanta K. Panigrahi
2005 conf
IICAI
G. Ganesan, C. Raghavendra Rao
tests/integration/test_base_extractor.py
← Index tests/integration/test_base_extractor.py python
"""
Integration tests for the base Extractor class.
"""
import pytest
import hashlib
import math
from unittest.mock import Mock, patch, MagicMock
from collections import Counter

pytestmark = [pytest.mark.integration]


class TestExtractorStaticMethods:
    """Tests for static methods in Extractor class."""

    def test_process_binary_string_printable(self):
        """Test processing a printable binary string."""
        from redb.extractors.extractor import Extractor

        # Test with printable ASCII characters
        input_bytes = b"Hello World\x00\x00\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert result == "Hello World"

    def test_process_binary_string_non_printable(self):
        """Test processing a string with non-printable characters."""
        from redb.extractors.extractor import Extractor

        # Test with non-printable characters
        input_bytes = b"\x01\x02Hello\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert "\\x01" in result
        assert "\\x02" in result
        assert "Hello" in result

    def test_process_binary_string_empty(self):
        """Test processing an empty binary string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"\x00\x00\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert result == ""

    def test_process_binary_string_all_printable(self):
        """Test processing a fully printable string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"TestString123"
        result = Extractor.process_binary_string(input_bytes)
        assert result == "TestString123"

    def test_remove_non_utf8_valid(self):
        """Test removing non-UTF8 characters from valid UTF8 string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"Hello World"
        result = Extractor.remove_non_utf8(input_bytes)
        assert result == b"Hello World"

    def test_remove_non_utf8_with_invalid(self):
        """Test removing non-UTF8 characters from mixed string."""
        from redb.extractors.extractor import Extractor

        # Mix of valid UTF8 and invalid bytes
        input_bytes = b"Hello\xff\xfeWorld"
        result = Extractor.remove_non_utf8(input_bytes)
        # Should remove the invalid bytes
        assert b"\xff" not in result
        assert b"\xfe" not in result
        assert b"Hello" in result
        assert b"World" in result

    def test_remove_non_utf8_empty(self):
        """Test removing non-UTF8 from empty string."""
        from redb.extractors.extractor import Extractor

        result = Extractor.remove_non_utf8(b"")
        assert result == b""


class TestExtractorEntropyCalculation:
    """Tests for entropy calculation in Extractor class."""

    def test_calculate_entropy_empty_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with empty data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(b"")
            assert result == 0.0

    def test_calculate_entropy_uniform_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with uniform (low entropy) data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # All same bytes = 0 entropy
            uniform_data = b"\x00" * 256
            result = extractor.calculate_entropy(uniform_data)
            assert result == 0.0

    def test_calculate_entropy_random_data(self, elf_binary_path, mock_logger, high_entropy_data):
        """Test entropy calculation with random (high entropy) data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(high_entropy_data)
            # Random data should have entropy close to 8 (max for bytes)
            assert result > 7.0

    def test_calculate_entropy_binary_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with binary data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # Two equally distributed values = 1 bit entropy
            binary_data = b"\x00\x01" * 128
            result = extractor.calculate_entropy(binary_data)
            assert abs(result - 1.0) < 0.01

    def test_calculate_entropy_string_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with string data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # String with two equally distributed characters
            string_data = "ab" * 100
            result = extractor.calculate_entropy(string_data)
            assert abs(result - 1.0) < 0.01


class TestExtractorInitialization:
    """Tests for Extractor initialization."""

    def test_extractor_hashes_computed_on_init(self, elf_binary_path, mock_logger, known_hashes):
        """Test that hashes are computed during initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert extractor.md5 == known_hashes['md5']
            assert extractor.sha1 == known_hashes['sha1']
            assert extractor.sha256 == known_hashes['sha256']

    def test_extractor_hash_dataclass_created(self, elf_binary_path, mock_logger, known_hashes):
        """Test that Hash dataclass is created during initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert extractor.hash.md5 == known_hashes['md5']
            assert extractor.hash.sha1 == known_hashes['sha1']
            assert extractor.hash.sha256 == known_hashes['sha256']

    def test_extractor_binary_cached_property(self, elf_binary_path, mock_logger, elf_binary_content):
        """Test that binary content is loaded as cached property."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            # Access binary property
            binary = extractor.binary
            assert binary == elf_binary_content

            # Second access should return cached value (same id)
            assert extractor.binary is binary

    def test_extractor_with_exporters(self, elf_binary_path, mock_logger, mock_print_exporter):
        """Test extractor initialization with exporters."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert len(extractor.exporters) == 1
            assert extractor.exporters[0] is mock_print_exporter

    def test_extractor_with_index_prefix(self, elf_binary_path, mock_logger):
        """Test extractor initialization with custom index prefix."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert "custom_prefix" in extractor.elastic_index

    def test_extractor_known_benign_flag(self, elf_binary_path, mock_logger):
        """Test extractor with known_benign flag."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert extractor.known_benign is True
            assert extractor.known_malicious is False

    def test_extractor_known_malicious_flag(self, elf_binary_path, mock_logger):
        """Test extractor with known_malicious flag."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

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

            assert extractor.known_benign is False
            assert extractor.known_malicious is True


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

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

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

            result = extractor.export_data()
            # Should succeed with PrintExporter
            assert result is True

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

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

            result = extractor.export_data()
            # Should succeed with no exporters (nothing to export)
            assert result is True


class TestExtractorEdgeCases:
    """Tests for edge cases in Extractor class."""

    def test_extractor_with_nonexistent_file(self, mock_logger):
        """Test extractor with non-existent file."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            with pytest.raises(FileNotFoundError):
                BasicPropertiesExtractor("/nonexistent/file.bin", mock_logger)

    def test_entropy_none_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with None returns 0."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(None)
            assert result == 0.0

    def test_process_binary_string_high_bytes(self):
        """Test processing binary string with high byte values."""
        from redb.extractors.extractor import Extractor

        # Characters above 126 are non-printable
        input_bytes = b"\x7f\x80\x81\xff"
        result = Extractor.process_binary_string(input_bytes)
        assert "\\x7f" in result
        assert "\\x80" in result
        assert "\\xff" in result