
    im              
          d Z ddlZddlmc mZ ddlZddlZddl	Z	e	j                  j                  dej                  j                  ej                  j                  e      d             e	j                  j                  dej                  j                  ej                  j                  e      dddd             ddlZd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)u&   P2-4: TRUST 5 태그 단위 테스트.    Nz..teamsdev1qcc            	      
   ddl m}  h d}| j                  } |       }t        |      }||k(  }|sKt	        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t        j                         v st	        j                  |      rt	        j                  |      ndd	z  }d
d|iz  }t        t	        j                  |            dx}x}x}}y)u3   TRUST_MAP이 5차원 모두 포함하는지 확인.r   	TRUST_MAP>   TestedSecuredUnifiedReadable	Trackable==)za%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.keys
}()
})
} == %(py9)ssetr   expected)py0py1py3py5py7py9zassert %(py11)spy11N)teams.dev1.qc.qc_verifyr   keysr   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)r   r   @py_assert2@py_assert4@py_assert6@py_assert8@py_format10@py_format12s           //home/jay/workspace/tests/test_trust_tagging.py&test_trust_map_contains_all_dimensionsr*      s    1HH~~,~,3 , H,,,, H,,,,,,3,,,3,,,,,,y,,,y,,,~,,,,,, ,,,,,,H,,,H,,,,,,,,    c                      ddl m}  d}| d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}d}| d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}d}| d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}d}| d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}d}| d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}d}| d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}d}| d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}d}| d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)u;   각 verifier가 올바른 차원에 매핑되는지 확인.r   r   test_runnerr	   inz%(py1)s in %(py4)sr   py4assert %(py6)spy6N	tdd_checkstyle_checkr   pyright_checkscope_checkr   schema_contractr
   data_integrityr   
file_check)r   r   r   r   r    r!   r"   )r   @py_assert0@py_assert3r#   @py_format5@py_format7s         r)   test_trust_map_verifier_mappingr@      s   1/Ih//=/////=////=///////////-)H--;-----;----;-----------1Ij11=11111=1111=111111111113i
33?33333?3333?333333333330Ii00=00000=0000=000000000004	) 44 44444 4444444 444444445y555555555555555555555519[11<11111<1111<11111111111r+   c                     ddl m} m} |j                         D ]  \  }}d}||v}|st	        j
                  d|fd||f      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      nddz  }t	        j                  d| d	      d
z   d|iz  }t        t	        j                  |            dx}} d}|| v }|st	        j
                  d|fd|| f      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)u8   api_health가 _independent에만 포함되는지 확인.r   TRUST_INDEPENDENTr   
api_healthnot inz%(py1)s not in %(py3)s	verifiersr   r   u   api_health가 u   에 포함됨
>assert %(py5)sr   Nr.   z%(py1)s in %(py3)srC   assert %(py5)s)r   rC   r   itemsr   r   r    r   r   r   _format_assertmsgr!   r"   )rC   r   	dimensionrH   r<   r#   @py_format4@py_format6s           r)   test_api_health_in_independentrR   #   s    D ) 1 X	9W|9,WWW|9WWW|WWWWWW9WWW9WWWWyk.WWWWWWWX,<,,,,,<,,,,<,,,,,,,,,,,,,,,,,,r+   c            
         ddl m}  ddiddiddiddiddiddiddiddiddid	} | |      }|d   d   }d}||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   d   }d}||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   d   }d}||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   d   }d}||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   d   }d}||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}d}||v }|st        j                  d|fd||f      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)u<   모든 verifier가 PASS일 때 모든 차원이 passed=True.r   _build_trust_summarystatusPASS	r-   r5   r6   r7   r8   r9   r:   r;   rD   r	   passedTisz%(py1)s is %(py4)sr1   r3   r4   Nr   r   r
   r   _independentr.   rK   summaryrI   rL   r   )
r   rU   r   r   r    r!   r"   r   r   r   )
rU   checksr^   r<   r=   r#   r>   r?   rP   rQ   s
             r)   !test_build_trust_summary_all_passr`   ,   sn   < !&)' &)"F+ &)$f-#V,((
F #6*G8X&.$.&$....&$...&...$.......:x(0D0(D0000(D000(000D00000009h'/4/'4////'4///'///4///////9h'/4/'4////'4///'///4///////;)1T1)T1111)T111)111T1111111$>W$$$$>W$$$>$$$$$$W$$$W$$$$$$$r+   c            	      ^   ddl m}  ddiddiddiddiddiddiddiddid} | |      }|d   d   }d	}||u }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   d   }d}||u }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)u?   하나의 verifier가 FAIL이면 해당 차원만 passed=False.r   rT   rV   FAILrW   r-   r5   r6   r7   r8   r9   r:   r;   r	   rY   FrZ   r\   r1   r3   r4   Nr   Tr   rU   r   r   r    r!   r"   rU   r_   r^   r<   r=   r#   r>   r?   s           r)   !test_build_trust_summary_one_failrf   D   s   < !&)' &)"F+ &)$f-#V,(	F #6*G8X&/%/&%////&%///&///%///////:x(0D0(D0000(D000(000D0000000r+   c            	      ^   ddl m}  ddiddiddiddiddiddiddiddid} | |      }|d   d   }d	}||u }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   d   }d	}||u }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)u@   SKIP 상태의 verifier는 차원 실패로 간주하지 않음.r   rT   rV   SKIPrW   rc   r	   rY   TrZ   r\   r1   r3   r4   Nr
   rd   re   s           r)   &test_build_trust_summary_skip_not_failri   W   s   < !&)' &)"F+ &)$f-#V,(	F #6*G8X&.$.&$....&$...&...$.......9h'/4/'4////'4///'///4///////r+   c            	      r	   ddl m}  ddiddiddiddiddiddiddiddid} | |      }t        |      }d}||k(  }|st        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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}dD ]  }d}	||   }
|	|
v }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
d}	||   }
|	|
v }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
||   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}}||   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}} d}	|d   }
|	|
v }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
y)u.   trust_summary JSON 스키마 유효성 검사.r   rT   rV   rW   rc      r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr^   )r   r   r   r4   zassert %(py8)spy8N)r	   r   r   r
   r   rH   r.   r0   r1   r3   r4   rY   z5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}
isinstancelist)r   py2r   r   boolnoter]   )r   rU   rl   r   r   r   r   r   r    r!   r"   rn   ro   rq   )rU   r_   r^   r#   @py_assert5r$   r?   @py_format9dimr<   r=   r>   @py_assert1rQ   s                 r)   test_trust_summary_schemarw   j   s   < !&)' &)"F+ &)$f-#V,(	F #6*Gw<1<1<133ww<1H 8*gcl*{l****{l***{***l*******'73<'x<''''x<'''x'''<'''''''!#,{3:z3T::::::::z:::z:::3::::::T:::T::::::::::!#,x07z0$77777777z777z7770777777$777$7777777777	8
 ,W^,,6,,,,,6,,,,6,,,,,,,,,,,r+   c                 X   ddl m} | dz  }|j                          |dz  }|j                  t	        j
                  dddii             dd	d
ii}t        j                  j                  dd      }t        |       t        j                  d<   	  |d|      }d}||v}|st        j                  d|fd||f      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}}|r|t        j                  d<   yt        j                  j%                  dd       y# |r|t        j                  d<   w t        j                  j%                  dd       w xY w)u6   feature_flag OFF 시 기존 JSON 변경 없음 확인.r   build_resultz.claudezfeature_flags.jsonflagstrust5_tagging_enabledFr;   rV   rW   WORKSPACE_ROOT z	test-tasktrust_summaryrE   rG   resultrI   rL   r   N)r   rz   mkdir
write_textjsondumpsosenvirongetstrr   r   r    r   r   r   r!   r"   pop)tmp_pathrz   ff_dirff_filer_   orig_wsr   r<   r#   rP   rQ   s              r)   &test_feature_flag_off_no_trust_summaryr      s6   4 	!F
LLN++Gtzz7-Eu,M"NOPXv./Fjjnn-r2G#&x=BJJ 3k62,f,,,,f,,,,,,,,,f,,,f,,,,,,,+2BJJ'(JJNN+T2 +2BJJ'(JJNN+T2s   B.E1 18F)c                  |   ddl m}  ddiddid} | d|      }d}||v }|st        j                  d|fd	||f      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}}d}|d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}y)u0   feature_flag ON 시 trust_summary 포함 확인.r   ry   rV   rW   )r;   r-   ztest-task-onr   r.   rK   r   rI   rL   r   Nr	   r0   r1   r3   r4   )
r   rz   r   r   r    r   r   r   r!   r"   )
rz   r_   r   r<   r#   rP   rQ   r=   r>   r?   s
             r)   +test_feature_flag_on_includes_trust_summaryr      s    4 &v.&?QRF.&1F$?f$$$$?f$$$?$$$$$$f$$$f$$$$$$$.vo..8.....8....8...........r+   c                  n   ddl m} m} g }|j                         D ]  }|j	                  |        |j	                  |        g d}|D cg c]	  }||vs| }}t        |      t        |      z  }d}||k  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }
t        j                  d	|d
      dz   d|
iz  }t        t        j                  |            dx}	}yc c}w )u4   원본 9종 verifier 매핑 불일치율 <3% 검증.r   rB   rX   gQ?)<)z%(py0)s < %(py3)soriginal_mismatch)r   r   u!   원본 9종 매핑 불일치율: z.1%rJ   r   N)r   rC   r   valuesextendrl   r   r   r   r   r   r    rN   r!   r"   )rC   r   
all_mappedrH   
original_9cunmapped_originalr   r#   rv   rP   rQ   s               r)    test_mapping_coverage_original_9r      s    DJ%%' %	)$%'(
J %/Fq!:2EFF-.Z@#`t#```t````````````t```'HIZ[^H_%``````` Gs   
	D2D2)__doc__builtinsr   _pytest.assertion.rewrite	assertionrewriter   r   r   syspathinsertjoindirname__file__pytestr*   r@   rR   r`   rf   ri   rw   r   r   r    r+   r)   <module>r      s    ,    	 
 277<< 94@ A 277<< 94&RVW X -2-%01&0&-03./ar+   