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_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 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
   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   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   
r-   c                   c   s,    zd V  W d S  t y   t  Y d S w r   )
ValueErrorr)   r*   r   r   r   r   skip_valueerror5   s   r/   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   JournalHandlerZmap_priorityloggingZNOTSETZ	LOG_DEBUGDEBUGZLOG_INFOINFOZLOG_WARNINGZWARNZLOG_ERRZERRORZLOG_CRITZFATALZCRITICALZ	LOG_ALERT)pr   r   r   test_priorities<   s"   r6   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)   raisesr.   r   r1   kwr   r   r   "test_journalhandler_init_exceptionQ   s   "r:   c                  C   s"   ddd} t jtjfi |  d S )Nr      )XX3)r   r1   r2   r4   r8   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i |}||  t|j	dks.J d|j	d	 v s7J d
|j	d	 v s@J d S )Ntest-loggertestpathr0   testr   r;   )r<   r=   sender_functionzX=3r   zX3=4)
r2   	LogRecordr4   r   r"   r   r1   emitlenr	   )recordsenderr9   handlerr   r   r   test_journalhandler_infoZ   s   
rI   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 )	Nr?   r@   r0   rA   )rB   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   rC   r4   r   r   r1   r"   rD   rE   r	   allrF   rG   rH   r   r   r   !test_journalhandler_no_message_ide   s   
 rN   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 Nr?   r@   r0   rA   rB   r   r   r   )r2   rC   r4   r   r   r1   r"   TEST_MIDrD   rE   r	   r   rM   r   r   r   )test_journalhandler_message_id_on_handlerm   s   
rR   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 rO   )r2   rC   r4   r   r   r1   r"   rQ   r   rD   rE   r	   rM   r   r   r   -test_journalhandler_message_id_on_handler_hexv   s   
rS   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 	Nr?   r@   r0   rA   r   rP   r   r   )r2   rC   r4   	TEST_MID2__dict__r   r   r1   r"   rQ   rD   rE   r	   r   rM   r   r   r   )test_journalhandler_message_id_on_message   s   

rW   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 rT   )r2   rC   r4   rU   r   rV   r   r   r1   r"   rQ   rD   rE   r	   rM   r   r   r   -test_journalhandler_message_id_on_message_hex   s   
rX   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 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)   r7   r.   r   rY   ZOS_ROOTr/   strpathCURRENT_USERrZ   )tmpdirr[   r\   r]   r   r   r   test_reader_os_root   s    


rd   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   rY   ra   )rc   r[   r\   r   r   r   test_reader_init_path   s   rf   c                   C   s>   t t tjddd W d    d S 1 sw   Y  d S )Nr   re   r)   r7   r&   r   rY   r   r   r   r    test_reader_init_path_invalid_fd      "ri   c                   C   s>   t t tjddd W d    d S 1 sw   Y  d S )Nr   re   rh   r   r   r   r   %test_reader_init_path_nondirectory_fd   rj   rk   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 Nre   )osopenra   O_RDONLYr-   r(   ENOSYSr   rY   listr/   ZSYSTEMrb   )rc   fdr[   r\   r]   r   r   r   test_reader_init_path_fd   s   rs   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 rl   )r   rY   ra   closedr)   r7   r&   nextrc   jr   r   r   test_reader_as_cm   s   

"rx   c                 C   sR   t j| jd}| |tj |tjj W d    d S 1 s"w   Y  d S rl   )r   rY   ra   Zmessageid_matchr   ZSD_MESSAGE_JOURNAL_STARTZSD_MESSAGE_JOURNAL_STOPr   rv   r   r   r   test_reader_messageid_match   s
   "ry   c                 C   V   t j| jd}| |  |t |tj W d    d S 1 s$w   Y  d S rl   )r   rY   ra   Z	this_bootrQ   r   rv   r   r   r   test_reader_this_boot      
"r{   c                 C   rz   rl   )r   rY   ra   Zthis_machinerQ   r   rv   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 )Nre   ZFOOBAR)	r   rY   ra   r-   r(   rp   Zquery_unique
isinstancesetrc   rw   Z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 rl   )	r   rY   ra   r-   r(   rp   Z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 Nre   Fr   rY   ra   r-   r(   rp   Z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 )	NZxxxc                 S      dS Nyyyr   argr   r   r   <lambda>       z(test_reader_converters.<locals>.<lambda>r_   
converters   abcr   Zzzz   )r   rY   ra   Z_convert_fieldrc   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.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   Zy1r   Zy2r   r   )r   rY   ra   Z_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 )Nre   i90  i     r;   )r   rY   ra   timeZseek_realtimedatetime)rc   rw   ZnowZ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)r-   r(   ENOENTr   streamwrite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UUIDrQ   rU   r   contextmanagerr-   r/   r6   r:   r>   rI   rN   rR   rS   rW   rX   r^   rd   rf   ri   rk   rs   rx   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s\    



		

	
