Jacques Wainer

115 papers A* 6A 4B 7C 4Misc 6Journal 54Unranked 31
YearRankTypeTitle / Venue / Authors
2024 J jnl
Expert Syst. Appl.
Jacques Wainer
2023 J jnl
J. Mach. Learn. Res.
Jacques Wainer
2023 J jnl
J. Univers. Comput. Sci.
Ricardo Caceffo, Jacques Wainer, Guilherme Gama, Islene C. Garcia, Rodolfo Azevedo
2022 J jnl
CoRR
Jacques Wainer
2022 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Pedro Ribeiro Mendes Júnior, Terrance E. Boult, Jacques Wainer, Anderson Rocha
2021 J jnl
Artif. Intell. Rev.
Jacques Wainer, Pablo Fonseca
2021 J jnl
Expert Syst. Appl.
Jacques Wainer, Gavin C. Cawley
2020 J jnl
CoRR
Jacques Wainer, Pablo Fonseca
2020 J jnl
IET Biom.
Rafael Padilha, Fernanda A. Andaló, Gabriel Bertocco, Waldir R. de Almeida, William Dias, Thiago Resek, Ricardo da Silva Torres, Jacques Wainer, Anderson Rocha
2019 J jnl
Artif. Intell. Medicine
Ramon Pires, Sandra Avila, Jacques Wainer, Eduardo Valle, Michael D. Abràmoff, Anderson Rocha
2018 J jnl
ACM Trans. Comput. Educ.
Jacques Wainer, Eduardo C. Xavier
2018 J jnl
CoRR
Jacques Wainer, Rodrigo A. Franceschinell
2018 J jnl
CoRR
Jacques Wainer, Gavin C. Cawley
2017 B conf
IJCB
Zinelabdine Boulkenafet, Jukka Komulainen, Zahid Akhtar, Azeddine Benlamoudi, Djamel Samai, Salah Eddine Bekhouche, Abdelkrim Ouafi, Fadi Dornaika, Abdelmalik Taleb-Ahmed, Le Qin, Fei Peng, L. B. Zhang, Min Long, Shruti Bhilare, Vivek Kanhangad, Artur Costa-Pazo, Esteban Vázquez-Fernández, Daniel Pérez-Cabo, J. J. Moreira-Perez, Daniel González-Jiménez, Amir Mohammadi, Sushil Bhattacharjee, Sébastien Marcel, Svetlana Volkova, Y. Tang, N. Abe, L. Li, X. Feng, Z. Xia, X. Jiang, S. Liu, Rui Shao, Pong C. Yuen, Waldir R. de Almeida, Fernanda A. Andaló, Rafael Padilha, Gabriel Bertocco, William Dias, Jacques Wainer, Ricardo da Silva Torres, Anderson Rocha, Marcus A. Angeloni, Guilherme Folego, Alan Godoy, Abdenour Hadid
2017 J jnl
IEEE J. Biomed. Health Informatics
Ramon Pires, Sandra Eliza Fontes de Avila, Herbert F. Jelinek, Jacques Wainer, Eduardo Valle, Anderson Rocha
2017 J jnl
J. Mach. Learn. Res.
Jacques Wainer, Gavin C. Cawley
2017 J jnl
Pattern Recognit. Lett.
Edson Duarte, Jacques Wainer
2016 C conf
CIARP
Pablo Fonseca, Benjamín Castañeda, Ricardo Valenzuela, Jacques Wainer
2016 J jnl
CoRR
Jacques Wainer
2016 J jnl
J. Vis. Commun. Image Represent.
Daniel Moraes, Jacques Wainer, Anderson Rocha
2016 J jnl
CoRR
Pedro Ribeiro Mendes Júnior, Jacques Wainer, Anderson Rocha
2015 conf
Computer-Aided Diagnosis
Pablo Fonseca, Julio Mendoza, Jacques Wainer, José Ferrer, Joseph Pinto, Jorge Guerrero, Benjamín Castañeda
2015 J jnl
Comput. Educ.
Jacques Wainer, Paula Vieira, Tatiana Melguizo
2014 C conf
CIARP
Pablo Fonseca, Jacques Wainer
2014 conf
EMBC
Ramon Pires, Sandra Avila, Herbert F. Jelinek, Jacques Wainer, Eduardo Valle, Anderson Rocha
2013 J jnl
Appl. Artif. Intell.
Amaury B. Andre, Eduardo Beltrame, Jacques Wainer
2013 conf
ICINCO (2)
Paulo Gurgel Pinheiro, Jacques Wainer
2013 J jnl
Inf. Syst.
Fábio de Lima Bezerra, Jacques Wainer
2013 J jnl
IEEE Trans. Biomed. Eng.
Ramon Pires, Herbert F. Jelinek, Jacques Wainer, Siome Goldenstein, Eduardo Valle, Anderson Rocha
2013 J jnl
Scientometrics
Jacques Wainer, Paula Vieira
2013 J jnl
Commun. ACM
Jacques Wainer, Michael Eckmann, Siome Goldenstein, Anderson Rocha
2013 J jnl
J. Assoc. Inf. Sci. Technol.
Jacques Wainer, Eduardo Valle
2012 J jnl
J. Inf. Data Manag.
Fábio de Lima Bezerra, Jacques Wainer
2012 B conf
CBMS
Herbert Franz Jelinek, Ramon Pires, Rafael Padilha, Siome Goldenstein, Jacques Wainer, Terry Bossomaier, Anderson Rocha
2012 J jnl
Technical Report
Jacques Wainer, Michael Eckmann, Siome Goldenstein, Anderson Rocha
2012 A* conf
ICML
Alexandre Passos, Piyush Rai, Jacques Wainer, Hal Daumé III
2012 J jnl
Inf. Sci.
Clarence A. Ellis, Kwanghoon Pio Kim, Aubrey J. Rembert, Jacques Wainer
2012 J jnl
IEEE Trans. Biomed. Eng.
Anderson Rocha, Tiago Jose de Carvalho, Herbert F. Jelinek, Siome Goldenstein, Jacques Wainer
2012 J jnl
Scientometrics
Michael Eckmann, Anderson Rocha, Jacques Wainer
2012 conf
SIBGRAPI
Ramon Pires, Herbert F. Jelinek, Jacques Wainer, Anderson Rocha
2011 J jnl
Int. J. Bus. Process. Integr. Manag.
Fábio de Lima Bezerra, Jacques Wainer
2011 J jnl
Commun. ACM
Jacques Wainer, Siome Goldenstein, Cléo Zanella Billa
2011 conf
EMBC
Herbert F. Jelinek, Anderson Rocha, Tiago Jose de Carvalho, Siome Goldenstein, Jacques Wainer
2011 J jnl
Inf. Process. Manag.
Jacques Wainer, Henrique Przibisczki de Oliveira, Ricardo Anido
2011 J jnl
J. Intell. Inf. Syst.
Cléo Zanella Billa, Jacques Wainer, Claudia Barsottini
2010 conf
SBIA
Paulo Gurgel Pinheiro, Jacques Wainer
2009 conf
BMMDS/EMMSAD
Fábio de Lima Bezerra, Jacques Wainer, Wil M. P. van der Aalst
2009 J jnl
Scientometrics
Denis Arruda, Fábio de Lima Bezerra, Vânia Paula de Almeida Néris, Patricia Rocha De Toro, Jacques Wainer
2009 J jnl
Inf. Softw. Technol.
Jacques Wainer, Claudia Galindo Novoa Barsottini, Danilo Lacerda, Leandro Rodrigues Magalhães de Marco
2009 J jnl
Scientometrics
Jacques Wainer, Eduardo C. Xavier, Fábio de Lima Bezerra
2008 B conf
CBMS
Cléo Zanella Billa, Claudia Barsottini, Jacques Wainer
2008 conf
ICEIS (2)
Fábio de Lima Bezerra, Jacques Wainer
2008 Misc conf
SAC
Fábio de Lima Bezerra, Jacques Wainer
2008 conf
SIBGRAPI
Anderson Rocha, Daniel Cabrini Hauagge, Jacques Wainer, Siome Goldenstein
2008 conf
WebMedia (Companion)
Fábio de Lima Bezerra, Jacques Wainer
2008 conf
SBIA
Tiago Sak, Jacques Wainer, Siome Klein Goldenstein
2008 Misc conf
SAC
Jacques Wainer, Cléo Zanella Billa, Marcio Paixao Dantas
2008 ed.
SBSC
Jacques Wainer, Mariano Gomes Pimentel
2008 J jnl
Comput. Educ.
Jacques Wainer, Tom Dwyer, Rodrigo Silveira Dutra, Andre Covic, Valdo B. Magalhães, Luiz Renato Ribeiro Ferreira, Valdiney Alves Pimenta, Kleucio Claudio
2008 conf
DG.O
Luciano A. Digiampietri, Norton Trevisan Roman, Luis A. A. Meira, Jorge Jambeiro Filho, Cristiano D. Ferreira, Andreia A. Kondo, Everton Rufino Constantino, Rodrigo Carvalho Rezende, Bruno Cedraz Brandao, Helder S. Ribeiro, Pietro K. Carolino, Antonella Lanna, Jacques Wainer, Siome Goldenstein
2007 J jnl
Inf. Syst.
Jacques Wainer, Akhil Kumar, Paulo Barthelmess
2007 J jnl
J. Braz. Comput. Soc.
Jacques Wainer, Claudia Barsottini
2007 J jnl
J. Log. Lang. Inf.
Jacques Wainer
2007 J jnl
RITA
Jerônimo Pellegrini, Jacques Wainer
2007 J jnl
Decis. Support Syst.
Jacques Wainer, Paulo Roberto Ferreira Jr., Everton Rufino Constantino
2007 A* conf
IJCAI
Jorge Jambeiro Filho, Jacques Wainer
2006 A conf
Business Process Management
Clarence A. Ellis, Aubrey J. Rembert, Kwanghoon Pio Kim, Jacques Wainer
2006 J jnl
RITA
Jacques Wainer, Carlos José Reis de Campos, Monica Parente Ramos, Paulo R. Lopes, Paulo Lísias Salomão, Daniel Sigulem
2006 conf
SIBGRAPI
Bruno Cedraz Brandao, Jacques Wainer, Siome Klein Goldenstein
2005 conf
CRIWG
Jacques Wainer, Kwanghoon Pio Kim, Clarence A. Ellis
2005 C conf
SACMAT
Jacques Wainer, Akhil Kumar
2005 J jnl
Decis. Support Syst.
Akhil Kumar, Jacques Wainer
2005 conf
CRIWG
Gregório Baggio Tramontina, Jacques Wainer
2005 conf
CRIWG
Claudia Barsottini, Jacques Wainer
2005 ch.
Process-Aware Information Systems
Clarence A. Ellis, Paulo Barthelmess, Jun Chen, Jacques Wainer
2004 Misc conf
SAC
Gregório Baggio, Jacques Wainer, Clarence A. Ellis
2004 Misc conf
SAC
Jacques Wainer, Fábio de Lima Bezerra, Paulo Barthelmess
2003 J jnl
Int. J. Cooperative Inf. Syst.
Roberto Silveira Silva Filho, Jacques Wainer, Edmundo R. M. Madeira
2003 conf
MWCN
Wanderley Ravagnani, Edmundo R. M. Madeira, Jacques Wainer
2003 J jnl
Int. J. Cooperative Inf. Syst.
Marie-José Blin, Jacques Wainer, Claudia Bauzer Medeiros
2003 conf
CRIWG
Jacques Wainer, Fábio de Lima Bezerra
2003 conf
WES
Akhil Kumar, Jacques Wainer, Zuopeng Zhang
2003 J jnl
Int. J. Cooperative Inf. Syst.
Jacques Wainer, Paulo Barthelmess, Akhil Kumar
2002 Misc conf
AMIA
Jacques Wainer, Ana María Monteiro, Meide Silva Anção, Daniel Sigulem
2001 B conf
AIME
Ana María Monteiro, Jacques Wainer
2001 J jnl
Int. J. Cooperative Inf. Syst.
Wil M. P. van der Aalst, Paulo Barthelmess, Clarence A. Ellis, Jacques Wainer
2001 B conf
GROUP
Jacques Wainer, Danillo Palacio Braga
2000 conf
IBERAMIA-SBIA 2000 Open Discussion Track
Ana María Monteiro, Jacques Wainer
2000 A* conf
ASE
Cleidson R. B. de Souza, Jair S. Ferreira Jr., Kléder Miranda Gonçalves, Jacques Wainer
2000 conf
SAC (1)
Jacques Wainer
2000 B conf
NOMS
Jacques Wainer, Leliane N. de Barros, Volnys Borges Bernal, Marilza Lemos
2000 conf
IBERAMIA-SBIA
Paulo Ferreira, Jacques Wainer
2000 B conf
CoopIS
Wil M. P. van der Aalst, Paulo Barthelmess, Clarence A. Ellis, Jacques Wainer
1999 conf
SPIRE/CRIWG
Cleidson R. B. de Souza, Jacques Wainer, Dalcykelem B. Santos, Klissiomara L. Dias
1999 J jnl
J. Braz. Comput. Soc.
Hemerson Pistori, Jacques Wainer
1999 C conf
ISADS
Roberto Silveira Silva Filho, Jacques Wainer, Edmundo R. M. Madeira, Clarence A. Ellis
1999 conf
LANOMS
Volnys Borges Bernal, Leliane N. de Barros, Marilza Lemos, Jacques Wainer
1999 J jnl
J. Intell. Inf. Syst.
Jacques Wainer, Sandra A. Sandri
1998 conf
CRIWG
Jacques Wainer, Clarence A. Ellis
1998 conf
SBIA
Jacques Wainer, Sandra A. Sandri
1998 A conf
ECAI
Hector Geffner, Jacques Wainer
1998 conf
SBIA
Cláudia Nalon, Jacques Wainer
1997 J jnl
Artif. Intell. Medicine
Jacques Wainer, Alexandre de Melo Rezende
1997 Misc conf
EPIA
Jerônimo Pellegrini, Jacques Wainer
1996 conf
SBIA
Alexandre de Melo Rezende, Jacques Wainer
1996 conf
SBIA
Ana María Monteiro, Jacques Wainer
1996 A* conf
KR
Ana María Monteiro, Jacques Wainer
1995 ed.
SBIA
Jacques Wainer, Ariadne Carvalho
1995 conf
COOCS
Paulo Barthelmess, Jacques Wainer
1995 conf
CRIWG
Paulo Barthelmess, Jacques Wainer
1994 A conf
CSCW
Clarence A. Ellis, Jacques Wainer
1994 A conf
ECAI
Jacques Wainer
1993 A* conf
IJCAI
Jacques Wainer
1992 A* conf
AAAI
Jacques Wainer
1991 J jnl
Fundam. Informaticae
Anthony S. Maida, Jacques Wainer, Sehyeong Cho
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