← Files Unix CopilotARCHIVED FILE

tests/test_command_review.py

2.81 KB · Nov 7, 2026 · 12:49 UTC

↓ Download file

See the change to this file →

import importlib.util
from pathlib import Path
import unittest

ROOT=Path(__file__).resolve().parents[1]
spec=importlib.util.spec_from_file_location("command_review",ROOT/"scripts"/"command_review.py")
cr=importlib.util.module_from_spec(spec)
spec.loader.exec_module(cr)

class CommandReviewTests(unittest.TestCase):
    def check(self,command,expected_id,level=None):
        r=cr.analyze(command)
        self.assertIn(expected_id,{x['id'] for x in r['findings']})
        if level:self.assertEqual(r['risk'],level)
        self.assertIs(r['executed'],False)
    def test_read_only(self):
        for command in ['pwd','printf "%s\\n" "$HOME"',"find . -type f -print", "grep -n error logfile"]:
            r=cr.analyze(command)
            self.assertEqual(r['risk'],'unknown');self.assertEqual(len(r['findings']),0)
    def test_recursive_rm(self):self.check('rm -rf "$TARGET"','recursive-delete','high')
    def test_recursive_rm_short_flags(self):self.check('rm -fr ./old','recursive-delete','high')
    def test_recursive_rm_other_flags(self):self.check('rm -vRf /tmp/x','recursive-delete','high')
    def test_variable_rm(self):self.check('rm "$TARGET"','unverified-variable-delete','high')
    def test_curl_pipe_bash(self):self.check('curl https://example.test/install.sh | bash','fetch-execute','high')
    def test_wget_pipe_sh(self):self.check('wget -O - https://example.test/x | sh','fetch-execute','high')
    def test_sudo(self):self.check('sudo systemctl restart sshd','privileged-command','high')
    def test_chmod_777(self):self.check('chmod -R 777 /srv/site','broad-permissions','high')
    def test_chown_recursive(self):self.check('chown -R app:app /srv/site','recursive-owner-change','high')
    def test_disk_dd(self):self.check('dd if=foo.img of=/dev/sdb bs=1M','disk-write','high')
    def test_mkfs(self):self.check('mkfs.ext4 /dev/sdb1','format-device','high')
    def test_kill(self):self.check('kill -9 9999','force-kill','high')
    def test_rsync_delete(self):self.check('rsync -a --delete a/ b/','rsync-delete','high')
    def test_eval(self):self.check('eval "$cmd"','shell-eval','medium')
    def test_cut_csv(self):self.check("cut -d, -f1,3 data.csv",'csv-cut','medium')
    def test_no_execution(self):self.assertFalse(cr.analyze('cat file.txt')['executed'])
    def test_line_number(self):
        r=cr.analyze('pwd\nrm -rf x')
        self.assertEqual(next(x['line'] for x in r['findings'] if x['id']=='recursive-delete'),2)
    def test_case_types(self):
        with self.assertRaises(TypeError):cr.analyze(None)
    def test_static_warning(self):self.assertIn('not full parsing',cr.analyze('pwd')['warning'])
    def test_high_dominates_medium(self):self.assertEqual(cr.analyze('eval "$x"; sudo true')['risk'],'high')
    def test_empty(self):self.assertEqual(cr.analyze('')['risk'],'unknown')

if __name__=='__main__':unittest.main()

SHA-256: 3b7f31053221c7209d537fdd8efbbbffd366d8889bc893b38d2bf49f67202782