§
    	Êj  ã                  óü   — d dl mZ d dlZd dlmc mZ d dlZd dl	Z	d dl
Z
d dlmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ ddd„Zd„ Zd„ Zd„ Zd„ Zd„ Z G d„ de¦  «        Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&dS )é    )ÚannotationsN)ÚAccountÚAccountPoolÚAccountStatusÚJsonAccountStore)ÚChatRequest)Ú
MockDriver)ÚNoAccountAvailableÚUpstreamAuthErrorÚUpstreamError)ÚGatewayé   Úreturnr   c              ‹  óÊ   K  — t          t          | dz  ¦  «        fddi|¤Ž}t          |¦  «        D ]1}|                     t	          d|› �ddi¬¦  «        ¦  «        ƒ d {V —† Œ2|S )Núacc.jsonÚacquire_timeoutgš™™™™™É?ÚaÚ
hatch_sessÚx)ÚidÚcookies)r   r   ÚrangeÚupsertr   )Útmp_pathÚnÚkwÚpoolÚis        ú'C:\Projects\Muse2API\tests\test_pool.pyÚ_poolr       s‹   è è € ÝÕ'¨°:Ñ(=Ñ>Ô>ÐZÐZÐPSÐZÐWYÐZÐZ€DÝ�1‰XŒXð Lð LˆØ�kŠk�' W¨ W W°|ÀSÐ6IÐJÑJÔJÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKØ€Kó    c              ƒ  óÐ   K  — t          | d¬¦  «        ƒ d {V —†}t          j        t          ¦  «        5  |                     ¦   «         ƒ d {V —† d d d ¦  «         d S # 1 swxY w Y   d S )Nr   ©r   )r    ÚpytestÚraisesr
   Úacquire)r   r   s     r   Útest_empty_pool_raisesr'      s¿   è è € Ý�x 1Ð%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%€DÝ	ŒÕ)Ñ	*Ô	*ð ð Ø�lŠl‰nŒnÐÐÐÐÐÐÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ³AÁAÁ"Ac              ƒ  óÞ  K  — t          | d¬¦  «        ƒ d {V —†}|                     ¦   «         ƒ d {V —†}|                     |¦  «        ƒ d {V —† |                     ¦   «         ƒ d {V —†}|j        }|j        }||k    }|sèt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        dœz  }dd	|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}}d S )
NÚlru)Ústrategy)ú!=)zB%(py2)s
{%(py2)s = %(py0)s.id
} != %(py6)s
{%(py6)s = %(py4)s.id
}ÚfirstÚsecond)Úpy0Úpy2Úpy4Úpy6úassert %(py8)sÚpy8)r    r&   Úreleaser   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)	r   r   r,   r-   Ú@py_assert1Ú@py_assert5Ú@py_assert3Ú@py_format7Ú@py_format9s	            r   Útest_lru_spreads_loadrB      s«  è è € Ý�x¨%Ð0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0€DØ—,’,‘.”.Ð Ð Ð Ð Ð Ð €EØ
�,Š,�uÑ
Ô
ÐÐÐÐÐÐÐØ—<’<‘>”>Ð!Ð!Ð!Ð!Ð!Ð!€FØŒ8Ð �v”yÐ ˆ8�yÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ8�yÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆ5Ñ Ô Ð Õ Ô ˆ5Ñ Ô Ð Ð Õ Ô ˆ8Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �vÑ Ô Ð Õ Ô �vÑ Ô Ð Ð Õ Ô �yÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ð Ð r!   c              ƒ  ó‚  K  — t          | d¬¦  «        ƒ d {V —†}|                     ¦   «         ƒ d {V —†}t          j        t          d¬¦  «        5  |                     ¦   «         ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   t          j        |                     ¦   «         ¦  «        }t          j        d¦  «        ƒ d {V —† |                     |¦  «        ƒ d {V —† |ƒ d {V —†}|j	        }|j	        }||k    }|s½t          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	œz  }d
d|iz  }	t!          t          j        |	¦  «        ¦  «        ‚d x}x}x}}d S )Né   r#   Úbusy©Úmatchgš™™™™™©?©ú==)zB%(py3)s
{%(py3)s = %(py1)s.id
} == %(py7)s
{%(py7)s = %(py5)s.id
}Úheld)Úpy1Úpy3Úpy5Úpy7zassert %(py9)sÚpy9)r    r&   r$   r%   r
   ÚasyncioÚcreate_taskÚsleepr4   r   r5   r6   r:   r7   r8   r9   r;   r<   )
r   r   rJ   ÚwaiterÚ@py_assert0Ú@py_assert2Ú@py_assert6Ú@py_assert4Ú@py_format8Ú@py_format10s
             r   Ú+test_concurrency_limit_waits_then_times_outrZ   $   s@  è è € Ý�x 1Ð%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%€DØ—’‘”ÐÐÐÐÐÐ€DÝ	ŒÕ)°Ð	8Ñ	8Ô	8ð ð Ø�lŠl‰nŒnÐÐÐÐÐÐÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð åÔ  §¢¡¤Ñ0Ô0€FÝ
Œ-˜Ñ
Ô
ÐÐÐÐÐÐÐØ
�,Š,�tÑ
Ô
ÐÐÐÐÐÐÐØˆLˆLˆLˆLˆLˆLÐ'ˆLÔÐ' ¤Ð'Ð Ò'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð Ð'Ñ'Ô'Õ'Ô'ˆLÑ'Ô'Õ'Ô'ÐÑ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô' Ñ'Ô'Ð'Õ'Ô' Ñ'Ô'Ð'Ð'Õ'Ô' Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð's   ÁA6Á6A:Á=A:c           
   ƒ  óx  K  — t          | d¬¦  «        ƒ d {V —†}t          j        t          ¦  «        5  |                     ¦   «         4 ƒd {V —† t          d¦  «        ‚# 1 ƒd {V —†swxY w Y   	 d d d ¦  «         n# 1 swxY w Y   |j        }d} ||¦  «        }|j        }t          j        }||k    }|�s+t          j
        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        d	œz  }d
d|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}x}x}x}x}}t          j        t"          ¦  «        5  |                     ¦   «         ƒ d {V —† d d d ¦  «         d S # 1 swxY w Y   d S )NrD   r#   z
bad cookieÚa0rH   )z…%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
}.status
} == %(py12)s
{%(py12)s = %(py10)s.INVALID
}r   r   ©r.   r/   r0   r1   r3   Úpy10Úpy12úassert %(py14)sÚpy14)r    r$   r%   r   ÚleaseÚgetÚstatusr   ÚINVALIDr5   r6   r7   r8   r9   r:   r;   r<   r
   r&   ©
r   r   r=   r?   r>   Ú@py_assert7Ú@py_assert11Ú@py_assert9Ú@py_format13Ú@py_format15s
             r   Útest_auth_error_invalidatesrl   /   s,  è è € Ý�x 1Ð%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%€DÝ	ŒÕ(Ñ	)Ô	)ð 2ð 2Ø—:’:‘<”<ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2Ý# LÑ1Ô1Ð1ð	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð 	2ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð Œ8Ð9�DÐ9ˆ8ˆ8�D‰>Œ>Ð9ˆ>Ô Ð9¥MÔ$9Ð9Ð Ð$9Ò9Ð9Ð9Ñ9Õ9Ô9Ð9Ð9Ð9Ð9Ð Ð$9Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆ4Ñ9Ô9Ð9Õ9Ô9ˆ4Ñ9Ô9Ð9Ð9Õ9Ô9ˆ8Ñ9Ô9Õ9Ô9�DÑ9Ô9Õ9Ô9ˆ>Ñ9Ô9Õ9Ô9Ð Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¥MÑ9Ô9Ð9Õ9Ô9¥MÑ9Ô9Ð9Ð9Õ9Ô9Ð$9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ý	ŒÕ)Ñ	*Ô	*ð ð Ø�lŠl‰nŒnÐÐÐÐÐÐÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð sA   ³A<ÁAÁ
A(	Á(A<Á+A(	Á,A<Á<B ÂB ÈH/È/H3È6H3c              ƒ  óâ  K  — t          | d¬¦  «        ƒ d {V —† t          t          | dz  ¦  «        ¦  «        }|                     ¦   «         ƒ d {V —† d„ |                     ¦   «         D ¦   «         }ddh}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}d S )Nr   r#   r   c                ó   — h | ]	}|j         ’Œ
S © )r   )Ú.0r   s     r   ú	<setcomp>z-test_persistence_roundtrip.<locals>.<setcomp>=   s   € Ð)Ð)Ð)�QˆAŒDÐ)Ð)Ð)r!   r\   Úa1rH   )z%(py1)s == %(py4)s)rK   r0   zassert %(py6)sr1   )
r    r   r   ÚloadÚallr5   r6   r:   r;   r<   )r   ÚreloadedrT   r?   rU   Ú@py_format5r@   s          r   Útest_persistence_roundtriprw   9   s*  è è € Ý
�˜AÐ
Ñ
Ô
ÐÐÐÐÐÐÐÝÕ+¨H°zÑ,AÑBÔBÑCÔC€HØ
�-Š-‰/Œ/ÐÐÐÐÐÐÐØ)Ð)˜(Ÿ,š,™.œ.Ð)Ñ)Ô)Ð9¨d°D¨\Ð9Ð)¨\Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð)¨\Ð9Ñ9Ô9Õ9Ô9Ð)Ñ9Ô9Õ9Ô9¨\Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9r!   c                  ó.   ‡ — e Zd ZdZdˆ fd„Zˆ fd„Zˆ xZS )Ú_FlakyDriverTÚbadúset[str]c                óZ   •— t          ¦   «                              d¬¦  «         || _        d S )Nr   )Údelay)ÚsuperÚ__init__rz   )Úselfrz   Ú	__class__s     €r   r   z_FlakyDriver.__init__C   s)   ø€ Ý‰Œ×Ò˜qÐÑ!Ô!Ð!ØˆŒˆˆr!   c               ó¦   •K  — |j         | j        v rt          d¦  «        ‚t          ¦   «                              ||¦  «        2 3 d {V —†}|W V — Œ6 d S )NÚboom)r   rz   r   r~   Úchat_stream)r€   ÚaccountÚreqÚdr�   s       €r   r„   z_FlakyDriver.chat_streamG   sx   øè è € ØŒ:˜œÐ!Ð!Ý Ñ'Ô'Ð'Ý‘w”w×*Ò*¨7°CÑ8Ô8ð 	ð 	ð 	ð 	ð 	ð 	ð 	�!ØˆGˆGˆGˆGˆGð 9Ð8Ð8s   ÁA)rz   r{   )Ú__name__Ú
__module__Ú__qualname__Úrequires_accountr   r„   Ú__classcell__)r�   s   @r   ry   ry   @   s\   ø€ € € € € ØÐðð ð ð ð ð ðð ð ð ð ð ð ð ð r!   ry   c           
   ƒ  óD  K  — t          | dd¬¦  «        ƒ d {V —†}t          |t          dh¦  «        d¬¦  «        }d                     d„ |                     t          dd	¬
¦  «        ¦  «        2 ¦   «         ƒ d {V —†¦  «        }d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}|j        }d}	 ||	¦  «        }
|
j        }t           j        }||k    }|�s+t          j        d|fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        t          j        |¦  «        dt          j
        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}	x}
x}x}}|j        }d}	 ||	¦  «        }
|
j        }d}||k    }|sãt          j        d|fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}	x}
x}x}}d S )Nr   Úround_robin)r   r*   r\   ©Úmax_failoverÚ c              “  ó"   K  — g | 3 d {V —†}|‘Œ
6 S ©Nro   ©rp   r‡   s     r   ú
<listcomp>z+test_gateway_fails_over.<locals>.<listcomp>Q   s.   è è € ÐYÐYÐYÐYÐYÐYÐYÐY �AÐYÐYÐYÐYó   …ÚhiÚm©ÚpromptÚmodel)Úin)z%(py1)s in %(py3)sÚtext)rK   rL   zassert %(py5)srM   rH   ©z…%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
}.status
} == %(py12)s
{%(py12)s = %(py10)s.COOLING
}r   r   r]   r`   ra   rr   rD   )zm%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
}.success_count
} == %(py11)s©r.   r/   r0   r1   r3   Úpy11úassert %(py13)sÚpy13)r    r   ry   Újoinr„   r   r5   r6   r:   r7   r8   r9   r;   r<   rc   rd   r   ÚCOOLINGÚsuccess_count)r   r   Úgwr�   rT   rU   Ú@py_format4Ú@py_format6r=   r?   r>   rg   rh   ri   rj   rk   Ú@py_assert10Ú@py_format12Ú@py_format14s                      r   Útest_gateway_fails_overr¬   N   s	  è è € Ý�x 1¨}Ð=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=€DÝ	�•| T FÑ+Ô+¸!Ð	<Ñ	<Ô	<€BØ�7Š7ÐYÐY R§^¢^µKÀtÐSVÐ4WÑ4WÔ4WÑ%XÔ%XÐYÑYÔYÐYÐYÐYÐYÐYÐYÑZÔZ€DØÐˆ4�4ˆ<ÐÐÐÕÔÐÐÐÐˆ4�4ÐÑÔÕÔˆ4ÑÔÐÕÔÑÔÐÐÕÔ�4ÑÔÐÕÔ�4ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØŒ8Ð9�DÐ9ˆ8ˆ8�D‰>Œ>Ð9ˆ>Ô Ð9¥MÔ$9Ð9Ð Ð$9Ò9Ð9Ð9Ñ9Õ9Ô9Ð9Ð9Ð9Ð9Ð Ð$9Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆ4Ñ9Ô9Ð9Õ9Ô9ˆ4Ñ9Ô9Ð9Ð9Õ9Ô9ˆ8Ñ9Ô9Õ9Ô9�DÑ9Ô9Õ9Ô9ˆ>Ñ9Ô9Õ9Ô9Ð Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¥MÑ9Ô9Ð9Õ9Ô9¥MÑ9Ô9Ð9Ð9Õ9Ô9Ð$9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ØŒ8Ð,�DÐ,ˆ8ˆ8�D‰>Œ>Ð,ˆ>Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆ4Ñ,Ô,Ð,Õ,Ô,ˆ4Ñ,Ô,Ð,Ð,Õ,Ô,ˆ8Ñ,Ô,Õ,Ô,�DÑ,Ô,Õ,Ô,ˆ>Ñ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r!   c           	   ƒ  ór  K  — t          | d¬¦  «        ƒ d {V —†}t          dh¦  «        }t          ||d¬¦  «        }t          j        t
          d¬¦  «        5  d„ |                     t          d	d
¬¦  «        ¦  «        2 ¦   «         ƒ d {V —†}d d d ¦  «         n# 1 swxY w Y   |j        }d} ||¦  «        }|j	        }d}	||	k    }
|
sãt          j        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}
}	d S )NrD   r#   r\   r   r�   rƒ   rF   c              “  ó"   K  — g | 3 d {V —†}|‘Œ
6 S r“   ro   r”   s     r   r•   zDtest_single_account_failure_keeps_original_error.<locals>.<listcomp>]   s.   è è € ÐRÐRÐRÐRÐRÐRÐRÐR˜ˆQÐRÐRÐRÐRr–   r—   r˜   r™   rH   )zj%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
}.fail_count
} == %(py11)sr   rŸ   r¡   r¢   )r    ry   r   r$   r%   r   r„   r   rc   Ú
fail_countr5   r6   r7   r8   r9   r:   r;   r<   )r   r   Údriverr¦   Ú_r=   r?   r>   rg   r©   ri   rª   r«   s                r   Ú0test_single_account_failure_keeps_original_errorr²   W   sB  è è € Ý�x 1Ð%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%€DÝ˜4˜&Ñ!Ô!€FÝ	��v¨AÐ	.Ñ	.Ô	.€Bå	Œ•}¨FÐ	3Ñ	3Ô	3ð Sð SØRÐR˜bŸnšn­[ÀÈCÐ-PÑ-PÔ-PÑQÔQÐRÑRÔRÐRÐRÐRÐRÐRÐRˆðSð Sð Sñ Sô Sð Sð Sð Sð Sð Sð Søøøð Sð Sð Sð SàŒ8Ð)�DÐ)ˆ8ˆ8�D‰>Œ>Ð)ˆ>Ô$Ð)¨Ð)Ð$¨Ò)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð$¨Ð)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆ4Ñ)Ô)Ð)Õ)Ô)ˆ4Ñ)Ô)Ð)Ð)Õ)Ô)ˆ8Ñ)Ô)Õ)Ô)�DÑ)Ô)Õ)Ô)ˆ>Ñ)Ô)Õ)Ô)Ð$Ñ)Ô)Õ)Ô)¨Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)s   Á5BÂBÂBc              ƒ  ór  K  — t          | d¬¦  «        ƒ d {V —†}|                     d¦  «        }t          j        t	          j        ¦   «         dz   c|_        |_        |                     ¦   «         ƒ d {V —†}|j        }d}||k    }|sªt          j
        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )NrD   r#   r\   çš™™™™™¹?rH   )z*%(py2)s
{%(py2)s = %(py0)s.id
} == %(py5)sÚgot)r.   r/   rM   zassert %(py7)srN   )r    rc   r   r¤   Útimerd   Úcooldown_untilr&   r   r5   r6   r7   r8   r9   r:   r;   r<   )	r   r   Úaccrµ   r=   rW   r?   r¨   rX   s	            r   Ú&test_acquire_waits_for_cooldown_to_endr¹   a   sY  è è € Ý�x 1Ð%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%€DØ
�(Š(�4‰.Œ.€CÝ%2Ô%:½D¼I¹K¼KÈ#Ñ<MÐ"€C„J�Ô"Ø—’‘”Ð
Ð
Ð
Ð
Ð
Ð
€CØŒ6Ð�TÐˆ6�TŠ>ÐÐÐÕÔÐÐÐÐˆ6�TÐÑÔÐÕÔÑÔÐÐÕÔˆ3ÑÔÐÕÔˆ3ÑÔÐÐÕÔˆ6ÑÔÕÔ�TÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐr!   c              ƒ  óæ  K  — t          | d¬¦  «        ƒ d {V —†}|                     d¦  «        }t          j        t	          j        ¦   «         dz   c|_        |_        t	          j        ¦   «         }t          j	        t          d¬¦  «        5  |                     ¦   «         ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   t          j        } |¦   «         }||z
  }d}||k     }|�st          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd
t          j        |¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }	dd|	iz  }
t%          t          j        |
¦  «        ¦  «        ‚d x}x}x}x}}d S )NrD   r#   r\   é<   ÚcoolingrF   r´   )ú<)zS(%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.monotonic
}()
} - %(py5)s) < %(py9)sr¶   Ústarted)r.   r/   r0   rM   rO   zassert %(py11)sr    )r    rc   r   r¤   r¶   rd   r·   Ú	monotonicr$   r%   r
   r&   r5   r6   r7   r8   r9   r:   r;   r<   )r   r   r¸   r¾   r=   r?   rV   Ú@py_assert8rg   rY   rª   s              r   Ú6test_acquire_fails_fast_when_cooldown_outlasts_timeoutrÁ   i   sB  è è € Ý�x 1Ð%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%€DØ
�(Š(�4‰.Œ.€CÝ%2Ô%:½D¼I¹K¼KÈ"Ñ<LÐ"€C„J�Ô"ÝŒnÑÔ€GÝ	ŒÕ)°Ð	;Ñ	;Ô	;ð ð Ø�lŠl‰nŒnÐÐÐÐÐÐÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð åŒ>Ð+ˆ>ˆ>ÑÔÐ+Ð˜gÑ%Ð+¨Ð+Ð%¨Ò+Ð+Ð+Ñ+Õ+Ô+Ð+Ð+Ð+Ð+Ð%¨Ð+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+�4Ñ+Ô+Ð+Õ+Ô+�4Ñ+Ô+Ð+Ð+Õ+Ô+ˆ>Ñ+Ô+Õ+Ô+ÐÑ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+˜gÑ+Ô+Ð+Õ+Ô+˜gÑ+Ô+Ð+Ð+Õ+Ô+¨Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+s   Â
B1Â1B5Â8B5c              ƒ  ó¬  K  — ddl m} t          | d¬¦  «        ƒ d {V —†}t          j        |¦  «        5  |                     ¦   «         4 ƒd {V —†  |d¦  «        ‚# 1 ƒd {V —†swxY w Y   	 d d d ¦  «         n# 1 swxY w Y   |                     d¦  «        }g }|j        }t          j	        }||k    }|}|r|j
        }	d}
|	|
k    }|}|�sÆt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        d
t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd
t          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         |ržt          j        d|fd|	|
f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t'          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}	x}}
|                     ¦   «         ƒ d {V —†}|j        }d}||k    }|st          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t'          t          j        |¦  «        ¦  «        ‚d x}x}x}}d S )Nr   )ÚUpstreamTimeoutrD   r#   zvideo generation timed outr\   rH   )zJ%(py4)s
{%(py4)s = %(py2)s.status
} == %(py8)s
{%(py8)s = %(py6)s.ACTIVE
}r¸   r   )r/   r0   r1   r3   z%(py10)sr^   )z6%(py14)s
{%(py14)s = %(py12)s.fail_count
} == %(py17)s)r_   ra   Úpy17z%(py19)sÚpy19zassert %(py22)sÚpy22)z*%(py3)s
{%(py3)s = %(py1)s.id
} == %(py6)s)rK   rL   r1   r2   r3   )Úmuse2api.errorsrÃ   r    r$   r%   rb   rc   rd   r   ÚACTIVEr¯   r5   r6   r7   r8   r9   r:   ÚappendÚ_format_boolopr;   r<   r&   r   )r   rÃ   r   r¸   r=   r?   rg   r>   rT   Ú@py_assert13Ú@py_assert16Ú@py_assert15rA   Ú@py_format11Ú@py_format18Ú@py_format20Ú@py_format21Ú@py_format23rU   rW   r@   s                        r   Ú&test_timeout_does_not_cool_the_accountrÓ   s   s¦  è è € Ø/Ð/Ð/Ð/Ð/Ð/å�x 1Ð%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%€DÝ	Œ�Ñ	'Ô	'ð @ð @Ø—:’:‘<”<ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@Ø!�/Ð">Ñ?Ô?Ð?ð	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@ð 	@ð@ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @ð �(Š(�4‰.Œ.€CØEÐEˆ3Œ:ÐE�Ô-ÐEˆ:Ð-Ò-ÐEÐEÐEÐEÐE°#´.ÐEÀAÐE°.ÀAÒ2EÐEÐEÐEÐEÑEÕEÔEÐEÐEÐEÐEˆ:Ð-ÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEˆ3ÑEÔEÐEÕEÔEˆ3ÑEÔEÐEÐEÕEÔEˆ:ÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE�ÑEÔEÐEÕEÔE�ÑEÔEÐEÐEÕEÔEÐ-ÑEÔEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÐE×EÒEÐEÑEÔEÐEÐEÐEÕEÔEÐEÐEÐEÐE°.ÀAÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE°#ÑEÔEÐEÕEÔE°#ÑEÔEÐEÐEÕEÔE°.ÑEÔEÕEÔEÀAÑEÔEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÐE×EÒEÐEÑEÔEÐEÕEÔEÐEÐEÑEÔEÐEÑEÐEÐEÐEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEØ—,’,‘.”.Ð Ð Ð Ð Ð Ð Ð,Ð Ô$Ð,¨Ð,Ð$¨Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Õ,Ô,Ð Ñ,Ô,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,s/   ´A9ÁAÁ
A%	Á%A9Á(A%	Á)A9Á9A=Â A=c           
   ƒ  óâ  K  — t          | dd¬¦  «        ƒ d {V —†}t          j        t          ¦  «        5  |                     ¦   «         4 ƒd {V —† t          d¦  «        ‚# 1 ƒd {V —†swxY w Y   	 d d d ¦  «         n# 1 swxY w Y   |j        }d} ||¦  «        }|j        }t          j        }||k    }|�s+t          j
        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd	t          j        |¦  «        d
œz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}x}x}x}x}}d S )NrD   é   )r   Úcooldownzbrowser errorr\   rH   rž   r   r   r]   r`   ra   )r    r$   r%   r   rb   rc   rd   r   r¤   r5   r6   r7   r8   r9   r:   r;   r<   rf   s
             r   Ú*test_other_upstream_errors_still_cool_downr×      sž  è è € Ý�x 1¨rÐ2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2€DÝ	Œ•}Ñ	%Ô	%ð 1ð 1Ø—:’:‘<”<ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1Ý Ñ0Ô0Ð0ð	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð 	1ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð Œ8Ð9�DÐ9ˆ8ˆ8�D‰>Œ>Ð9ˆ>Ô Ð9¥MÔ$9Ð9Ð Ð$9Ò9Ð9Ð9Ñ9Õ9Ô9Ð9Ð9Ð9Ð9Ð Ð$9Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆ4Ñ9Ô9Ð9Õ9Ô9ˆ4Ñ9Ô9Ð9Ð9Õ9Ô9ˆ8Ñ9Ô9Õ9Ô9�DÑ9Ô9Õ9Ô9ˆ>Ñ9Ô9Õ9Ô9Ð Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¥MÑ9Ô9Ð9Õ9Ô9¥MÑ9Ô9Ð9Ð9Õ9Ô9Ð$9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9s/   ´A=ÁAÁ
A)	Á)A=Á,A)	Á-A=Á=BÂB)r   )r   r   )'Ú
__future__r   Úbuiltinsr7   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter5   rP   r¶   r$   Úmuse2api.accountsr   r   r   r   Úmuse2api.drivers.baser   Úmuse2api.drivers.mockr	   rÇ   r
   r   r   Úmuse2api.services.gatewayr   r    r'   rB   rZ   rl   rw   ry   r¬   r²   r¹   rÁ   rÓ   r×   ro   r!   r   ú<module>rá      s¶  ðØ "Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø €€€à €€€à SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ -Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ðð ð ð!ð !ð !ð(ð (ð (ðð ð ð:ð :ð :ðð ð ð ð �:ñ ô ð ð-ð -ð -ð*ð *ð *ðð ð ð,ð ,ð ,ð	-ð 	-ð 	-ð:ð :ð :ð :ð :r!   