o
    a&i                     @   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	
dd ZW n ey3   dZdZY nw 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.   )Pooch)make_registry	file_hashhash_matches   )check_tiny_datamirror_directorydatastorezOtiny-data.txt baee0894dba14b12085eacb204284b97e362f4f3e5a5807693cc90ef415c1b2d
zsubdir/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   BC:\wamp64\www\opt\env\Lib\site-packages\pooch/tests/test_hashes.pydata_dir_mirror:   s   
r   c              	   C   s   t dd}|  zRt| |jdd t|j}| }W d   n1 s&w   Y  |tks1J t| di d}||j t	| d }|
d}||ksOJ t| W t|j dS t|j w )zGCheck that the registry builder creates the right file names and hashesFdelete	recursiveNsome bogus URLpathbase_urlregistrytiny-data.txt)r   closer   nameopenreadREGISTRYr   load_registrystrfetchr   osremove)r   outfilefoutr    puptruefnamer   r   r   test_make_registryC   s   



r1   c              	   C   s   t dd}|  zit| |jdd t|j}| }W d   n1 s&w   Y  |tks1J t| di d}||j t	| d |
dksKJ t|
d t	| d	 d }||
d
kscJ t|
d
 W t|j dS t|j w )z7Check that the registry builder works in recursive modeFr   Tr   Nr   r   r!   subdirzsubdir/tiny-data.txt)r   r"   r   r#   r$   r%   REGISTRY_RECURSIVEr   r'   r(   r)   r   r*   r+   )r   r,   r-   r    r.   r/   r   r   r   test_make_registry_recursiveX   s    

r4   c                  C   sL   t t} tddd W d   n1 sw   Y  dt| jv s$J dS )z!Test an invalid hashing algorithmZ	somethingZblah)r0   algNz'blah')pytestraises
ValueErrorr   r(   value)excr   r   r    test_file_hash_invalid_algorithmn   s   r;   zalg,expected_hash)Zidsc                 C   sf   |  drtdu rtd | dvrtdk rtd tjtd}t	| t
|| }||ks1J dS )z2Test the hash calculation using hashlib and xxhashxxhNrequires xxhashr   r   r   requires xxhash > 2.0r!   )
startswithxxhashr6   skipXXHASH_MAJOR_VERSIONr*   r   joinr   r   r   )r5   expected_hashr0   Zreturned_hashr   r   r   test_file_hashu   s   



rF   c                 C   s   |  drtdu rtd | dvrtdk rtd tjtd}t	| |  d| }t
||s4J |  d	}t
||r@J dS )
z*Make sure the hash checking function worksr<   Nr=   r>   r   r?   r!   ::blablablabla)r@   rA   r6   rB   rC   r*   r   rD   r   r   r	   )r5   rE   r0   
known_hashr   r   r   test_hash_matches   s   



rJ   c                 C   s   t jtd}t| |  d| }t||ddsJ |  d}tt}t||ddd W d   n1 s8w   Y  dt	|j
v sFJ tt}t||ddd W d   n1 s^w   Y  |t	|j
v slJ dS )	zBMake sure the hash checking function raises an exception if strictr!   rG   TstrictrH   	NeverlandrL   sourceN)r*   r   rD   r   r   r	   r6   r7   r8   r(   r9   )r5   rE   r0   rI   Zbad_hasherrorr   r   r   test_hash_matches_strict   s   
rQ   c                  C   sD   t jtd} t| ddsJ tdddsJ t| ddds J dS )zHThe hash checking function should always returns True if known_hash=Noner!   N)rI    )r0   rI   T)rI   rL   )r*   r   rD   r   r	   )r0   r   r   r   test_hash_matches_none   s   rS   c                 C   s   t jtd}t| |  d|  }t||ddsJ tt	}t||dd ddd W d   n1 s9w   Y  dt
|jv sGJ dS )	z:Hash matching should be independent of upper or lower caser!   rG   TrK   NrM   rN   )r*   r   rD   r   r   upperr	   r6   r7   r8   r(   r9   )r5   rE   r0   rI   rP   r   r   r   test_hash_matches_uppercase   s   rV   )0__doc__r*   pathlibr   tempfiler   r6   rA   intVERSIONsplitrC   ImportErrorcorer   hashesr   r   r	   utilsr   r   r(   __file__parentr   r&   r3   ZTINY_DATA_HASHES_HASHLIBZTINY_DATA_HASHES_XXHcopyZTINY_DATA_HASHESupdateZfixturer   r1   r4   r;   markZparametrizelistitemskeysrF   rJ   rQ   rS   rV   r   r   r   r   <module>   s|   













