o
    +ke                     @   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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__orig r   r   9usr/lib/python3.10/site-packages/borg/testsuite/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J || _ d S r   r   r   Znext_unreservedZ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)N r   r   r   r   r   r      s   z1TestNonceManager.MockOldRepository.get_free_noncec                 C   s   t d d S )NzDcommit_nonce_reservation should never be called on an old repository)pytestZfailr   r   r   r   r   !   s   z;TestNonceManager.MockOldRepository.commit_nonce_reservationN)r
   r   r   r   r   r   r   r   r   MockOldRepository   s    r    c                 C   s
   d | _ d S r   )
repositoryr   r   r   r   setUp$   s   
zTestNonceManager.setUpc                 C   sF   t tjt| jjd}| W  d    S 1 sw   Y  d S )Nnonce)openospathjoinr   r!   r   read)r   fdr   r   r   cache_nonce'   s   $zTestNonceManager.cache_noncec                 C   sP   t tjt| jjdd}||sJ W d    d S 1 s!w   Y  d S )Nr#   w)r$   r%   r&   r'   r   r!   r   write)r   r#   r)   r   r   r   set_cache_nonce+   s   "z TestNonceManager.set_cache_noncec                 C   sP   | tdd |  | _t| jd}|dd}|dksJ |  dks&J d S NNONCE_SPACE_RESERVATIONr          0000000000002033)setattrr   r    r!   r   ensure_reservationr*   r   ZmonkeypatchmanagerZ
next_noncer   r   r   test_empty_cache_and_old_server/   s   
z0TestNonceManager.test_empty_cache_and_old_serverc                 C   sX   | tdd |  | _d| j_t| jd}|dd}|dks"J |  dks*J d S r.   r3   r   r   r!   r   r   r4   r*   r5   r   r   r   test_empty_cache9   s   
z!TestNonceManager.test_empty_cachec                 C   sH  | tdd |  | _d | j_t| jd}|dd}|dks"J |  dks*J | jjdks2J |dd}|dks>J |  dksFJ | jjdksNJ |d	d}|d	ksZJ |  dksbJ | jjdksjJ |dd
}|dksvJ |  dks~J | jjdksJ |dd}|dksJ |  dksJ | jjdksJ d S )Nr/   r   r0   r1   r2   3         i       Z0000000000002063ic   iC   @   Z00000000000020c3i   r8   r5   r   r   r   test_empty_nonceD   s0   
z!TestNonceManager.test_empty_noncec                 C   sr   | tdd |  | _d| j_| d t| jd}|dd}|dks'J |  dks/J | jjdks7J d S )Nr/   r   r0   0000000000002000r1   r2   r:   	r3   r   r   r!   r   r-   r   r4   r*   r5   r   r   r   test_sync_nonceh      

z TestNonceManager.test_sync_noncec                 C   sr   | tdd |  | _d | j_| d t| jd}|dd}|dks'J |  dks/J | jjdks7J d S )Nr/   r   r@   r0   r1   r2   r:   rA   r5   r   r   r   test_server_just_upgradedv   rC   z*TestNonceManager.test_server_just_upgradedc                 C   sh   | tdd |  | _d| j_t| jd}|dd}|dks"J |  dks*J | jjdks2J d S )Nr/   r   r0      r1   r2   r:   r8   r5   r   r   r   test_transaction_abort_no_cache   s   
z0TestNonceManager.test_transaction_abort_no_cachec                 C   sZ   | tdd |  | _| d t| jd}|dd}|dks#J |  dks+J d S )Nr/   r   r@   r0   rE   r1   r2   )r3   r   r    r!   r-   r   r4   r*   r5   r   r   r   !test_transaction_abort_old_server   s   

z2TestNonceManager.test_transaction_abort_old_serverc                 C   sr   | tdd |  | _d| j_| d t| jd}|dd}|dks'J |  dks/J | jjdks7J d S )	Nr/   r   r0   Z0000000000001000rE   r1   r2   r:   rA   r5   r   r   r   &test_transaction_abort_on_other_client   rC   z7TestNonceManager.test_transaction_abort_on_other_clientc                 C   s   | tdd |  | _d| j_| d t| jd}|dd}|dks'J |  dks/J | jjdks7J d| j_|d	d
}|d	ksGJ |  dksOJ | jjdksWJ |dd}|dkscJ |  dkskJ | jjdkssJ d S )Nr/   r   r0   r@   r1   r2   r:   i @  r;      i      Z0000000000004035i5@  rA   r5   r   r   r   test_interleaved   s$   

z!TestNonceManager.test_interleavedN)r
   r   r   r   r    r"   r*   r-   r7   r9   r?   rB   rD   rF   rG   rH   rK   r   r   r   r   r	      s    
$r	   )os.pathr%   r   cryptor   Zcrypto.noncesr   Z
crypto.keyr   helpersr   Zremoter   r	   r   r   r   r   <module>   s    