U
    9%e                     @   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k
rh   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.   )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   V/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/pooch/tests/test_hashes.pydata_dir_mirror:   s    r   c              	   C   s   t dd}|  zt| |jdd t|j}| }W 5 Q R X |tksNt	t
| di d}||j t| d }|d}||kst	t| W 5 t|j X dS )zGCheck that the registry builder creates the right file names and hashesFdelete	recursive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    

r2   c              	   C   s   t dd}|  zt| |jdd t|j}| }W 5 Q R X |tksNt	t
| di d}||j t| d |dkst	t|d t| d d }||d	kst	t|d	 W 5 t|j X d
S )z7Check that the registry builder works in recursive modeFr   Tr   r   r   r!   subdirzsubdir/tiny-data.txtN)r   r"   r#   r$   r%   r   r&   r'   REGISTRY_RECURSIVEr)   r   r*   r+   r,   r   )r   r-   r.   r    r/   r0   r   r   r   test_make_registry_recursiveX   s    
r5   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)r1   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xxhashr7   skipXXHASH_MAJOR_VERSIONr#   r   joinr   r   r   r)   )r6   expected_hashr1   Zreturned_hashr   r   r   test_file_hashu   s    



rG   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
||rtdS )
z*Make sure the hash checking function worksr=   Nr>   r?   r   r@   r!   ::blablablabla)rA   rB   r7   rC   rD   r#   r   rE   r   r   r	   r)   )r6   rF   r1   
known_hashr   r   r   test_hash_matches   s    



rK   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stdS )	zBMake sure the hash checking function raises an exception if strictr!   rH   TstrictrI   	NeverlandrM   sourceN)r#   r   rE   r   r   r	   r)   r7   r8   r9   r+   r:   )r6   rF   r1   rJ   Zbad_hasherrorr   r   r   test_hash_matches_strict   s    
rR   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)rJ    )r1   rJ   T)rJ   rM   )r#   r   rE   r   r	   r)   )r1   r   r   r   test_hash_matches_none   s    rT   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!   rH   TrL   NrN   rO   )r#   r   rE   r   r   upperr	   r)   r7   r8   r9   r+   r:   )r6   rF   r1   rJ   rQ   r   r   r   test_hash_matches_uppercase   s    "rW   )0__doc__r#   pathlibr   tempfiler   r7   rB   intVERSIONsplitrD   ImportErrorcorer   hashesr   r   r	   utilsr   r   r+   __file__parentr   r(   r4   ZTINY_DATA_HASHES_HASHLIBZTINY_DATA_HASHES_XXHcopyZTINY_DATA_HASHESupdateZfixturer   r2   r5   r<   markZparametrizelistitemskeysrG   rK   rR   rT   rW   r   r   r   r   <module>   sx   














