o
    +ke"                     @   s   d dl Z d dlZd dlZzd dlZW n ey   dZY nw d dlZddlmZmZm	Z	m
Z
mZmZmZmZmZ edZdZed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S )#    N   )	get_compressor
CompressorCompressionSpecCNONEZLIBLZ4LZMAZSTDAutoi   s   fooooooooobaaaaaaaarfooooooooobaaaaaaaarfooooooooobaaaaaaaarfooooooooobaaaaaaaarfooooooooobaaaaaaaarfooooooooobaaaaaaaarfooooooooobaaaaaaaarfooooooooobaaaaaaaarfooooooooobaaaaaaaarfooooooooobaaaaaaaarzlib   namelevelc                  C   s   t dd} t| tsJ t dd} t| tsJ t dd} t| ts$J tt t dd W d    d S 1 s:w   Y  d S )Nnoner   lz4r   Zfoobar)r   
isinstancer   r   r   pytestraisesKeyError)c r   ;usr/lib/python3.10/site-packages/borg/testsuite/compress.pytest_get_compressor   s   


"r   c                  C   sf   t dd} | t}t|ttksJ t|v sJ t| |ks#J ttdi t|ks1J d S )Nr   r   r   r   compressdatalen
decompressr   paramsr   cdatar   r   r   
test_cnull   s   

 r$   c                  C   Z   t dd} | t}t|ttk sJ t| |ksJ ttdi t|ks+J d S )Nr   r   r   r   r"   r   r   r   test_lz4'   
   

 r&   c                 C   sl   |  tddd  tdd }t|dksJ td}||}t|t|ks+J |||ks4J d S )NZdecidec                 S   s   t S )N)r   )Zalways_compressr   r   r   <lambda>1   s    z,test_lz4_buffer_allocation.<locals>.<lambda>i  P 
   i   r   )setattrr   osurandomr   r   r   r    )Zmonkeypatchr   r   r#   r   r   r   test_lz4_buffer_allocation/   s   
r-   c                  C   r%   )Nr   r   r   r   r"   r   r   r   	test_zlib;   r'   r.   c                  C   sl   t d u r	td tdd} | t}t|ttk sJ t| |ks&J ttdi t	|ks4J d S )NzNo lzma support found.lzmar   r   )
r/   r   skipr   r   r   r   r    r   r!   r"   r   r   r   	test_lzmaC   s   


 r1   c                  C   r%   )Nzstdr   r   r   r"   r   r   r   	test_zstdM   r'   r3   c                   C   s   t t tdi td W d    n1 sw   Y  t t tdi td W d    d S 1 s:w   Y  d S )Ns   totalcraps    notreallyzlibr   )r   r   
ValueErrorr   r!   r    r   r   r   r   test_autodetect_invalidU   s   "r5   c                  C   sv   t dD ]4} td| d}|t}tt| }||ksJ ||}t|ks(J tdi t|}t|ks8J qd S )Nr)   r   r   r   )ranger   r   r   r   r    r   r!   )r   r   Zcdata1Zcdata2Zdata2r   r   r   test_zlib_compat\   s   

r7   c               
   C   s   t ddt ddt dddt dddt dd	dt dd
dt dddg} tr3| t dd	dt dd
dg7 } | D ]}tdi |}t||tksJJ q5d S )Nr   r   r   r2      r      r   r   r   	   r/   r   )dictr/   r   r   r    r   )Zparams_listr!   r   r   r   r   test_compressorj   s"   







r<   c            	      C   s   t dj} t dj}t dj}td}| |}||}||}t|t| }|dk r7t|tks;J ts;J d}| |}t|t	ksKJ d S )Nzauto,zlib,9r   zlib,9i  gGz?s     -Oi18\bEhm~)
r   
compressorbytesr   r   r   detectr   r   r   )	Zcompressor_auto_zlibZcompressor_lz4Zcompressor_zlibr   Zcompressed_auto_zlibZcompressed_lz4Zcompressed_zlibZratio
compressedr   r   r   	test_auto   s   





"
rB   c                     s  t dj td } td t|   kr%td d ks(J  J t fddtdD dks:J t d	}t|jjtsGJ |j td } d
\}}|t d t|   krr|t d d ksuJ  J t fddtdD dksJ t d}t|jjt	sJ |j td } d
\}}|t d t|   kr|t d d ksJ  J t fddtdD dksJ t d}t|jjt
sJ |j td } d
\}}|t d t|   kr|t d d ksJ  J t fddtdD dks$J t d}t|jjts2J |j td } dt|   krMdksPJ  J td } dt|   krhdkskJ  J d S )Nzobfuscate,1,nonei'     e   c                       h | ]	}t  qS r   r   r   .0ir>   r   r   r   	<setcomp>       z!test_obfuscate.<locals>.<setcomp>d   2   zobfuscate,2,lz4)g?gMbP?i  c                    rE   r   rF   rG   rJ   r   r   rK      rL   r)   zobfuscate,6,zstd,3i c                    rE   r   rF   rG   rJ   r   r   rK      rL   Z   zobfuscate,2,auto,zstd,10c                    rE   r   rF   rG   rJ   r   r   rK      rL   zobfuscate,110,nonei  i  i  iL  iT  iT  )r   r>   r?   r   r   r6   r   innerr   r
   r   r   )rA   csZmin_compressZmax_compressr   rJ   r   test_obfuscate   sL   

4$
<$
<$
@&
$
(rR   c                  C   sX  t tj td W d    n1 sw   Y  ttdjts$J ttdjts.J tdj} t| t	s:J | j
dksAJ tdj} t| t	sMJ | j
dksTJ tdj} t| t	s`J | j
d	ksgJ t tj td
 W d    n1 s|w   Y  tdj}t|tsJ |j
dksJ tdj}t|tsJ |j
dksJ tdj}t|tsJ |j
d	ksJ tdj}t|tsJ |j
dksJ tdj}t|tsJ |j
dksJ tdj}t|tsJ |j
dksJ t tj td W d    n	1 s	w   Y  t tj td W d    d S 1 s%w   Y  d S )N r   r   r   r   zzlib,0r   r=   r:   zzlib,9,invalidr/   zlzma,0zlzma,9r2   r9   zzstd,1r8   zzstd,22   zlzma,9,invalidinvalid)r   r   argparseZArgumentTypeErrorr   r   r>   r   r   r   r   r	   r
   )r   r/   r2   r   r   r   test_compression_specs   sR   












$rW   )"rV   r+   r   r/   ImportErrorr   r   r   r   r   r   r   r   r	   r
   r   r?   bufferr   r;   r!   r   r$   r&   r-   r.   r1   r3   r5   r7   r<   rB   rR   rW   r   r   r   r   <module>   s4    ,	
9