
    ^h              
          S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	J
r
Jr  SSKJrJr  SSKJr  SSKrSSKJrJr  SrS	/r\ V s/ s H  n S
U  3PM
     sn r\R0                  " \R2                  R5                  SS\R6                   S35      5      r\R:                  R=                  S\5      S\S\\\4   SS4S j5       r \R:                  R=                  S\5      S\S\\\4   SS4S j5       r!\RD                  " SS9S\RF                  S\	\\\4   SS4   4S j5       r$S r% SS\S\S\&S\
\'   4S jjr(gs  sn f )z@Integration tests of authorization running under jupyter-server.    N)	GeneratorOptionalTuple)	HTTPErrorURLError)urlopen   )KNOWN_SERVERSextra_node_rootsz	127.0.0.1z/lsp/statusz/lsp/ws/JLSP_TEST_SUBPROCESS_PREFIXz["z", "-m"]routea_server_url_and_tokenreturnc                 0   Uu  p#[        X 5        [        X  SU 3S5      nUc
   SU  35       eSn [        R                  " UR                  S5      5        U(       a   SU  SU 35       eg! [        R                  R
                   a  nUn SnAN:SnAff = f)zBVerify a REST route only provides access to an authenticated user.z?token=   Nzno response received from utf-8zthe response for z was not JSON: )verify_responsejsonloadsdecodedecoderJSONDecodeError)r   r   base_urltokenraw_bodydecode_errorerrs          U/home/james-whalen/.local/lib/python3.13/site-packages/jupyter_lsp/tests/test_auth.pytest_auth_restr      s     -OHH$x7'%)A3GHE#=eW!EEL

8??7+, U0|nUU| <<'' s   %A+ +B	BBc                 "    [        US   U 5        g)zFVerify a WebSocket does not provide access to an unauthenticated user.r   N)r   )r   r   s     r   test_auth_websocketr!   .   s     *1-u5    module)scopetmp_path_factoryc              #     #    [        [        R                  " 5       5      n[        5       nU R	                  S5      nU R	                  S5      nUS-  nUR
                  R                  SS9  SSSS.nXaS.n0 [        5       EnUS	U0US
.n	UR                  [        R                  " U	5      SS9  / [        QSPSU 3PSPn
[        SU
5        [        [        R                  5      nUR!                  [        U5      [        U5      [        UR
                  5      S9  ["        R$                  " U
[        U5      U["        R&                  S9nS[(         SU 3nSnSnU(       d&  U(       a   [+        U S35      nU(       d	  U(       a  M  U(       d  [3        S5      eX4v    [        S5        [+        U SU 3/ S9  UR9                  5         UR<                  c   S"5       eg!! [,         a,    [        SU S3SS9  US-  n[.        R0                  " S5         Nf = f! [,         aO    [        S5        UR5                  5         UR7                  S 5        UR9                  5         UR;                  5          Nf = f7f)#z+Start a temporary, isolated jupyter server.root_dirhomezetc/jupyter/jupyter_config.jsonT)parentsF)jupyter_lsp
jupyterlab	nbclassic)jpserver_extensionsr   r   )	ServerAppIdentityProviderLanguageServerManagerr   )encodingjupyter_serverz--port=z--no-browserzserver args)HOMEUSERPROFILEJUPYTER_CONFIG_DIR)cwdenvstdinzhttp://:   z/favicon.ico[z
 / 20] ...)flushr	   zthe server did not startzshutting down with API...z/api/shutdown?token=)datazshutting down the hard way...s   y
Nz%jupyter-server probably still running)struuiduuid4get_unused_portmktempparentmkdirr   
write_textr   dumpsSUBPROCESS_PREFIXprintdictosenvironupdate
subprocessPopenPIPE	LOCALHOSTr   r   timesleepRuntimeError	terminatecommunicatewaitkill
returncode)r%   r   portr'   r(   server_conf
extensionsapplsmconfig_dataargsr7   procurlretriesoks                   r   r   r   4   sU    
 

ED&&z2H""6*D::KT*!%UOJ",
=C
 
 C$e,!$K 4::k2WESS 0SGD62BSNSD	-
rzz
CJJYI{112  
 Dc(mJOOTDI;av
&CG	BW	C5-.B WW 566
*)*3%+E73"= 	IIK??&O(OO&#  	AgYj)6qLGJJqM	  -. 				sU   E#I0&G 4I0I0H 6%I03HI0HI0AI-*I0,I--I0c                     [         R                   " [         R                  [         R                  5      n U R                  [        S45        U R                  S5        U R                  5       S   nU R                  5         U$ )z}Get an unused port by trying to listen to any random port.

Probably could introduce race conditions if inside a tight loop.
r   r	   )socketAF_INETSOCK_STREAMbindrP   listengetsocknameclose)sockrY   s     r   rA   rA   n   sZ    
 ==););<DIIy!nKKNa DJJLKr"   r   expect_codec                     SnSnU  U 3n [        U5      nUR                  5       nUR                  5       nXB:X  d   SU SU SU 35       eU$ ! [         a  nUR                  5       n SnAN6SnAff = f)z2Verify that a response returns the expected error.NzHTTP z (not expected z) for )r   getcodereadr   )r   r   rm   bodycodera   resr   s           r   r   r   {   s     DDJug
Ccl{{}xxz U%v_[MPSu UUK  {{}s   +A 
A2A--A2)i  ))__doc__r   rJ   re   rM   sysrQ   r?   typingr   r   r   urllib.errorr   r   urllib.requestr   pytestconftestr
   r   rP   REST_ROUTES	WS_ROUTESr   rK   get
executablerG   markparametrizer>   r   r!   fixtureTempPathFactoryr   rA   intbytesr   )lss   0r   <module>r      s   F  	   
   - - , "  5	o'45}xt_}5	JJJJNN0b8H2ST 
 +.V# VuS#X V4 V /V& ),6s 6E#s(O 6PT 6 -6
 h6P,,6PuS#Xd*+6P  6Pr
 36,/e_O 6s   D>