Rainer Burgkart

37 papers A* 3A 3Journal 19Unranked 12
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Robin Jeanne Kirschner, Anna Huber, Carina M. Micheler, Dirk Müller, Nader Rajaei, Rainer Burgkart, Sami Haddadin
2025 J jnl
IEEE Access
Carina M. Micheler, Jan Josef Lang, Igor Lazic, Benjamin Schloßmacher, Maximilian C. M. Fischer, Christian Fritz, Florian Hinterwimmer, Holger Wolf, Rüdiger von Eisenhart-Rothe, Rainer Burgkart
2024 A* conf
ICRA
Nikolas J. Wilhelm, Sami Haddadin, Rainer Burgkart, Patrick van der Smagt, Maximilian Karl
2024 A conf
IROS
Nikolas J. Wilhelm, Victor Schaack, Annick Leisching, Carina Micheler, Sami Haddadin, Rainer Burgkart
2024 J jnl
CoRR
Laura Engelhardt, Renate Sachse, Rainer Burgkart, Wolfgang A. Wall
2024 A* conf
ICRA
Nikolas J. Wilhelm, Claudio Glowalla, Sami Haddadin, Julian Schote, Hannes Höppner, Patrick van der Smagt, Maximilian Karl, Rainer Burgkart
2024 J jnl
Artif. Intell. Medicine
Nikolas J. Wilhelm, Claudio E. von Schacky, Felix J. Lindner, Matthias J. Feucht, Yannick Ehmann, Jonas Pogorzelski, Sami Haddadin, Jan Neumann, Florian Hinterwimmer, Rüdiger von Eisenhart-Rothe, Matthias Jung, Maximilian F. Russe, Kaywan Izadpanah, Sebastian Siebenlist, Rainer Burgkart, Marco-Christopher Rupp
2024 A* conf
ICRA
Robin Jeanne Kirschner, Carina M. Micheler, Yangcan Zhou, Sebastian Siegner, Mazin Hamad, Claudio Glowalla, Jan Neumann, Nader Rajaei, Rainer Burgkart, Sami Haddadin
2024 J jnl
CoRR
Robin Jeanne Kirschner, Carina Micheler, Yangcan Zhou, Sebastian Siegner, Mazin Hamad, Claudio Glowalla, Jan Neumann, Nader Rajaei, Rainer Burgkart, Sami Haddadin
2024 A conf
IROS
Robin Jeanne Kirschner, Jinyu Yang, Edonis Elshani, Carina M. Micheler, Tobias Leibbrand, Dirk Müller, Claudio Glowalla, Nader Rajaei, Rainer Burgkart, Sami Haddadin
2024 J jnl
CoRR
Robin Jeanne Kirschner, Jinyu Yang, Edonis Elshani, Carina M. Micheler, Tobias Leibbrand, Dirk Müller, Claudio Glowalla, Nader Rajaei, Rainer Burgkart, Sami Haddadin
2023 conf
ICORR
Elisabeth Rose Jensen, Reihaneh Mirjalili, Kim K. Peper, Dennis Ossadnik, Fan Wu, Jan Josef Lang, Matthias Martin, Florian Hetfleisch, Rainer Burgkart, Sami Haddadin
2023 J jnl
Sensors
Nikolas J. Wilhelm, Constantin von Deimling, Sami Haddadin, Claudio Glowalla, Rainer Burgkart
2022 J jnl
Sensors
Nikolas Jakob Wilhelm, Sami Haddadin, Jan Josef Lang, Carina Micheler, Florian Hinterwimmer, Anselm Reiners, Rainer Burgkart, Claudio Glowalla
2021 J jnl
Frontiers Robotics AI
Thomas Dickmann, Nikolas J. Wilhelm, Claudio Glowalla, Sami Haddadin, Patrick van der Smagt, Rainer Burgkart
2016 conf
Biomedical Applications in Molecular, Structural, and Functional Imaging
Felix K. Kopp, Thomas Baum, Radin A. Nasirudin, Kai Mei, Eduardo Grande Garcia, Rainer Burgkart, Ernst J. Rummeny, Jan S. Bauer, Peter B. Noël
2015 J jnl
BMC Medical Imaging
Thomas Baum, Eduardo Grande Garcia, Rainer Burgkart, Olga Gordijenko, Hans Liebl, Pia Jungmann, Michael Gruber, Tina Zahel, Ernst J. Rummeny, Simone Waldt, Jan S. Bauer
2014 J jnl
Autom.
Sami Haddadin, Simon Haddadin, Augusto Khoury, Tim Rokahr, Sven Parusel, Rainer Burgkart, Antonio Bicchi, Alin Albu-Schäffer
2013 conf
Bildverarbeitung für die Medizin
Timm Surup, Anna Hänler, Annika Homeier, Andreas Petersik, Geert von Oldenburg, Rainer Burgkart
2012 A conf
IROS
Sami Haddadin, Simon Haddadin, Augusto Khoury, Tim Rokahr, Sven Parusel, Rainer Burgkart, Antonio Bicchi, Alin Albu-Schäffer
2012 J jnl
Int. J. Robotics Res.
Sami Haddadin, Simon Haddadin, Augusto Khoury, Tim Rokahr, Sven Parusel, Rainer Burgkart, Antonio Bicchi, Alin Albu-Schäffer
2012 conf
ROBIO
Horacio Martinez, Constantin von Deimling, Heinz Ulbrich, Rüdiger von Eisenhart-Rothe, Rainer Burgkart
2011 J jnl
IEEE Trans. Vis. Comput. Graph.
Christian Dick, Rainer Burgkart, Rüdiger Westermann
2011 J jnl
Comput. Vis. Sci.
Zhengxiong Yang, Stefan Kollmannsberger, Alexander Düster, Martin Ruess, Eduardo Grande Garcia, Rainer Burgkart, Ernst Rank
2009 J jnl
IEEE Trans. Vis. Comput. Graph.
Christian Dick, Joachim Georgii, Rainer Burgkart, Rüdiger Westermann
2008 conf
VCBM
Christian Dick, Joachim Georgii, Rainer Burgkart, Rüdiger Westermann
2008 J jnl
IEEE Pervasive Comput.
Bundith Panchaphongsaphak, Robert Riener, Brygg Ullmer, Rainer Burgkart, Nishkam Ravi
2007 conf
Bildverarbeitung für die Medizin
Christoph Bodensteiner, Volker Martens, Stefan Schlichting, Norbert Binder, Rainer Burgkart, Achim Schweikard
2007 J jnl
IEEE Trans. Inf. Technol. Biomed.
Bundith Panchaphongsaphak, Rainer Burgkart, Robert Riener
2006 J jnl
Presence Teleoperators Virtual Environ.
Martin Frey, Jens Hoogen, Rainer Burgkart, Robert Riener
2004 conf
CARS
Michael Roth, Manfred Dötter, Rainer Burgkart, Achim Schweikard
2003 conf
CARS
Stefan Burkhardt, Michael Roth, Achim Schweikard, Rainer Burgkart
2003 conf
Bildverarbeitung für die Medizin
Stefan Burkhardt, Achim Schweikard, Rainer Burgkart
2003 conf
CARS
Thomas Pröll, Robert Riener, Rainer Burgkart
2003 J jnl
Medical Image Anal.
Stefan Burkhardt, Achim Schweikard, Rainer Burgkart
2003 conf
Bildverarbeitung für die Medizin
Stefan Burkhardt, Michael Roth, Achim Schweikard, Rainer Burgkart
2002 conf
Bildverarbeitung für die Medizin
Stefan Burkhardt, Michael Roth, Achim Schweikard, Rainer Burgkart
tests/unit/test_apk_apktool_wrapper.py
← Index tests/unit/test_apk_apktool_wrapper.py python
"""
Unit tests for apktool wrapper subprocess management and smali directory detection.

All subprocess calls are mocked — no apktool/Java installation required.
"""
import os
import tempfile

import pytest
from unittest.mock import MagicMock, patch

pytestmark = [pytest.mark.unit, pytest.mark.apk, pytest.mark.decompile]


class TestApktoolDisassembler:
    """Tests for ApktoolDisassembler subprocess wrapper."""

    @patch.dict(os.environ, {}, clear=False)
    def test_init_defaults(self):
        os.environ.pop("APKTOOL_PATH", None)
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        a = ApktoolDisassembler()
        assert a.apktool_path == "apktool"
        assert a.timeout == 120

    def test_init_custom(self):
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        a = ApktoolDisassembler(apktool_path="/opt/apktool", timeout=120)
        assert a.apktool_path == "/opt/apktool"
        assert a.timeout == 120

    def test_init_from_env(self):
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        with patch.dict(os.environ, {"APKTOOL_PATH": "/usr/bin/apktool", "APKTOOL_TIMEOUT": "90"}):
            a = ApktoolDisassembler()
            assert a.apktool_path == "/usr/bin/apktool"
            assert a.timeout == 90

    @patch("subprocess.Popen")
    def test_disassemble_success(self, mock_popen):
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        mock_proc = MagicMock()
        mock_proc.communicate.return_value = ("output", "")
        mock_proc.returncode = 0
        mock_popen.return_value = mock_proc

        a = ApktoolDisassembler()
        result = a.disassemble("/test.apk", "/output")
        assert result is True

    @patch("subprocess.Popen")
    def test_disassemble_failure(self, mock_popen):
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        mock_proc = MagicMock()
        mock_proc.communicate.return_value = ("", "error")
        mock_proc.returncode = 1
        mock_popen.return_value = mock_proc

        a = ApktoolDisassembler(log=MagicMock())
        result = a.disassemble("/test.apk", "/output")
        assert result is False

    @patch("subprocess.Popen")
    def test_disassemble_timeout(self, mock_popen):
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        import subprocess
        mock_proc = MagicMock()
        mock_proc.communicate.side_effect = subprocess.TimeoutExpired(cmd="apktool", timeout=10)
        mock_proc.pid = 12345
        mock_popen.return_value = mock_proc

        with patch("os.getpgid", return_value=12345), \
             patch("os.killpg"):
            a = ApktoolDisassembler(timeout=10, log=MagicMock())
            result = a.disassemble("/test.apk", "/output")
            assert result is False

    @patch("subprocess.Popen", side_effect=FileNotFoundError)
    def test_disassemble_not_found(self, mock_popen):
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        a = ApktoolDisassembler(log=MagicMock())
        result = a.disassemble("/test.apk", "/output")
        assert result is False

    @patch("subprocess.Popen")
    def test_disassemble_command_args(self, mock_popen):
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        mock_proc = MagicMock()
        mock_proc.communicate.return_value = ("", "")
        mock_proc.returncode = 0
        mock_popen.return_value = mock_proc

        a = ApktoolDisassembler(apktool_path="/opt/apktool")
        a.disassemble("/test.apk", "/output")

        cmd = mock_popen.call_args[0][0]
        assert cmd[0] == "/opt/apktool"
        assert "d" in cmd
        assert "--no-res" in cmd
        assert "--force" in cmd
        assert "/test.apk" in cmd

    def test_get_smali_directories_single_dex(self):
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        with tempfile.TemporaryDirectory() as tmpdir:
            os.makedirs(os.path.join(tmpdir, "smali"))
            a = ApktoolDisassembler()
            dirs = a.get_smali_directories(tmpdir)
            assert len(dirs) == 1
            assert dirs[0].endswith("smali")

    def test_get_smali_directories_multi_dex(self):
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        with tempfile.TemporaryDirectory() as tmpdir:
            os.makedirs(os.path.join(tmpdir, "smali"))
            os.makedirs(os.path.join(tmpdir, "smali_classes2"))
            os.makedirs(os.path.join(tmpdir, "smali_classes3"))
            # Should not be included
            os.makedirs(os.path.join(tmpdir, "res"))
            os.makedirs(os.path.join(tmpdir, "original"))

            a = ApktoolDisassembler()
            dirs = a.get_smali_directories(tmpdir)
            assert len(dirs) == 3

    def test_get_smali_directories_empty(self):
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        with tempfile.TemporaryDirectory() as tmpdir:
            a = ApktoolDisassembler()
            dirs = a.get_smali_directories(tmpdir)
            assert dirs == []

    def test_get_smali_directories_nonexistent(self):
        from redb.extractors.decompiler.apk.apktool_wrapper import ApktoolDisassembler
        a = ApktoolDisassembler()
        dirs = a.get_smali_directories("/nonexistent/path")
        assert dirs == []