Ralf Plattfaut

88 papers A 2C 7Journal 29Unranked 48
YearRankTypeTitle / Venue / Authors
2026 conf
HICSS
Marlon Kampmann, Henning Femmer, Dehbia Kouadria, Ralf Plattfaut, André Coners
2026 J jnl
Inf. Syst. Frontiers
Isabella Urban, Ralf Plattfaut
2025 conf
ACIS
Ralf Plattfaut, Karlheinz Kautz
2025 J jnl
Bus. Process. Manag. J.
Ralf Plattfaut, Thomas Grisold
2025 conf
ECIS
Ali Ergün, Ralf Plattfaut
2025 conf
ACIS
Ronja Rieger, Carolin Vollenberg, Ralf Plattfaut
2025 J jnl
Inf. Syst. J.
Marie-E. Zubler, Ralf Plattfaut, Björn Niehaves
2025 conf
ACIS
Peter A. François, Seyyid A. Ciftci, Christian Janiesch, Ralf Plattfaut
2025 J jnl
Eur. J. Inf. Syst.
Marie-E. Godefroid, Vincent Borghoff, Ralf Plattfaut, Björn Niehaves
2025 conf
AMCIS
Ali Ergün, Lars Betteldorf, Ralf Plattfaut
2025 J jnl
Int. J. Inf. Manag. Data Insights
Marie-E. Zubler, Julian Koch, Ralf Plattfaut
2024 conf
PVM
Marlon Kampmann, Peter A. François, Ralf Plattfaut, André Coners
2024 ed.
BPM (Blockchain and RPA Forum)
Claudio Di Ciccio, Walid Fdhila, Simone Agostinelli, Daniel Amyot, Henrik Leopold, Michal Krcál, Monika Malinova Mandelburger, Gregor Polancic, Katarina Tomicic-Pupek, Katarzyna Gdowska, Thomas Grisold, Piotr Sliz, Iris Beerepoot, Renata Gabryelczyk, Ralf Plattfaut
2024 conf
BPM (Blockchain and RPA Forum)
Peter A. François, Ralf Plattfaut
2024 conf
BPM (Forum)
Manfred Baer, Ralf Plattfaut
2024 J jnl
Commun. Assoc. Inf. Syst.
Jennifer Haase, Waldemar Kremser, Henrik Leopold, Jan Mendling, Linda Onnasch, Ralf Plattfaut
2024 C conf
ICIS
Antonia Wurzer, Ralf Plattfaut
2024 J jnl
Process Sci.
Ralf Plattfaut, Jana-Rebecca Rehse, Caspar Jans, Matthias Schulte, Joost van Wendel de Joode
2024 J jnl
Inf. Syst. E Bus. Manag.
Marie Godefroid, Vincent Borghoff, Ralf Plattfaut, Björn Niehaves
2023 ed.
BPM (Blockchain and RPA Forum)
Julius Köpke, Orlenys López-Pintado, Ralf Plattfaut, Jana-Rebecca Rehse, Katarzyna Gdowska, Fernanda Gonzalez-Lopez, Jorge Munoz-Gama, Koen Smit, Jan Martijn E. M. van der Werf
2023 J jnl
Bus. Process. Manag. J.
Bettina Distel, Ralf Plattfaut, Ingo Kregel
2023 C conf
ICIS
Carolin Vollenberg, Ralf Plattfaut, André Coners
2023 J jnl
MIS Q. Executive
Ralf Plattfaut, Vincent Borghoff
2023 A conf
BPM
Marie Godefroid, Ralf Plattfaut, Björn Niehaves
2023 conf
PVM
Peter A. François, Marlon Kampmann, Ralf Plattfaut, André Coners
2023 conf
GI-Jahrestagung
Peter A. François, Ralf Plattfaut
2022 J jnl
Bus. Inf. Syst. Eng.
Maximilian Röglinger, Ralf Plattfaut, Vincent Borghoff, Georgi Kerpedzhiev, Jörg Becker, Daniel Beverungen, Jan vom Brocke, Amy Van Looy, Adela del-Río-Ortega, Stefanie Rinderle-Ma, Michael Rosemann, Flávia Maria Santoro, Peter Trkman
2022 conf
Wirtschaftsinformatik
Kilian Müller, Holger Koelmann, Marco Niemann, Ralf Plattfaut, Jörg Becker
2022 C conf
ICIS
Marie Godefroid, Vincent Borghoff, Ralf Plattfaut, Björn Niehaves
2022 J jnl
HMD Prax. Wirtsch.
Carolin Vollenberg, Felix Hoffmann, André Coners, Ralf Plattfaut
2022 conf
AMCIS
Vinod Kumar Ahuja, Nikolai Kazantsev, Ralf Plattfaut
2022 J jnl
J. Inf. Syst.
Ralf Plattfaut, Vincent Borghoff
2022 conf
BPM (Blockchain and RPA Forum)
Vincent Borghoff, Ralf Plattfaut
2022 J jnl
Comput. Ind.
Ralf Plattfaut, Vincent Borghoff, Marie Godefroid, Julian Koch, Michael Trampler, André Coners
2022 conf
HICSS
Julian Koch, Carolin Vollenberg, Ralf Plattfaut, André Coners
2022 C conf
ICIS
Marie Godefroid, Ralf Plattfaut
2022 J jnl
Inf. Syst. E Bus. Manag.
Bettina Distel, Holger Koelmann, Ralf Plattfaut, Jörg Becker
2022 A conf
BPM
Peter A. François, Vincent Borghoff, Ralf Plattfaut, Christian Janiesch
2021 conf
Wirtschaftsinformatik
Vincent Borghoff, Ralf Plattfaut
2021 J jnl
J. Organ. Comput. Electron. Commer.
Ingo Kregel, Julian Koch, Ralf Plattfaut
2021 conf
Business Process Management Workshops
Ralf Plattfaut, Vincent Borghoff
2021 conf
PACIS
Marie Godefroid, Anna Zeuge, Frederike Marie Oschinsky, Ralf Plattfaut, Björn Niehaves
2021 conf
Wirtschaftsinformatik
Ralf Plattfaut, Vincent Borghoff
2021 J jnl
HMD Prax. Wirtsch.
Carolin Vollenberg, Julian Koch, Michael Trampler, Friederike-Maria Bade, André Coners, Ralf Plattfaut
2021 J jnl
HMD Prax. Wirtsch.
Ralf Plattfaut, Armin Stein, Katrin Bergener
2021 conf
Wirtschaftsinformatik
Marie Godefroid, Ralf Plattfaut, Björn Niehaves
2021 J jnl
Int. J. Inf. Manag. Data Insights
Julian Koch, Ralf Plattfaut, Ingo Kregel
2021 conf
ACIS
Sebastian Käss, Marie Godefroid, Vincent Borghoff, Susanne Strahringer, Markus Westner, Ralf Plattfaut
2020 J jnl
HMD Prax. Wirtsch.
Ralf Plattfaut, Julian Koch, Michael Trampler, André Coners
2019 C conf
ICIS
Ralf Plattfaut
2015 J jnl
Inf. Polity
Basanta E. P. Thapa, Björn Niehaves, Claudius E. Seidel, Ralf Plattfaut
2015 J jnl
Commun. Assoc. Inf. Syst.
Jens Poeppelbuss, Ralf Plattfaut, Björn Niehaves
2015 J jnl
Commun. Assoc. Inf. Syst.
Jan vom Brocke, Alexander Simons, Kai Riemer, Björn Niehaves, Ralf Plattfaut, Anne Cleven
2014 J jnl
Bus. Process. Manag. J.
Björn Niehaves, Jens Poeppelbuss, Ralf Plattfaut, Jörg Becker
2014 J jnl
Eur. J. Inf. Syst.
Björn Niehaves, Ralf Plattfaut
2014 conf
HICSS
Andrea Malsbender, Ralf Plattfaut, Björn Niehaves, Jörg Becker
2013 conf
ACIS
Matthias Voigt, Markus Fordey, Andrea Malsbender, Kevin Ortbach, Ralf Plattfaut, Björn Niehaves
2013 J jnl
Gov. Inf. Q.
Björn Niehaves, Ralf Plattfaut, Jörg Becker
2013 conf
DESRIST
Matthias Voigt, Kevin Ortbach, Ralf Plattfaut, Björn Niehaves
2013 conf
PACIS
Matthias Voigt, Ralf Plattfaut, Kevin Ortbach, Andrea Malsbender, Björn Niehaves, Jörg Becker
2013 conf
ECIS
Ralf Plattfaut, Björn Niehaves, Matthias Voigt, Andrea Malsbender, Kevin Ortbach, Jens Pöppelbuß
2013 conf
HICSS
Matthias Voigt, Kevin Ortbach, Ralf Plattfaut, Björn Niehaves
2013 conf
HICSS
Jörg Becker, Kevin Ortbach, Ralf Plattfaut, Björn Niehaves
2013 conf
ICEGOV
Claudius E. Seidel, Basanta E. P. Thapa, Ralf Plattfaut, Björn Niehaves
2013 conf
HICSS
Ralf Plattfaut, Thomas Kohlborn, Sara Hofmann, Daniel Beverungen, Björn Niehaves, Michael Räckers, Jörg Becker
2012 conf
HICSS
Kevin Ortbach, Ralf Plattfaut, Jens Pöppelbuß, Björn Niehaves
2012 J jnl
Bus. Process. Manag. J.
Björn Niehaves, Ralf Plattfaut, Jörg Becker
2012 conf
PACIS
Ralf Plattfaut, Björn Niehaves, Jörg Becker
2012 conf
HICSS
Björn Niehaves, Elena Gorbacheva, Ralf Plattfaut
2012 conf
ECIS
Björn Niehaves, Elena Gorbacheva, Ralf Plattfaut
2011 conf
ECIS
Elena Gorbacheva, Björn Niehaves, Ralf Plattfaut, Jörg Becker
2011 conf
AMCIS
Björn Niehaves, Ralf Plattfaut, Max Budde, Jörg Becker
2011 J jnl
Bus. Process. Manag. J.
Björn Niehaves, Ralf Plattfaut
2011 conf
ECIS
Ralf Plattfaut, Björn Niehaves, Jens Pöppelbuß, Jörg Becker
2011 conf
PACIS
Andrea Malsbender, Jens Pöppelbuß, Ralf Plattfaut, Björn Niehaves, Jörg Becker
2011 conf
EGOV
Björn Niehaves, Ralf Plattfaut
2011 C conf
FedCSIS
Jens Pöppelbuß, Ralf Plattfaut, Kevin Ortbach, Andrea Malsbender, Matthias Voigt, Björn Niehaves, Jörg Becker
2011 conf
Wirtschaftsinformatik
Björn Niehaves, Ralf Plattfaut
2011 C conf
ICIS
Björn Niehaves, Ralf Plattfaut, Suprateek Sarker
2010 conf
DG.O
Björn Niehaves, Ralf Plattfaut, Peter H. Vages
2010 J jnl
Interact. Technol. Smart Educ.
Björn Niehaves, Ralf Plattfaut, Elena Gorbacheva, Peter H. Vages
2010 conf
ECIS
Björn Niehaves, Ralf Plattfaut
2010 conf
AMCIS
Björn Niehaves, Ralf Plattfaut, Jörg Becker
2010 conf
EGOV
Björn Niehaves, Ralf Plattfaut
2010 conf
AMCIS
Jörg Becker, Björn Niehaves, Ralf Plattfaut
2010 conf
AMCIS
Björn Niehaves, Ralf Plattfaut
2010 conf
EGOV
Björn Niehaves, Ralf Plattfaut
2009 conf
ECIS
Jan vom Brocke, Alexander Simons, Björn Niehaves, Kai Riemer, Ralf Plattfaut, Anne Cleven
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