a
    de                     @   s   d Z ddlmZmZmZmZmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZ ddlZddlmZ ddlZddlZddlmZ G dd	 d	eZdS )
zTest for object db    )TestBaseDummyStream
make_bytesmake_objectfixture_path)DecompressMemMapReaderFDCompressedSha1WriterLooseObjectDB
Sha1WriterMemoryDBIStream)
hex_to_binN)str_blob_type)BytesIOc                   @   sD   e Zd ZdZdZdd fddZdd Zd	d
 Zdd Zdd Z	dS )
TestStreamzTest stream classes)   i'  i  c                 C   s   d S )N )sr   r   _/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/gitdb/test/test_stream.py<lambda>)       zTestStream.<lambda>c                 C   s   d}t ||d ks(J d|t |f t || }t|D ]2}||}||| |d |  }||ks<J q<| }	|	r|	|t |	 d ksJ t|trt | | ksJ || | }
|
|ksJ t|trt | | ksJ dS )a  Make stream tests - the orig_stream is seekable, allowing it to be
        rewound and reused
        :param cdata: the data we expect to read from stream, the contents
        :param rewind_stream: function called to rewind the stream to make it ready
            for reuse
      z#Data must be larger than %i, was %iN)lenrangeread
isinstancer   dataZcompressed_bytes_read)selfstreamcdataZrewind_streamnsssir   chunkrestZrdatar   r   r   _assert_stream_reader)   s"    $


z TestStream._assert_stream_readerc              	   C   s   t dD ]}t dD ]}| jD ]}t|dd}|rttt|}t||\}}}|t	|ksdJ |tkspJ t|dd}	|	j
t	|ksJ n,t|}t||t	|}|j
t	|ksJ | ||dd  t }
|
|_|
jrJ ~|
j|ksJ qqqd S )N   FZ	randomize)close_on_deletionc                 S   s
   |  dS )Nr   )seek)rr   r   r   r   g   r   z3TestStream.test_decompress_reader.<locals>.<lambda>)r   
data_sizesr   zlibcompressr   r   r   newr   Z_sr&   r   _mclosed)r   r)   Z	with_sizedsr    ZzdatatypsizereaderZtest_readerdummyr   r   r   test_decompress_readerL   s(    


z!TestStream.test_decompress_readerc                 C   sn   t  }d|dksJ t|jdddks0J t|jdddksHJ | }|d | |ksjJ d S )	Nr'   s   hir   )Zas_hex(   r      s   hi again)r
   writer   sha)r   writerZprev_shar   r   r   test_sha_writert   s    
zTestStream.test_sha_writerc              	   C   s   | j D ]}t \}}t|}t|dd}t|||ks@J |  | t	t
j| t
|t
jtt
ddB }t
|t
j|}t|t
j|ksJ t
| |t|dksJ t
| qd S )NFr(   O_BINARYr   r   )r,   tempfilemkstempr   r   r   r:   closeassertRaisesOSErrorosopenO_RDONLYgetattrr   pathgetsizer-   r.   remove)r   r2   fdrH   ostreamr   Zwritten_datar   r   r   test_compressed_writer   s    

z!TestStream.test_compressed_writerc                 C   sp   t td}t }dD ]T}|t|}| }t||jksBJ |t	|j
|jt|}|j|ksJ qd S )NZobjects)s(   888401851f15db0eed60eb1bc29dec5ddcace911s(   7bb839852ed5e3a069966281bb08d50012fb309b)r	   r   r   r   r   r   r   r4   storer   typer   Zhexsha)r   ZodbZmdbr;   rL   r   dumpr   r   r   #test_decompress_reader_special_case   s    z.TestStream.test_decompress_reader_special_caseN)
__name__
__module____qualname____doc__r,   r&   r7   r=   rM   rQ   r   r   r   r   r   #   s   #(r   )rU   Zgitdb.test.libr   r   r   r   r   Zgitdbr   r   r	   r
   r   r   Z
gitdb.utilr   r-   Z	gitdb.typr   r?   rD   ior   r   r   r   r   r   <module>   s    