Olivera Marjanovic

119 papers B 3C 4Misc 1Journal 30Unranked 80
YearRankTypeTitle / Venue / Authors
2025 conf
HICSS
Olivera Marjanovic, Barbara Dinter, Thilini Ariyachandra
2025 J jnl
Commun. Assoc. Inf. Syst.
Tsholofelo Sethibe, Babak Abedin, Olivera Marjanovic
2025 conf
PACIS
Olivera Marjanovic, Diana Hristova, Babak Abedin, Saswat Dash
2025 J jnl
Inf. Syst. Frontiers
Olivera Marjanovic, Lana Kovacevic-Opacic
2025 J jnl
ACM SIGMIS Database
Vijaya Murthy, Olivera Marjanovic
2025 conf
PACIS
Davor Petreski, Olivera Marjanovic, Marc Cheong
2024 conf
HICSS
Jiang Zhu, Olivera Marjanovic
2024 conf
HICSS
Lana Kovacevic-Opacic, Olivera Marjanovic
2024 conf
HICSS
Olivera Marjanovic, Barbara Dinter, Thilini Ariyachandra
2024 conf
ACIS
Olivera Marjanovic, Diana Hristova, Saswat Dash, Babak Abedin
2024 conf
ACIS
Ha Thanh Chu, Babak Abedin, Olivera Marjanovic
2024 conf
ACIS
Zilin Jiang, Babak Abedin, Olivera Marjanovic
2023 conf
HICSS
Thilini Ariyachandra, Olivera Marjanovic, Barbara Dinter
2023 J jnl
Inf. Syst. Frontiers
Olivera Marjanovic, Greg Patmore, Nikola Balnave
2022 conf
PACIS
Jiang Zhu, Olivera Marjanovic
2022 J jnl
J. Knowl. Manag.
Olivera Marjanovic
2022 conf
PACIS
Lana Kovacevic-Opacic, Olivera Marjanovic
2022 conf
PACIS
Lana Kovacevic-Opacic, Olivera Marjanovic
2022 J jnl
Australas. J. Inf. Syst.
Ayesha Nadeem, Olivera Marjanovic, Babak Abedin
2022 conf
HICSS
Thilini Ariyachandra, Olivera Marjanovic, Barbara Dinter
2022 conf
HICSS
Olivera Marjanovic, Thilini Ariyachandra, Barbara Dinter
2022 J jnl
Inf. Syst. Frontiers
Olivera Marjanovic, Vijaya Murthy
2022 J jnl
Eur. J. Inf. Syst.
Olivera Marjanovic, Dubravka Cecez-Kecmanovic, Richard Vidgen
2021 conf
HICSS
Jiang Zhu, Olivera Marjanovic
2021 J jnl
J. Inf. Technol.
Olivera Marjanovic, Dubravka Cecez-Kecmanovic, Richard Vidgen
2021 conf
HICSS
Hussein Al-Ghattas, Olivera Marjanovic
2021 conf
AMCIS
Lana Kovacevic-Opacic, Olivera Marjanovic
2021 conf
I3E
Ayesha Nadeem, Olivera Marjanovic, Babak Abedin
2021 conf
HICSS
Barbara Dinter, Olivera Marjanovic, Thilini Ariyachandra
2020 conf
ACIS
Ayesha Nadeem, Babak Abedin, Olivera Marjanovic
2020 conf
AMCIS
Jiang Zhu, Olivera Marjanovic
2020 conf
HICSS
Olivera Marjanovic, Thilini Ariyachandra, Barbara Dinter
2020 J jnl
Inf. Organ.
Olivera Marjanovic, Dubravka Cecez-Kecmanovic
2020 conf
AMCIS
Lana Kovacevic-Opacic, Olivera Marjanovic
2019 conf
PACIS
Tsholofelo Sethibe, Babak Abedin, Olivera Marjanovic, David N. Milne
2019 conf
HICSS
Olivera Marjanovic, Barbara Dinter, Thilini Ariyachandra
2018 conf
IS&O
Olivera Marjanovic, Dubravka Cecez-Kecmanovic, Richard Vidgen
2018 conf
HICSS
Olivera Marjanovic, Barbara Dinter, Thilini R. Ariyachandra
2018 J jnl
Commun. Assoc. Inf. Syst.
Olivera Marjanovic, Barbara Dinter
2017 conf
HICSS
Olivera Marjanovic, Barbara Dinter
2017 J jnl
J. Strateg. Inf. Syst.
Olivera Marjanovic, Dubravka Cecez-Kecmanovic
2017 conf
HICSS
Olivera Marjanovic, Barbara Dinter, Thilini Ariyachandra
2017 conf
HICSS
Olivera Marjanovic, Dubravka Cecez-Kecmanovic
2016 conf
AMCIS
Moritz Kynast, Olivera Marjanovic
2016 conf
AMCIS
Amila Pilav-Velic, Olivera Marjanovic
2016 J jnl
J. Inf. Technol. Theory Appl.
Olivera Marjanovic
2016 conf
HICSS
Olivera Marjanovic
2016 J jnl
CoRR
Dubravka Cecez-Kecmanovic, Olivera Marjanovic
2016 J jnl
Inf. Syst. Frontiers
Olivera Marjanovic, Vijaya Murthy
2016 C conf
ICIS
Olivera Marjanovic
2016 J jnl
Inf. Manag.
Amila Pilav-Velic, Olivera Marjanovic
2016 conf
HICSS
Olivera Marjanovic, Barbara Dinter, Thilini Ariyachandra
2016 conf
ACIS
Steve Elliot, Ella Hafermalz, Dirk Hovorka, Sebastian K. Boell, Kai Riemer, Olivera Marjanovic
2016 J jnl
CoRR
Olivera Marjanovic
2015 conf
ACIS
Dubravka Cecez-Kecmanovic, Olivera Marjanovic
2015 conf
HICSS
Olivera Marjanovic
2015 C conf
ICIS
Dubravka Cecez-Kecmanovic, Olivera Marjanovic
2015 conf
HICSS
Olivera Marjanovic, Thilini Ariyachandra, Barbara Dinter
2015 conf
ACIS
Olivera Marjanovic
2014 conf
AMCIS
Olivera Marjanovic, Markus Rothenhöfer
2014 conf
HICSS
Olivera Marjanovic, Thilini Ariyachandra, Barbara Dinter
2013 J jnl
Commun. Assoc. Inf. Syst.
Paul Mathiesen, Wasana Bandara, Olivera Marjanovic, Houra Delavari
2013 conf
ACIS
Sarah Anstiss, Olivera Marjanovic
2013 J jnl
Pac. Asia J. Assoc. Inf. Syst.
Olivera Marjanovic, Petri Hallikainen
2013 conf
ACIS
Olivera Marjanovic
2013 conf
HICSS
Robert Winter, Olivera Marjanovic, Barbara H. Wixom
2013 conf
HICSS
Olivera Marjanovic
2013 conf
DESRIST
Olivera Marjanovic
2013 conf
HICSS
Olivera Marjanovic
2013 conf
ASSRI
Vijaya Murthy, Olivera Marjanovic
2012 conf
ACIS
Petri Hallikainen, Hilkka Merisalo-Rantanen, Antti Syvaniemi, Olivera Marjanovic
2012 conf
PACIS
Parastoo Mousavi, Olivera Marjanovic, Petri Hallikainen
2012 conf
ECIS
Petri Hallikainen, Hilkka Merisalo-Rantanen, Antti Syvaniemi, Olivera Marjanovic
2012 conf
HICSS
Olivera Marjanovic
2012 conf
HICSS
Michael Goul, Olivera Marjanovic, Susan Baxley, Karen Vizecky
2012 conf
ACIS
Sarah Anstiss, Olivera Marjanovic
2012 conf
ECIS
Olivera Marjanovic
2011 conf
HICSS
Olivera Marjanovic, Richard Roose
2011 conf
AMCIS
Olivera Marjanovic, Narcyz Roztocki
2011 C conf
ICIS
Olivera Marjanovic
2011 conf
HICSS
Olivera Marjanovic, Ronald D. Freeze
2011 conf
AMCIS
Corina Raduescu, Olivera Marjanovic
2010 conf
ACIS
Houra Delavari, Wasana Bandara, Olivera Marjanovic, Paul Mathiesen
2010 conf
HICSS
Olivera Marjanovic
2010 conf
Business Process Management Workshops
Olivera Marjanovic, Wasana Bandara
2010 J jnl
Int. J. Bus. Intell. Res.
Olivera Marjanovic
2009 conf
HICSS
Olivera Marjanovic
2009 conf
Bled eConference
Olivera Marjanovic
2009 J jnl
Bus. Process. Manag. J.
Ravi Seethamraju, Olivera Marjanovic
2009 conf
ITI
Olivera Marjanovic
2008 conf
ITI
Olivera Marjanovic
2008 conf
ITI
Olivera Marjanovic
2008 conf
Bled eConference
Olivera Marjanovic
2008 conf
HICSS
Olivera Marjanovic, Ravi Seethamraju
2007 C conf
CollaborateCom
Olivera Marjanovic, Hala Skaf-Molli, Pascal Molli, Claude Godart
2007 J jnl
J. Educ. Technol. Soc.
Olivera Marjanovic, Hala Skaf-Molli, Pascal Molli, Claude Godart
2007 conf
HICSS
Olivera Marjanovic
2007 J jnl
Comput. Hum. Behav.
Olivera Marjanovic
2006 conf
ICEIS (4)
Olivera Marjanovic, Hala Skaf-Molli, Pascal Molli, Fethi A. Rabhi, Claude Godart
2005 B conf
ICALT
Olivera Marjanovic
2005 conf
Bled eConference
Olivera Marjanovic
2005 B conf
ICALT
Olivera Marjanovic
2005 J jnl
J. Educ. Technol. Soc.
Olivera Marjanovic
2005 J jnl
Bus. Process. Manag. J.
Olivera Marjanovic
2005 conf
Bled eConference
Olivera Marjanovic
2004 conf
ACIS
Olivera Marjanovic
2004 J jnl
Int. J. Web Serv. Res.
Olivera Marjanovic
2003 conf
ICWS-Europe
Olivera Marjanovic
2002 conf
Bled eConference
Olivera Marjanovic
2001 conf
I3E
Olivera Marjanovic, Zoran Milosevic
2001 conf
ACIS
Olivera Marjanovic
2001 B conf
EDOC
Olivera Marjanovic, Zoran Milosevic
2000 Misc conf
Australasian Database Conference
Olivera Marjanovic
2000 J jnl
Int. J. Cooperative Inf. Syst.
Wasim Sadiq, Olivera Marjanovic, Maria E. Orlowska
2000
Olivera Marjanovic
2000 J jnl
Bus. Process. Manag. J.
Olivera Marjanovic
1999 J jnl
J. Comput. Assist. Learn.
Olivera Marjanovic
1999 J jnl
Knowl. Inf. Syst.
Olivera Marjanovic, Maria E. Orlowska
1999 conf
CODAS
Olivera Marjanovic, Maria E. Orlowska
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