o
    vi	                     @   s"  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 z
d dlZe  W n	 eyC   Y nw e	jddd	d
 ZdddZG dd dejZG dd de jZe	jdddd Ze	jdddd Zdd Zdd Zdd Zedkre   dS dS )    N   )get_websocket_url)websocket_proxycare)Configuration)streamclientconfigT)autousec                 C   s*   d}| d }| | |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_file r   _/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/kubernetes/stream/ws_client_test.pydummy_kubeconfig   s   
r   c                 C   s   |  ||S N)get)dict_objkeydefaultr   r   r   dictval8   s   r   c                       s*   e Zd ZdZd fdd	Zdd Z  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                    sh   t  jdd || _|| _d| _t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__r   r   r!   A   s   zDummyProxy.__init__c                 C   sd   | j  \}}z%|djddd}|dr&d| _|d W |  d S W |  d S |  w )Ni   zutf-8ignore)errorszCONNECT Ts'   HTTP/1.1 200 Connection established

)r(   acceptrecvdecode
startswithr$   sendallclose)r.   conn_datar   r   r   runK   s   
zDummyProxy.run)r   r   )__name__
__module____qualname____doc__r!   r<   __classcell__r   r   r/   r   r   <   s    
r   c                   @   s   e Zd Zdd Zdd ZdS )WSClientTestc                 C   s"   dD ]\}}|  t|| q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   )r.   urlws_urlr   r   r   test_websocket_clientW   s   
z"WSClientTest.test_websocket_clientc           
      C   s   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 ]M\}}}}}}}t  }|r3||_|r=tjj|d|_|d urD||_ti |d d }	t|	d|ksTJ t|	d|ks]J t|	d|ksfJ t|	d|ksoJ q"d S )N)NNNNNNN)http://proxy.example.com:8080/NNproxy.example.com  NN)rG   	user:passNrH   rI   userpassN)rG   rJ    rH   rI   rK   NrG   rJ   *rH   rI   rK   .example.comzlocalhost,.local,.example.com)	localhostz.localrP   )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   )
r.   rW   idpassr\   expect_hostexpect_portexpect_authexpect_noproxycfgconnect_optsr   r   r   test_websocket_proxycared   s*   
z%WSClientTest.test_websocket_proxycareN)r=   r>   r?   rF   rd   r   r   r   r   rB   U   s    rB   module)scopec                  c   s    t dd} |   | V  d S )Nr   )r#   )r   start)rW   r   r   r   dummy_proxy~   s   

rh   c                 C   s   dD ]	}| j |dd qd S )N)
HTTP_PROXY
http_proxyHTTPS_PROXYhttps_proxyNO_PROXYr\   F)raising)delenv)r   varr   r   r   clear_proxy_env   s   rq   c                  C   s4   t j } td| _tdd| _t j|  d S )Nrk   rm   rN   )r   r   get_default_copyosgetenvrW   r\   set_default)rb   r   r   r   apply_proxy_to_conf   s   
rv   c                 C   s   | dd |tjddd  tjtjd d t  | dd tjtjd d t  t }|j	dd	 | j
r?J d
d S )Nrk   http://127.0.0.1:8888list_namespacec                 _   s   d S r   r   )r.   _args_kwargsr   r   r   <lambda>   s    z,test_rest_call_ignores_env.<locals>.<lambda>r   config_fileF)_preload_contentz#REST path should ignore HTTPS_PROXY)r   setattrr   	CoreV1Apir   load_kube_configrs   environrv   rx   r$   )rh   r   v1r   r   r   test_rest_call_ignores_env   s   r   c                 C   sr   | dd tjtjd d t  ti tj	 d d }|
ddks%J |
ddks.J |
d	d u s7J d S )
Nrk   rw   r   r|   rS   r   rT   r   rV   )r   r   r   rs   r   rv   r   r   r   rr   r   )rh   r   optsr   r   r   test_websocket_call_honors_env   s   r   __main__r   )unittest	ws_clientr   r   kubernetes.client.configurationr   rs   r%   	threadingpytest
kubernetesr   r   r   rX   disable_warningsImportErrorfixturer   r   Threadr   TestCaserB   rh   rq   rv   r   r   r=   mainr   r   r   r   <module>   s<   



)


