
    i                        d Z ddlZddlZddlZddlZddlmZ ej                  j                  d e	 ee
      j                  j                               ddlmZ  G d dej                        Zedk(  r ej"                          yy)u!   code_reviewer.py 단위 테스트    N)Path)CodeReviewerc                   ^    e 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)TestCodeRevieweru   Code Reviewer 테스트c                 "    t               | _        y)u   테스트 설정N)r   reviewerselfs    ?/home/jay/workspace/memory/red_team/tests/test_code_reviewer.pysetUpzTestCodeReviewer.setUp   s    $    c                 :    | j                  | j                         y)u)   리뷰어가 초기화되었는지 확인N)assertIsNotNoner   r	   s    r   test_reviewer_initializedz*TestCodeReviewer.test_reviewer_initialized   s    T]]+r   c                    t        j                  ddd      5 }|j                  d       |j                  }ddd       	 | j                  j                        }| j                  d|       | j                  d|       | j                  d	|       | j                  |d   g d
       t        j                  |       y# 1 sw Y   xY w# t        j                         w xY w)u   정상 파일 검토w.pyFmodesuffixdeletez# Normal code
pass
N
risk_levelvulnerabilitiespassed)lowmediumhighcritical)	tempfileNamedTemporaryFilewritenamer   reviewassertInosunlinkr
   f	temp_pathresults       r   test_review_normal_filez(TestCodeReviewer.test_review_normal_file   s    ((c%N 	RSGG+,I		!]])))4FMM,/MM+V4MM(F+MM&.0UVIIi 	 	 IIi s   B> A(C
 >C
C!c                    t        j                  ddd      5 }|j                  d       |j                  }ddd       	 | j                  j                        }| j                  d|       | j                  |d   d       | j                  |d	          t        j                  |       y# 1 sw Y   vxY w# t        j                         w xY w)
u0   취약점 파일 검토 - 하드코딩 시크릿r   r   Fr   zpassword = '123456'
Nvulnerability_countr   r   )r   r    r!   r"   r   r#   r$   assertGreaterassertFalser%   r&   r'   s       r   ,test_review_vulnerable_file_hardcoded_secretz=TestCodeReviewer.test_review_vulnerable_file_hardcoded_secret*   s    ((c%N 	RSGG+,I		!]])))4FMM/8v&;<a@VH-.IIi 	 	 IIi s   B, AB8 ,B58Cc                    t        j                  ddd      5 }|j                  d       |j                  }ddd       	 | j                  j                        }| j                  d|       |j                  dg       D cg c]  }|d	   	 }}| j                  t        d
 |D              xs |d   dkD         t        j                  |       y# 1 sw Y   xY wc c}w # t        j                         w xY w)u'   취약점 파일 검토 - SQL 인젝션r   r   Fr   z2query = 'SELECT * FROM users WHERE id=' + user_id
Nr-   r   typec              3   $   K   | ]  }d |v  
 yw)SQLN ).0ts     r   	<genexpr>zMTestCodeReviewer.test_review_vulnerable_file_sql_injection.<locals>.<genexpr>E   s     ?q
?s   r   )r   r    r!   r"   r   r#   r$   get
assertTrueanyr%   r&   )r
   r(   r)   r*   v
vuln_typess         r   )test_review_vulnerable_file_sql_injectionz:TestCodeReviewer.test_review_vulnerable_file_sql_injection9   s    ((c%N 	RSGGIJI		!]])))4FMM/8-3ZZ8I2-NO!F)OJOOOC?J??d6J_C`cdCdeIIi 	 	 P IIi s*   C AC! C-C! CC! !C8c                     | j                   j                  d      }| j                  d|       | j                  |d   ddg       y)u!   존재하지 않는 파일 검토z/nonexistent/file.pyerrorr   unknownr   N)r   r#   r$   r
   r*   s     r   test_review_nonexistent_filez-TestCodeReviewer.test_review_nonexistent_fileI   s?    %%&<= 	gv&f\*Y
,CDr   c                 \    | j                   j                  d      }| j                  |       y)u!   도구 가용성 체크 - python3python3N)r   _check_tool_availabler:   rB   s     r   !test_check_tool_available_python3z2TestCodeReviewer.test_check_tool_available_python3Q   s"    44Y?r   c                 \    | j                   j                  d      }| j                  |       y)u4   도구 가용성 체크 - 존재하지 않는 도구nonexistent_tool_12345N)r   rF   r/   rB   s     r   %test_check_tool_available_nonexistentz6TestCodeReviewer.test_check_tool_available_nonexistentV   s%    445MN r   c                 ^    | j                   j                  d      }| j                  |d       y)u    심각도 확인 - SQL InjectionzSQL Injectionr   Nr   _get_severityassertEqualr
   severitys     r   test_get_severity_sql_injectionz0TestCodeReviewer.test_get_severity_sql_injection[   s&    ==..?6*r   c                 ^    | j                   j                  d      }| j                  |d       y)u$   심각도 확인 - Command InjectionzCommand Injectionr   NrL   rO   s     r   #test_get_severity_command_injectionz4TestCodeReviewer.test_get_severity_command_injection`   s'    ==../BC:.r   c                 ^    | j                   j                  d      }| j                  |d       y)u(   심각도 확인 - 알 수 없는 타입zUnknown Typer   NrL   rO   s     r   test_get_severity_unknownz*TestCodeReviewer.test_get_severity_unknowne   s&    ==..~>5)r   c                 :   dj                  t        d      D cg c]  }d| 	 c}      }| j                  j                  |      }|D cg c]  }|d   dk(  s| }}| j	                  t        |      d       | j	                  |d   d   d	       y
c c}w c c}w )u#   아키텍처 리스크 - 큰 파일
   z# Line r2   z
Large File   r   rP   r   N)joinranger   _assess_architecture_risksrN   len)r
   ilarge_contentissueslarge_file_issuess        r   )test_assess_architecture_risks_large_filez:TestCodeReviewer.test_assess_architecture_risks_large_filej   s     		%*"EQWQC="EF99-H(.L1!F)|2KQLL./3*1-j98D #F Ms   BBBc                     d}| j                   j                  |      }|D cg c]  }|d   dk(  s| }}| j                  t        |      d       yc c}w )u)   아키텍처 리스크 - 여러 클래스z`
class Class1:
    pass

class Class2:
    pass

class Class3:
    pass

class Class4:
    pass
r2   zMultiple ClassesrY   N)r   r\   rN   r]   )r
   contentr`   r^   multi_class_issuess        r   /test_assess_architecture_risks_multiple_classesz@TestCodeReviewer.test_assess_architecture_risks_multiple_classest   s[     99'B)/SA1V9@R3RaSS/0!4 Ts
   AAN)__name__
__module____qualname____doc__r   r   r+   r0   r>   rC   rG   rJ   rQ   rS   rU   rb   rf   r5   r   r   r   r      sH    !',! !! E 
!
+
/
*
E5r   r   __main__)rj   r%   sysr   unittestpathlibr   pathinsertstr__file__parentcode_reviewerr   TestCaser   rg   mainr5   r   r   <module>rw      sp    ' 	 
    3tH~,,334 5 &w5x(( w5t zHMMO r   