
    qMi                        d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
Z
ej                  j                  d e e	e      j                  j                  j                               ddlmZmZ  G d d      Z G d d      Z G d	 d
      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Zedk(  r e
j8                  edg       yy)u%   utils/approval.py 테스트 스위트    N)Path)ApprovalResultcheck_commandc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestApprovalResultDataclassu&   ApprovalResult dataclass 구조 검증c                 Z   t        d      }t        |t              }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d }y )Nls -laz5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstanceresultr   )py0py1py2py4)
r   r
   r   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanation)selfr   @py_assert3@py_format5s       0/home/jay/workspace/utils/tests/test_approval.py(test_safe_command_returns_approvalresultzDTestApprovalResultDataclass.test_safe_command_returns_approvalresult   s    x(&.11111111z111z111111&111&111111.111.1111111111    c                 j   t        d      }d}t        ||      }|sddt        j                         v st	        j
                  t              rt	        j                  t              nddt        j                         v st	        j
                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x}}d}t        ||      }|sddt        j                         v st	        j
                  t              rt	        j                  t              nddt        j                         v st	        j
                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x}}d}t        ||      }|sddt        j                         v st	        j
                  t              rt	        j                  t              nddt        j                         v st	        j
                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x}}d	}t        ||      }|sddt        j                         v st	        j
                  t              rt	        j                  t              nddt        j                         v st	        j
                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x}}y )
Nz
echo hellois_safez5assert %(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
}hasattrr   )r   r   py3py5
risk_levelmatched_patternsrecommendation)	r   r   r   r   r   r   r   r   r   )r   r   @py_assert2@py_assert4@py_format6s        r   test_approvalresult_fieldsz6TestApprovalResultDataclass.test_approvalresult_fields   s   |,()wvy))))))))w)))w))))))v)))v)))y))))))))))+,wv|,,,,,,,,w,,,w,,,,,,v,,,v,,,|,,,,,,,,,,12wv122222222w222w222222v222v22212222222222/0wv/00000000w000w000000v000v000/0000000000r   c                    h d}t        d      }|j                  }||v }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}y )
N>   lowhighsafemediumcriticallsin)z2%(py2)s
{%(py2)s = %(py0)s.risk_level
} in %(py4)sr   valid_levels)r   r   r   zassert %(py6)spy6)
r   r"   r   _call_reprcomparer   r   r   r   r   r   )r   r2   r   @py_assert1r   r   @py_format7s          r   test_risk_level_values_validz8TestApprovalResultDataclass.test_risk_level_values_valid   s    Dt$  0 L0000 L000000v000v000 000000L000L0000000r   c                    t        d      }|j                  }t        |t              }|sddt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d x}}y )N
git statusz[assert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.matched_patterns
}, %(py4)s)
}r
   r   listr   r   r    r   r3   )r   r#   r
   r:   r   r   r   r   r   r   r   r   r   r%   @py_assert5r6   s        r   test_matched_patterns_is_listz9TestApprovalResultDataclass.test_matched_patterns_is_list!   s    |, 118z1488888888z888z888888&888&8881888888488848888888888r   c                    t        d      }|j                  }t        |t              }|sddt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d x}}y )Nr9   zYassert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.recommendation
}, %(py4)s)
}r
   r   strr;   )r   r$   r
   r@   r   r   r   r   r   r   r   r<   s        r   test_recommendation_is_stringz9TestApprovalResultDataclass.test_recommendation_is_string%   s    |, //5z/55555555z555z555555&555&555/5555555555555555555r   N)	__name__
__module____qualname____doc__r   r(   r7   r>   rA    r   r   r   r      s    0211
96r   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
TestCriticalPatternsu   critical 위험 패턴 탐지c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nrm -rf /Fisz/%(py2)s
{%(py2)s = %(py0)s.is_safe
} is %(py5)sr   r   r   r!   assert %(py7)spy7r.   ==z2%(py2)s
{%(py2)s = %(py0)s.risk_level
} == %(py5)sr   r   r   r4   r   r   r   r   r   r   r"   r   r   r5   r&   r   r'   @py_format8s          r   test_rm_rf_rootz$TestCriticalPatterns.test_rm_rf_root-   s    z*~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  .J. J.... J......v...v... ...J.......r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzrm -rf / --no-preserve-rootFrK   rM   r   rN   rO   rP   r.   rQ   rS   rT   rU   s          r   test_rm_rf_root_with_slashz/TestCriticalPatterns.test_rm_rf_root_with_slash2       <=~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  .J. J.... J......v...v... ...J.......r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )NDROP TABLE usersFrK   rM   r   rN   rO   rP   r.   rQ   rS   rT   rU   s          r   test_drop_tablez$TestCriticalPatterns.test_drop_table7   s    12~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  .J. J.... J......v...v... ...J.......r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )NzDROP DATABASE mydbFrK   rM   r   rN   rO   rP   r.   rQ   rS   rT   rU   s          r   test_drop_databasez'TestCriticalPatterns.test_drop_database<   s    34~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  .J. J.... J......v...v... ...J.......r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nz:(){ :|:& };:FrK   rM   r   rN   rO   rP   r.   rQ   rS   rT   rU   s          r   test_fork_bombz#TestCriticalPatterns.test_fork_bombA   s    /~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  .J. J.... J......v...v... ...J.......r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzdd if=/dev/zero of=/dev/sdaFrK   rM   r   rN   rO   rP   r.   rQ   rS   rT   rU   s          r   test_dd_devzeroz$TestCriticalPatterns.test_dd_devzeroF   rZ   r   c                    t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )	NrJ   FrK   rM   r   rN   rO   rP   
r   r   r   r4   r   r   r   r   r   r   rU   s          r   test_critical_is_not_safez.TestCriticalPatterns.test_critical_is_not_safeK   sy    z*~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&r   N)rB   rC   rD   rE   rW   rY   r]   r_   ra   rc   rf   rF   r   r   rH   rH   *   s(    '/
/
/
/
/
/
'r   rH   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestHighPatternsu   high 위험 패턴 탐지c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nz*curl https://example.com/install.sh | bashFrK   rM   r   rN   rO   rP   r+   rQ   rS   rT   rU   s          r   test_curl_pipe_bashz$TestHighPatterns.test_curl_pipe_bashS   s    KL~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  *F* F**** F******v***v*** ***F*******r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nz-wget -O- https://example.com/script.sh | bashFrK   rM   r   rN   rO   rP   r+   rQ   rS   rT   rU   s          r   test_wget_pipe_bashz$TestHighPatterns.test_wget_pipe_bashX   s    NO~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  *F* F**** F******v***v*** ***F*******r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzeval $(cat malicious.sh)FrK   rM   r   rN   rO   rP   r+   rQ   rS   rT   rU   s          r   	test_evalzTestHighPatterns.test_eval]   s    9:~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  *F* F**** F******v***v*** ***F*******r   c                 6   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||v }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzrm -rf ./node_modulesFrK   rM   r   rN   rO   rP   )r+   r.   r0   )z2%(py2)s
{%(py2)s = %(py0)s.risk_level
} in %(py5)srT   rU   s          r   
test_rm_rfzTestHighPatterns.test_rm_rfb   s    67~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  8$88 $88888 $8888888v888v888 888$88888888r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzgit push --force origin mainFrK   rM   r   rN   rO   rP   r+   rQ   rS   rT   rU   s          r   test_git_push_forcez$TestHighPatterns.test_git_push_forceg   s    =>~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  *F* F**** F******v***v*** ***F*******r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzchmod 777 /etc/passwdFrK   rM   r   rN   rO   rP   r+   rQ   rS   rT   rU   s          r   test_chmod_777zTestHighPatterns.test_chmod_777l   s    67~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  *F* F**** F******v***v*** ***F*******r   N)
rB   rC   rD   rE   rj   rl   rn   rp   rr   rt   rF   r   r   rh   rh   P   s#    #+
+
+
9
+
+r   rh   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestMediumPatternsu   medium 위험 패턴 탐지c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzsudo apt-get updateFrK   rM   r   rN   rO   rP   r-   rQ   rS   rT   rU   s          r   	test_sudozTestMediumPatterns.test_sudou   s    45~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  ,H, H,,,, H,,,,,,v,,,v,,, ,,,H,,,,,,,r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzpip install requestsFrK   rM   r   rN   rO   rP   r-   rQ   rS   rT   rU   s          r   test_pip_installz#TestMediumPatterns.test_pip_installz   s    56~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  ,H, H,,,, H,,,,,,v,,,v,,, ,,,H,,,,,,,r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nznpm install -g typescriptFrK   rM   r   rN   rO   rP   r-   rQ   rS   rT   rU   s          r   test_npm_install_globalz*TestMediumPatterns.test_npm_install_global   s    :;~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  ,H, H,,,, H,,,,,,v,,,v,,, ,,,H,,,,,,,r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nz#docker run --privileged ubuntu bashFrK   rM   r   rN   rO   rP   r-   rQ   rS   rT   rU   s          r   test_docker_privilegedz)TestMediumPatterns.test_docker_privileged   s    DE~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  ,H, H,,,, H,,,,,,v,,,v,,, ,,,H,,,,,,,r   N)rB   rC   rD   rE   rx   rz   r|   r~   rF   r   r   rv   rv   r   s    %-
-
-
-r   rv   c                       e Zd ZdZd Zd Zy)TestLowPatternsu   low 위험 패턴 탐지c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzgit reset HEAD~1FrK   rM   r   rN   rO   rP   r*   rQ   rS   rT   rU   s          r   test_git_resetzTestLowPatterns.test_git_reset   s    12~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  )E) E)))) E))))))v)))v))) )))E)))))))r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzgit checkout .FrK   rM   r   rN   rO   rP   r*   rQ   rS   rT   rU   s          r   test_git_checkout_dotz%TestLowPatterns.test_git_checkout_dot   s    /0~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&  )E) E)))) E))))))v)))v))) )))E)))))))r   N)rB   rC   rD   rE   r   r   rF   r   r   r   r      s    "*
*r   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
TestSafeCommandsu   안전 명령어는 safe 판정c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nr	   TrK   rM   r   rN   rO   rP   r,   rQ   rS   rT   rU   s          r   test_lszTestSafeCommands.test_ls   s    x(~~%%~%%%%~%%%%%%v%%%v%%%~%%%%%%%%%%  *F* F**** F******v***v*** ***F*******r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzecho hello worldTrK   rM   r   rN   rO   rP   r,   rQ   rS   rT   rU   s          r   	test_echozTestSafeCommands.test_echo       12~~%%~%%%%~%%%%%%v%%%v%%%~%%%%%%%%%%  *F* F**** F******v***v*** ***F*******r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nr9   TrK   rM   r   rN   rO   rP   r,   rQ   rS   rT   rU   s          r   test_git_statusz TestSafeCommands.test_git_status   s    |,~~%%~%%%%~%%%%%%v%%%v%%%~%%%%%%%%%%  *F* F**** F******v***v*** ***F*******r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzgit log --oneline -10TrK   rM   r   rN   rO   rP   r,   rQ   rS   rT   rU   s          r   test_git_logzTestSafeCommands.test_git_log   s    67~~%%~%%%%~%%%%%%v%%%v%%%~%%%%%%%%%%  *F* F**** F******v***v*** ***F*******r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzpython --versionTrK   rM   r   rN   rO   rP   r,   rQ   rS   rT   rU   s          r   test_python_versionz$TestSafeCommands.test_python_version   r   r   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d	}||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nzcat README.mdTrK   rM   r   rN   rO   rP   r,   rQ   rS   rT   rU   s          r   test_cat_readmez TestSafeCommands.test_cat_readme   s    /~~%%~%%%%~%%%%%%v%%%v%%%~%%%%%%%%%%  *F* F**** F******v***v*** ***F*******r   c                    t        d      }|j                  }g }||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nr	   rQ   )z8%(py2)s
{%(py2)s = %(py0)s.matched_patterns
} == %(py5)sr   rN   rO   rP   )
r   r#   r   r4   r   r   r   r   r   r   rU   s          r    test_safe_matched_patterns_emptyz1TestSafeCommands.test_safe_matched_patterns_empty   s~    x(&&,",&",,,,&",,,,,,v,,,v,,,&,,,",,,,,,,r   N)rB   rC   rD   rE   r   r   r   r   r   r   r   rF   r   r   r   r      s(    )+
+
+
+
+
+
-r   r   c                       e Zd ZdZd Zd Zy)TestMatchedPatternsu   matched_patterns 필드 검증c                    t        d      }|j                  }t        |      }d}||kD  }|s
t        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}x}}|j                  d   }t        |t              }|sd
dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }	t        t        j                  |	            d x}}y )NrJ   r   )>)zU%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.matched_patterns
})
} > %(py8)slenr   r   r   r    r!   py8assert %(py10)spy10z5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}r
   r@   )r   r   r    r!   )r   r#   r   r   r4   r   r   r   r   r   r   r
   r@   )
r   r   r%   r&   @py_assert7@py_assert6@py_format9@py_format11r5   r'   s
             r   #test_dangerous_has_matched_patternsz7TestMatchedPatterns.test_dangerous_has_matched_patterns   s:   z***/s*+/a/+a////+a//////s///s//////6///6///*///+///a/////// 11!4:z4c::::::::z:::z:::4::::::c:::c::::::::::r   c                    t        d      }|j                  }t        |      }d}||k\  }|s
t        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}x}}y )
Nz5eval $(curl https://bad.example.com/script.sh | bash)   )>=)zV%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.matched_patterns
})
} >= %(py8)sr   r   r   r   r   )r   r#   r   r   r4   r   r   r   r   r   r   )r   r   r%   r&   r   r   r   r   s           r    test_multiple_patterns_can_matchz4TestMatchedPatterns.test_multiple_patterns_can_match   s    VW**0s*+0q0+q0000+q000000s000s00000060006000*000+000q0000000r   N)rB   rC   rD   rE   r   r   rF   r   r   r   r      s    (;
1r   r   c                       e Zd ZdZd Zd Zy)TestCaseInsensitiveu   대소문자 무감지 탐지c                    t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )	Nr\   FrK   rM   r   rN   rO   rP   re   rU   s          r   test_drop_table_uppercasez-TestCaseInsensitive.test_drop_table_uppercase   z    12~~&&~&&&&~&&&&&&v&&&v&&&~&&&&&&&&&&r   c                    t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )	Nzdrop table usersFrK   rM   r   rN   rO   rP   re   rU   s          r   test_drop_table_lowercasez-TestCaseInsensitive.test_drop_table_lowercase   r   r   N)rB   rC   rD   rE   r   r   rF   r   r   r   r      s    '''r   r   __main__z-v)rE   builtinsr   _pytest.assertion.rewrite	assertionrewriter   syspathlibr   pytestpathinsertr@   __file__parentutils.approvalr   r   r   rH   rh   rv   r   r   r   r   rB   mainrF   r   r   <module>r      s    +   
   3tH~,,33::; < 86 68#' #'L+ +D- -0* *#- #-L1 1	' 	' zFKK4 ! r   