
    'is                     $   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
mZ ddlZej                  j                  d e e	e      j"                  j"                               ddlmZmZmZ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#y)u   
TDD RED 단계: test_browser_stealth.py
browser.py의 스텔스 모드 관련 상수 및 함수에 대한 테스트 스위트
    N)Path)Callable)BLOCKED_RESOURCE_TYPESHARMFUL_ARGSSTEALTH_ARGScreate_resource_blockergenerate_stealth_headersget_google_refererc                  <   t        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                  t              rt        j                  t              ndt        j                  |       t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x} x}}y	)
u,   STEALTH_ARGS가 정확히 54개인지 확인7   ==z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr   py0py1py3py6assert %(py8)spy8N)
r   r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation@py_assert2@py_assert5@py_assert4@py_format7@py_format9s        9/home/jay/workspace/scripts/tests/test_browser_stealth.pytest_stealth_args_countr'      s    |""""""""""""3"""3""""""|"""|"""""""""""""    c                  n   d} | t         v }|st        j                  d|fd| t         f      t        j                  |       dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            dx} }y)	uR   STEALTH_ARGS에 AutomationControlled 비활성화 플래그가 포함되어야 함z---disable-blink-features=AutomationControlledinz%(py1)s in %(py3)sr   r   r   assert %(py5)spy5N)	r   r   r   r   r   r   r   r   r   @py_assert0r!   @py_format4@py_format6s       r&   0test_stealth_args_contains_automation_controlledr4   "   s^    :J:lJJJJ:lJJJ:JJJJJJlJJJlJJJJJJJr(   c                  P   t        t              } t        t              }t        |      }| |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                  t              rt        j                  t              ndt        j                  |       dt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x} x}x}}y	)
u1   STEALTH_ARGS에 중복 플래그가 없어야 함r   )zn%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py11)s
{%(py11)s = %(py5)s(%(py9)s
{%(py9)s = %(py6)s(%(py7)s)
})
}r   r   set)r   r   r   r/   r   py7py9py11zassert %(py13)spy13N)r   r   r6   r   r   r   r   r   r   r   r   )r!   @py_assert8@py_assert10r#   @py_format12@py_format14s         r&   test_stealth_args_no_duplicatesr?   '   s   |6C$56$5 66 66666 666666636663666666|666|666666666666666666C666C666666666666$5666 66666666r(   c                  <   t        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                  t              rt        j                  t              ndt        j                  |       t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x} x}}y	)
u+   HARMFUL_ARGS가 정확히 5개인지 확인   r   r   r   r   r   r   r   N)
r   r   r   r   r   r   r   r   r   r   r    s        r&   test_harmful_args_countrB   1   s    |!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!r(   c                  n   d} | t         v }|st        j                  d|fd| t         f      t        j                  |       dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            dx} }y)	uD   HARMFUL_ARGS에 --enable-automation 플래그가 포함되어야 함z--enable-automationr*   r,   r   r-   r.   r/   N)	r   r   r   r   r   r   r   r   r   r0   s       r&   ,test_harmful_args_contains_enable_automationrD   6   s^     0 L0000 L000 000000L000L0000000r(   c                  b   t        t              t        t              z  } 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}}y	)
uA   HARMFUL_ARGS와 STEALTH_ARGS는 겹치는 항목이 없어야 함r   r   r   r   overlapr   r   r   N)r6   r   r   r   r   r   r   r   r   r   r   r   )rF   r!   r"   r#   r$   r%   s         r&   )test_harmful_args_no_overlap_with_stealthrG   ;   s    ,#l"33Gw<1<1<133ww<1r(   c                  B   d} | t         v }|st        j                  d|fd| t         f      t        j                  |       dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            dx} }d	} | t         v }|st        j                  d|fd| t         f      t        j                  |       dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            dx} }d
} | t         v }|st        j                  d|fd| t         f      t        j                  |       dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            dx} }y)uC   BLOCKED_RESOURCE_TYPES에 image, font, media가 포함되어야 함imager*   r,   r   r-   r.   r/   Nfontmedia)	r   r   r   r   r   r   r   r   r   r0   s       r&   test_blocked_resource_typesrL   F   s   ,7,,,,,7,,,,7,,,,,,,,,,,,,,,,,,+6+++++6++++6++++++++++++++++++,7,,,,,7,,,,7,,,,,,,,,,,,,,,,,,r(   c                     t               } 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}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)uS   generate_stealth_headers가 dict를 반환하고 User-Agent 키를 포함해야 함z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstanceheadersdict)r   r   py2py4N
User-Agentr*   r,   r-   r.   r/   )r	   rN   rP   r   r   r   r   r   r   r   r   )rO   @py_assert3@py_format5r1   r!   r2   r3   s          r&   *test_generate_stealth_headers_returns_dictrV   R   s    &(Ggt$$$$$$$$:$$$:$$$$$$g$$$g$$$$$$t$$$t$$$$$$$$$$"<7""""<7"""<""""""7"""7"""""""r(   c                     t               } | d   }d}||k7  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}| d   }t        |      }d	}||kD  }|st        j                  d
|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t	        t        j
                  |
            dx}x}x}}y)uH   generate_stealth_headers의 User-Agent 값이 비어있지 않아야 함rS    )!=)z%(py1)s != %(py4)s)r   rR   zassert %(py6)sr   Nr   )>)z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)sr   )r   rQ   rR   r7   zassert %(py9)sr8   )
r	   r   r   r   r   r   r   r   r   r   )rO   r1   rT   r!   rU   r$   @py_assert1@py_assert6r"   @py_format8@py_format10s              r&   ,test_generate_stealth_headers_has_user_agentr_   Y   s    &(G< &B& B&&&& B&&& &&&B&&&&&&&|$)3$%))%))))%))))))3)))3)))$)))%))))))))))r(   c                  d   t               } d}| |k(  }|st        j                  d|fd| |f      dt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}}y)	u>   get_google_referer가 정확한 Google URL을 반환해야 함zhttps://www.google.com/r   )z%(py0)s == %(py3)sreferer)r   r   r.   r/   N)	r
   r   r   r   r   r   r   r   r   )ra   r!   r[   r2   r3   s        r&   test_get_google_refererrb   e   sf     "G//7/////7///////7///7///////////r(   c                     t               } 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                  |      dz  }t        t	        j                  |            d}y)u7   create_resource_blocker가 callable을 반환해야 함z,assert %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}callableblocker)r   r   r   N)	r   rd   r   r   r   r   r   r   r   )re   r!   r2   s      r&   -test_create_resource_blocker_returns_callablerf   p   sq    %'GG88GGr(   )$__doc__builtinsr   _pytest.assertion.rewrite	assertionrewriter   syspathlibr   typingr   pytestpathinsertstr__file__parentbrowserr   r   r   r   r	   r
   r'   r4   r?   rB   rD   rG   rL   rV   r_   rb   rf    r(   r&   <module>rw      s   
  
    3tH~,,334 5 #
K
7"
1
-#*0r(   