o
    wOiP9                     @   s   d dl Z d dlZzd dlZW n ey   d dlmZ Y nw d dl mZ G dd deZG dd dejZG dd	 d	eZ	G d
d dejZ
dS )    N)mock)EtcdExceptionc                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
FakeHTTPResponse Nc                 C   s$   || _ |d| _|pddi| _d S )Nutf-8zx-etcd-cluster-id
abdef12345)statusencodedataheaders)selfr   r
   r    r   T/home/ubuntu/.local/lib/python3.10/site-packages/etcd/tests/unit/test_old_request.py__init__   s
   
zFakeHTTPResponse.__init__c                 C   s   | j S Nr   r   r   r   r   
getheaders   s   zFakeHTTPResponse.getheadersc                 C   s
   | j | S r   r   )r   headerr   r   r   	getheader   s   
zFakeHTTPResponse.getheader)r   N)__name__
__module____qualname__r   r   r   r   r   r   r   r      s    
r   c                   @   sd   e Z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d Zdd ZdS )TestClientRequestc                 C   s\   t  }tjtddd|_|jdddd}| t jdi dd	d
dddddd| dS )z Can set a value    z{"action":"SET","node": {"key":"/testkey","value":"test","newKey":true,"expiration":"2013-09-14T00:56:59.316195568+02:00","ttl":19,"modifiedIndex":183}}return_value/testkeytest   ttlSETz#2013-09-14T00:56:59.316195568+02:00   T
expirationmodifiedIndexkeynewKeyr!   valueactionnodeNr   )	etcdClientr   Mockr   api_executesetassertEquals
EtcdResultr   clientresultr   r   r   test_set   s*   zTestClientRequest.test_setc                 C   s^   t  }tjtddd|_|jddddd}| t jdi d	d
ddddddd| dS )z Can test and set a value    z{"action":"SET","node": {"key":"/testkey","prevValue":"test","value":"newvalue","expiration":"2013-09-14T02:09:44.24390976+02:00","ttl":49,"modifiedIndex":203}}r   r   newvaluer   r   r    r"   z"2013-09-14T02:09:44.24390976+02:00   1   )r%   r&   r'   	prevValuer!   r)   r*   Nr   )	r-   r.   r   r/   r   r0   test_and_setr2   r3   r4   r   r   r   test_test_and_set8   s*   
	z#TestClientRequest.test_test_and_setc              
   C   sj   t  }tjtdd|_z|jddddd}W dS  ty4 } z| dt| W Y d}~dS d}~ww )	z< Exception will be raised if prevValue != value in test_set zKThe given PrevValue is not equal to the value of the key : TestAndSet: 1!=3side_effectr   r9   r   r   r    N)	r-   r.   r   r/   
ValueErrorr0   r=   r2   str)r   r5   r6   er   r   r   test_test_and_test_failureR   s&   z,TestClientRequest.test_test_and_test_failurec                 C   sR   t  }tjtddd|_|d}| t jdi dddddd	d
| dS )z Can delete a value r8   z{"action":"DELETE","node": {"key":"/testkey","prevValue":"test","expiration":"2013-09-14T01:06:35.5242587+02:00","modifiedIndex":189}}r   r   DELETEz!2013-09-14T01:06:35.5242587+02:00   r   )r%   r&   r'   r<   r*   Nr   )	r-   r.   r   r/   r   r0   deleter2   r3   r4   r   r   r   test_deletee   s$   
	zTestClientRequest.test_deletec              
   C   sP   t  }tjtddd|_|d}| t jdi dddddd	| d
S )z Can get a value r8   N{"action":"GET","node": {"key":"/testkey","value":"test","modifiedIndex":190}}r   r   GET   r   )r&   r'   r)   r*   Nr   )	r-   r.   r   r/   r   r0   getr2   r3   r4   r   r   r   test_get{   s"   
	zTestClientRequest.test_getc                 C      dS )zCan get multiple valuesNr   r   r   r   r   test_get_multi      z TestClientRequest.test_get_multic                 C   rN   )z  Can understand dirs in results Nr   r   r   r   r   test_get_subdirs   rP   z"TestClientRequest.test_get_subdirsc                 C   s2   t  }tjt  d|_d|v}| d| dS )z# Can check if key is not in client r?   r   TN)r-   r.   r   r/   EtcdKeyNotFoundrL   r2   r4   r   r   r   test_not_in   s   zTestClientRequest.test_not_inc                 C   s4   t  }tjtddd|_d|v }| d| dS )z Can check if key is in client r8   rI   r   r   TN)r-   r.   r   r/   r   r0   r2   r4   r   r   r   test_in   s   zTestClientRequest.test_inc                 C   sV   t  }tjtddd|_|d}| t jdi dddddd	d
dd| dS )z Can watch values r8   z{"action":"SET","node": {"key":"/testkey","value":"test","newKey":true,"expiration":"2013-09-14T01:35:07.623681365+02:00","ttl":19,"modifiedIndex":192}}r   r   r"   #2013-09-14T01:35:07.623681365+02:00   Tr   r   r$   r*   Nr   	r-   r.   r   r/   r   r0   watchr2   r3   r4   r   r   r   test_simple_watch   s*   
	z#TestClientRequest.test_simple_watchc                 C   sZ   t  }tjtddd|_|jddd}| t jdi ddddd	d
ddd| dS )z Can watch values from index r8   {"action":"SET","node": {"key":"/testkey","value":"test","newKey":true,"expiration":"2013-09-14T01:35:07.623681365+02:00","ttl":19,"modifiedIndex":180}}r   r      indexr"   rU   Tr   r   r$   r*   Nr   rW   r4   r   r   r   test_index_watch   s*   	z"TestClientRequest.test_index_watchN)r   r   r   r7   r>   rD   rH   rM   rO   rQ   rS   rT   rY   r^   r   r   r   r   r      s    r   c                   @   s   e Zd Zdd Zdd ZdS )TestEventGeneratorc                 C   s0   t jd
i ddddddddd	|ksJ d S )Nr"   rU   r[   r   Tr   r   r$   r*   r   )r-   r3   )r   r6   r   r   r   check_watch   s   	zTestEventGenerator.check_watchc                 c   sP    t  }tjtddd|_tddD ]}t|jddd}| j	|fV  qd	S )
z! Can watch values from generator r8   rZ   r         r   r[   r\   N)
r-   r.   r   r/   r   r0   rangenexteternal_watchr`   r4   r   r   r   test_eternal_watch   s   z%TestEventGenerator.test_eternal_watchN)r   r   r   r`   rf   r   r   r   r   r_      s    r_   c                   @   sT   e Z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 )TestClientApiExecutorc                 C   J   t  }tddd}tj|d|j_|d|j}| 	d
d|j dS )z http get request r8   arbitrary json datar   r
   r   /v1/keys/testkeyr   N)r-   r.   r   r   r/   httprequestr0   _MGETr2   r	   r
   r   r5   responser6   r   r   r   rM     
   zTestClientApiExecutor.test_getc                 C   rh   )z http delete request r8   ri   rj   r   rk   r   N)r-   r.   r   r   r/   rl   rm   r0   _MDELETEr2   r	   r
   ro   r   r   r   rH     rq   z!TestClientApiExecutor.test_deletec              
   C   sp   t  }tddd}tj|d|j_z	|d|j J  t j	y7 } z| 
t|d W Y d}~dS d}~ww )	z http get error request 101  z:{"message": "message", "cause": "cause", "errorCode": 100}rj   r   /v2/keys/testkeyFmessage : causeN)r-   r.   r   r   r/   rl   rm   r0   rn   rR   r2   rB   r   r5   rp   rC   r   r   r   test_get_error  s   z$TestClientApiExecutor.test_get_errorc                 C   rh   )z http put request r8   ri   rj   r   rt   r   N)r-   r.   r   r   r/   rl   request_encode_bodyr0   _MPUTr2   r	   r
   ro   r   r   r   test_put&  rq   zTestClientApiExecutor.test_putc              
   C   s   t  }tddd}tj|d|j_dddd}z|d	|j| | 	  W dS  t
yB } z| d
t| W Y d}~dS d}~ww )z http post error request 101 rs   z:{"message": "message", "cause": "cause", "errorCode": 101}rj   r   r)   oldValue60r)   r<   r!   rt   ru   N)r-   r.   r   r   r/   rl   rx   r0   ry   failrA   r2   rB   r   r5   rp   payloadrC   r   r   r   test_test_and_set_error.  s   z-TestClientApiExecutor.test_test_and_set_errorc              
   C   s   t  }tddd}tj|d|j_dddd}z|d	|j| | 	  W dS  t j
yC } z| d
t| W Y d}~dS d}~ww )z http post error request 102 rs   z:{"message": "message", "cause": "cause", "errorCode": 102}rj   r   r)   r{   r|   r}   rt   ru   N)r-   r.   r   r   r/   rl   rx   r0   ry   r~   EtcdNotFiler2   rB   r   r   r   r   test_set_not_file_error<  s   z-TestClientApiExecutor.test_set_not_file_errorc              
   C   z   t  }tddd}tj|d|j_z|d|j | 	  W dS  t j
y< } z| t|d W Y d}~dS d}~ww )z  http get error request unknown rs   z9{"message": "message", "cause": "cause", "errorCode": 42}rj   r   rt   ru   Nr-   r.   r   r   r/   rl   rm   r0   rn   r~   r   assertEqualrB   rv   r   r   r   test_get_error_unknownJ  s   z,TestClientApiExecutor.test_get_error_unknownc              
   C   r   )  http get error request invalid rs   z
{)*garbagerj   r   rt   zBad response : {)*garbageNr   rv   r   r   r   test_get_error_request_invalidX  s   
z4TestClientApiExecutor.test_get_error_request_invalidc                 C   s>   t  }tddd}tj|d|j_| t j|j	d|j
 dS )r   rs   z{){){)*garbage*rj   r   rt   N)r-   r.   r   r   r/   rl   rm   assertRaisesr   r0   rn   )r   r5   rp   r   r   r   test_get_error_invalide  s   z,TestClientApiExecutor.test_get_error_invalidN)r   r   r   rM   rH   rw   rz   r   r   r   r   r   r   r   r   r   rg     s    rg   )r-   unittestr   ImportErrorr   objectr   TestCaser   r_   rg   r   r   r   r   <module>   s     K!