N. K. Bose

97 papers C 1Misc 3Journal 87Unranked 5
YearRankTypeTitle / Venue / Authors
2010 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2009 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2009 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2009 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2009 Misc conf
CISS
Brett E. Bissinger, R. Lee Culver, N. K. Bose
2009 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2009 J jnl
IEEE Trans. Autom. Control.
N. K. Bose
2008 J jnl
Multidimens. Syst. Signal Process.
Li Xu, Huijin Fan, Zhiping Lin, N. K. Bose
2008 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2008 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2008 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2008 conf
ACSCC
Colin W. Jemmott, R. Lee Culver, N. K. Bose
2007 J jnl
Multidimens. Syst. Signal Process.
Andy C. Yau, N. K. Bose, Michael K. Ng
2007 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2007 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2007 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2006 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2006 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2006 J jnl
Multidimens. Syst. Signal Process.
Mahesh B. Chappalli, N. K. Bose
2006 J jnl
Pattern Recognit. Lett.
Chih-Chung Yang, N. K. Bose
2006 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2005 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2005 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2005 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2005 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2005 J jnl
IEEE Trans. Neural Networks
Chih-Chung Yang, N. K. Bose
2004 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2004 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2004 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2004 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2003 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2003 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2003 conf
AIPR
N. K. Bose
2002 J jnl
Neurocomputing
Zong-Ming Li, Vladimir M. Zatsiorsky, Mark L. Latash, N. K. Bose
2002 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2002 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2002 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2002 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2001 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2001 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2001 J jnl
Multidimens. Syst. Signal Process.
Chalie Charoenlarpnopparut, N. K. Bose
2001 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2000 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2000 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
2000 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1999 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1999 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1999 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1998 J jnl
IEEE Trans. Circuits Syst. Video Technol.
K. J. Boo, N. K. Bose
1998 J jnl
IEEE Trans. Inf. Theory
N. K. Bose, K. J. Boo
1998 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1998 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1998 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1998 J jnl
Int. J. Imaging Syst. Technol.
N. K. Bose, K. J. Boo
1998 J jnl
IEEE Trans. Neural Networks
W. C. Chu, N. K. Bose
1997 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1996 J jnl
Autom.
N. K. Bose
1996 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1996 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1996 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1996 conf
ICIP (3)
K. J. Boo, N. K. Bose
1995 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1995 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1995 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1995 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1995 J jnl
IEEE Trans. Signal Process.
Jongtae Chun, N. K. Bose
1994 J jnl
Autom.
B. Zhou, N. K. Bose
1994 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1994 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1994 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1994 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1994 conf
ICIP (3)
N. K. Bose, H. C. Kim, B. Zhou
1993 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1993 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1993 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1993 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1993 C conf
ISCAS
N. K. Bose
1993 J jnl
IEEE Trans. Neural Networks
N. K. Bose, Amulya K. Garga
1993 conf
ICASSP (5)
N. K. Bose, H. C. Kim, Hector M. Valenzuela
1993 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose, H. C. Kim, Hector M. Valenzuela
1992 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1992 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1992 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1992 ch.
Concise Encyclopedia of Modelling & Simulation
N. K. Bose
1991 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1991 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1991 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1991 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1991 Misc conf
ICASSP
N. K. Bose
1990 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1990 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1990 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose
1990 J jnl
Multidimens. Syst. Signal Process.
N. K. Bose, Jan Biemond, Marwan A. Simaan
1988 Misc conf
ICASSP
Jeffrey D. Taft, N. K. Bose
1987 J jnl
IEEE Trans. Acoust. Speech Signal Process.
H. M. Kim, N. K. Bose
1985 J jnl
Proc. IEEE
N. K. Bose, Krishnaiyan Thulasiraman, M. N. S. Swamy, R. Jayakumar
1985 J jnl
Proc. IEEE
Soo-Chang Pei, N. K. Bose
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 == []