U
    `»{j–  ã                   @   sÄ  d Z ddlZddlmZ ddlmZ ddlZz$ddlZeej	j
ddd�d ƒZW n ek
rl   dZdZY nX dd	lmZ dd
lmZmZmZ ddlmZmZ eeeƒjd d ƒZdZdZddddœZddddddœZe ¡ Ze  e¡ ej!dd„ ƒZ"dd„ Z#dd„ Z$dd „ Z%ej&j'd!e(e )¡ ƒe(e *¡ ƒd"�d#d$„ ƒZ+ej&j'd!e(e )¡ ƒe(e *¡ ƒd"�d%d&„ ƒZ,ej&j'd!e(e )¡ ƒe(e *¡ ƒd"�d'd(„ ƒZ-d)d*„ Z.ej&j'd!e(e )¡ ƒe(e *¡ ƒd"�d+d,„ ƒZ/dS )-z3
Test the hash calculation and checking functions.
é    N)ÚPath)ÚNamedTemporaryFileÚ.é   )Úmaxsplité   )ÚPooch)Úmake_registryÚ	file_hashÚhash_matches)Úcheck_tiny_dataÚmirror_directoryÚdataÚstorezOtiny-data.txt baee0894dba14b12085eacb204284b97e362f4f3e5a5807693cc90ef415c1b2d
z¥subdir/tiny-data.txt baee0894dba14b12085eacb204284b97e362f4f3e5a5807693cc90ef415c1b2d
tiny-data.txt baee0894dba14b12085eacb204284b97e362f4f3e5a5807693cc90ef415c1b2d
Z(c03148994acd89317915ea2f2d080d6dd127aa09Z@baee0894dba14b12085eacb204284b97e362f4f3e5a5807693cc90ef415c1b2dZ 70e2afd3fd7e336ae478b1e740a5f08e)Úsha1Úsha256Úmd5Zf843815fe57948faZ98d6f1a2Z 0267d220db258fffb0c567c0ecd1b689Z811e3f2a12aec53f)Úxxh64Úxxh32Zxxh128Zxxh3_128Zxxh3_64c                 C   s
   t t| ƒS )z•
    Mirror the test data folder on a temporary directory. Needed to avoid
    permission errors when pooch is installed on a non-writable path.
    )r   ÚDATA_DIR)Ztmp_path© r   úV/var/www/html/bwave/python/venv/lib/python3.8/site-packages/pooch/tests/test_hashes.pyÚdata_dir_mirror:   s    r   c              	   C   s¬   t dd�}| ¡  z†t| |jdd� t|jdd��}| ¡ }W 5 Q R X |tksRt	‚t
| di d�}| |j¡ t| d ƒ}| d¡}||ksŽt	‚t|ƒ W 5 t |j¡ X d	S )
zGCheck that the registry builder creates the right file names and hashesF©Údelete©Ú	recursiveúutf-8©Úencodingúsome bogus URL©ÚpathÚbase_urlÚregistryútiny-data.txtN)r   ÚcloseÚosÚremoveÚnamer	   ÚopenÚreadÚREGISTRYÚAssertionErrorr   Úload_registryÚstrÚfetchr   )r   ÚoutfileÚfoutr$   ÚpupÚtrueÚfnamer   r   r   Útest_make_registryC   s    

r6   c              	   C   sÚ   t dd�}| ¡  z´t| |jdd� t|jdd��}| ¡ }W 5 Q R X |tksRt	‚t
| di d�}| |j¡ t| d	 ƒ| d	¡ks†t	‚t| d	¡ƒ t| d
 d	 ƒ}|| d¡ks¶t	‚t| d¡ƒ W 5 t |j¡ X dS )z7Check that the registry builder works in recursive modeFr   Tr   r   r   r    r!   r%   Úsubdirzsubdir/tiny-data.txtN)r   r&   r'   r(   r)   r	   r*   r+   ÚREGISTRY_RECURSIVEr-   r   r.   r/   r0   r   )r   r1   r2   r$   r3   r4   r   r   r   Útest_make_registry_recursiveX   s    
r9   c               	   C   s8   t  t¡�} tddd� W 5 Q R X dt| jƒks4t‚dS )z!Test an invalid hashing algorithmZ	somethingZblah)r5   Úalgz'blah'N)ÚpytestÚraisesÚ
ValueErrorr
   r/   Úvaluer-   )Úexcr   r   r   Ú test_file_hash_invalid_algorithmn   s    r@   zalg,expected_hash)Zidsc                 C   sf   |   d¡r6tdkrt d¡ | dkr6tdk r6t d¡ tj td¡}t	|ƒ t
|| ƒ}||ksbt‚dS )z2Test the hash calculation using hashlib and xxhashÚxxhNúrequires xxhash©r   r   r   úrequires xxhash > 2.0r%   )Ú
startswithÚxxhashr;   ÚskipÚXXHASH_MAJOR_VERSIONr'   r"   Újoinr   r   r
   r-   )r:   Úexpected_hashr5   Zreturned_hashr   r   r   Útest_file_hashu   s    



rK   c                 C   s„   |   d¡r6tdkrt d¡ | dkr6tdk r6t d¡ tj td¡}t	|ƒ | › d|› �}t
||ƒsht‚| › d	�}t
||ƒr€t‚dS )
z*Make sure the hash checking function worksrA   NrB   rC   r   rD   r%   ú:ú:blablablabla)rE   rF   r;   rG   rH   r'   r"   rI   r   r   r   r-   )r:   rJ   r5   Ú
known_hashr   r   r   Útest_hash_matches‡   s    



rO   c              	   C   s´   t j td¡}t|ƒ | › d|› �}t||dd�s6t‚| › d�}t t	¡�}t||ddd� W 5 Q R X dt
|jƒksxt‚t t	¡�}t||ddd� W 5 Q R X |t
|jƒks°t‚dS )	zBMake sure the hash checking function raises an exception if strictr%   rL   T©ÚstrictrM   Ú	Neverland©rQ   ÚsourceN)r'   r"   rI   r   r   r   r-   r;   r<   r=   r/   r>   )r:   rJ   r5   rN   Zbad_hashÚerrorr   r   r   Útest_hash_matches_strict�   s    
rV   c                  C   sD   t j td¡} t| dd�st‚tddd�s.t‚t| ddd�s@t‚dS )zHThe hash checking function should always returns True if known_hash=Noner%   N)rN   Ú )r5   rN   T)rN   rQ   )r'   r"   rI   r   r   r-   )r5   r   r   r   Útest_hash_matches_none³   s    rX   c              	   C   s~   t j td¡}t|ƒ | › d| ¡ › �}t||dd�s:t‚t 	t
¡�}t||dd… ddd� W 5 Q R X dt|jƒkszt‚dS )	z:Hash matching should be independent of upper or lower caser%   rL   TrP   NéûÿÿÿrR   rS   )r'   r"   rI   r   r   Úupperr   r-   r;   r<   r=   r/   r>   )r:   rJ   r5   rN   rU   r   r   r   Útest_hash_matches_uppercase½   s    "r[   )0Ú__doc__r'   Úpathlibr   Útempfiler   r;   rF   ÚintÚVERSIONÚsplitrH   ÚImportErrorÚcorer   Úhashesr	   r
   r   Úutilsr   r   r/   Ú__file__Úparentr   r,   r8   ZTINY_DATA_HASHES_HASHLIBZTINY_DATA_HASHES_XXHÚcopyZTINY_DATA_HASHESÚupdateZfixturer   r6   r9   r@   ÚmarkZparametrizeÚlistÚitemsÚkeysrK   rO   rV   rX   r[   r   r   r   r   Ú<module>   sx   
ÿÿýú



ý


ý


ý



ý