Radhika Mittal

52 papers A* 8A 4Misc 16Journal 17Unranked 6
YearRankTypeTitle / Venue / Authors
2026 conf
NINeS
Muhammad Taimoor Tariq, Yongzhou Chen, Haitham Hassanieh, Radhika Mittal
2026 J jnl
CoRR
Muhammad Haseeb, Jinkun Geng, Aurojit Panda, Radhika Mittal, Nirav Atre, Srinivas Narayana, Anirudh Sivaraman
2026 Misc conf
HotMobile
Muhammad Taimoor Tariq, Radhika Mittal
2025 J jnl
CoRR
Yongzhou Chen, Muhammad Taimoor Tariq, Haitham Hassanieh, Radhika Mittal
2025 J jnl
Future Gener. Comput. Syst.
Suman Raj, Radhika Mittal, Harshil Gupta, Yogesh Simmhan
2025 J jnl
CoRR
Suman Raj, Radhika Mittal, Rajiv Mayani, Pawel Zuk, Anirban Mandal, Michael Zink, Yogesh Simmhan, Ewa Deelman
2025 Misc conf
HotNets
Muhammad Haseeb, Jinkun Geng, Radhika Mittal, Aurojit Panda, Srinivas Narayana, Anirudh Sivaraman
2025 Misc conf
SEC
Ammar Tahir, Yueshen Li, Jianli Jin, Daniel Moon, Changxin Zhang, Aganze Mihigo, Muhammad Taimoor Tariq, Deepak Vasisht, Radhika Mittal
2025 J jnl
CoRR
Muhammad Haseeb, Jinkun Geng, Radhika Mittal, Aurojit Panda, Srinivas Narayana, Anirudh Sivaraman
2025 A* conf
SIGCOMM
Muhammad Haseeb, Jinkun Geng, Daniel Duclos-Cavalcanti, Xiyu Hao, Ulysses Butler, Radhika Mittal, Srinivas Narayana, Anirudh Sivaraman
2024 J jnl
CoRR
Suman Raj, Radhika Mittal, Harshil Gupta, Yogesh Simmhan
2024 A* conf
SIGCOMM
Ammar Tahir, Prateesh Goyal, Ilias Marinos, Mike Evans, Radhika Mittal
2024 Misc conf
HotNets
Gangmuk Lim, Aditya Prerepa, Brighten Godfrey, Radhika Mittal
2024 A* conf
SIGCOMM
Sachin Ashok, Vipul Harsh, Brighten Godfrey, Radhika Mittal, Srinivasan Parthasarathy, Larisa Shwartz
2023 J jnl
CoRR
Ammar Tahir, Yueshen Li, Jianli Jin, Changxin Zhang, Daniel Moon, Aganze Mihigo, Muhammad Taimoor Tariq, Deepak Vasisht, Radhika Mittal
2023 Misc conf
NSDI
Yongzhou Chen, Ruihao Yao, Haitham Hassanieh, Radhika Mittal
2023 A* conf
SIGCOMM
Eashan Gupta, Prateesh Goyal, Ilias Marinos, Chenxingyu Zhao, Radhika Mittal, Ranveer Chandra
2023 J jnl
CoRR
Prateesh Goyal, Eashan Gupta, Ilias Marinos, Chenxingyu Zhao, Radhika Mittal, Ranveer Chandra
2023 Misc conf
NSDI
Ammar Tahir, Radhika Mittal
2023 Misc conf
SEC
Yongzhou Chen, Ammar Tahir, Francis Y. Yan, Radhika Mittal
2022 J jnl
CoRR
Yongzhou Chen, Ammar Tahir, Radhika Mittal
2022 A conf
IROS
Aditi Partap, Samuel Grayson, Muhammad Huzaifa, Sarita V. Adve, Brighten Godfrey, Saurabh Gupta, Kris Hauser, Radhika Mittal
2022 J jnl
CoRR
Aditi Partap, Samuel Grayson, Muhammad Huzaifa, Sarita V. Adve, Brighten Godfrey, Saurabh Gupta, Kris Hauser, Radhika Mittal
2021 Misc conf
HotNets
Sachin Ashok, Philip Brighten Godfrey, Radhika Mittal
2021 Misc conf
NSDI
Silvery Fu, Saurabh Gupta, Radhika Mittal, Sylvia Ratnasamy
2021 A conf
EuroSys
Frank Cangialosi, Akshay Narayan, Prateesh Goyal, Radhika Mittal, Mohammad Alizadeh, Hari Balakrishnan
2021 J jnl
CoRR
Arjun Balasingam, Karthik Gopalakrishnan, Radhika Mittal, Venkat Arun, Ahmed Saeed, Mohammad Alizadeh, Hamsa Balakrishnan, Hari Balakrishnan
2021 A conf
MobiSys
Arjun Balasingam, Karthik Gopalakrishnan, Radhika Mittal, Venkat Arun, Ahmed Saeed, Mohammad Alizadeh, Hamsa Balakrishnan, Hari Balakrishnan
2021 conf
DroNet@MobiSys
Arjun Balasingam, Karthik Gopalakrishnan, Radhika Mittal, Mohammad Alizadeh, Hamsa Balakrishnan, Hari Balakrishnan
2020 conf
HotEdge
Silvery Fu, Radhika Mittal, Lei Zhang, Sylvia Ratnasamy
2020 Misc conf
NSDI
Vibhaalakshmi Sivaraman, Shaileshh Bojja Venkatakrishnan, Kathleen Ruan, Parimarjan Negi, Lei Yang, Radhika Mittal, Giulia Fanti, Mohammad Alizadeh
2020 conf
GLOBECOM (Workshops)
Ashish Kashinath, Monowar Hasan, Sibin Mohan, Rakesh B. Bobba, Radhika Mittal
2020 J jnl
CoRR
Frank Cangialosi, Akshay Narayan, Prateesh Goyal, Radhika Mittal, Mohammad Alizadeh, Hari Balakrishnan
2019 conf
SIGMETRICS (Abstracts)
Doron Zarchy, Radhika Mittal, Michael Schapira, Scott Shenker
2019 J jnl
Proc. ACM Meas. Anal. Comput. Syst.
Doron Zarchy, Radhika Mittal, Michael Schapira, Scott Shenker
2019 J jnl
Comput. Commun. Rev.
Aisha Mushtaq, Radhika Mittal, James Murphy McCauley, Mohammad Alizadeh, Sylvia Ratnasamy, Scott Shenker
2018 conf
ANRW
Akshay Narayan, Frank Cangialosi, Deepti Raghavan, Prateesh Goyal, Srinivas Narayana, Radhika Mittal, Mohammad Alizadeh, Hari Balakrishnan
2018 A* conf
SIGCOMM
Akshay Narayan, Frank Cangialosi, Deepti Raghavan, Prateesh Goyal, Srinivas Narayana, Radhika Mittal, Mohammad Alizadeh, Hari Balakrishnan
2018 J jnl
CoRR
Radhika Mittal, Alexander Shpiner, Aurojit Panda, Eitan Zahavi, Arvind Krishnamurthy, Sylvia Ratnasamy, Scott Shenker
2018 A* conf
SIGCOMM
Radhika Mittal, Alexander Shpiner, Aurojit Panda, Eitan Zahavi, Arvind Krishnamurthy, Sylvia Ratnasamy, Scott Shenker
2018
Radhika Mittal
2017 Misc conf
HotNets
Doron Zarchy, Radhika Mittal, Michael Schapira, Scott Shenker
2016 Misc conf
NSDI
Radhika Mittal, Rachit Agarwal, Sylvia Ratnasamy, Scott Shenker
2015 A* conf
SIGCOMM
Radhika Mittal, Vinh The Lam, Nandita Dukkipati, Emily R. Blem, Hassan M. G. Wassel, Monia Ghobadi, Amin Vahdat, Yaogong Wang, David Wetherall, David Zats
2015 Misc conf
HotNets
Radhika Mittal, Rachit Agarwal, Sylvia Ratnasamy, Scott Shenker
2015 J jnl
CoRR
Radhika Mittal, Rachit Agarwal, Sylvia Ratnasamy, Scott Shenker
2014 Misc conf
NSDI
Radhika Mittal, Justine Sherry, Sylvia Ratnasamy, Scott Shenker
2013 Misc conf
HotNets
Radhika Mittal, Justine Sherry, Sylvia Ratnasamy, Scott Shenker
2013 A conf
CoNEXT
Ashish Vulimiri, Philip Brighten Godfrey, Radhika Mittal, Justine Sherry, Sylvia Ratnasamy, Scott Shenker
2013 J jnl
CoRR
Ashish Vulimiri, Brighten Godfrey, Radhika Mittal, Justine Sherry, Sylvia Ratnasamy, Scott Shenker
2012 A* conf
MobiCom
Radhika Mittal, Aman Kansal, Ranveer Chandra
2012 Misc conf
ICCVG
Radhika Mittal, Partha Bhowmick
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 == []