o
    ‡×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_lineÚ 8441372f8dca4ca98694a6091fd8519fÚ 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 urt |d|ƒ}| d| ¡ ||  u r%|  u r%d u r6n ntjdd�d d d… \}}}|d urA| d| ¡ |d urM| d	 |¡¡ |d urX| 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   ÚMESSAGEÚ
MESSAGE_IDÚ	CODE_FILEÚ	CODE_LINEÚ	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   s@   � zd V  W d S  t tfy } z
|j| krt ¡  ‚ d }~ww r
   )ÚOSErrorÚIOErrorÚerrnoÚpytestÚskip)ÚcodeÚer   r   r   Úskip_oserror,   s   €
€ýr3   c                   c   s,   � zd V  W d S  t y   t ¡  Y d S w r
   )Ú
ValueErrorr/   r0   r   r   r   r   Úskip_valueerror5   s   €ÿr5   c                  C   sp  t jj} | tjƒt jksJ ‚| tjƒt jksJ ‚| tjd ƒt jks$J ‚| tjd ƒt jks0J ‚| tjd ƒt jks<J ‚| tjƒt jksFJ ‚| tjd ƒt j	ksRJ ‚| tj
d ƒt j	ks^J ‚| tj
ƒt j	kshJ ‚| tj
d ƒt jkstJ ‚| tjd ƒt jks€J ‚| tjƒt jksŠJ ‚| tjd ƒt jks–J ‚| tjƒt jks J ‚| tjƒt jksªJ ‚| tjd ƒt jks¶J ‚d S )Né   )r   ÚJournalHandlerÚmap_priorityÚloggingÚNOTSETÚ	LOG_DEBUGÚDEBUGÚLOG_INFOÚINFOÚLOG_WARNINGÚWARNÚLOG_ERRÚERRORÚLOG_CRITÚFATALÚCRITICALÚ	LOG_ALERT)Úpr   r   r   Útest_priorities<   s"   rH   c                  C   sH   ddi} t  t¡� tjdi | ¤Ž W d   ƒ d S 1 sw   Y  d S )Nz X  r   r   )r/   Úraisesr4   r   r7   ©Úkwr   r   r   Ú"test_journalhandler_init_exceptionQ   s   "ÿrL   c                  C   s"   dddœ} t jtjfi | ¤Ž d S )Nr   é   )ÚXÚX3)r   r7   r9   r>   rJ   r   r   r   Útest_journalhandler_initV   s   
rP   c               	   C   s„   t  dt jdddd d ¡} tƒ }dd|jdœ}tjt jfi |¤Ž}| | ¡ t|j	ƒdks.J ‚d|j	d	 v s7J ‚d
|j	d	 v s@J ‚d S )Nútest-loggerÚtestpathr6   Útestr   rM   )rN   rO   Úsender_functionzX=3r   zX3=4)
r9   Ú	LogRecordr>   r	   r(   r   r7   ÚemitÚlenr   )ÚrecordÚsenderrK   Úhandlerr   r   r   Útest_journalhandler_infoZ   s   
r[   c               	   C   sl   t  dt jdddd d ¡} tƒ }tjt j|jd�}| | ¡ t|j	ƒdks&J ‚t
dd„ |j	d D ƒƒs4J ‚d S )	NrQ   rR   r6   rS   )rT   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   )r9   rU   r>   r	   r   r7   r(   rV   rW   r   Úall©rX   rY   rZ   r   r   r   Ú!test_journalhandler_no_message_ide   s   
 r`   c               	   C   sj   t  dt jdddd d ¡} tƒ }tjt j|jtd�}| | ¡ t	|j
ƒdks'J ‚dtj |j
d v s3J ‚d S ©NrQ   rR   r6   rS   ©rT   r!   r   r   )r9   rU   r>   r	   r   r7   r(   ÚTEST_MIDrV   rW   r   r   r_   r   r   r   Ú)test_journalhandler_message_id_on_handlerm   s   ÿ
rd   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s(J ‚dtj |jd v s4J ‚d S ra   )r9   rU   r>   r	   r   r7   r(   rc   r   rV   rW   r   r_   r   r   r   Ú-test_journalhandler_message_id_on_handler_hexv   s   ÿ
re   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s,J ‚dtj |jd v s8J ‚d S ©	NrQ   rR   r6   rS   r!   rb   r   r   )r9   rU   r>   Ú	TEST_MID2Ú__dict__r	   r   r7   r(   rc   rV   rW   r   r   r_   r   r   r   Ú)test_journalhandler_message_id_on_message   s   
ÿ
ri   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s-J ‚dtj |jd v s9J ‚d S rf   )r9   rU   r>   rg   r   rh   r	   r   r7   r(   rc   rV   rW   r   r_   r   r   r   Ú-test_journalhandler_message_id_on_message_hex‰   s   ÿ
rj   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   ÚReaderÚ
LOCAL_ONLYÚRUNTIME_ONLYÚSYSTEM_ONLY)Új1Új2Új3Új4Új5Új6r   r   r   Útest_reader_init_flags“   s   ru   c                 C   sÈ   t  t¡� t tj¡ W d   ƒ n1 sw   Y  tƒ � tj| jtjd�}W d   ƒ n1 s2w   Y  tƒ � tj| jtjtjB d�}W d   ƒ n1 sQw   Y  tj| jtjtj	B d�}d S )N)ÚpathÚflags)
r/   rI   r4   r   rk   ÚOS_ROOTr5   ÚstrpathÚCURRENT_USERrn   )Útmpdirro   rp   rq   r   r   r   Útest_reader_os_root›   s    ÿÿÿ
ÿÿ

ÿr|   c                 C   s>   t j| jd�}t jd| jd� t j| jd�}t j| jd� d S )N©rv   r   )r   rk   ry   )r{   ro   rp   r   r   r   Útest_reader_init_path§   s   r~   c                   C   s>   t  t¡� tjddd� W d   ƒ d S 1 sw   Y  d S )Nr   éÿÿÿÿr}   ©r/   rI   r,   r   rk   r   r   r   r   Ú test_reader_init_path_invalid_fd®   ó   "ÿr�   c                   C   s>   t  t¡� tjddd� W d   ƒ d S 1 sw   Y  d S )Nr   r}   r€   r   r   r   r   Ú%test_reader_init_path_nondirectory_fd²   r‚   rƒ   c                 C   sÀ   t  | jt j¡}ttjƒ� tj|d�}W d   ƒ n1 sw   Y  t	|ƒg ks+J ‚t
ƒ � tjtj|d�}W d   ƒ n1 sAw   Y  t	|ƒg ksNJ ‚tjtj|d�}t	|ƒg ks^J ‚d S ©Nr}   )ÚosÚopenry   ÚO_RDONLYr3   r.   ÚENOSYSr   rk   Úlistr5   ÚSYSTEMrz   )r{   Úfdro   rp   rq   r   r   r   Útest_reader_init_path_fd¶   s   ÿÿrŒ   c                 C   s~   t j| jd�}|� |jrJ ‚W d   ƒ n1 sw   Y  |js#J ‚t t¡� t|ƒ W d   ƒ d S 1 s8w   Y  d S r„   )r   rk   ry   Úclosedr/   rI   r,   Únext©r{   Újr   r   r   Útest_reader_as_cmÄ   s   ÿ

"ÿr‘   c                 C   sR   t j| jd�}|� | tj¡ | tjj¡ W d   ƒ d S 1 s"w   Y  d S r„   )r   rk   ry   Úmessageid_matchr   ÚSD_MESSAGE_JOURNAL_STARTÚSD_MESSAGE_JOURNAL_STOPr   r�   r   r   r   Útest_reader_messageid_matchÍ   s
   "þr•   c                 C   óV   t j| jd�}|� | ¡  | t¡ | tj¡ W d   ƒ d S 1 s$w   Y  d S r„   )r   rk   ry   Ú	this_bootrc   r   r�   r   r   r   Útest_reader_this_bootÓ   ó   
"ýr˜   c                 C   r–   r„   )r   rk   ry   Úthis_machinerc   r   r�   r   r   r   Útest_reader_this_machineÚ   r™   r›   c              	   C   s†   t j| jd�}|�" ttjƒ� | d¡}W d   ƒ n1 sw   Y  W d   ƒ n1 s.w   Y  t|tƒs:J ‚|tƒ ksAJ ‚d S )Nr}   ÚFOOBAR)	r   rk   ry   r3   r.   rˆ   Úquery_uniqueÚ
isinstanceÚset©r{   r�   Úansr   r   r   Útest_reader_query_uniqueá   s   ÿ€ÿr¢   c              	   C   s„   t j| jd�}|�! ttjƒ� | ¡ }W d   ƒ n1 sw   Y  W d   ƒ n1 s-w   Y  t|tƒs9J ‚|tƒ ks@J ‚d S r„   )	r   rk   ry   r3   r.   rˆ   Úenumerate_fieldsrž   rŸ   r    r   r   r   Útest_reader_enumerate_fieldsé   s   
ÿ€ÿr¤   c              	   C   ót   t j| jd�}|�! ttjƒ� | ¡ }W d   ƒ n1 sw   Y  W d   ƒ n1 s-w   Y  |du s8J ‚d S ©Nr}   F©r   rk   ry   r3   r.   rˆ   Úhas_runtime_filesr    r   r   r   Útest_reader_has_runtime_filesñ   ó   
ÿ€ÿr©   c              	   C   r¥   r¦   r§   r    r   r   r   Ú test_reader_has_persistent_filesø   rª   r«   c                 C   sP   ddd„ i}t j| j|d�}| dd¡}|dksJ ‚| dd¡}|dks&J ‚d S )	NÚxxxc                 S   ó   dS ©NÚyyyr   ©Úargr   r   r   Ú<lambda>   ó    z(test_reader_converters.<locals>.<lambda>©rv   Ú
convertersó   abcr¯   Úzzzó   €€)r   rk   ry   Ú_convert_field©r{   rµ   r�   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.J ‚d S )Nc                 S   r­   r®   r   r°   r   r   r   r²   
  r³   z+test_reader_convert_entry.<locals>.<lambda>c                 S   r­   )NÚYYYr   r°   r   r   r   r²     r³   )Úx1Úx2r´   r¶   r¸   s   defs   €�)r½   Úy1r¾   Úy2r¯   r¼   )r   rk   ry   Ú_convert_entryrº   r   r   r   Útest_reader_convert_entry	  s   ÿýýrÂ   c                 C   sF   t j| jd�}t ¡ }| |¡ | d¡ t ddd¡}| |¡ d S )Nr}   i90  i²  é   rM   )r   rk   ry   ÚtimeÚseek_realtimeÚdatetime)r{   r�   ÚnowÚlong_agor   r   r   Útest_seek_realtime  s   

rÉ   c                  C   sZ   t tjƒ� t d¡} W d   ƒ n1 sw   Y  |  d¡}|dv s%J ‚td| d� d S )Nztest_journal.pyzmessage...
)é   Nzprinted message...)Úfile)r3   r.   ÚENOENTr   ÚstreamÚwriteÚprint)rÍ   Úresr   r   r   Útest_journal_stream"  s   ÿ
rÑ   )3Ú
__future__r   Ú
contextlibrÆ   r.   r9   r…   rÄ   ÚuuidÚ	tracebackr   Úsystemdr   r   Úsystemd.journalr   r/   ÚUUIDrc   rg   r	   Úcontextmanagerr3   r5   rH   rL   rP   r[   r`   rd   re   ri   rj   ru   r|   r~   r�   rƒ   rŒ   r‘   r•   r˜   r›   r¢   r¤   r©   r«   r»   rÂ   rÉ   rÑ   r   r   r   r   Ú<module>   s\    



		

	
