
    Dj                     t   S SK rS SKJs  Jr  S SKrS SKJr  \R                  R                  S \" \" \5      R                  5       R                  S   S-  5      5        S SKrS SKJrJrJr  S SKJrJrJrJrJrJr  \R6                  " SS9S	 5       rS
 rS rS rS r S r!S r"S r#S r$S r%S r&S r'S r(S r)g)    N)Path   src)	MagicMockpatchcall)handle_database_createhandle_database_drophandle_database_user_createhandle_database_user_delete#handle_database_user_reset_password"handle_database_user_update_grantsT)autousec               #      #    [        S5       n [        SSS9 n[        5       nSUl        SUl        SUl        X l        U v   S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f7f)Nzactions.database.load_configzshutil.whichz/usr/bin/mysqlreturn_valuerootroot_passwordz/var/run/mysqld/mysqld.sock)r   r   
mysql_usermysql_passwordmysql_socketr   )	mock_load
mock_whichconfigs      AD:\Programs\laragon\www\wolf\agent\tests\test_actions_database.pymock_load_configr      sc     	-	.)	~,<	=" /;!' 
> 
/	.	=	= 
/	.s3   A6A%*AA%	A6
A"	A%%
A3/A6c            	      ,   SS0n [        SSS9 n[        S5       n[        5       nSUl        X2l        [	        U 5      nUS   nS	oeUL ow(       do  [
        R                  " S
U4SXV45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n	[        [
        R                  " U	5      5      eS =n=pvUS   nSoeU:H  ow(       do  [
        R                  " SU4SXV45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n	[        [
        R                  " U	5      5      eS =n=pvUR                  5         UR                  S   S   n
SoUU
;  ow(       d  [
        R                  " SU4SXZ45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U
5      (       a  [
        R                  " U
5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS =pWUR                  S   S   nSoUU;   ow(       d  [
        R                  " SU4SX]45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS =pWS S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f) Nnametestdbactions.database.db_existsFr   subprocess.runr   successTisz%(py1)s is %(py4)spy1py4assert %(py6)spy6databasewolf_testdb==z%(py1)s == %(py4)sr   not inz%(py1)s not in %(py3)scmdr'   py3assert %(py5)spy5r   inputzCREATE DATABASE wolf_testdbinz%(py1)s in %(py3)ssql)r   r   
returncoder   r	   
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationassert_called_once	call_args@py_builtinslocals_should_repr_global_namepayloadmock_existsmock_runmock_subres@py_assert0@py_assert3@py_assert2@py_format5@py_format7r3   @py_format4@py_format6r<   s                 r   test_database_create_successrU       s   x G	+%	@K		 H; ($W-9~%%%%%%%~%%%~%%%%%%%%%%:/-/-///////////-///////&&(   #A&)c))))))))))))))c))))c)))))))   #G,,333333,333,33333333333333333# 
! 
A	@	 	  
A	@s#   LKK4#L4
L	>L
Lc                  2   SS0n [        U 5      nUS   nSo2UL oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[	        [        R
                  " U5      5      eS =n=pCS
o!S   o2U;   oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[	        [        R
                  " U5      5      eS =n=pCg )Nr   zinvalid-name;drop table;r"   Fr#   r%   r&   r)   r*   zInvalid database nameerrorr9   z%(py1)s in %(py4)s)r	   r>   r?   r@   rA   rB   rI   rM   rN   rO   rP   rQ   rR   s          r   !test_database_create_invalid_namerZ   7   s    12G
 
)Cy>"U"U""""">""">"""U""""""""2'l2l22222"222"222l2222222    c                  z   SS0n [        SSS9   [        U 5      nUS   nSo2UL oD(       do  [        R                  " SU4S	X#45      [        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pCSo!S   o2U;   oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pCS S S 5        g ! , (       d  f       g = f)Nr   r   r    Tr   r"   Fr#   r%   r&   r)   r*   zalready existsrW   r9   rX   )r   r	   r>   r?   r@   rA   rB   rY   s          r   #test_database_create_already_existsr]   >   s    x G	+$	?$W-9~&&&&&&&~&&&~&&&&&&&&&&/w</<///////////</////// 
@	?	?s   DD,,
D:c            	         SS0n [        SSS9 n[        S5       n[        5       nSUl        X2l        [	        U 5      nUS   nSoeUL ow(       do  [
        R                  " S	U4S
XV45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n	[        [
        R                  " U	5      5      eS =n=pvUS   nSoeU:H  ow(       do  [
        R                  " SU4SXV45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n	[        [
        R                  " U	5      5      eS =n=pvUR                  S   S   n
SoUU
;  ow(       d  [
        R                  " SU4SXZ45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U
5      (       a  [
        R                  " U
5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS =pWUR                  S   S   nSoUU;   ow(       d  [
        R                  " SU4SX]45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS =pWS S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   r,   r    Tr   r!   r   r"   r#   r%   r&   r)   r*   r+   r-   r/   r   r0   r2   r3   r4   r6   r7   r   r8   zDROP DATABASE wolf_testdbr9   r;   r<   )r   r   r=   r   r
   r>   r?   r@   rA   rB   rD   rE   rF   rG   rH   s                 r   test_database_drop_successr_   G   s   }%G	+$	?;		 H; ("7+9~%%%%%%%~%%%~%%%%%%%%%%:/-/-///////////-///////  #A&)c))))))))))))))c))))c)))))))  #G,*1c11111*111*111111c1111c1111111 
! 
@	?	 	  
@	?s#   K5J8K$K5$
K2	.K55
Lc                  2   SS0n [        U 5      nUS   nSo2UL oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[	        [        R
                  " U5      5      eS =n=pCS
o!S   o2U;   oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[	        [        R
                  " U5      5      eS =n=pCg )Nr   r   r"   Fr#   r%   r&   r)   r*   must start withrW   r9   rX   )r
   r>   r?   r@   rA   rB   rY   s          r   !test_database_drop_invalid_prefixrb   Z   s    x G
w
'Cy>"U"U""""">""">"""U""""""",G,,,,,,,,,,,,,,,,,,,r[   c            	         SSSS.n [        SSS9 n[        S5       n[        5       nS	Ul        X2l        [	        U 5      nUS
   nSoeUL ow(       do  [
        R                  " SU4SXV45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n	[        [
        R                  " U	5      5      eS =n=pvUS   nSoeU:H  ow(       do  [
        R                  " SU4SXV45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n	[        [
        R                  " U	5      5      eS =n=pvUR                  S	   S	   n
SoUU
;  ow(       d  [
        R                  " SU4SXZ45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U
5      (       a  [
        R                  " U
5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS =pWSoUU
;  ow(       d  [
        R                  " SU4SXZ45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U
5      (       a  [
        R                  " U
5      OSS.-  nSSU0-  n[        [
        R                  " U5      5      eS =pWUR                  S   S   nSoUU;   ow(       d  [
        R                  " SU4SX]45      [
        R                  " U5      S [        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS S.-  nSSU0-  n[        [
        R                  " U5      5      eS =pWS!oUU;   ow(       d  [
        R                  " SU4SX]45      [
        R                  " U5      S [        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS S.-  nSSU0-  n[        [
        R                  " U5      5      eS =pWS S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)"N	wolf_usersecret_user_passwolf_dbusernamepasswordr+   actions.database.user_existsFr   r!   r   r"   Tr#   r%   r&   r)   r*   rh   r-   r/   r   r0   r2   r3   r4   r6   r7   r   r8   zDCREATE USER 'wolf_user'@'localhost' IDENTIFIED BY 'secret_user_pass'r9   r;   r<   z<GRANT ALL PRIVILEGES ON wolf_db.* TO 'wolf_user'@'localhost')r   r   r=   r   r   r>   r?   r@   rA   rB   rD   rE   rF   rG   rH   s                 r   !test_database_user_create_successrk   b   s   &G
 
-E	Bk		 H; ()'29~%%%%%%%~%%%~%%%%%%%%%%:-+-+-----------+-------   #A&)c))))))))))))))c))))c)))))))!,,,,,,!,,,!,,,,,,,,,,,,,,,,,   #G,U\Y\\\\\\U\\\U\\\\\\Y\\\\\Y\\\\\\\\MTQTTTTTTMTTTMTTTTTTQTTTTTQTTTTTTTT% 
! 
C	B	 	  
C	Bs#   QP Q=Q
Q	Q
Q-c                  6   SSSS.n [        U 5      nUS   nSo2UL oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[	        [        R
                  " U5      5      eS =n=pCSo!S   o2U;   oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[	        [        R
                  " U5      5      eS =n=pCg )Nuserpassrf   rg   r"   Fr#   r%   r&   r)   r*   zUsername must start withrW   r9   rX   )r   r>   r?   r@   rA   rB   rY   s          r   (test_database_user_create_invalid_prefixro   ~   s    G
 &g
.Cy>"U"U""""">""">"""U"""""""%5W555555%555%5555555555r[   c            	         SS0n [        SSS9   [        S5       n[        5       nSUl        X!l        [	        U 5      nUS   nSoTUL of(       do  [
        R                  " S	U4S
XE45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=peUS   nSoTU:H  of(       do  [
        R                  " SU4SXE45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=peUR                  S   S   n	SoDU	;   of(       d  [
        R                  " SU4SXI45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U	5      (       a  [
        R                  " U	5      OSS.-  n
SSU
0-  n[        [
        R                  " U5      5      eS =pFS S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nrh   rd   rj   Tr   r!   r   r"   r#   r%   r&   r)   r*   r-   r/   r   r8   z!DROP USER 'wolf_user'@'localhost'r9   r;   r<   r4   r6   r7   )r   r   r=   r   r   r>   r?   r@   rA   rB   rD   rE   rF   rG   )rI   rK   rL   rM   rN   rO   rP   rQ   rR   r<   rS   rT   s               r   !test_database_user_delete_successrq      sl   ;'G	-D	A		 H; ()'29~%%%%%%%~%%%~%%%%%%%%%%:-+-+-----------+-------  #G,29c9999929992999999c9999c9999999 
! 
B	A	 	  
B	As#   H/G2HH/
H,	(H//
H=c                  2   SS0n [        U 5      nUS   nSo2UL oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[	        [        R
                  " U5      5      eS =n=pCS
o!S   o2U;   oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[	        [        R
                  " U5      5      eS =n=pCg )Nrh   rm   r"   Fr#   r%   r&   r)   r*   ra   rW   r9   rX   )r   r>   r?   r@   rA   rB   rY   s          r   (test_database_user_delete_invalid_prefixrs      s    6"G
%g
.Cy>"U"U""""">""">"""U""""""",G,,,,,,,,,,,,,,,,,,,r[   c            	         SSS.n [        SSS9   [        S5       n[        5       nSUl        X!l        [	        U 5      nUS	   nSoTUL of(       do  [
        R                  " S
U4SXE45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=peUS   nSoTU:H  of(       do  [
        R                  " SU4SXE45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=peUR                  S   S   n	SoDU	;  of(       d  [
        R                  " SU4SXI45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U	5      (       a  [
        R                  " U	5      OSS.-  n
SSU
0-  n[        [
        R                  " U5      5      eS =pFUR                  S   S   nSoDU;   of(       d  [
        R                  " SU4SXL45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  n
SSU
0-  n[        [
        R                  " U5      5      eS =pFS S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nrd   new_secret_passrh   new_passwordrj   Tr   r!   r   r"   r#   r%   r&   r)   r*   rh   r-   r/   r0   r2   r3   r4   r6   r7   r   r8   zBALTER USER 'wolf_user'@'localhost' IDENTIFIED BY 'new_secret_pass'r9   r;   r<   )r   r   r=   r   r   r>   r?   r@   rA   rB   rD   rE   rF   rG   )rI   rK   rL   rM   rN   rO   rP   rQ   rR   r3   rS   rT   r<   s                r   )test_database_user_reset_password_successrx      s   )G 
-D	A		 H; (1':9~%%%%%%%~%%%~%%%%%%%%%%:-+-+-----------+-------  #A& ++++++ +++ +++++++++++++++++  #G,SZWZZZZZZSZZZSZZZZZZWZZZZZWZZZZZZZZ 
! 
B	A	 	  
B	As#   K6J8K%K6%
K3	/K66
Lc                  4   SSS.n [        U 5      nUS   nSo2UL oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[	        [        R
                  " U5      5      eS =n=pCSo!S   o2U;   oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[	        [        R
                  " U5      5      eS =n=pCg )Nrm   ru   rv   r"   Fr#   r%   r&   r)   r*   ra   rW   r9   rX   )r   r>   r?   r@   rA   rB   rY   s          r   0test_database_user_reset_password_invalid_prefixrz      s    )G .g
6Cy>"U"U""""">""">"""U""""""",G,,,,,,,,,,,,,,,,,,,r[   c            
         SSSS.n [        SSS9   [        SSS9   [        S	5       n[        5       nS
Ul        X!l        [	        U 5      nUS   nSoTUL of(       do  [
        R                  " SU4SXE45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=peUS   nSoTU:H  of(       do  [
        R                  " SU4SXE45      [
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=peUR                  n	SoU
:H  oU(       d  [
        R                  " SU4SX45      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U	5      [
        R                  " U
5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n	=pZUR                  S
   S   S   nSoDU;   of(       d  [
        R                  " SU4SXM45      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS .-  nS!S"U0-  n[        [
        R                  " U5      5      eS =pFUR                  S   S   S   nS#oDU;   of(       d  [
        R                  " SU4SXO45      [
        R                  " U5      S$[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS$S .-  nS!S"U0-  n[        [
        R                  " U5      5      eS =pFS S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)%Nrd   rf   zSELECT,INSERT,UPDATErh   r+   
privilegesrj   Tr   r    r!   r   r"   r#   r%   r&   r)   r*   rh   r-   r/      )z2%(py2)s
{%(py2)s = %(py0)s.call_count
} == %(py5)srK   )py0py2r7   zassert %(py7)spy7r   r8   z?REVOKE ALL PRIVILEGES ON wolf_db.* FROM 'wolf_user'@'localhost'r9   r;   
revoke_sqlr4   r6   r7   zDGRANT SELECT, INSERT, UPDATE ON wolf_db.* TO 'wolf_user'@'localhost'	grant_sql)r   r   r=   r   r   r>   r?   r@   rA   rB   
call_countrE   rF   rG   call_args_list)rI   rK   rL   rM   rN   rO   rP   rQ   rR   @py_assert1@py_assert4rT   @py_format8r   rS   r   s                   r   (test_database_user_update_grants_successr      s   ,G
 
-D	A	+$	?		 H; (099~%%%%%%%~%%%~%%%%%%%%%%:-+-+-----------+------- ""'a'a'''''"''''''x''''x'''"'''a''''''' ,,Q/27;
P^T^^^^^^P^^^P^^^^^^T^^^^^T^^^^^^^^ ++A.q1':	UbYbbbbbbUbbbUbbbbbbYbbbbbYbbbbbbbb' 
! 
@ 
B	A	 	  
@	? 
B	As:   O8O'NO=O'O8
O$ O''
O5	1O88
Pc                  6   SSSS.n [        U 5      nUS   nSo2UL oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[	        [        R
                  " U5      5      eS =n=pCSo!S   o2U;   oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[	        [        R
                  " U5      5      eS =n=pCg )Nrd   rf   zSELECT,INVALID_PRIVr|   r"   Fr#   r%   r&   r)   r*   zInvalid privilege(s)rW   r9   rX   )r   r>   r?   r@   rA   rB   rY   s          r   .test_database_user_update_grants_invalid_privsr      s    +G
 -W
5Cy>"U"U""""">""">"""U"""""""!1\1\11111!111!111\1111111r[   )*builtinsrE   _pytest.assertion.rewrite	assertionrewriter>   syspathlibr   pathinsertstr__file__resolveparentspytestunittest.mockr   r   r   actions.databaser	   r
   r   r   r   r   fixturer   rU   rZ   r]   r_   rb   rk   ro   rq   rs   rx   rz   r   r    r[   r   <module>r      s      
  3tH~--/77:UBC D  0 0   4.302&-U86:"-[,-c<2r[   