
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
yb!                 @   s^   d dl Zd dlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ G dd	 d	ZdS )
    N   )nonces)NonceManager)
bin_to_hex)get_security_dir)InvalidRPCMethodc               @   s   e Zd ZG dd dZG dd deZG d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S ) TestNonceManagerc               @   s@   e Zd ZG dd dZe ZedZeeZdd Z	dd Z
dS )	zTestNonceManager.MockRepositoryc               @   s   e Zd ZdZdS )z)TestNonceManager.MockRepository._Locationz/some/placeN)__name__
__module____qualname__Zorig r   r   /usr/lib64/python3.6/nonces.py	_Location   s   r       c             C   s   | j S )N)	next_free)selfr   r   r   get_free_nonce   s    z.TestNonceManager.MockRepository.get_free_noncec             C   s   || j kst|| _ d S )N)r   AssertionError)r   next_unreservedstart_noncer   r   r   commit_nonce_reservation   s    z8TestNonceManager.MockRepository.commit_nonce_reservationN)r	   r
   r   r   Z	_locationbytesidr   id_strr   r   r   r   r   r   MockRepository   s   r   c               @   s   e Zd Zdd Zdd ZdS )z"TestNonceManager.MockOldRepositoryc             C   s   t dd S )N )r   )r   r   r   r   r      s    z1TestNonceManager.MockOldRepository.get_free_noncec             C   s   t jd d S )NzDcommit_nonce_reservation should never be called on an old repository)pytestZfail)r   r   r   r   r   r   r   !   s    z;TestNonceManager.MockOldRepository.commit_nonce_reservationN)r	   r
   r   r   r   r   r   r   r   MockOldRepository   s   r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
zTestNonceManager.MockEncCipherc             C   s   d| _ || _d S )NF)iv_setiv)r   r   r   r   r   __init__%   s    z'TestNonceManager.MockEncCipher.__init__c             C   s(   |d kst |dk	st || _|| _d S )NF)r   r   r   )r   keyr   r   r   r   reset)   s    z$TestNonceManager.MockEncCipher.resetc             C   s:   |j ddd}| j}||ks td| _|j ddd| _d S )N   big)	byteorderF)to_bytesr   r   r   )r   Zexpected_ivadvancer   r   r   r   expect_iv_and_advance/   s
    z4TestNonceManager.MockEncCipher.expect_iv_and_advancec             C   s&   | j }|dkst|jddd| _d S )NFr#   r$   )r%   )r   r   r&   r   )r   r'   r   r   r   r   expect_no_reset_and_advance6   s    z:TestNonceManager.MockEncCipher.expect_no_reset_and_advanceN)r	   r
   r   r    r"   r(   r)   r   r   r   r   MockEncCipher$   s   r*   c             C   s
   d | _ d S )N)
repository)r   r   r   r   setUp;   s    zTestNonceManager.setUpc          	   C   s0   t tjjt| jjdd
}|j S Q R X d S )Nnoncer)openospathjoinr   r+   r   read)r   fdr   r   r   cache_nonce>   s    zTestNonceManager.cache_noncec          	   C   s:   t tjjt| jjdd}|j|s,tW d Q R X d S )Nr-   w)	r/   r0   r1   r2   r   r+   r   writer   )r   r-   r4   r   r   r   set_cache_nonceB   s    z TestNonceManager.set_cache_noncec             C   sZ   |j tdd | jd}| j | _t| j|d}|jd |jdd | j dksVt	d S )NNONCE_SPACE_RESERVATIONr   i       i   0000000000002033)
setattrr   r*   r   r+   r   ensure_reservationr(   r5   r   )r   monkeypatch
enc_ciphermanagerr   r   r   test_empty_cache_and_old_serverF   s    


z0TestNonceManager.test_empty_cache_and_old_serverc             C   sb   |j tdd | jd}| j | _d| j_t| j|d}|jd |jdd | j	 dks^t
d S )Nr9   r   i    r:   i   r;   )r<   r   r*   r   r+   r   r   r=   r(   r5   r   )r   r>   r?   r@   r   r   r   test_empty_cacheQ   s    


z!TestNonceManager.test_empty_cachec             C   sJ  |j tdd | jd}| j | _d | j_t| j|d}|jd |jdd | j	 dks^t
| jjdksnt
|jd |jd | j	 dkst
| jjdkst
|jd |jd | j	 dkst
| jjdkst
|jd |jd | j	 d	k st
| jjd
kst
|jd |jd | j	 dks4t
| jjdksFt
d S )Nr9   r   i    r:   r;   i3      r#   Z0000000000002063ic   @   Z00000000000020c3i   i   i   i    i   i    i3   i   i    i3   iC   i   i    i3   iC   i   )r<   r   r*   r   r+   r   r   r=   r(   r5   r   r)   )r   r>   r?   r@   r   r   r   test_empty_nonce]   s2    










z!TestNonceManager.test_empty_noncec             C   s|   |j tdd | jd}| j | _d| j_| jd t| j|d}|jd |j	dd | j
 dksht| jjdksxtd S )	Nr9   r   i    0000000000002000r:   r;   i3   i   )r<   r   r*   r   r+   r   r8   r   r=   r(   r5   r   )r   r>   r?   r@   r   r   r   test_sync_nonce   s    



z TestNonceManager.test_sync_noncec             C   s|   |j tdd | jd}| j | _d | j_| jd t| j|d}|jd |j	dd | j
 dksht| jjdksxtd S )	Nr9   r   i    rF   r:   r;   i3   i   )r<   r   r*   r   r+   r   r8   r   r=   r(   r5   r   )r   r>   r?   r@   r   r   r   test_server_just_upgraded   s    



z*TestNonceManager.test_server_just_upgradedc             C   sr   |j tdd | jd}| j | _d| j_t| j|d}|jd |jdd | j	 dks^t
| jjdksnt
d S )	Nr9   r   i   i    r:   r;   i3   i   )r<   r   r*   r   r+   r   r   r=   r(   r5   r   )r   r>   r?   r@   r   r   r   test_transaction_abort_no_cache   s    


z0TestNonceManager.test_transaction_abort_no_cachec             C   sd   |j tdd | jd}| j | _| jd t| j|d}|jd |jdd | j	 dks`t
d S )	Nr9   r   i   rF   i    r:   r;   i   )r<   r   r*   r   r+   r8   r   r=   r(   r5   r   )r   r>   r?   r@   r   r   r   !test_transaction_abort_old_server   s    



z2TestNonceManager.test_transaction_abort_old_serverc             C   s|   |j tdd | jd}| j | _d| j_| jd t| j|d}|jd |j	dd	 | j
 dksht| jjdksxtd S )
Nr9   r   i   i    Z0000000000001000r:   r;   i3   i   )r<   r   r*   r   r+   r   r8   r   r=   r(   r5   r   )r   r>   r?   r@   r   r   r   &test_transaction_abort_on_other_client   s    



z7TestNonceManager.test_transaction_abort_on_other_clientc             C   s   |j tdd | jd}| j | _d| j_| jd t| j|d}|jd |j	dd | j
 dksht| jjdksxtd| j_|jd	 |jd | j
 dkst| jjdkst|jd
 |j	dd | j
 dkst| jjdkstd S )Nr9   r   i    rF   r:   r;   i3   i @        Z0000000000004035i5@  i   i   i   i@  )r<   r   r*   r   r+   r   r8   r   r=   r(   r5   r   r)   )r   r>   r?   r@   r   r   r   test_interleaved   s&    






z!TestNonceManager.test_interleavedN)r	   r
   r   r   r   r*   r,   r5   r8   rA   rB   rE   rG   rH   rI   rJ   rK   rN   r   r   r   r   r      s   %r   )Zos.pathr0   r   Zcryptor   Zcrypto.noncesr   Z
crypto.keyr   Zhelpersr   Zremoter   r   r   r   r   r   <module>   s   