a
    !f$E                     @   s   d dl Z G dd deZG dd de jZG dd de jZG dd	 d	eZG d
d deZG dd deZ	G dd deZ
dS )    Nc                   @   s   e Zd ZdZdd ZdS )
_SendMixinFc                 C   s
   d| _ d S )NT)_send_calledself r   e/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/bigtable/happybase/test_batch.pysend   s    z_SendMixin.sendN)__name__
__module____qualname__r   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd8d"d#Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd!S )9	TestBatchc                 C   s   ddl m} |S )Nr   )Batch)gcloud.bigtable.happybase.batchr   )r   r   r   r   r   _getTargetClass   s    zTestBatch._getTargetClassc                 O   s   |   |i |S N)r   r   argskwargsr   r   r   _makeOne!   s    zTestBatch._makeOnec                 C   sv   t  }| |}| |j| | |jd  | |jd  | |jd  | |jd | |ji  | |j	d d S )NFr   )
objectr   assertEqual_table_batch_size
_timestamp_delete_range_transaction_row_map_mutation_count)r   tablebatchr   r   r   test_constructor_defaults$   s    
z#TestBatch.test_constructor_defaultsc           
      C   s   ddl m} ddlm} t }d}d}d}| j||||d}| |j| | |j| | |j	|d|  |d|d	  }||d
}	| |j
|	 | |j| | |ji  | |jd d S )Nr   )_datetime_from_microseconds)TimestampRangel   n9$ *   F)	timestamp
batch_sizetransactioni     )end)Zgcloud._helpersr!   Zgcloud.bigtable.row_filtersr"   r   r   r   r   r   r   r   r   r   r   )
r   r!   r"   r   r$   r%   r&   r   Znext_timestamp
time_ranger   r   r   test_constructor_explicit/   s(    

z#TestBatch.test_constructor_explicitc                    s   ddl m} ddlm} g   fdd}t }t }|||d | j||d W d    n1 sd0    Y  |  |jg d S )Nr   _Monkeyr   c                    s     |  d S r   )append)msgZwarnedr   r   	mock_warnL   s    zBTestBatch.test_constructor_with_non_default_wal.<locals>.mock_warnZ_WARNwal)gcloud._testingr,   gcloud.bigtable.happybaser   r   r   r   _WAL_WARNING)r   r,   MUTr1   r   r4   r   r0   r   %test_constructor_with_non_default_walF   s    ,z/TestBatch.test_constructor_with_non_default_walc                 C   s   t  }d}| t | j||d W d    n1 s80    Y  d}| t | j||d W d    n1 st0    Y  d S )Nir%   r   )r   assertRaises
ValueErrorr   )r   r   r%   r   r   r   -test_constructor_with_non_positive_batch_sizeV   s    ,z7TestBatch.test_constructor_with_non_positive_batch_sizec                 C   sL   t  }d}d}| t  | j|||d W d    n1 s>0    Y  d S )Nr'   T)r%   r&   )r   r;   	TypeErrorr   )r   r   r%   r&   r   r   r   2test_constructor_with_batch_size_and_transactional_   s    z<TestBatch.test_constructor_with_batch_size_and_transactionalc                 C   s   t  }| |}t  |_}t  |d< }t  |d< }d|_| |jd | |jd | |jd | 	|jd | 	|i  |
  | |jd | |jd | |jd | |jd | |i  d S )Nzrow-key1zrow-key2i9  r   r'   )r   r   _MockRowMapr   _MockRowr   r   clear_countcommitsassertNotEqualr   )r   r   r   Zrow_mapZrow1Zrow2r   r   r   	test_sendg   s"    
zTestBatch.test_sendc                 C   sZ   |   }G dd dt|}t }||}| |jd  | |j |  | |j d S )Nc                   @   s   e Zd ZdS )z=TestBatch.test__try_send_no_batch_size.<locals>.BatchWithSendNr	   r
   r   r   r   r   r   BatchWithSend   s   rG   )r   r   r   r   r   assertFalser   	_try_sendr   klassrG   r   r   r   r   r   test__try_send_no_batch_size}   s    z&TestBatch.test__try_send_no_batch_sizec                 C   sz   |   }G dd dt|}t }d}|||d}| |j| | |j d}||_| ||k  |	  | |j d S )Nc                   @   s   e Zd ZdS )zATestBatch.test__try_send_too_few_mutations.<locals>.BatchWithSendNrF   r   r   r   r   rG      s   rG   
   r:      
r   r   r   r   r   rH   r   r   
assertTruerI   r   rK   rG   r   r%   r   Zmutation_countr   r   r    test__try_send_too_few_mutations   s    z*TestBatch.test__try_send_too_few_mutationsc                 C   sz   |   }G dd dt|}t }d}|||d}| |j| | |j d}||_| ||k |	  | |j d S )Nc                   @   s   e Zd ZdS )z;TestBatch.test__try_send_actual_send.<locals>.BatchWithSendNrF   r   r   r   r   rG      s   rG   rM   r:      rO   rQ   r   r   r   test__try_send_actual_send   s    z$TestBatch.test__try_send_actual_sendc                 C   s>   t  }| |}d}t  }||j|< ||}| || d S Nrow-key)r   r   r   _get_rowr   )r   r   r   row_keyZrow_objresultr   r   r   test__get_row_exists   s    


zTestBatch.test__get_row_existsc                 C   sr   t  }t|}| |}| |ji  t  |_}d}||}| || | |j|g | |j||i d S rU   )	_MockLowLevelTable
_MockTabler   r   r   r   mock_rowrW   	rows_made)r   low_level_tabler   r   r]   rX   rY   r   r   r   test__get_row_create_new   s    

z"TestBatch.test__get_row_create_newc           	   	      s   ddl m} ddlm} g   fdd}t }| |}d}i }d }| ||j |||dJ | t	  |j
|||d W d    n1 s0    Y  W d    n1 s0    Y  |  |jg d S )	Nr   r+   r-   c                    s     |  tdd S NzNo need to execute the rest.r.   RuntimeErrormessager0   r   r   r1      s    
z-TestBatch.test_put_bad_wal.<locals>.mock_warnrV   r2   r3   )r5   r,   r6   r   r   r   rD   _WAL_SENTINELr;   rc   putr   r7   )	r   r,   r8   r1   r   r   rowdatar4   r   r0   r   test_put_bad_wal   s    
LzTestBatch.test_put_bad_walc                 C   s   dd l }t }| |}t  |_}d}t  |j|< }d}d}d}	d}
d}d}|d	 | |	|
d	 | |i}| |jd | |jg  |	|| | |jd
 |
d}t|j|d}|||	f}d|i}|
||f}d|i}| |||f||fg d S )Nr   rV   cf1Zqual1value1cf2Zqual2value2:rN   )keyr$   )operatorr   r   r   rA   r   r   r   set_cell_callsrg   
itemgettersorted)r   rq   r   r   r$   rX   rh   col1_famZ	col1_qualrl   col2_fam	col2_qualrn   ri   Z	first_eltZordered_callsZ
cell1_argsZcell1_kwargsZ
cell2_argsZcell2_kwargsr   r   r   test_put   s:    



zTestBatch.test_putc                 C   s   |   }G dd d|}t }||}d}t |j|< | |jd | |jd |j|i d | |jd | |jd d S )Nc                   @   s   e Zd ZdZdd ZdS )z5TestBatch.test_put_call_try_send.<locals>.CallTrySendr   c                 S   s   |  j d7  _ d S Nr'   try_send_callsr   r   r   r   rI     s    z?TestBatch.test_put_call_try_send.<locals>.CallTrySend._try_sendNr	   r
   r   r{   rI   r   r   r   r   CallTrySend  s   r}   rV   r   )ri   r'   )r   r   rA   r   r   r   r{   rg   r   rK   r}   r   r   rX   r   r   r   test_put_call_try_send  s    z TestBatch.test_put_call_try_sendNc                 C   s   t  }| |}||_d}d}d}|d |d | g}t }||| | |jd ||f}	d|i}
| |j|	|
fg |f}d|ji}| |j	||fg d S )Nrk   rm   col-namero   r   r)   columns)
r   r   r   rA   Z_delete_columnsr   rC   delete_cell_callsALL_COLUMNSdelete_cells_calls)r   r)   r   r   ru   rv   rw   r   Z
row_objectcell_deleted_argscell_deleted_kwargsfam_deleted_argsfam_deleted_kwargsr   r   r   _delete_columns_test_helper$  s(    

z%TestBatch._delete_columns_test_helperc                 C   s   |    d S r   )r   r   r   r   r   test__delete_columns;  s    zTestBatch.test__delete_columnsc                 C   s@   t  }| t | j|d W d    n1 s20    Y  d S )N)r)   )r   r;   r<   r   )r   r)   r   r   r   'test__delete_columns_w_time_and_col_fam>  s    z1TestBatch.test__delete_columns_w_time_and_col_famc           	   	      s   ddl m} ddlm} g   fdd}t }| |}d}g }d }| ||j |||dJ | t	  |j
|||d W d    n1 s0    Y  W d    n1 s0    Y  |  |jg d S )	Nr   r+   r-   c                    s     |  tdd S ra   rb   rd   r0   r   r   r1   I  s    
z0TestBatch.test_delete_bad_wal.<locals>.mock_warnrV   r2   )r   r4   )r5   r,   r6   r   r   r   rD   rf   r;   rc   deleter   r7   )	r   r,   r8   r1   r   r   rh   r   r4   r   r0   r   test_delete_bad_walC  s    
LzTestBatch.test_delete_bad_walc                 C   sn   t  }| |}d}t  |j|< }| |jd | |jd |j|d d | |jd | |jd d S )NrV   r   r   r'   )r   r   rA   r   r   deletesr   r   r   r   r   rX   rh   r   r   r   test_delete_entire_row]  s    
z TestBatch.test_delete_entire_rowc                 C   s   t  }| |}t  |_d}t  |j|< }| |jd | |jd | t	 |j
|d d W d    n1 sv0    Y  | |jd | |jd d S )NrV   r   r   )r   r   r   rA   r   r   r   r   r;   r<   r   r   r   r   r   test_delete_entire_row_with_tsj  s    
,z(TestBatch.test_delete_entire_row_with_tsc                 C   s   |   }G dd d|}t }||}d}t |j|< | |jd | |jd |j|g d | |jd | |jd d S )Nc                   @   s   e Zd ZdZdd ZdS )z8TestBatch.test_delete_call_try_send.<locals>.CallTrySendr   c                 S   s   |  j d7  _ d S ry   rz   r   r   r   r   rI     s    zBTestBatch.test_delete_call_try_send.<locals>.CallTrySend._try_sendNr|   r   r   r   r   r}   |  s   r}   rV   r   r   r'   )r   r   rA   r   r   r   r{   r   r~   r   r   r   test_delete_call_try_sendy  s    z#TestBatch.test_delete_call_try_sendc                 C   s   t  }| |}d}t  |j|< }| |jd d}d}d}|d |d | g}|j||d | |jd ||f}	d	d i}
| |j|	|
fg |f}d
|ji}| |j	||fg d S )NrV   r   rk   rm   r   ro   r   rN   r)   r   )
r   r   rA   r   r   r   r   r   r   r   )r   r   r   rX   rh   ru   rv   rw   r   r   r   r   r   r   r   r   test_delete_some_columns  s*    

z"TestBatch.test_delete_some_columnsc                 C   sh   |   }G dd dt|}t }||}| |j | W d    n1 sN0    Y  | |j d S )Nc                   @   s   e Zd ZdS )z5TestBatch.test_context_manager.<locals>.BatchWithSendNrF   r   r   r   r   rG     s   rG   )r   r   r   rH   r   rP   rJ   r   r   r   test_context_manager  s    zTestBatch.test_context_managerc              	   C   s   |   }G dd dt|}t }||}| |j | t< | tdW d    n1 sb0    Y  W d    n1 s0    Y  | |j d S )Nc                   @   s   e Zd ZdS )zVTestBatch.test_context_manager_with_exception_non_transactional.<locals>.BatchWithSendNrF   r   r   r   r   rG     s   rG   Something bad happened)r   r   r   rH   r   r;   r<   rP   rJ   r   r   r   5test_context_manager_with_exception_non_transactional  s    Dz?TestBatch.test_context_manager_with_exception_non_transactionalc              	   C   s   |   }G dd dt|}t }||dd}| |j | t< | tdW d    n1 sf0    Y  W d    n1 s0    Y  | |j |  | |j d S )Nc                   @   s   e Zd ZdS )zRTestBatch.test_context_manager_with_exception_transactional.<locals>.BatchWithSendNrF   r   r   r   r   rG     s   rG   T)r&   r   )	r   r   r   rH   r   r;   r<   r   rP   rJ   r   r   r   1test_context_manager_with_exception_transactional  s    Dz;TestBatch.test_context_manager_with_exception_transactional)N)r	   r
   r   r   r   r    r*   r9   r=   r?   rE   rL   rR   rT   rZ   r`   rj   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s6   	
$
r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )Test__get_column_pairsc                 O   s   ddl m} ||i |S )Nr   )_get_column_pairs)r   r   )r   r   r   r   r   r   r   _callFUT  s    zTest__get_column_pairs._callFUTc                 C   sD   g d}|  |}dd gdd gddgddgddgg}| || d S )N)s   cf1zcf2:zcf3::z	cf3:name1z	cf3:name2rk   rm   cf3 Zname1Zname2)r   r   )r   r   rY   Zexpected_resultr   r   r   test_it  s    
zTest__get_column_pairs.test_itc                 C   s>   dg}|  t | | W d    n1 s00    Y  d S )Nza:b:cr;   r<   r   r   r   r   r   r   test_bad_column  s    z&Test__get_column_pairs.test_bad_columnc                 C   s>   d g}|  t | | W d    n1 s00    Y  d S r   )r;   AttributeErrorr   r   r   r   r   test_bad_column_type  s    z+Test__get_column_pairs.test_bad_column_typec                 C   s<   d }|  t | | W d    n1 s.0    Y  d S r   )r;   r>   r   r   r   r   r   test_bad_columns_var  s    z+Test__get_column_pairs.test_bad_columns_varc                 C   sB   dg}|  t | j|dd W d    n1 s40    Y  d S )Nza:T)Zrequire_qualifierr   r   r   r   r   )test_column_family_with_require_qualifier  s    z@Test__get_column_pairs.test_column_family_with_require_qualifierN)	r	   r
   r   r   r   r   r   r   r   r   r   r   r   r     s   r   c                       s    e Zd ZdZ fddZ  ZS )r@   r   c                    s    |  j d7  _ tt|   d S ry   )rB   superr@   clearr   	__class__r   r   r     s    z_MockRowMap.clear)r	   r
   r   rB   r   __classcell__r   r   r   r   r@     s   r@   c                   @   sB   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dS )rA   c                 C   s"   d| _ d| _g | _g | _g | _d S )Nr   )rC   r   rr   r   r   r   r   r   r   __init__  s
    z_MockRow.__init__c                 C   s   |  j d7  _ d S ry   )rC   r   r   r   r   commit  s    z_MockRow.commitc                 C   s   |  j d7  _ d S ry   )r   r   r   r   r   r     s    z_MockRow.deletec                 O   s   | j ||f d S r   )rr   r.   r   r   r   r   set_cell  s    z_MockRow.set_cellc                 O   s   | j ||f d S r   )r   r.   r   r   r   r   delete_cell!  s    z_MockRow.delete_cellc                 O   s   | j ||f d S r   )r   r.   r   r   r   r   delete_cells$  s    z_MockRow.delete_cellsN)r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   rA     s   rA   c                   @   s   e Zd Zdd ZdS )r\   c                 C   s
   || _ d S r   )Z_low_level_table)r   r_   r   r   r   r   *  s    z_MockTable.__init__N)r	   r
   r   r   r   r   r   r   r\   (  s   r\   c                   @   s   e Zd Zdd Zdd ZdS )r[   c                 O   s   || _ || _g | _d | _d S r   )r   r   r^   r]   r   r   r   r   r   0  s    z_MockLowLevelTable.__init__c                 C   s   | j | | jS r   )r^   r.   r]   )r   rX   r   r   r   rh   6  s    z_MockLowLevelTable.rowN)r	   r
   r   r   rh   r   r   r   r   r[   .  s   r[   )Z	unittest2r   r   ZTestCaser   r   dictr@   rA   r\   r[   r   r   r   r   <module>   s      E'	