
    bR                         d dl Z 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Zd
dZ G d d	ej        j                  ZdS )    N)system_session)SamDB)StringIO)cmd_sambatoold   c                 r    t          |           |dz   k     r| S | d |         dt          |           |z
  z  z   S )N   z[%d more characters])len)scutoffs     =/usr/lib/python3/dist-packages/samba/tests/samba_tool/base.pytruncate_stringr   "   s?    
1vvWfW:.#a&&6/BBB    c                   Z    e Zd Zd Zd Zd Zd ZddZddZdd	Z	ddZ
d ZddZd ZdS )SambaToolCmdTestc                 ~   t           j        d         j        d         }|                    d          \  }}|                    t	          |                    \  }}|dd         }t          |j                  }|j        D ]}|j        D ]}	|	j	        ||	j	        = |
                    |           |                    dd          }
|                    dd          }|                    dd          }|                                }|                    |d	          }t          |
t                      ||
          }|S )zFa convenience function to get a samdb instance so that we can query ituser	setexpiry   NH	sambaoptscredoptsT)fallback_machine)urlsession_infocredentialslp)r   subcommands_create_parser
parse_argslistdict__dict__option_groupsoption_listdestupdategetget_loadparmget_credentialsr   r   )selfargvcmdparseroptiongroupsoptsargskwargsoption_groupoptionr   r   r   r   credssamdbs                   r   getSamDBzSambaToolCmdTest.getSamDB*   sD    '/;KH"11&99&&tDzz22
dABBxdm$$"0 	, 	,L&2 , ,;*v{+, 	l###JJsD!!JJ{D11	::j$//##%%((d(CC!.*:*:"'B0 0 0r   c                     t           j        |         }t                      |_        t                      |_         |j        d|z  g|R  }||j                                        |j                                        fS )zrun a single level commandsamba-tool %sr   r   r   outferrf_rungetvalue)r+   namer1   r-   results        r   runcmdzSambaToolCmdTest.runcmdH   sl    '-::::/D084888))++SX->->-@-@AAr   c                    t           j        |         j        |         }t                      |_        t                      |_         |j        d|d|g|R  }||j                                        |j                                        fS )zrun a command with sub commandszsamba-tool  r:   )r+   r?   subr1   r-   r@   s         r   	runsubcmdzSambaToolCmdTest.runsubcmdP   s~    
 '-9#>::::cc:BTBBB))++SX->->-@-@AAr   c                 2   t           j        |         }d|z  }|D ]}|j        |         }|d|z  z  }t                      |_        t                      |_         |j        |g|R  }||j                                        |j                                        fS )z3run a command with any number of sub command levelsr9   z %sr:   )r+   r?   	sublevelsr1   r-   cmd_strrD   r@   s           r   runsublevelcmdzSambaToolCmdTest.runsublevelcmd[   s     '-!D( 	# 	#C/#&Cus{"GG::::')D)))))++SX->->-@-@AAr    c                 x    d|d|d|d|}|                      ||                    dd                     d S )Nzexit[z	] stdout[z	] stderr[z]: z
]
z
] 
)msg)assertIsNonereplace)r+   exitouterrrL   s        r   assertCmdSuccessz!SambaToolCmdTest.assertCmdSuccessl   sO      7;ddCCCccJ$CKK$B$BCCCCCr   c                 2    |                      ||           d S N)assertIsNotNone)r+   valrL   s      r   assertCmdFailzSambaToolCmdTest.assertCmdFails   s    S#&&&&&r   Nc                 z    |!t          |          dt          |          }|                     |||           d S )Nz is not in )r   assertIn)r+   basestringrL   s       r   assertMatchzSambaToolCmdTest.assertMatchv   sI    ;'6v'>'>'>'>'6t'<'<'<>CfdC(((((r      c                     t          j        t          j                  }|d                    d t          |dz
            D                       z  }|S )zPCreate a random name, cap letters and numbers, and always starting with a letterrJ   c              3      K   | ]<}t          j        t          j        t          j        z   t          j        z             V  =d S rT   )randomchoicer[   ascii_uppercaseascii_lowercasedigits).0xs     r   	<genexpr>z.SambaToolCmdTest.randomName.<locals>.<genexpr>   sY        B  Bklf&<v?U&UX^Xe&eff  B  B  B  B  B  Br   r   )r`   ra   r[   rb   joinrange)r+   countr?   s      r   
randomNamezSambaToolCmdTest.randomName}   sn    }V344  B  Bpuv{~v  qA  qA  B  B  B  B  B  	Br   c                     	 | j          n# t          $ r
 g | _         Y nw xY wd}|dk     r<t          j        dd          }|| j         vr| xj         |gz  c_         |S |dz  }|dk     <J d            )Nr   2   iXG i:I r   FzNo Xid are available)	used_xidsAttributeErrorr`   randint)r+   failedxids      r   	randomXidzSambaToolCmdTest.randomXid   s    
	 NNN 	  	  	 DNNN	  rkk.'22C$.((3%'
aKF rkk 	-,,,,s   
 c                 R    |                      ||z   |k    o||z
  |k     |           dS )zFAssert that val1 is within delta of val2, useful for time computationsN)
assertTrue)r+   val1val2deltarL   s        r   assertWithinzSambaToolCmdTest.assertWithin   s3    $,$.KdUld5JSQQQQQr   c           
          |                      ddd|z  dt          j        d         dt          j        d         dt          j        d	         z            \  }}}|                     |||           d S )
Ndomaindemotez--remove-other-dead-server=%s z-UUSERNAMEz%PASSWORDz--server=%sSERVER)rE   osenvironrR   )r+   netbios_namer@   rP   rQ   s        r   cleanup_joinzSambaToolCmdTest.cleanup_join   s~    nnX%>MM,.Jz,B,B,BBJzDZDZ[+bj.BB	E E 	c 	fc3/////r   )rJ   rT   )r]   )__name__
__module____qualname__r7   rA   rE   rI   rR   rW   r\   rk   rs   ry   r    r   r   r   r   (   s          <B B B	B 	B 	BB B B"D D D D' ' ' ') ) ) )   - - -(R R R R0 0 0 0 0r   r   )r   )r   r`   r[   
samba.authr   samba.samdbr   ior   samba.netcmd.mainr   samba.testssambar   testsBlackboxTestCaser   r   r   r   <module>r      s   0 
			   % % % % % %             + + + + + +    C C C C{0 {0 {0 {0 {0u{3 {0 {0 {0 {0 {0r   