
    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 ddlmZ ddlmZ  G d de      Z G d	 d
ej&                        Z G d dej&                        Z G d dej&                        Zedk(  r ej0                          yy)u8   커버리지 보완을 위한 엣지 케이스 테스트    N)Path)ReviewerInterface)CodeReviewer)RedTeamOrchestratorc                       e Zd ZdZd Zy)MockRevieweru   테스트용 목 리뷰어c                 t    dddg}| j                  |      || j                  | j                  |            dS )Nlowz
test issue)severitydescription)
risk_levelissuesrecommendation)_assess_risk_get_recommendation)selfdocr   s      </home/jay/workspace/memory/red_team/tests/test_edge_cases.pyreviewzMockReviewer.review   sC    $\BC++F3"66t7H7H7PQ
 	
    N)__name__
__module____qualname____doc__r    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
d	 Zy
)TestCodeReviewerEdgeCasesu(   Code Reviewer 엣지 케이스 테스트c                 "    t               | _        y N)r   reviewerr   s    r   setUpzTestCodeReviewerEdgeCases.setUp        $r   c                     t        d      D cg c]  }ddi }}| j                  j                  |      }| j                  |d       yc c}w )u/   6개 이상의 medium 이슈 → high 리스크   r   mediumhighNranger    r   assertEqualr   _r   results       r   #test_assess_risk_many_medium_issuesz=TestCodeReviewerEdgeCases.test_assess_risk_many_medium_issues#   sG    27(;Q:x(;;++F3( <   A	c                     t        d      D cg c]  }ddi }}| j                  j                  |      }| j                  |d       yc c}w )u2   11개 이상의 high 이슈 → critical 리스크   r   r'   criticalNr(   r+   s       r   !test_assess_risk_many_high_issuesz;TestCodeReviewerEdgeCases.test_assess_risk_many_high_issues)   sG    05b	:1:v&::++F3, ;r/   c                 >   t        j                         5 }t        |      dz  }|j                  d       t        |      dz  }|j                  d       | j                  j                  t        |            }| j                  d|       ddd       y# 1 sw Y   yxY w)u*   의존성 검사 - requirements.txt 존재ztest.py# testzrequirements.txtzrequests==2.28.0
vulnerable_depsN)tempfileTemporaryDirectoryr   
write_textr    _check_dependenciesstrassertIn)r   tmpdirpy_filereq_filer-   s        r   )test_check_dependencies_with_requirementszCTestCodeReviewerEdgeCases.test_check_dependencies_with_requirements/   s    ((* 
	5f6lY.Gx( F|&88H 45]]66s7|DFMM+V4
	5 
	5 
	5s   A5BBc                 X   t        j                  ddd      5 }|j                  d       |j                  }ddd       	 | j                  j                        }| j                  |d   d       t        j                  |       y# 1 sw Y   PxY w# t        j                         w xY w)	u*   의존성 검사 - requirements.txt 없음wz.pyFmodesuffixdeleter5   Nr6   r   	r7   NamedTemporaryFilewritenamer    r:   r*   osunlinkr   f	temp_pathr-   s       r   ,test_check_dependencies_without_requirementszFTestCodeReviewerEdgeCases.test_check_dependencies_without_requirements=   s    ((c%N 	RSGGHI		!]]66yAFV$56:IIi 	 	 IIi    B 0B BB)c                 X   t        j                  ddd      5 }|j                  d       |j                  }ddd       	 | j                  j                        }| j                  |d   d       t        j                  |       y# 1 sw Y   PxY w# t        j                         w xY w)	u'   의존성 검사 - Python 파일 아님rB   z.jsFrC   z// testNr6   r   rG   rM   s       r   'test_check_dependencies_non_python_filezATestCodeReviewerEdgeCases.test_check_dependencies_non_python_fileI   s    ((c%N 	RSGGII		!]]66yAFV$56:IIi 	 	 IIi rQ   c                 \    | j                   j                  d      }| j                  |       y)u1   파일 로드 - 예외 발생 (권한 없음 등)z/nonexistent/path/file.pyN)r    
_load_fileassertIsNoner   r-   s     r   test_load_file_with_exceptionz7TestCodeReviewerEdgeCases.test_load_file_with_exceptionU   s'     ))*EF&!r   c                 t    d}| j                   j                  |      }| j                  t        |      d       y)u    취약점 스캔 - 모든 타입zb
password = "secret123"
api_key = "abcd1234"
eval(user_input)
os.system(user_input)
../etc/passwd
r   N)r    _scan_vulnerabilitiesassertGreaterlen)r   contentvulnerabilitiess      r   #test_scan_vulnerabilities_all_typesz=TestCodeReviewerEdgeCases.test_scan_vulnerabilities_all_types[   s4     --==gF3/3r   N)r   r   r   r   r"   r.   r3   r@   rP   rS   rX   r_   r   r   r   r   r      s-    2')-5
!
!"4r   r   c                   "    e Zd ZdZd Zd Zd Zy) TestRedTeamOrchestratorEdgeCasesu0   Red Team Orchestrator 엣지 케이스 테스트c                 Z    t               | _        t        d| j                  i      | _        y )Nmock)r   mock_reviewerr   orchestratorr!   s    r   r"   z&TestRedTeamOrchestratorEdgeCases.setUpm   s$    )^/9K9K0LMr   c                     | j                   j                  dd      }| j                  d|       | j                  |d   d       y)u"   알 수 없는 타입으로 리뷰unknown_typetesterrorr   unknownN)re   r   r<   r*   rW   s     r   test_review_with_unknown_typez>TestRedTeamOrchestratorEdgeCases.test_review_with_unknown_typeq   s=    "")).&Agv&-y9r   c                 \    | j                   j                         }| j                  d|       y)u   사용 가능한 타입 목록rc   N)re   get_available_typesr<   )r   typess     r   test_get_available_typesz9TestRedTeamOrchestratorEdgeCases.test_get_available_typesw   s$    !!557fe$r   N)r   r   r   r   r"   rk   ro   r   r   r   ra   ra   j   s    :N:%r   ra   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestBaseReviewerEdgeCasesu(   Base Reviewer 엣지 케이스 테스트c                 "    t               | _        y r   )r   r    r!   s    r   r"   zTestBaseReviewerEdgeCases.setUp   r#   r   c                 ^    | j                   j                  d      }| j                  d|       y)u,   알 수 없는 리스크 레벨 권장사항unknown_levelu   알 수 없음N)r    r   r<   rW   s     r   test_get_recommendation_unknownz9TestBaseReviewerEdgeCases.test_get_recommendation_unknown   s%    22?C&/r   c                 h    ddig}| j                   j                  |      }| j                  |d       y)u"   알 수 없는 심각도의 이슈r   unknown_severityr
   Nr    r   r*   r   r   r-   s      r   &test_assess_risk_with_unknown_severityz@TestBaseReviewerEdgeCases.test_assess_risk_with_unknown_severity   s4    123++F3'r   c                 z    ddiddiddiddig}| j                   j                  |      }| j                  |d       y)u1   혼합 심각도 이슈 - 최고 심각도 선택r   r
   r&   r'   r2   Nrx   ry   s      r   !test_assess_risk_mixed_severitiesz;TestBaseReviewerEdgeCases.test_assess_risk_mixed_severities   sJ    u%
H'=
F?SV`blUmn++F3,r   N)r   r   r   r   r"   ru   rz   r|   r   r   r   rq   rq   }   s    2'0
(-r   rq   __main__)r   rK   sysr7   unittestpathlibr   pathinsertr;   __file__parentbase_reviewerr   code_reviewerr   red_team_orchestratorr   r   TestCaser   ra   rq   r   mainr   r   r   <module>r      s    > 	 
    3tH~,,334 5 + & 5	
$ 	
J4 1 1 J4Z%x'8'8 %&- 1 1 -2 zHMMO r   