§
    nÈ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
mZ d dlZd dlZd dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z" d dl#m$Z$  G d„ d¦  «        Z%dd„Z&dd„Z'ddd„Z(dd„Z)d d„Z*dd„Z+dd„Z,d!d„Z-d!d„Z.dS )"é    )ÚannotationsN)ÚAny)ÚHTTPExceptionÚWebSocketDisconnect)ÚDeviceÚDisplayMessageÚNotificationTestÚTargetSelectionÚdevice_websocketÚdevicesÚhealthÚlist_devicesÚloggerÚcredential_storeÚpi_eventÚpi_sessionsÚselect_targetÚtarget_storeÚsend_messageÚtest_notification©ÚPiSessionEventc                  ó6   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )ÚFakeWebSocketÚreturnÚNonec                ó‚   — t          j        ¦   «         | _        t          j        ¦   «         | _        d| _        d | _        d S )NF)ÚasyncioÚQueueÚincomingÚsentÚacceptedÚclosed©Úselfs    ú[/home/lighthouse/esp32-dev/.cache/main-promotion-test-20261009/server/tests/test_gateway.pyÚ__init__zFakeWebSocket.__init__!   s.   € ÝGNÄ}ÁÄˆŒÝ3:´=±?´?ˆŒ	ØˆŒØ.2ˆŒˆˆó    c              ƒ  ó   K  — d| _         d S )NT)r"   r$   s    r&   ÚacceptzFakeWebSocket.accept'   s   è è € ØˆŒˆˆr(   údict[str, Any]c              ƒ  óv   K  — | j                              ¦   «         ƒ d {V —†}t          |t          ¦  «        r|‚|S ©N)r    ÚgetÚ
isinstanceÚBaseException©r%   Úvalues     r&   Úreceive_jsonzFakeWebSocket.receive_json*   sG   è è € Ø”m×'Ò'Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)ˆÝ�e�]Ñ+Ô+ð 	ØˆKØˆr(   r2   c              ƒ  óJ   K  — | j                              |¦  «        ƒ d {V —† d S r-   )r!   Úputr1   s     r&   Ú	send_jsonzFakeWebSocket.send_json0   s2   è è € ØŒi�mŠm˜EÑ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"r(   ÚcodeÚintÚreasonÚstrc              ƒ  ó   K  — ||f| _         d S r-   )r#   )r%   r7   r9   s      r&   ÚclosezFakeWebSocket.close3   s   è è € Ø˜V�nˆŒˆˆr(   N©r   r   )r   r+   )r2   r+   r   r   )r7   r8   r9   r:   r   r   )Ú__name__Ú
__module__Ú__qualname__r'   r*   r3   r6   r<   © r(   r&   r   r       sx   € € € € € ð3ð 3ð 3ð 3ðð ð ð ðð ð ð ð#ð #ð #ð #ð%ð %ð %ð %ð %ð %r(   r   Úcoror   r   c                ó*   — t          j        | ¦  «        S r-   )r   Úrun)rB   s    r&   rD   rD   7   s   € ÝŒ;�tÑÔÐr(   r   c                 óh   — t          j        ¦   «          t          j                             ¦   «          d S r-   )r   Úclearr   ÚsessionsrA   r(   r&   Úsetup_functionrH   ;   s(   € Ý„M�O„O€OÝÔ×ÒÑ Ô Ð Ð Ð r(   úesp32s3-test001Útmp_pathÚ	device_idr:   c                ó†   — d}| dz  }|                      d|› d|› d�d¬¦  «         |t          _        | dz  t          _        |S )	Nzunit-test-device-tokenzdevice.jsonz{"device_id":"z","device_token":"z#","pi_token":"unit-test-pi-token"}
zutf-8)Úencodingztargets.json)Ú
write_textr   Úpathr   )rJ   rK   ÚtokenrO   s       r&   Úauthorize_test_devicerQ   @   sb   € Ø$€EØ�mÑ#€DØ‡O‚OØc˜)ÐcÐc°uÐcÐcÐcØð ñ ô ð ð !ÕÔØ  >Ñ1…LÔØ€Lr(   c                 óŒ  — t          ¦   «         } t          | ¦  «        }ddddœ}||k    }|�st          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        | ¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x} x}x}}d S )NÚokz0.6.0r   )ÚstatusÚcontrol_versionÚonline_devices©ú==)zG%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s()
})
} == %(py8)srD   r   )Úpy0Úpy1Úpy3Úpy5Úpy8úassert %(py10)sÚpy10)
r   rD   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)Ú@py_assert2Ú@py_assert4Ú@py_assert7Ú@py_assert6Ú@py_format9Ú@py_format11s         r&   Útest_healthrn   L   sN  € Ý‰xŒxÐ]�3ˆx‰=Œ=Ð] tÀÐ[\Ð]Ð]Ð]ˆ=Ð]Ò]Ð]Ð]Ñ]Õ]Ô]Ð]Ð]Ð]Ð]ˆ=Ð]Ð]Ñ]Ô]Ð]Õ]Ô]Ñ]Ô]Ð]Ð]Õ]Ô]�3Ñ]Ô]Ð]Õ]Ô]�3Ñ]Ô]Ð]Ð]Ð]Õ]Ô]Ñ]Ô]Ð]Ð]Õ]Ô]�vÑ]Ô]Ð]Õ]Ô]�vÑ]Ô]Ð]Ð]Õ]Ô]ˆxÑ]Ô]Õ]Ô]ˆ=Ñ]Ô]Õ]Ô]Ð]Ñ]Ô]Ð]Ð]Ñ]Ð]Ð]Ð]Ð]Ð]Ñ]Ð]Õ]Õ]Ô]Ð]Ñ]Ô]Ñ]Ô]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]r(   Úcaplogúpytest.LogCaptureFixturec                óš	  ‡	— t          |¦  «        Š	dˆ	fd„}|                      t          j        t          j        ¬¦  «        5  t           |¦   «         ¦  «         d d d ¦  «         n# 1 swxY w Y   d„ | j        D ¦   «         }d„ |D ¦   «         }t          |¦  «        }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d
„ |D ¦   «         }t          |¦  «        }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d„ |D ¦   «         }t          |¦  «        }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d„ |D ¦   «         }t          |¦  «        }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d„ |D ¦   «         }t          |¦  «        }| }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d„ |D ¦   «         }t          |¦  «        }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )Nr   r   c               “  óz  •K  — t          ¦   «         } | j                             dd‰dddœ¦  «        ƒ d {V —† t          j        t          | ¦  «        ¦  «        }t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}|d         }d}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }t          |t          ¦  «        }	|	sÝddt!          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dt!          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |	¦  «        dœz  }
t          t          j        |
¦  «        ¦  «        ‚d x}}	|d         }t&          j        }	 |	¦   «         }d}||z  }||z
  }t)          |¦  «        }d}||k     }|�sHt          j
        d|fd||f¦  «        dt!          j        ¦   «         v st          j        t(          ¦  «        rt          j        t(          ¦  «        ndt          j        |¦  «        dt!          j        ¦   «         v st          j        t&          ¦  «        rt          j        t&          ¦  «        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}x}x}x}}|d         }t          |t          ¦  «        }	|	sÝddt!          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dt!          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |	¦  «        dœz  }
t          t          j        |
¦  «        ¦  «        ‚d x}}	d}| }|d         }||k    }d}||k    }	|r|	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}x}	x}}t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}|d         }d$}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d%         }d&}||k    }|slt          j
        d'|fd(||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}d)d*d+œ}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t+          ¦   «         ƒ d {V —†}|d&         d,         }d}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d&         d-         }d.}||u }|slt          j
        d/|fd0||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t-          dt/          d1d2¬3¦  «        ¦  «        ƒ d {V —†}|d4         }d.}||u }|slt          j
        d/|fd0||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}d5d1d2d6œ}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t1          dt3          d7¬8¦  «        ¦  «        ƒ d {V —†}|d4         }d.}||u }|slt          j
        d/|fd0||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}d9d7d:œ}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}| j                             d;d<d=d>d?œ¦  «        ƒ d {V —† | j                             d@dAdBœ¦  «        ƒ d {V —† t5          dC¦  «        D ]7}t6          d         j        d@dAdBœk    r nt          j        d&¦  «        ƒ d {V —† Œ8t6          d         }|j        }d@dAdBœ}||k    }	|	st          j
        d	|	fdD||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dEœz  }dFdG|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}	}| j                             t=          ¦   «         ¦  «        ƒ d {V —† t          j        |d¦  «        ƒ d {V —† t6          d         }|j        }dH}||u }	|	st          j
        d/|	fdI||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dEœz  }dFdG|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}	}d S )JNÚhellorI   úm5stack-stopwatchz0.1.0©ÚtyperK   Údevice_tokenÚboardÚfirmwareé   rv   Ú	hello_ackrW   ©z%(py1)s == %(py4)s©rZ   Úpy4úassert %(py6)sÚpy6Úserver_time_msz5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}r/   r8   )rY   Úpy2r[   r\   iè  iˆ  )ú<)z{%(py13)s
{%(py13)s = %(py0)s((%(py2)s - (%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.time
}()
} * %(py9)s)))
} < %(py16)sÚabsÚtime)rY   r‚   r[   r\   Úpy7Úpy9Úpy13Úpy16zassert %(py18)sÚpy18Útimezone_offset_minutesiÐ  iH  )ú<=rŒ   )z-%(py1)s <= %(py6)sz%(py6)s <= %(py8)s)rZ   r€   r]   r^   r_   Úserver_snapshotÚnetwork_rx_bpsr   )ú>=)z%(py1)s >= %(py4)sÚtarget_stateÚserver)rv   ÚtargetrK   ÚonlineT©Úis©z%(py1)s is %(py4)sÚHellozMessage from cloud©ÚtitleÚbodyr!   Údisplay_message)rv   r™   rš   Údone)ÚkindÚnotification_test)rv   r�   Úbutton_eventÚAÚclickiÒ  )rv   ÚbuttonÚactionÚ	timestampÚ	heartbeaté*   ©rv   Úuptimeé   )z2%(py3)s
{%(py3)s = %(py1)s.last_event
} == %(py6)s)rZ   r[   r€   zassert %(py8)sr]   F)z.%(py3)s
{%(py3)s = %(py1)s.online
} is %(py6)s) r   r    r5   r   Úcreate_taskr   Úwait_forr!   r.   r`   ra   re   rf   rg   r/   r8   rb   rc   rd   r…   r„   r   r   r   Úsend_test_notificationr	   Úranger   Ú
last_eventÚsleepr   r“   )Ú	websocketÚtaskÚackÚ@py_assert0Ú@py_assert3rh   Ú@py_format5Ú@py_format7Ú@py_assert1ri   Ú@py_format6rk   Ú@py_assert8Ú@py_assert10Ú@py_assert11Ú@py_assert12Ú@py_assert15Ú@py_assert14Ú@py_format17Ú@py_format19Ú@py_assert5rj   rl   rm   ÚsnapshotÚlistedÚresponseÚnotificationÚ_rP   s                                €r&   Úscenarioz0test_bidirectional_device_flow.<locals>.scenarioS   sS  øè è € Ý!‘O”Oˆ	ØÔ ×$Ò$àØ.Ø %Ø,Ø#ðð ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ Ô"Õ#3°IÑ#>Ô#>Ñ?Ô?ˆåÔ$ Y¤^×%7Ò%7Ñ%9Ô%9¸1Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=ˆØ�6Œ{Ð)˜kÐ)ˆ{˜kÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)ˆ{˜kÐ)Ñ)Ô)Õ)Ô)ˆ{Ñ)Ô)Õ)Ô)˜kÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÐ.Ô/Ð5�zÐ/µÑ5Ô5Ð5Ð5Ð5Ð5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5�zÑ5Ô5Ð5Õ5Ô5�zÑ5Ô5Ð5Ð5Õ5Ô5Ð/Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5µÑ5Ô5Ð5Õ5Ô5µÑ5Ô5Ð5Ð5Õ5Ô5Ð5Ñ5Ô5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5ØÐ'Ô(ÐE­4¬9ÐE¨9¨9©;¬;ÐE¸ÐE¨;¸Ñ+=ÐEÐ(Ð+=Ñ=ÐE�sÐ=Ñ>Ô>Ð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ÑEÔEÐEÕEÔE�sÑEÔEÐEÐEÕEÔEÐ(ÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE­4ÑEÔEÐEÕEÔE­4ÑEÔEÐEÐEÕEÔE¨9Ñ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ØÐ7Ô8Ð>�zÐ8½#Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>�zÑ>Ô>Ð>Õ>Ô>�zÑ>Ô>Ð>Ð>Õ>Ô>Ð8Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>½#Ñ>Ô>Ð>Õ>Ô>½#Ñ>Ô>Ð>Ð>Õ>Ô>Ð>Ñ>Ô>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>ØÐ<�ˆtÐ<�sÐ4Ô5Ð<ˆtÐ5Ò<Ð<¸Ð<Ð5¸Ò<Ð<Ð<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð<ˆtÐ5¸Ð<Ñ<Ô<Õ<Ô<�Ñ<Ô<Õ<Ô<Ð5Ñ<Ô<Õ<Ô<¸Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ý Ô)¨)¬.×*<Ò*<Ñ*>Ô*>ÀÑBÔBÐBÐBÐBÐBÐBÐBˆØ˜ÔÐ4Ð#4Ð4ÐÐ#4Ò4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4ÐÐ#4Ð4Ñ4Ô4Õ4Ô4ÐÑ4Ô4Õ4Ô4Ð#4Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ØÐ(Ô)Ð.¨QÐ.Ð)¨QÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð)¨QÐ.Ñ.Ô.Õ.Ô.Ð)Ñ.Ô.Õ.Ô.¨QÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ÝÔ% i¤n×&8Ò&8Ñ&:Ô&:¸AÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ð 	
Ø"ØðC
ð C
ð 	
Ð>ð C
ò 
ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð>ð C
ð 	
ñ 	
ô 	
õ 	
ô 
ð ?ñ 	
ô 	
õ 	
ô 
ðC
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ $‘~”~Ð%Ð%Ð%Ð%Ð%Ð%ˆØ�aŒy˜Ô%Ð:Ð):Ð:Ð%Ð):Ò:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð%Ð):Ð:Ñ:Ô:Õ:Ô:Ð%Ñ:Ô:Õ:Ô:Ð):Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø�aŒy˜Ô"Ð* dÐ*Ð" dÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð" dÐ*Ñ*Ô*Õ*Ô*Ð"Ñ*Ô*Õ*Ô* dÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*å%Ø�~°GÐBVÐWÑWÔWñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð ˜ÔÐ' 4Ð'Ð 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð 4Ð'Ñ'Ô'Õ'Ô'ÐÑ'Ô'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ÝÔ% i¤n×&8Ò&8Ñ&:Ô&:¸AÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ð 	
Ø%ØØ(ðC
ð C
ð 	
Ð>ð C
ò 
ð 	
ð 	
ð 	
õ 	
ìð		
ð 	
ð 	
ð 	
Ð>ð C
ð 	
ñ 	
ô 	
õ 	
ô 
ð	 ?ñ 	
ô 	
õ 	
ô 
ð	C
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð		
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ 4ØÕ/°VÐ<Ñ<Ô<ñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð ˜FÔ#Ð+ tÐ+Ð# tÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð# tÐ+Ñ+Ô+Õ+Ô+Ð#Ñ+Ô+Õ+Ô+ tÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ÝÔ% i¤n×&8Ò&8Ñ&:Ô&:¸AÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ð 	
Ø'ØðC
ð C
ð 	
Ð>ð C
ò 
ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð>ð C
ð 	
ñ 	
ô 	
õ 	
ô 
ð ?ñ 	
ô 	
õ 	
ô 
ðC
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 Ô ×$Ò$Ø#¨s¸gÐTXÐYÐYñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð Ô ×$Ò$¨kÀRÐ%HÐ%HÑIÔIÐIÐIÐIÐIÐIÐIÐIÝ�r‘”ð 	#ð 	#ˆAÝÐ(Ô)Ô4ÀÐXZÐ8[Ð8[Ò[Ð[Ø�Ý”- Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ÝÐ(Ô)Ð[Ð)Ô4Ð[ÀÐXZÐ8[Ð8[Ð[Ð4Ð8[Ò[Ð[Ð[Ð[Õ[Ô[Ð[Ð[Ð[Ð[Ð4Ð8[Ð[Ñ[Ô[Õ[Ô[Ð)Ñ[Ô[Õ[Ô[Ð4Ñ[Ô[Õ[Ô[Ð8[Ñ[Ô[Ð[Ð[Ñ[Ð[Ð[Ð[Ð[Ð[Ñ[Ð[Õ[Õ[Ô[Ð[Ñ[Ô[Ñ[Ô[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[àÔ ×$Ò$Õ%8Ñ%:Ô%:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ÝÔ˜t QÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ÝÐ(Ô)Ð9Ð)Ô0Ð9°EÐ9Ð0°EÐ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð0°EÐ9Ñ9Ô9Õ9Ô9Ð)Ñ9Ô9Õ9Ô9Ð0Ñ9Ô9Õ9Ô9°EÑ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(   )r   c                óD   — g | ]}|j         |                     ¦   «         f‘ŒS rA   )ÚlevelnoÚ
getMessage)Ú.0Úrecords     r&   ú
<listcomp>z2test_bidirectional_device_flow.<locals>.<listcomp>•   s+   € ÐRÐRÐR¸�” × 1Ò 1Ñ 3Ô 3Ð4ÐRÐRÐRr(   c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )zdevice esp32s3-test001 onlineN©ÚloggingÚINFO©rË   ÚlevelÚmessages      r&   ú	<genexpr>z1test_bidirectional_device_flow.<locals>.<genexpr>–   s;   è è € ÐrÐrÑXfÐX]Ð_fˆu�œÒ$ÐSÐ)HÈGÐ)SÐrÐrÐrÐrÐrÐrr(   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úany)rY   r‚   r~   c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )zsent display_messageNrÏ   rÒ   s      r&   rÕ   z1test_bidirectional_device_flow.<locals>.<genexpr>—   s9   è è € ÐiÐiÉ~ÈuÐV]ˆu�œÒ$ÐJÐ)?À7Ð)JÐiÐiÐiÐiÐiÐir(   c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )zbutton clicked button=ANrÏ   rÒ   s      r&   rÕ   z1test_bidirectional_device_flow.<locals>.<genexpr>˜   s;   è è € ÐlÐlÑR`ÐRWÐY`ˆu�œÒ$ÐMÐ)BÀgÐ)MÐlÐlÐlÐlÐlÐlr(   c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )zheartbeat uptime=42N)rÐ   ÚDEBUGrÒ   s      r&   rÕ   z1test_bidirectional_device_flow.<locals>.<genexpr>™   s9   è è € ÐiÐiÉ~ÈuÐV]ˆu�œÒ%ÐJÐ*?À7Ð*JÐiÐiÐiÐiÐiÐir(   c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )r¥   NrÏ   rÒ   s      r&   rÕ   z1test_bidirectional_device_flow.<locals>.<genexpr>š   s7   è è € ÐbÐbÉÈÈw�5�GœLÒ(ÐC¨[¸GÐ-CÐbÐbÐbÐbÐbÐbr(   z0assert not %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )zdevice esp32s3-test001 offlineNrÏ   rÒ   s      r&   rÕ   z1test_bidirectional_device_flow.<locals>.<genexpr>›   s;   è è € ÐsÐsÑYgÐY^Ð`gˆu�œÒ$ÐTÐ)IÈWÐ)TÐsÐsÐsÐsÐsÐsr(   r=   )rQ   Úat_levelrÐ   rÚ   r   ÚnamerD   ÚrecordsrÖ   rb   rc   r`   rd   re   rf   rg   )
ro   rJ   rÇ   rß   r·   r´   rµ   rÁ   r¸   rP   s
            @r&   Útest_bidirectional_device_flowrà   P   s(  ø€ Ý! (Ñ+Ô+€Eð=:ð =:ð =:ð =:ð =:ð =:ð~ 
�Š�œ­v¬{ˆÑ	;Ô	;ð ð ÝˆHˆH‰JŒJ‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð SÐRÀ6Ä>ÐRÑRÔR€GØrÐrÐjqÐrÑrÔrÐr�3ÐrÑrÔrÐrÐrÐrÐrÐrÕrÔrÑrÔrÐrÐrÕrÔr�3ÑrÔrÐrÕrÔr�3ÑrÔrÐrÐrÕrÔrÐrÑrÔrÕrÔrÐrÑrÔrÐrÐrÑrÐrÕrÕrÔrÐrÑrÔrÑrÔrÐrÐrÐrÐrÐrØiÐiÐahÐiÑiÔiÐi�3ÐiÑiÔiÐiÐiÐiÐiÐiÕiÔiÑiÔiÐiÐiÕiÔi�3ÑiÔiÐiÕiÔi�3ÑiÔiÐiÐiÕiÔiÐiÑiÔiÕiÔiÐiÑiÔiÐiÐiÑiÐiÕiÕiÔiÐiÑiÔiÑiÔiÐiÐiÐiÐiÐiØlÐlÐdkÐlÑlÔlÐl�3ÐlÑlÔlÐlÐlÐlÐlÐlÕlÔlÑlÔlÐlÐlÕlÔl�3ÑlÔlÐlÕlÔl�3ÑlÔlÐlÐlÕlÔlÐlÑlÔlÕlÔlÐlÑlÔlÐlÐlÑlÐlÕlÕlÔlÐlÑlÔlÑlÔlÐlÐlÐlÐlÐlØiÐiÐahÐiÑiÔiÐi�3ÐiÑiÔiÐiÐiÐiÐiÐiÕiÔiÑiÔiÐiÐiÕiÔi�3ÑiÔiÐiÕiÔi�3ÑiÔiÐiÐiÕiÔiÐiÑiÔiÕiÔiÐiÑiÔiÐiÐiÑiÐiÕiÕiÔiÐiÑiÔiÑiÔiÐiÐiÐiÐiÐiØbÐbÐZaÐbÑbÔbÐb�sÐbÑbÔbÐbÐbÐbÐbÐbÐbÐbÐbÕbÔbÑbÔbÐbÐbÕbÔb�sÑbÔbÐbÕbÔb�sÑbÔbÐbÐbÕbÔbÐbÑbÔbÕbÔbÐbÑbÔbÐbÐbÑbÐbÕbÕbÔbÐbÑbÔbÑbÔbÐbÐbÐbÐbÐbÐbÐbØsÐsÐkrÐsÑsÔsÐs�3ÐsÑsÔsÐsÐsÐsÐsÐsÕsÔsÑsÔsÐsÐsÕsÔs�3ÑsÔsÐsÕsÔs�3ÑsÔsÐsÐsÕsÔsÐsÑsÔsÕsÔsÐsÑsÔsÐsÐsÑsÐsÕsÕsÔsÐsÑsÔsÑsÔsÐsÐsÐsÐsÐsÐsÐss   ÁA&Á&A*Á-A*c            
     óz  — t          j        t          ¦  «        5 } t          t	          dt          dd¬¦  «        ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   | j        }|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        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}d S )NÚmissingÚHiÚtherer˜   i”  rW   )zN%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.value
}.status_code
} == %(py7)sÚerror)rY   r‚   r~   r†   zassert %(py9)sr‡   )ÚpytestÚraisesr   rD   r   r   r2   Ústatus_coder`   ra   rb   rc   rd   re   rf   rg   )rå   r·   r´   rk   rÁ   Ú@py_format8Ú@py_format10s          r&   Ú%test_message_to_unknown_device_is_404rë   ž   s›  € Ý	Œ•}Ñ	%Ô	%ð O¨Ý�L˜¥N¸ÀGÐ$LÑ$LÔ$LÑMÔMÑNÔNÐNðOð Oð Oñ Oô Oð Oð Oð Oð Oð Oð Oøøøð Oð Oð Oð OàŒ;Ð)ˆ;Ô"Ð) cÐ)Ð" cÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð" cÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆ5Ñ)Ô)Ð)Õ)Ô)ˆ5Ñ)Ô)Ð)Ð)Õ)Ô)ˆ;Ñ)Ô)Õ)Ô)Ð"Ñ)Ô)Õ)Ô) cÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)s   š-AÁAÁAc                 ó<   — dd„} t           | ¦   «         ¦  «         d S )Nr   r   c               “  ó–  K  — t          ¦   «         } | j                             dddœ¦  «        ƒ d {V —† t          | ¦  «        ƒ d {V —† | j        }d}||u }|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}}| 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 )Nr¥   rz   r§   Tr”   )z0%(py2)s
{%(py2)s = %(py0)s.accepted
} is %(py5)sr°   ©rY   r‚   r\   úassert %(py7)sr†   )éð  zfirst message must be hellorW   ©z.%(py2)s
{%(py2)s = %(py0)s.closed
} == %(py5)s)r   r    r5   r   r"   r`   ra   rb   rc   rd   re   rf   rg   r#   )r°   r·   ri   r´   r¸   ré   s         r&   rÇ   z6test_rejects_non_hello_first_message.<locals>.scenario¥   s,  è è € Ý!‘O”Oˆ	ØÔ ×$Ò$¨kÀQÐ%GÐ%GÑHÔHÐHÐHÐHÐHÐHÐHÐHÝ˜yÑ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ!Ð) TÐ)Ð! TÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð! TÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆyÑ)Ô)Ð)Õ)Ô)ˆyÑ)Ô)Ð)Ð)Õ)Ô)Ð!Ñ)Ô)Õ)Ô) TÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔÐHÐ#HÐHÐÐ#HÒHÐHÐHÐHÕHÔHÐHÐHÐHÐHÐÐ#HÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔHˆyÑHÔHÐHÕHÔHˆyÑHÔHÐHÐHÕHÔHÐÑHÔHÕHÔHÐ#HÑHÔHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHÐHÐHr(   r=   )rD   )rÇ   s    r&   Ú$test_rejects_non_hello_first_messagerò   ¤   s1   € ðIð Ið Ið Iõ ˆˆ‰
Œ
�O„O€O€O€Or(   c                óZ   — t          | ¦  «         dd„}t           |¦   «         ¦  «         d S )Nr   r   c               “  óŒ  K  — t          ¦   «         } | j                             ddddddœ¦  «        ƒ d {V —† t          | ¦  «        ƒ 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}|t          v}|s¦t          j        d|fd|t          f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )Nrs   rI   zwrong-tokenrt   ú0.2.1ru   )rð   zunauthorized devicerW   rñ   r°   rî   rï   r†   ©únot in©z%(py1)s not in %(py3)sr   ©rZ   r[   úassert %(py5)sr\   )r   r    r5   r   r#   r`   ra   rb   rc   rd   re   rf   rg   r   )	r°   r·   ri   r´   r¸   ré   r³   rh   Ú@py_format4s	            r&   rÇ   z3test_rejects_invalid_device_token.<locals>.scenario²   s3  è è € Ý!‘O”Oˆ	ØÔ ×$Ò$àØ.Ø -Ø,Ø#ðð ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ ˜yÑ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔÐ@Ð#@Ð@ÐÐ#@Ò@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@ÐÐ#@Ð@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ˆyÑ@Ô@Ð@Õ@Ô@ˆyÑ@Ô@Ð@Ð@Õ@Ô@ÐÑ@Ô@Õ@Ô@Ð#@Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø Ð/Ð ­Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð ­Ð/Ñ/Ô/Õ/Ô/Ð Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/­Ñ/Ô/Ð/Õ/Ô/­Ñ/Ô/Ð/Ð/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/r(   r=   ©rQ   rD   )rJ   rÇ   s     r&   Ú!test_rejects_invalid_device_tokenrý   ¯   s;   € Ý˜(Ñ#Ô#Ð#ð0ð 0ð 0ð 0õ ˆˆ‰
Œ
�O„O€O€O€Or(   c                ól   ‡— t          | ¦  «         	 ddd	„Šdˆfd„}t           |¦   «         ¦  «         d S )Núpi-session-1Ú
event_namer:   Ú
session_idÚvaluesr   r   r   c                ó$   — t          d| ||ddœ|¤ŽS )Nz/tmp)Úeventr  rÞ   ÚcwdrA   r   )r   r  r  s      r&   Úpi_event_valuezXtest_selected_pi_activity_history_and_notification_deduplication.<locals>.pi_event_valueÇ   s6   € õ
 ð 
ØØ!ØØð	
ð 
ð
 ð
ð 
ð 	
r(   r   c               “  ó²  •K  — t          ¦   «         } t          ddd| ¬¦  «        t          d<   t          j         ‰d¦  «        ¦  «         t          j         ‰d¦  «        ¦  «         t          j         ‰ddd	¬
¦  «        ¦  «         t          j         ‰dd¦  «        ¦  «         t          dt          d¬¦  «        ¦  «        ƒ d {V —†}|d         }d}||u }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }d	}||k    }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t!           ‰dddd¬
¦  «        d¦  «        ƒ d {V —† | j        }|j        } |¦   «         }	|	sžddt%          j        ¦   «         v st          j        | ¦  «        rt          j	        | ¦  «        ndt          j	        |¦  «        t          j	        |¦  «        t          j	        |	¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	t!           ‰dd d!d"¬#¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}
d$d%d&d'd d!|
d(         d)œ}|
|k    }|s—t          j        d|fd*|
|f¦  «        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}}t!           ‰d.¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}|d/         }d0}||k    }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t!           ‰d.¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}d/}||v}|s—t          j        d1|fd2||f¦  «        t          j	        |¦  «        d3t%          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        nd3d4œz  }d,d-|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}t!           ‰d¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —† t!           ‰d.d¬5¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}|d/         }d6}||k    }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t!           ‰d.¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}d/}||v}|s—t          j        d1|fd2||f¦  «        t          j	        |¦  «        d7t%          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        nd7d4œz  }d,d-|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}|d8         }d9}||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 ):NrI   rt   rõ   )rK   rx   ry   r°   Úsession_startÚagent_startÚactivityÚtextzrecent output tail)Úactivity_typer
  zpi-session-2zpi:pi-session-1)r’   Ú	deliveredTr”   r–   r}   r   r€   rz   rv   Úagent_staterW   r|   Úrecent_textznot selectedzunit-test-pi-tokenzZassert %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.sent
}.empty
}()
}r°   )rY   r‚   r~   r€   ÚtoolzRunning
pytest -qÚbash)r  r
  Ú	tool_nameÚagent_activityÚpizagent:pi:pi-session-1rÿ   Ú
updated_at)rv   Úagentr’   r  r  r
  r  )z%(py0)s == %(py3)s)rY   r[   rú   r\   Ú	agent_endrÅ   rœ   rö   rø   Ú	duplicaterù   )Úfailedr  Úduplicate_failedÚstateÚFAILED)r   r   r   r   Úapplyr   r
   r`   ra   re   rf   rg   r   r«   r!   r.   r   Úemptyrb   rc   rd   )r°   Úselectedr³   r´   rh   rµ   r¶   r’   r·   rÁ   r
  rû   r¸   rœ   r  r  r  r  s                    €r&   rÇ   zRtest_selected_pi_activity_history_and_notification_deduplication.<locals>.scenarioÔ   sÇ  øè è € Ý!‘O”Oˆ	Ý%+Ø'Ø%ØØð	&
ñ &
ô &
�Ð!Ñ"õ 	Ô˜.˜.¨Ñ9Ô9Ñ:Ô:Ð:ÝÔ˜.˜.¨Ñ7Ô7Ñ8Ô8Ð8ÝÔØˆNØ¨&Ð;Oðñ ô ñ	
ô 	
ð 	
õ
 	Ô˜.˜.¨¸.ÑIÔIÑJÔJÐJå&Ø�Ð6GÐHÑHÔHñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð ˜Ô$Ð,¨Ð,Ð$¨Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ÝÔ'¨	¬×(:Ò(:Ñ(<Ô(<¸aÑ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@ˆØ�fŒ~Ð. Ð.ˆ~ Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.ˆ~ Ð.Ñ.Ô.Õ.Ô.ˆ~Ñ.Ô.Õ.Ô. Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø�mÔ$Ð<Ð(<Ð<Ð$Ð(<Ò<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð$Ð(<Ð<Ñ<Ô<Õ<Ô<Ð$Ñ<Ô<Õ<Ô<Ð(<Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<åØˆNØØØ$Ø'ð	ñ ô ð !ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð Œ~Ð%ˆ~Ô#Ð%Ð#Ð#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆyÑ%Ô%Ð%Õ%Ô%ˆyÑ%Ô%Ð%Ð%Õ%Ô%ˆ~Ñ%Ô%Õ%Ô%Ð#Ñ%Ô%Õ%Ô%Ð%Ñ%Ô%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%åØˆNØØ$Ø-Ø ð	ñ ô ð !ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ !Ô)¨)¬.×*<Ò*<Ñ*>Ô*>ÀÑBÔBÐBÐBÐBÐBÐBÐBˆà$¨tØ-Ø(Ø#Ø,Ø" <Ô0ð
ð 
ð 	
ˆxð 
ò 
ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
ˆxð 
ð 	
ñ 	
ô 	
ð 	
õ 	
ô 
ñ	
ô 	
ð 	
ð 	
õ 	
ìð ñ 	
ô 	
ð 	
õ 	
ô 
ð ñ 	
ô 	
ð 	
ð 	
õ 	
ô 
ð
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ �~�~ kÑ2Ô2Ð4HÑIÔIÐIÐIÐIÐIÐIÐIÐIÝÔ% i¤n×&8Ò&8Ñ&:Ô&:¸AÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ˆØ�NÔ#Ð- vÐ-Ð# vÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð# vÐ-Ñ-Ô-Õ-Ô-Ð#Ñ-Ô-Õ-Ô- vÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ý�~�~ kÑ2Ô2Ð4HÑIÔIÐIÐIÐIÐIÐIÐIÐIÝ!Ô*¨9¬>×+=Ò+=Ñ+?Ô+?ÀÑCÔCÐCÐCÐCÐCÐCÐCˆ	ØÐ.ˆ~ YÐ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.ˆ~ YÐ.Ñ.Ô.Õ.Ô.ˆ~Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. YÑ.Ô.Ð.Õ.Ô. YÑ.Ô.Ð.Ð.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.å�~�~ mÑ4Ô4Ð6JÑKÔKÐKÐKÐKÐKÐKÐKÐKÝÔ˜yœ~×1Ò1Ñ3Ô3°QÑ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ÝØˆN˜;¨tÐ4Ñ4Ô4Ð6Jñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ Ô'¨	¬×(:Ò(:Ñ(<Ô(<¸aÑ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@ˆØ�nÔ%Ð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Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ÝØˆN˜;Ñ'Ô'Ð)=ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ ")Ô!1°)´.×2DÒ2DÑ2FÔ2FÈÑ!JÔ!JÐJÐJÐJÐJÐJÐJÐØÐ5ˆ~Ð%5Ð5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5ˆ~Ð%5Ð5Ñ5Ô5Õ5Ô5ˆ~Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5Ð%5Ñ5Ô5Ð5Õ5Ô5Ð%5Ñ5Ô5Ð5Ð5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ø Ô(Ð4¨HÐ4Ð(¨HÒ4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð(¨HÐ4Ñ4Ô4Õ4Ô4Ð(Ñ4Ô4Õ4Ô4¨HÑ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4r(   )rÿ   )r   r:   r  r:   r  r   r   r   r=   rü   )rJ   rÇ   r  s     @r&   Ú@test_selected_pi_activity_history_and_notification_deduplicationr   Ä   sk   ø€ Ý˜(Ñ#Ô#Ð#ð )ð
ð 
ð 
ð 
ð 
ðK5ð K5ð K5ð K5ð K5ð K5õZ ˆˆ‰
Œ
�O„O€O€O€Or(   )rB   r   r   r   r=   )rI   )rJ   r   rK   r:   r   r:   )ro   rp   rJ   r   r   r   )rJ   r   r   r   )/Ú
__future__r   Úbuiltinsrb   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter`   r   rÐ   Útypingr   r…   ræ   Úfastapir   r   Údevice_gateway.appr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r¬   Údevice_gateway.integrations.pir   r   rD   rH   rQ   rn   rà   rë   rò   rý   r   rA   r(   r&   ú<module>r*     sE  ðØ "Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø €€€Ø Ð Ð Ð Ð Ð Ø €€€à €€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$ :Ð 9Ð 9Ð 9Ð 9Ð 9ð%ð %ð %ð %ð %ñ %ô %ð %ð.ð ð ð ð!ð !ð !ð !ð
	ð 	ð 	ð 	ð 	ð^ð ^ð ^ð ^ðKtð Ktð Ktð Ktð\*ð *ð *ð *ðð ð ð ðð ð ð ð*]ð ]ð ]ð ]ð ]ð ]r(   