o
    3IhN                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ ddlmZ ddl	m
Z
mZ ddlmZ dd	 ZG d
d dejZG dd dejZdS )    N)base)
api_client   )DynamicClient)ResourceInstanceResourceField)ResourceNotFoundErrorc                  C   s   t t } | dd  S )Ni)struuiduuid4)id r   ^/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/kubernetes/dynamic/test_client.py
short_uuid   s   r   c                   @   s`   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd ZdS )TestDynamicClientc                 C   s   t  | _d S N)r   get_e2e_configurationconfig)clsr   r   r   
setUpClass"   s   zTestDynamicClient.setUpClassc           	   	   C   sn  t tj| jd}| t |jjddd}W d    n1 s!w   Y  |jjddd}d}ddd|id	dd
ddddddi idd}||}| 	||j
j | |j |j|d}| 	||j
j | |j z
|jjddd}W n ty   td Y nw |jjddd}| }| 	|jg  dt  }ddd|ii d}|j|d}| 	|j
j| |j|d}| 	|j
j| d|d d< |j|dd}| 	|jjd |j|d}| 	|jjd | }| 	t|jd |j|d}| }| 	t|jd |j|d}td |j  | t |jjddd}W d    d S 1 s0w   Y  d S )Nconfigurationapps.example.com/v1ClusterChangeMeapi_versionkindapiextensions.k8s.io/v1beta1CustomResourceDefinitionz!clusterchangemes.apps.example.comnameapps.example.comClusterChangeMeListclusterchangemesclusterchangemer   listKindpluralsingularClusterv1statusgroupnamesscopeversionsubresources
apiVersionr   metadataspecr      custom-resource)body   r4   sizeapplication/merge-patch+json)r8   content_typer   r   r   r   	ApiClientr   assertRaisesr   	resourcesgetcreateassertEqualr3   r   
assertTruer*   timesleepitemsr   patchr4   r:   lendeleteinvalidate_cache	selfclientchangeme_apicrd_apir   crd_manifestrespchangeme_namechangeme_manifestr   r   r   test_cluster_custom_resources&   s   


	

$z/TestDynamicClient.test_cluster_custom_resourcesc           	   	   C   s  t tj| jd}| t |jjddd}W d    n1 s!w   Y  |jjddd}d}ddd|id	dd
ddddddi idd}|j|dd}| 	||j
j | |j |j|dd}| 	||j
j | |j z
|jjddd}W n ty   td |jjddd}Y nw |jdd}| 	|jg  dt  }ddd|ii d}|j|ddd}| 	|j
j| |j|ddd}| 	|j
j| d|d d< |j|dddd}| 	|jjd |j|ddd}| 	|jjd |jddd }| 	t|jd! |jdd}| 	t|jd! |j|ddd}|jddd }| 	t|jd" |jdd}| 	t|jd" |j|dd}td |j  | t |jjddd}W d    d S 1 sdw   Y  d S )#Nr   r   ChangeMer   r   r   changemes.apps.example.comr   r    ChangeMeList	changemeschangemer$   
Namespacedr)   r*   r+   r1   T)	async_req)r   r\   r6   r7   default)r8   	namespacer\   )r   r^   r\   r9   r4   r:   r;   )r8   r^   r<   r\   )r^   r\   r   r   r=   )	rM   rN   rO   rP   r   rQ   
async_resprS   rT   r   r   r   &test_async_namespaced_custom_resources   s   



	

$z8TestDynamicClient.test_async_namespaced_custom_resourcesc           	   	   C   s  t tj| jd}| t |jjddd}W d    n1 s!w   Y  |jjddd}d}ddd|id	dd
ddddddi idd}||}| 	||j
j | |j |j|d}| 	||j
j | |j z
|jjddd}W n ty   td Y nw |jjddd}| }| 	|jg  dt  }ddd|ii d}|j|dd}| 	|j
j| |j|dd}| 	|j
j| d|d d< |j|ddd}| 	|jjd |j|dd}| 	|jjd |jdd}| 	t|jd | }| 	t|jd |j|dd}|jdd}| 	t|jd  | }| 	t|jd  |j|d}td |j  | t |jjddd}W d    d S 1 sSw   Y  d S )!Nr   r   rV   r   r   r   rW   r   r    rX   rY   rZ   r$   r[   r)   r*   r+   r1   r5   r6   r7   r]   r8   r^   r   r^   r9   r4   r:   r;   )r8   r^   r<   )r^   r   r   r=   rL   r   r   r    test_namespaced_custom_resources   s   


	

$z2TestDynamicClient.test_namespaced_custom_resourcesc                 C   s  t tj| jd}|jjddd}dt  }ddd|i|dddd	d
d	dgd|idd}|j|dd}| ||j	j
 | |j |j|dd}| ||j	j
 | |j ddd
ddg|d d< |j||dd}| dt|jj | |j |j|i dd}d S )Nr   r)   Servicer   	frontend-r   )labelsr   resourceversionportP   TCP)r   rh   protocol
targetPort)portsselectorr1   r]   ra   rb   newi  r4   rm   )r8   r   r^   r6   r   r8   r^   )r   r   r>   r   r@   rA   r   rB   rC   r3   r   rD   r*   rH   rI   r4   rm   rJ   )rM   rN   apir   service_manifestrR   r   r   r   test_service_apisg  sZ   

z#TestDynamicClient.test_service_apisc                 C   s   t tj| jd}|jjddd}dt  }ddd|i|ddd|id	d|iid
dddddgdgiddd}|j|dd}| ||j	j
 | d|jj |j|dd}| ||j	j
 | d|jj |j|ddd d S )Nr   r)   ReplicationControllerr   re   r   rf   r   r6   rf   
containersnginxri   rj   containerPortrk   imager   rm   )r3   r4   )replicasrn   templater1   r]   ra   rb   
Background)r   r^   propagation_policy)r   r   r>   r   r@   rA   r   rB   rC   r3   r   r4   r|   rJ   )rM   rN   rq   r   rc_manifestrR   r   r   r    test_replication_controller_apis  sN   

z2TestDynamicClient.test_replication_controller_apisc                 C   s  t tj| jd}|jjddd}dt  }dd|ddidd	d
dd}|j|dd}| ||j	j
 |j|ddd}| ||j	j
 d}|j|dd|dD ]}|d7 }qO| j|dkdd d|d d< |j|d|d}|j|i dd}|jdddd}| g |j d S )Nr   r)   	ConfigMapr   ztest-configmap-ze2e-testtrue)r   rf   z"{"command":"/usr/bin/mysqld_safe"}z![mysqld]
bind-address = 10.0.0.3
)config.jsonzfrontend.cnf)r   r2   r3   datar]   ra   ze2e-test=true)r   r^   label_selectorr   
   )timeoutr^   r   r   zno events received for watch)msgz{}r   r   )r   r^   r8   rp   T)r^   prettyr   )r   r   r>   r   r@   rA   r   rB   rC   r3   r   watchrD   rH   rJ   rG   )rM   rN   rq   r   test_configmaprR   count_r   r   r   test_configmap_apis  sL   

z%TestDynamicClient.test_configmap_apisc                 C   s`   t tj| jd}|jjddd}| jD ]}|j|jjd}| 	t
t|jjdk qd S )Nr   r)   Noder   r5   r   )r   r   r>   r   r@   rA   rG   r3   r   rD   rI   dictrf   )rM   rN   rq   itemnoder   r   r   test_node_apis  s   z TestDynamicClient.test_node_apisc                 C   s   t tj| jd}|jjddd}dddii}|jdi |}| d|j | d	|j dd
dii}|jdi |}| d|j | d	|j d S )Nr   r)   r   r   header_paramsAcceptz@application/json;as=PartialObjectMetadataList;v=v1;g=meta.k8s.ioPartialObjectMetadataListzmeta.k8s.io/v1aCcePtr   )	r   r   r>   r   r@   rA   rC   r   r2   )rM   rN   rq   paramsrR   r   r   r   &test_node_apis_partial_object_metadata  s    z8TestDynamicClient.test_node_apis_partial_object_metadatac              	   C   s   t tj| jd}|jjddd}dt  }ddd|i|ddd	d	d
ddgdgid}|jd|ddd}| d|j	j
d j d S )Nr   r)   Podr   zpod-r   ru   rv   rw   ri   rj   rx   rz   r1   r]   zkubernetes-unittestsAll)r^   r8   field_managerdry_runr   )r   r   r>   r   r@   rA   r   server_side_applyrC   r3   managedFieldsmanager)rM   rN   rq   r   pod_manifestrR   r   r   r   test_server_side_apply_api  s.   
z,TestDynamicClient.test_server_side_apply_apiN)__name__
__module____qualname__classmethodr   rU   r`   rc   rs   r   r   r   r   r   r   r   r   r   r       s    
csk/$/
r   c                   @   s0   e Zd Zedd Zdd Zdd Zdd Zd	S )
TestDynamicClientSerializationc                 C   s>   t  }ttj|d| _ddddidddd	gid
| _d S )Nr   r)   r   r   zfoo-podrv   mainbusybox)r   r{   r1   )r   r   r   r   r>   rN   r   )r   r   r   r   r   r     s   z)TestDynamicClientSerialization.setUpClassc                 C   s   |  | j| j| j d S r   )rC   rN   serialize_bodyr   )rM   r   r   r   test_dict_type)  s   z-TestDynamicClientSerialization.test_dict_typec                 C   s(   t | j| j}| | j|| j d S r   )r   rN   r   rC   r   )rM   instr   r   r   test_resource_instance_type,  s   z:TestDynamicClientSerialization.test_resource_instance_typec                 C   sT   ddd}t |d}| |d |d  | |d |d  | | j|| dS )z`ResourceField` is a special type which overwrites `__getattr__` method to return `None`
        when a non-existent attribute was accessed. which means it can pass any `hasattr(...)` tests.
        barT)foorM   )r   r   rM   N)r   rC   rN   r   )rM   r   resr   r   r   test_resource_field0  s   
z2TestDynamicClientSerialization.test_resource_fieldN)r   r   r   r   r   r   r   r   r   r   r   r   r     s    

r   )rE   unittestr
   kubernetes.e2e_testr   kubernetes.clientr    r   resourcer   r   
exceptionsr   r   TestCaser   r   r   r   r   r   <module>   s      