U
    X]'                     @   s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dlmZmZ d dlmZ d dlZedZedZG dd dZejd	d
 Zej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!d" Z"d#d$ Z#d%d& Z$d'd( Z%d)d* Z&d+d, Z'd-d. Z(d/d0 Z)d1d2 Z*d3d4 Z+d5d6 Z,d7d8 Z-d9d: Z.d;d< Z/d=d> Z0d?d@ Z1dAdB Z2dS )C    )print_functionN)journalid128
_make_lineZ 8441372f8dca4ca98694a6091fd8519fZ 8441370000000000000000001fd85000c                   @   s   e Zd Zdd ZdddZdS )
MockSenderc                 C   s
   g | _ d S N)buf)self r   ;/usr/lib/python3/dist-packages/systemd/test/test_journal.py__init__   s    zMockSender.__init__Nc           	      K   s   d| g}|d k	r,t |d|}|d|  ||  krJ|  krJd krln ntjddd d d \}}}|d k	r|d|  |d k	r|d	| |d k	r|d
|  |dd | D  | j| d S )NzMESSAGE=hexMESSAGE_ID=   )limitr      z
CODE_FILE=zCODE_LINE={:d}z
CODE_FUNC=c                 s   s   | ]\}}t ||V  qd S r   r   ).0keyvalr   r   r   	<genexpr>)   s     z"MockSender.send.<locals>.<genexpr>)getattrappend
_tracebackextract_stackformatextenditemsr	   )	r
   ZMESSAGE
MESSAGE_IDZ	CODE_FILEZ	CODE_LINEZ	CODE_FUNCkwargsargsidr   r   r   send   s    
"zMockSender.send)NNNN)__name__
__module____qualname__r   r"   r   r   r   r   r      s         r   c              
   c   sJ   z
d V  W n: t tfk
rD } z|j| kr2t   W 5 d }~X Y nX d S r   )OSErrorIOErrorerrnopytestskip)codeer   r   r   skip_oserror,   s    

r-   c                   c   s,   z
d V  W n t k
r&   t  Y nX d S r   )
ValueErrorr)   r*   r   r   r   r   skip_valueerror5   s    
r/   c                  C   s|  t jj} | tjt jkst| tjt jks0t| tjd t jksHt| tjd t jks`t| tj	d t jksxt| tj	t jkst| tj	d t j
kst| tjd t j
kst| tjt j
kst| tjd t jkst| tjd t jkst| tjt jkst| tjd t jks2t| tjt jksHt| tjt jks^t| tjd t jksxtd S )N   )r   JournalHandlerZmap_priorityloggingZNOTSETZ	LOG_DEBUGAssertionErrorDEBUGZLOG_INFOINFOZLOG_WARNINGZWARNZLOG_ERRZERRORZLOG_CRITZFATALZCRITICALZ	LOG_ALERT)pr   r   r   test_priorities<   s"    r7   c               	   C   s.   ddi} t t tjf |  W 5 Q R X d S )Nz X  r   )r)   raisesr.   r   r1   kwr   r   r   "test_journalhandler_init_exceptionQ   s    r;   c                  C   s   ddd} t jtjf|  d S )Nr      )XX3)r   r1   r2   r5   r9   r   r   r   test_journalhandler_initV   s    
r?   c               	   C   s   t dt jdddd d } t }dd|jd}tjt jf|}||  t|j	dksXt
d|j	d	 ksjt
d
|j	d	 ks|t
d S )Ntest-loggertestpathr0   testr   r<   )r=   r>   sender_functionzX=3r   zX3=4)r2   	LogRecordr5   r   r"   r   r1   emitlenr	   r3   )recordsenderr:   handlerr   r   r   test_journalhandler_infoZ   s    
rJ   c               	   C   sl   t dt jdddd d } t }tjt j|jd}||  t|j	dksLt
tdd |j	d D sht
d S )	Nr@   rA   r0   rB   )rC   c                 s   s   | ]}| d  V  qdS )r   N)
startswith)r   mr   r   r   r   k   s     z4test_journalhandler_no_message_id.<locals>.<genexpr>r   )r2   rD   r5   r   r   r1   r"   rE   rF   r	   r3   allrG   rH   rI   r   r   r   !test_journalhandler_no_message_ide   s    
rO   c               	   C   sj   t dt jdddd d } t }tjt j|jtd}||  t	|j
dksNtdtj |j
d ksftd S Nr@   rA   r0   rB   rC   r   r   r   )r2   rD   r5   r   r   r1   r"   TEST_MIDrE   rF   r	   r3   r   rN   r   r   r   )test_journalhandler_message_id_on_handlerm   s    
rS   c               	   C   sl   t dt jdddd d } t }tjt j|jtjd}|	|  t
|jdksPtdtj |jd kshtd S rP   )r2   rD   r5   r   r   r1   r"   rR   r   rE   rF   r	   r3   rN   r   r   r   -test_journalhandler_message_id_on_handler_hexv   s    
rT   c               	   C   st   t dt jdddd d } t| jd< t }tjt j|jt	d}|
|  t|jdksXtdtj |jd ksptd S 	Nr@   rA   r0   rB   r   rQ   r   r   )r2   rD   r5   	TEST_MID2__dict__r   r   r1   r"   rR   rE   rF   r	   r3   r   rN   r   r   r   )test_journalhandler_message_id_on_message   s    

rX   c               	   C   sv   t dt jdddd d } tj| jd< t }tjt j|j	t
d}||  t|jdksZtdtj |jd ksrtd S rU   )r2   rD   r5   rV   r   rW   r   r   r1   r"   rR   rE   rF   r	   r3   rN   r   r   r   -test_journalhandler_message_id_on_message_hex   s    
rY   c                  C   sR   t  } t t j}t t j}t t j}t t jt jB t jB }t d}d S )Nr   )r   ReaderZ
LOCAL_ONLYZRUNTIME_ONLYSYSTEM_ONLY)j1j2j3Zj4Zj5Zj6r   r   r   test_reader_init_flags   s    r_   c              	   C   s   t t ttj W 5 Q R X t  tj| jtjd}W 5 Q R X t  tj| jtjtjB d}W 5 Q R X tj| jtjtj	B d}d S )N)pathflags)
r)   r8   r.   r   rZ   ZOS_ROOTr/   strpathCURRENT_USERr[   )tmpdirr\   r]   r^   r   r   r   test_reader_os_root   s    

re   c                 C   s>   t j| jd}t jd| jd t j| jd}t j| jd d S )Nr`   r   )r   rZ   rb   )rd   r\   r]   r   r   r   test_reader_init_path   s    rg   c                	   C   s(   t t tjddd W 5 Q R X d S )Nr   rf   r)   r8   r&   r   rZ   r   r   r   r    test_reader_init_path_invalid_fd   s    rj   c                	   C   s(   t t tjddd W 5 Q R X d S )Nr   rf   ri   r   r   r   r   %test_reader_init_path_nondirectory_fd   s    rk   c              	   C   s   t | jt j}ttj tj|d}W 5 Q R X t	|g ksBt
t  tjtj|d}W 5 Q R X t	|g kstt
tjtj|d}t	|g kst
d S Nrf   )osopenrb   O_RDONLYr-   r(   ENOSYSr   rZ   listr3   r/   ZSYSTEMrc   )rd   fdr\   r]   r^   r   r   r   test_reader_init_path_fd   s    rs   c              	   C   sT   t j| jd}| |jrtW 5 Q R X |js2ttt t| W 5 Q R X d S rl   )	r   rZ   rb   closedr3   r)   r8   r&   nextrd   jr   r   r   test_reader_as_cm   s    
rx   c              	   C   s<   t j| jd}|  |tj |tjj W 5 Q R X d S rl   )r   rZ   rb   Zmessageid_matchr   ZSD_MESSAGE_JOURNAL_STARTZSD_MESSAGE_JOURNAL_STOPr   rv   r   r   r   test_reader_messageid_match   s    ry   c              	   C   s@   t j| jd}|$ |  |t |tj W 5 Q R X d S rl   )r   rZ   rb   Z	this_bootrR   r   rv   r   r   r   test_reader_this_boot   s
    
rz   c              	   C   s@   t j| jd}|$ |  |t |tj W 5 Q R X d S rl   )r   rZ   rb   Zthis_machinerR   r   rv   r   r   r   test_reader_this_machine   s
    
r{   c              
   C   s^   t j| jd}|& ttj |d}W 5 Q R X W 5 Q R X t|tsLt	|t ksZt	d S )Nrf   ZFOOBAR)
r   rZ   rb   r-   r(   rp   Zquery_unique
isinstancesetr3   rd   rw   Zansr   r   r   test_reader_query_unique   s    r   c              
   C   s\   t j| jd}|$ ttj | }W 5 Q R X W 5 Q R X t|tsJt	|t ksXt	d S rl   )
r   rZ   rb   r-   r(   rp   Zenumerate_fieldsr|   r}   r3   r~   r   r   r   test_reader_enumerate_fields   s    r   c              
   C   sL   t j| jd}|$ ttj | }W 5 Q R X W 5 Q R X |dksHtd S Nrf   Fr   rZ   rb   r-   r(   rp   Zhas_runtime_filesr3   r~   r   r   r   test_reader_has_runtime_files   s
    r   c              
   C   sL   t j| jd}|$ ttj | }W 5 Q R X W 5 Q R X |dksHtd S r   r   r~   r   r   r    test_reader_has_persistent_files   s
    r   c                 C   sP   ddd i}t j| j|d}|dd}|dks4t|dd}|dksLtd S )	NZxxxc                 S   s   dS Nyyyr   argr   r   r   <lambda>       z(test_reader_converters.<locals>.<lambda>r`   
converters   abcr   Zzzz   )r   rZ   rb   Z_convert_fieldr3   rd   r   rw   r   r   r   r   test_reader_converters   s    r   c                 C   s`   dd dd d}t j| j|d}|ddddgdd	gd
}|ddddgdd	gd
ks\td S )Nc                 S   s   dS r   r   r   r   r   r   r   
  r   z+test_reader_convert_entry.<locals>.<lambda>c                 S   s   dS )NYYYr   r   r   r   r   r     r   )x1x2r   r   r   s   defs   )r   Zy1r   Zy2r   r   )r   rZ   rb   Z_convert_entryr3   r   r   r   r   test_reader_convert_entry	  s    r   c                 C   sF   t j| jd}t }|| |d tddd}|| d S )Nrf   i90  i     r<   )r   rZ   rb   timeZseek_realtimedatetime)rd   rw   ZnowZlong_agor   r   r   test_seek_realtime  s    

r   c               	   C   sF   t tj td} W 5 Q R X | d}|dks6ttd| d d S )Nztest_journal.pyzmessage...
)   Nzprinted message...)file)r-   r(   ZENOENTr   streamwriter3   print)r   resr   r   r   test_journal_stream"  s
    
r   )3Z
__future__r   
contextlibr   r(   r2   rm   r   Zuuid	tracebackr   Zsystemdr   r   Zsystemd.journalr   r)   ZUUIDrR   rV   r   contextmanagerr-   r/   r7   r;   r?   rJ   rO   rS   rT   rX   rY   r_   re   rg   rj   rk   rs   rx   ry   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sZ   



		

	
