
    {j                         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 Z
d Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )    N)	state_libc                 l   t          j        ddd           t          j        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}||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                    }|sd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 S )Ncamera_primaryrunningzcam0_20260101T000000.mkvsegmentstate==)z%(py1)s == %(py4)s)py1py4zassert %(py6)spy6r   last_updatez5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}
isinstancefloat)py0py2py3py5)r   write_state
read_state
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationr   r   @py_builtinslocals_should_repr_global_name)
sim_envresult@py_assert0@py_assert3@py_assert2@py_format5@py_format7@py_assert1@py_assert4@py_format6s
             CC:\Users\jvoigtlander\Desktop\BubbleCamCode\tests\test_state_lib.py test_write_then_read_round_tripsr+      sn   *I?YZZZZ!"233F'?'i'?i''''''''''?i'''''?''''i'''''''''''''''''''''''''''): :: ::::::::::: :::::::::: ::::::::::::::::::::::::::::]+3:+U333333333333333:33333:333333+33333333333U33333U3333333333333333333333333333    c                    t           j        }d} ||          }d }||u }|st          j        d|fd||f          dt	          j                    v st          j        t                     rt          j        t                     ndt          j        |          t          j        |          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}x}x}}d S )Nnever_writteniszP%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.read_state
}(%(py4)s)
} is %(py9)sr   r   r   r   r   py9assert %(py11)spy11)
r   r   r   r   r   r   r   r   r   r   r    r'   r#   @py_assert5@py_assert8@py_assert7@py_format10@py_format12s           r*   test_read_missing_returns_noner<      s(   88008D80D88888888880D88888888888898888898888888888888808888D888888888888888888888888888888888r,   c                 ~   | d         }|                     dd           |dz                      d           t          j        }d} ||          }d }||u }|st	          j        d|fd||f          d	t          j                    v st	          j        t                    rt	          j	        t                    nd	t	          j	        |          t	          j	        |          t	          j	        |          t	          j	        |          d
z  }dd|iz  }t          t	          j        |                    d x}x}x}x}}d S )N	state_dirT)parentsexist_okzbroken.jsonz{not valid jsonbrokenr/   r1   r   r2   r4   r5   )mkdir
write_textr   r   r   r   r   r   r   r   r   r   )	r    r>   r'   r#   r7   r8   r9   r:   r;   s	            r*   #test_read_corrupt_file_returns_nonerD      sb   $IOOD4O000**+<===11))1T1)T1111111111)T111111111111911111911111111111111)1111T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1r,   c                 :   t          j        dd           t           j        }d} ||          }d}||u }|st          j        d|fd||f          dt          j                    v st          j        t                     rt          j        t                     ndt          j        |          t          j        |          t          j        |          t          j        |          dz  }dd	|iz  }t          t          j
        |                    d x}x}x}x}}d S )
Nsensorsr   Tr/   zP%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.is_running
}(%(py4)s)
} is %(py9)sr   r2   r4   r5   r   r   
is_runningr   r   r   r   r   r   r   r   r6   s           r*   +test_is_running_true_when_fresh_and_runningrJ      s;   )Y///2	2	**2d2*d2222222222*d22222222222292222292222222222	2222*2222d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222r,   c                 :   t          j        dd           t           j        }d} ||          }d}||u }|st          j        d|fd||f          dt          j                    v st          j        t                     rt          j        t                     ndt          j        |          t          j        |          t          j        |          t          j        |          dz  }dd	|iz  }t          t          j
        |                    d x}x}x}x}}d S )
NrF   startingFr/   rG   r   r2   r4   r5   rH   r6   s           r*   /test_is_running_false_when_state_is_not_runningrM      s;   )Z0003	3	**3e3*e3333333333*e33333333333393333393333333333	3333*3333e333333333333333333333333333333333r,   c           	         t          j        dd           t          j        d          }|dxx         dz  cc<   | d         dz                      t	          j        |                     t           j        }d}d} |||          }d	}||u }|st          j        d
|fd||f          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}}d S )NrF   r   r     r>   sensors.json   stale_afterFr/   )zf%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.is_running
}(%(py4)s, stale_after=%(py6)s)
} is %(py11)sr   r   r   r   r   py8r5   assert %(py13)spy13)r   r   r   rC   jsondumpsrI   r   r   r   r   r   r   r   r   
r    r	   r'   r#   r7   r9   @py_assert10@py_assert9r;   @py_format14s
             r*    test_is_running_false_when_staler^   $   s   )Y/// ++E	-C[N*66tz%7H7HIIIC	CrC	r:::CeC:eCCCCCCCCCC:eCCCCCCCCCCCC9CCCCC9CCCCCCCCCC	CCCCrCCCC:CCCCeCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr,   c                    t           j        }d} ||          }d}||u }|st          j        d|fd||f          dt	          j                    v st          j        t                     rt          j        t                     ndt          j        |          t          j        |          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}x}x}}d S )	Nr   Fr/   zO%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.has_error
}(%(py4)s)
} is %(py9)sr   r2   r4   r5   )
r   	has_errorr   r   r   r   r   r   r   r   r6   s           r*   .test_has_error_false_for_never_started_servicerb   ,   s+   9/9/009E90E99999999990E99999999999999999999999999999/999909999E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                 >   t          j        ddd           t           j        }d} ||          }d}||u }|st          j        d|fd||f          dt          j                    v st          j        t                     rt          j        t                     ndt          j        |          t          j        |          t          j        |          t          j        |          d	z  }d
d|iz  }t          t          j
        |                    d x}x}x}x}}d S )NrF   errorz	i2c fault)detailTr/   r`   r   r2   r4   r5   r   r   ra   r   r   r   r   r   r   r   r   r6   s           r*   &test_has_error_true_for_explicit_errorrg   0   s@   )W[AAAA1y1y))1T1)T1111111111)T11111111111191111191111111111y1111)1111T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1r,   c           	         t          j        dd           t          j        d          }|dxx         dz  cc<   | d         dz                      t	          j        |                     t           j        }d}d} |||          }d	}||u }|st          j        d
|fd||f          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}}d S )NrF   r   r   rO   r>   rP   rQ   rR   Tr/   )ze%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.has_error
}(%(py4)s, stale_after=%(py6)s)
} is %(py11)sr   rT   rV   rW   )r   r   r   rC   rX   rY   ra   r   r   r   r   r   r   r   r   rZ   s
             r*   'test_has_error_true_for_stale_heartbeatri   5   s   )Y/// ++E	-C[N*66tz%7H7HIIIAyAbAyb999ATA9TAAAAAAAAAA9TAAAAAAAAAAAA9AAAAA9AAAAAAAAAAyAAAAbAAAA9AAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr,   c                 :   t          j        dd           t           j        }d} ||          }d}||u }|st          j        d|fd||f          dt          j                    v st          j        t                     rt          j        t                     ndt          j        |          t          j        |          t          j        |          t          j        |          dz  }dd	|iz  }t          t          j
        |                    d x}x}x}x}}d S )
NrF   r   Fr/   r`   r   r2   r4   r5   rf   r6   s           r*   &test_has_error_false_for_fresh_runningrk   =   s;   )Y///2y2y))2U2)U2222222222)U22222222222292222292222222222y2222)2222U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222r,   c                    t           j        } |            }d}||u }|st          j        d|fd||f          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 )NTr/   zR%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.recording_requested
}()
} is %(py7)sr   r   r   r   py7assert %(py9)sr3   )
r   recording_requestedr   r   r   r   r   r   r   r   r    r'   r#   @py_assert6r7   @py_format8r:   s          r*   ;test_recording_requested_defaults_true_when_no_switch_stateru   B   s   (2((**2d2*d2222222222*d2222222222229222229222222(2222*2222d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2r,   c                    t          j        ddd           t           j        } |            }d}||u }|st          j        d|fd||f          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record_switchr   Trq   r/   rm   r   rn   rp   r3   r   r   rq   r   r   r   r   r   r   r   r   rr   s          r*   4test_recording_requested_true_on_live_record_readingrz   G   s%   /9$OOOO(2((**2d2*d2222222222*d2222222222229222229222222(2222*2222d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2r,   c                    t          j        ddd           t           j        } |            }d}||u }|st          j        d|fd||f          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 )Nrw   r   Frx   r/   rm   r   rn   rp   r3   ry   rr   s          r*   3test_recording_requested_false_on_live_stop_readingr|   L   s%   /9%PPPP(3((**3e3*e3333333333*e3333333333339333339333333(3333*3333e3333333333333333333333333333333r,   c                    t          j        ddd           t          j        d          }|dxx         dz  cc<   | d         dz                      t	          j        |                     t           j        }d	} ||
          }d}||u }|st          j        d|fd||f          dt          j
                    v st          j        t                     rt          j        t                     ndt          j        |          t          j        |          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}x}x}}d S )Nrw   r   Frx   r   rO   r>   zrecord_switch.jsonrQ   rR   Tr/   )ze%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.recording_requested
}(stale_after=%(py4)s)
} is %(py9)sr   r2   r4   r5   )r   r   r   rC   rX   rY   rq   r   r   r   r   r   r   r   r   )	r    r	   r'   r#   r7   r8   r9   r:   r;   s	            r*   5test_recording_requested_true_when_switch_state_staler~   Q   s   /9%PPPP 11E	-C[00<<TZ=N=NOOO(@R@((R888@D@8D@@@@@@@@@@8D@@@@@@@@@@@@9@@@@@9@@@@@@(@@@@R@@@@8@@@@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@r,   c                    dd l }t          j        dd           | d         dz                                   j        }|j        }||z  }|sddt          j                    v st          j        |          rt          j	        |          nddt          j                    v st          j        |          rt          j	        |          ndt          j	        |          d	z  }t          t          j        |                    d x}}d S )
Nr   rF   r   r>   rP   z7assert (%(py0)s & %(py3)s
{%(py3)s = %(py1)s.S_IROTH
})modestat)r   r   r   )r   r   r   st_modeS_IROTHr   r   r   r   r   r   r   )r    r   r   r$   r(   r%   s         r*   #test_state_files_are_world_readabler   Z   s    KKK)Y///K >17799AD,4,44$$,r,   c                    t          j        dd           t          j        ddd           t          | d                             d                    }g }||k    }|st	          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}}d S )Nr   r   zb.mkvr   r>   z*.tmpr
   )z%(py0)s == %(py3)s	leftovers)r   r   zassert %(py5)sr   )r   r   listglobr   r   r   r   r   r   r   r   )r    r   r$   r'   @py_format4r)   s         r*   3test_write_state_is_atomic_no_tmp_files_left_behindr   d   s   *I666*IwGGGGW[)..w7788I9?999r,   )builtinsr   _pytest.assertion.rewrite	assertionrewriter   rX   time	bubblecamr   r+   r<   rD   rJ   rM   r^   rb   rg   ri   rk   ru   rz   r|   r~   r   r    r,   r*   <module>r      sF                       4 4 49 9 92 2 23 3 3
4 4 4
D D D: : :2 2 2
B B B3 3 3
3 3 3
3 3 3
4 4 4
A A A      r,   