
    Zi	                        d dl Z ddlmZ ddlmZ d dlmZ d dlZd dlZd dlZd dl	Z	d dl
mZmZmZ 	 d dlZ ej                     n# e$ r Y nw xY w e	j        d          d	             Zdd
Z G d dej                  Z G d de j                  Z e	j        d          d             Z e	j        d          d             Zd Zd Zd Zedk    r e j                     dS dS )    N   )get_websocket_url)websocket_proxycare)Configuration)streamclientconfigT)autousec                     d}| dz  }|                     |           |                    dt          |                     d S )Nak  
        apiVersion: v1
        kind: Config
        clusters:
        - name: default
          cluster:
            server: http://127.0.0.1:8888
        contexts:
        - name: default
          context:
            cluster: default
            user: default
        users:
        - name: default
          user: {}
        current-context: default
        
kubeconfig
KUBECONFIG)
write_textsetenvstr)tmp_pathmonkeypatchcontentcfg_files       [/root/projects/butler/venv/lib/python3.11/site-packages/kubernetes/stream/ws_client_test.pydummy_kubeconfigr      sK    G" ,&H   |S]]33333    c                 .    |                      ||          S N)get)dict_objkeydefaults      r   dictvalr   8   s    <<W%%%r   c                   *     e Zd ZdZd fd	Zd Z xZS )
DummyProxyz{
    A minimal HTTP proxy that flags any CONNECT request and returns 200 OK.
    Listens on 127.0.0.1:8888 by default.
    	127.0.0.1"  c                    t                                          d           || _        || _        d| _        t          j        t
          j        t
          j                  | _        | j        	                    t
          j
        t
          j        d           | j                            | j        df           | j                            d           d S )NT)daemonFr   r   )super__init__hostportreceived_connectsocketAF_INETSOCK_STREAM_server_sock
setsockopt
SOL_SOCKETSO_REUSEADDRbindlisten)selfr'   r(   	__class__s      r   r&   zDummyProxy.__init__A   s    %%%		 %"M&.&:LMM$$V%68KQOOO	1~...  #####r   c                 P   | j                                         \  }}	 |                    d                              dd          }|                    d          rd| _        |                    d           |                                 d S # |                                 w xY w)Ni   zutf-8ignore)errorszCONNECT Ts'   HTTP/1.1 200 Connection established

)r-   acceptrecvdecode
startswithr)   sendallclose)r3   conn_datas       r   runzDummyProxy.runK   s    #**,,a	99T??))'()CCDz** M(,%KLLLJJLLLLLDJJLLLLs   AB B%)r!   r"   )__name__
__module____qualname____doc__r&   rA   __classcell__)r4   s   @r   r    r    <   sV         $ $ $ $ $ $      r   r    c                       e Zd Zd Zd ZdS )WSClientTestc                 \    dD ](\  }}|                      t          |          |           )d S )N))zhttp://localhost/apizws://localhost/api)zhttps://localhost/apizwss://localhost/api)zhttps://domain.com/apizwss://domain.com/api)zhttps://api.domain.com/apizwss://api.domain.com/api)zhttp://api.domain.comzws://api.domain.com)zhttps://api.domain.comzwss://api.domain.com)zhttp://api.domain.com/zws://api.domain.com/)zhttps://api.domain.com/zwss://api.domain.com/)assertEqualr   )r3   urlws_urls      r   test_websocket_clientz"WSClientTest.test_websocket_clientW   sE    	 
	= 
	=KC .s33V<<<<
	= 
	=r   c                    ddddddddd	d
dgfddddd	d
dgfddddd	d
g dffD ]\  }}}}}}}t                      }|r||_        |r%t          j                            |          |_        |||_        t          i |d d           }	t          |	d          |k    sJ t          |	d          |k    sJ t          |	d          |k    sJ t          |	d          |k    sJ d S )N)NNNNNNN)http://proxy.example.com:8080/NNproxy.example.com  NN)rO   	user:passNrP   rQ   userpassN)rO   rR    rP   rQ   rS   NrO   rR   *rP   rQ   rS   .example.comzlocalhost,.local,.example.com)	localhostz.localrX   )proxy_basic_authhttp_proxy_hosthttp_proxy_porthttp_proxy_authhttp_no_proxy)	r   proxyurllib3utilmake_headersproxy_headersno_proxyr   r   )
r3   r_   idpassrd   expect_hostexpect_portexpect_authexpect_noproxycfgconnect_optss
             r   test_websocket_proxycarez%WSClientTest.test_websocket_proxycared   s    J J T T2Kbuw{  ~M  PS  OT  U2Kbuw{  ~M  P^  O_  `2KA`cvx|  N  Pu  Pu  Pu  v_ 	L 	LZE68[+{N  //C "!	 W$+L$=$=v$=$V$V!#' /r3dCCL<):;;{JJJJ<):;;{JJJJ<):;;{JJJJ<99^KKKKK/	L 	Lr   N)rB   rC   rD   rM   rl    r   r   rH   rH   U   s7        = = =L L L L Lr   rH   module)scopec               #   Z   K   t          d          } |                                  | V  d S )Nr"   )r(   )r    start)r_   s    r   dummy_proxyrr   ~   s2       D!!!E	KKMMM
KKKKKr   c                 >    dD ]}|                      |d           d S )N)
HTTP_PROXY
http_proxyHTTPS_PROXYhttps_proxyNO_PROXYrd   F)raising)delenv)r   vars     r   clear_proxy_envr|      s7    a / /3..../ /r   c                      t           j                                        } t          j        d          | _        t          j        dd          | _        t           j                            |            d S )Nrv   rx   rV   )r   r   get_default_copyosgetenvr_   rd   set_default)rj   s    r   apply_proxy_to_confr      sW    


/
/
1
1C	-((CI9Z,,CL
$$S)))))r   c                    |                     dd           |                    t          j        dd            t	          j        t          j        d                    t                       |                     dd           t	          j        t          j        d                    t                       t          j                    }|	                    d           | j
        r
J d	            d S )
Nrv   http://127.0.0.1:8888list_namespacec                     d S r   rm   )r3   _args_kwargss      r   <lambda>z,test_rest_call_ignores_env.<locals>.<lambda>   s    \` r   r   config_fileF)_preload_contentz#REST path should ignore HTTPS_PROXY)r   setattrr   	CoreV1Apir	   load_kube_configr   environr   r   r)   )rr   r   v1s      r   test_rest_call_ignores_envr      s    }&=>>>(*:<`<`aaa

<(@AAAA}&=>>>

<(@AAAA				Bu---+RR-RRRRRRr   c                    |                     dd           t          j        t          j        d                    t                       t          i t          j        	                                d d           }|
                    d          dk    sJ |
                    d          dk    sJ |
                    d	          J d S )
Nrv   r   r   r   r[   r!   r\   r"   r^   )r   r	   r   r   r   r   r   r   r   r~   r   )rr   r   optss      r   test_websocket_call_honors_envr      s    }&=>>>

<(@AAAAr6#7#H#H#J#JDRVWWD88%&&+555588%&&$....88O$$,,,,,r   __main__r   )unittest	ws_clientr   r   kubernetes.client.configurationr   r   r*   	threadingpytest
kubernetesr   r   r	   r`   disable_warningsImportErrorfixturer   r   Threadr    TestCaserH   rr   r|   r   r   r   rB   mainrm   r   r   <module>r      s    ( ( ( ( ( ( * * * * * * 9 9 9 9 9 9 				       - - - - - - - - - -	NNNG 	 	 	D	4 4 40& & & &    !   2'L 'L 'L 'L 'L8$ 'L 'L 'LR h    / / /* * *S S S 
- 
- 
- zHMOOOOO s   A AA