
    9aj
                        d dl mZ d dlZd dlmc mZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ dd	Zdd
ZddZddZddZdS )    )annotationsN)
TestClient)
create_app)resolve_write_mode)
system_opsreturnNonec           	        |                      dd           t                      }t          |d          }|j        }|j        }d}||k    }|st          j        d|fd||f          d	t          j                    v st          j	        |          rt          j
        |          nd	t          j
        |          t          j
        |          t          j
        |          d
z  }dd|iz  }t          t          j        |                    d x}x}x}}|j        }d} ||          }|j        }	d}
|	|
k    }|st          j        d|fd|	|
f          dt          j                    v st          j	        |          rt          j
        |          ndt          j
        |          t          j
        |          t          j
        |          t          j
        |	          t          j
        |
          dz  }dd|iz  }t          t          j        |                    d x}x}x}x}	x}}
|                    d          }|j        }d}||k    }|st          j        d|fd||f          dt          j                    v st          j	        |          rt          j
        |          ndt          j
        |          t          j
        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|j        } |            }ddi}||k    }|st          j        d|fd||f          dt          j                    v st          j	        |          rt          j
        |          ndt          j
        |          t          j
        |          t          j
        |          d
z  }dd|iz  }t          t          j        |                    d x}x}x}}d S )NJARVIS_FINANCE_WRITE_MODEF)raisingz100.64.0.10P  clientdisabled==)zM%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.state
}.write_mode
} == %(py7)sapppy0py2py4py7assert %(py9)spy9z/api/health   )zk%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
}.status_code
} == %(py11)sr   r   r   r   py6py8py11assert %(py13)spy13/api/system/restart-frontend  )z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sresponse)r   r   py5zassert %(py7)sr   detailwrite_operations_disabled)zC%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.json
}()
} == %(py7)s)delenvr   r   state
write_mode
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationgetstatus_codepostjson)monkeypatchr   r   @py_assert1@py_assert3@py_assert6@py_assert5@py_format8@py_format10@py_assert7@py_assert10@py_assert9@py_format12@py_format14r%   @py_assert4@py_format6s                    N/home/agent/.hermes/repos/FinanceManager/tests/unit/test_api_write_security.py7test_write_mode_defaults_fail_closed_for_remote_clientsrG   
   sl   2EBBB
,,C$:;;;F9-9-:-:----------:------------3-----3------9--------:-----------------------------:7m7::m$$7$07C70C77777777770C7777777777776777776777777:7777m7777$777707777C777777777777777777777777777777777{{9::H&3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&=E==??Ex)DEE?EEEEEEEEEEE?EEEEEEEEEEEEE8EEEEE8EEEEEE=EEEE?EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE    c                    ddi} t          |           }d}||k    }|st          j        d|fd||f          dt          j                    v st          j        t                     rt          j        t                     ndt          j        |           t          j        |          t          j        |          dz  }d	d
|iz  }t          t          j        |                    d x} x}x}}d S )Nr   
unexpected)environr   r   )z8%(py4)s
{%(py4)s = %(py0)s(environ=%(py2)s)
} == %(py7)sr   r   r   r   )	r   r,   r-   r.   r/   r0   r1   r2   r3   )r9   r:   r;   r<   r=   r>   s         rF   $test_unknown_write_mode_fails_closedrL      s   'BL&Q`&QRRR`V``RV```````````RV````````````````````````&Q````R````V````````````````````````````````rH   c           	        g dfd}|                      t          d|           dd lmc mc m} |                      |d|           t          d          }t          |d	          }|j        }d
} ||          }|j	        }d}	||	k    }
|
st          j        d|
fd||	f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          t          j        |          t          j        |	          dz  }dd|iz  }t!          t          j        |                    d x}x}x}x}x}
}	g }|k    }|st          j        d|fd|f          dt          j                    v st          j                  rt          j                  ndt          j        |          dz  }dd|iz  }t!          t          j        |                    d x}}t          |d	          }|j        }d
} ||          }|j	        }d}	||	k    }
|
st          j        d|
fd||	f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          t          j        |          t          j        |	          dz  }dd|iz  }t!          t          j        |                    d x}x}x}x}x}
}	dg}|k    }|st          j        d|fd|f          dt          j                    v st          j                  rt          j                  ndt          j        |          dz  }dd|iz  }t!          t          j        |                    d x}}d S )Nactionstrc                H                         |            dd|  | dddddS )N	scheduledrestart_nowzRestart geplant.T)statusrN   	component
started_atmessageworker_startedlog_available)append)rN   callss    rF   fake_restartzMtest_local_only_mode_blocks_tailnet_and_allows_loopback.<locals>.fake_restart   sA    V!))))"!
 
 	
rH   restart_system_componentr   
local_onlyr+   r   r   r#   r$   r   zl%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.post
}(%(py4)s)
}.status_code
} == %(py11)sremoter   r!   r"   )z%(py0)s == %(py3)sr[   )r   py3zassert %(py5)sr&   )z	127.0.0.1r   r   loopbackfrontend)rN   rO   )setattrr   !jarvis_finance.api.routers.systemapirouterssystemr   r   r6   r5   r,   r-   r.   r/   r0   r1   r2   r3   )r8   r\   system_routerr   ra   r9   r:   r<   r?   r@   rA   rB   rC   @py_assert2@py_format4rE   rc   r[   s                    @rF   7test_local_only_mode_blocks_tailnet_and_allows_loopbackrm      s   E

 

 

 

 

 

 
$>MMM============'A<PPP

-
-
-C$:;;;F;I5I;;566I6BIcIBcIIIIIIIIIIBcIIIIIIIIIIII6IIIII6IIIIII;IIII5IIII6IIIIBIIIIcIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII5B;5B55B#&:;;;H=K7K==788K8DKKDKKKKKKKKKKDKKKKKKKKKKKK8KKKKK8KKKKKK=KKKK7KKKK8KKKKDKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKL 5L          5L            5     5      L                           rH   c            	     p   t          d          } t          | d          }|j        }d} ||          }|j        }d}||k    }|st	          j        d|fd||f          d	t          j                    v st	          j        |          rt	          j	        |          nd	t	          j	        |          t	          j	        |          t	          j	        |          t	          j	        |          t	          j	        |          d
z  }dd|iz  }	t          t	          j        |	                    d x}x}x}x}x}}d S )Ntestr_   r   r   r#   r$   r   r`   ra   r   r!   r"   )r   r   r6   r5   r,   r-   r.   r/   r0   r1   r2   r3   )
r   ra   r9   r:   r<   r?   r@   rA   rB   rC   s
             rF   1test_test_mode_is_restricted_to_testclient_sourcerp   8   sh   

'
'
'C$:;;;F;I5I;;566I6BIcIBcIIIIIIIIIIBcIIIIIIIIIIII6IIIII6IIIIII;IIII5IIII6IIIIBIIIIcIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIrH   c                    t          t          d                    } |                     d                                          }|d         }ddh}||v }|slt	          j        d|fd||f          t	          j        |          t	          j        |          d	z  }d
d|iz  }t          t	          j        |                    d x}x}}d}|d         }||v}|slt	          j        d|fd||f          t	          j        |          t	          j        |          d	z  }d
d|iz  }t          t	          j        |                    d x}x}}d}|d         }||v}|slt	          j        d|fd||f          t	          j        |          t	          j        |          d	z  }d
d|iz  }t          t	          j        |                    d x}x}}|d         }d}||k    }|slt	          j        d|fd||f          t	          j        |          t	          j        |          d	z  }d
d|iz  }t          t	          j        |                    d x}x}}d S )Nr   r_   z/api/runtime/statusdb_pathzexternal-runtimezblocked-inside-repo)in)z%(py1)s in %(py4)s)py1r   zassert %(py6)sr   /)not in)z%(py1)s not in %(py4)s\r+   r   )z%(py1)s == %(py4)s)	r   r   r4   r7   r,   r-   r1   r2   r3   )r   payload@py_assert0r:   rk   @py_format5@py_format7s          rF   'test_runtime_status_redacts_local_pathsr|   >   s   
j999::Fjj.//4466G9L"46K!LL!LLLLLLLLLLL!LLLLLLLLLL!LLLLLLLLLLLLLLLLLLLLLLLLLLLL(gi((3(((((((((((3((((((3(((((((((((((((((((((((((((((((()wy))4)))))))))))4))))))4))))))))))))))))))))))))))))))))< .J. J.......... J..... ....J.............................rH   )r   r	   )
__future__r   builtinsr.   _pytest.assertion.rewrite	assertionrewriter,   fastapi.testclientr   jarvis_finance.api.mainr   jarvis_finance.api.securityr   jarvis_finance.servicesr   rG   rL   rm   rp   r|    rH   rF   <module>r      s    " " " " " "               ) ) ) ) ) ) . . . . . . : : : : : : . . . . . .	F 	F 	F 	Fa a a a! ! ! !<J J J J/ / / / / /rH   