o
    h_                     @   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   J/var/www/vscode/kcb/lib/python3.10/site-packages/gitdb/test/test_stream.py<lambda>)   s    zTestStream.<lambda>c                 C   s   d}t ||d ksJ d|t |f t || }t|D ]}||}||| |d |  }||ks7J q| }	|	rK|	|t |	 d ksKJ t|tr\t | | ks\J || | }
|
|ksjJ t|tr{t | | ks}J dS 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   datacompressed_bytes_read)selfstreamcdatarewind_streamnsssir   chunkrestrdatar   r   r   _assert_stream_reader)   s&   $


z TestStream._assert_stream_readerc              	   C   s   t dD ]x}t dD ]q}| jD ]k}t|dd}|rHttt|}t||\}}}|t	|ks2J |tks8J t|dd}	|	j
t	|ksGJ nt|}t||t	|}|j
t	|ks^J | ||dd  t }
|
|_|
jrrJ ~|
j|kszJ qq
qd S )N   F	randomize)close_on_deletionc                 S   s
   |  dS )Nr   )seek)rr   r   r   r   g   s   
 z3TestStream.test_decompress_reader.<locals>.<lambda>)r   
data_sizesr   zlibcompressr   r   r   newr   _sr(   r   _mclosed)r   r,   	with_sizedsr    zdatatypsizereader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sJ t|jdddks$J | }|d | |ks5J d S )	Nr)   s   hir   )as_hex(   r      s   hi again)r
   writer   sha)r   writer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sOJ t
| |t|dks^J t
| qd S )NFr*   O_BINARYr   r   )r/   tempfilemkstempr   r   r   rB   closeassertRaisesOSErrorosopenO_RDONLYgetattrr   pathgetsizer0   r1   remove)r   r7   fdrQ   ostreamr   written_datar   r   r   test_compressed_writer   s   

z!TestStream.test_compressed_writerc                 C   sp   t td}t }dD ]*}|t|}| }t||jks!J |t	|j
|jt|}|j|ks5J qd S )Nobjects)s(   888401851f15db0eed60eb1bc29dec5ddcace911s(   7bb839852ed5e3a069966281bb08d50012fb309b)r	   r   r   r   r   r   r   r:   storer   typer   hexsha)r   odbmdbrC   rU   r   dumpr   r   r   #test_decompress_reader_special_case   s   z.TestStream.test_decompress_reader_special_caseN)
__name__
__module____qualname____doc__r/   r(   r>   rF   rW   r_   r   r   r   r   r   #   s    #(r   )rc   gitdb.test.libr   r   r   r   r   gitdbr   r   r	   r
   r   r   
gitdb.utilr   r0   	gitdb.typr   rH   rM   ior   r   r   r   r   r   <module>   s    