
    g_                         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	e      Zy)
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                   8    e Zd ZdZdZd fdZd Zd Zd Zd Z	y	)

TestStreamzTest stream classes)   i'  i  c                      y )N )ss    K/var/www/openai/venv/lib/python3.12/site-packages/gitdb/test/test_stream.py<lambda>zTestStream.<lambda>)   s    4    c                 X   d}t        |      |dz
  kD  sJ d|t        |      fz         t        |      |z  }t        |      D ](  }|j                  |      }|||z  |dz   |z   }||k(  r(J  |j                         }	|	r|	|t        |	       d k(  sJ t        |t              r,t        |j                               |j                         k(  sJ  ||       |j                         }
|
|k(  sJ t        |t              r-t        |j                               |j                         k(  sJ yy)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rdatas              r   _assert_stream_readerz TestStream._assert_stream_reader)   s4    5zBF"\$IRQTUZQ[L\$\\" Z2rA;;r?D!b&!a%2.E5= = 
 {{}5#d)---- f45v{{}%)E)E)GGGG 	f ~~f45v{{}%)E)E)GGGG 6r   c           
         t        d      D ]@  }t        d      D ].  }| j                  D ]  }t        |d      }|rt        j                  t        t        |            }t        j                  ||      \  }}}|t        |      k(  sJ |t        k(  sJ t        |d      }	|	j                  t        |      k(  sGJ t        j                  |      }t        ||t        |            }|j                  t        |      k(  sJ | j                  ||d        t               }
|
|_        |
j                  rJ ~|
j                  |k(  rJ  1 C y )N   F	randomize)close_on_deletionc                 $    | j                  d      S )Nr   )seek)rs    r   r   z3TestStream.test_decompress_reader.<locals>.<lambda>g   s    q	r   )r   
data_sizesr   zlibcompressr   r   r   newr   _sr-   r   _mclosed)r#   r2   	with_sizedsr%   zdatatypsizereadertest_readerdummys              r   test_decompress_readerz!TestStream.test_decompress_readerL   s7   !&q"1X	//B&rU;E ! $k-.O P,B,F,FuN_,`)T6#s5z111"m333 '=UV[&\*~~U;;; !%e 4!7?PRUV[R\!]%yyCJ666 ..vu>QR (ME %FI$||++ <<+<<<<A * & "*r   c                 0   t               }d|j                  d      k(  sJ t        |j                  d            dk(  sJ t        |j                  d            dk(  sJ |j                         }|j                  d       |j                         |k7  sJ y )	Nr/   s   hir   )as_hex(   r      s   hi again)r   writer   sha)r#   writerprev_shas      r   test_sha_writerzTestStream.test_sha_writert   s    FLL''''6::Q:'(B...6::Q:'(B... ::<[!zz|x'''r   c           
         | j                   D ]a  }t        j                         \  }}t        |      }t	        |d      }t        |      |j                  |      k(  sJ |j                          | j                  t        t        j                  |       t        j                  |t        j                  t        t        dd      z        }t        j                  |t        j                  j!                  |            }t        |      t        j                  j!                  |      k(  sJ t        j                  |       |t#        j$                  |d      k(  sJ t        j&                  |       d y )NFr0   O_BINARYr   r   )r6   tempfilemkstempr	   r   r   rJ   closeassertRaisesOSErrorosopenO_RDONLYgetattrr   pathgetsizer7   r8   remove)r#   r>   fdrZ   ostreamr!   written_datas          r   test_compressed_writerz!TestStream.test_compressed_writer   s   //B'')HB,R0GbE2D t9d 3333MMO grxx4 r{{WRQ-GGHB772rwwt'<=L|$(====HHRL4==q#9999IIdO' "r   c           
      j   t        t        d            }t               }dD ]  }|j                  t	        |            }|j                         }t        |      |j                  k(  sJ |j                  t        |j                  |j                  t        |                  }|j                  |k(  rJ  y )Nobjects)s(   888401851f15db0eed60eb1bc29dec5ddcace911s(   7bb839852ed5e3a069966281bb08d50012fb309b)r
   r   r   r$   r   r   r   rA   storer   typer   hexsha)r#   odbmdbrK   r^   r!   dumps          r   #test_decompress_reader_special_casez.TestStream.test_decompress_reader_special_case   s    L34jBCjjC1G <<>Dt9,,, 99WW\\7<<OPD;;#%%%Br   N)
__name__
__module____qualname____doc__r6   r-   rE   rN   r`   ri   r   r   r   r   r   #   s)    /JAO  HF#=P	(.&r   r   )rm   gitdb.test.libr   r   r   r   r   gitdbr   r	   r
   r   r   r   
gitdb.utilr   r7   	gitdb.typr   rQ   rV   ior   r   r   r   r   <module>rs      sD   
    "   	 @& @&r   