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sJ | tjt jksJ | tjd t jksJ | tjt jksJ | tjt jksJ | tjd t jksJ 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\    



		

	
