
    b|I                     (   d dl Z d dlZd dlmZ 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ZdZdZdZdZ e j        d                    ej        d                              Z ej        e          Z ej        e          Ze                    e           e                    d	d
dd           e                                \  ZZ ee          dk     r$e                                  ej         d           e!                                Z"e#                    e"          Z$dZ%d a& G d de          Z'e(dk    rEd dl)m*Z* ed          Z%de%vr%ej+        ,                    e%          rde%z  Z%nde%z  Z% e*e(           dS d ej-        d          z   Z%dS )    N)system_session)TestCaseD         A   z
{0} <host>z-v
store_trueverbosez#print successful expression outputs)actiondesthelpc                        e Zd Ze fd            Zed             Zd Zd Zd ZddZ	d Z
d	 Zd
 Zd ZddZd Zd Zd ZddZd Zd Zd ZddZd Zd ZddZd Zd ZddZd Zd Z xZS )ComplexExpressionTestsc                    t          t          |                                            t          j                            t          t          t                      t                    | _        d}d
                    || j                                                  | _        	 | j                            | j        dg           n#  Y nxY w	 | j                            | j                   nR# t          j        $ r@}|j        d         t$          k    r#t'          d
                    |                     |d }~ww xY wd| _        d	| _        d
| _        d| _        d| _        d| _        d| _        d| _        d S )N)lpsession_infocredentialsComplexExprTestz
OU={0},{1}tree_delete:1r   zatest ou {ou} already exists. Delete with "samba-tool group delete OU={ou} --force-subtree-delete")ouztestuser{0}
   accountExpiresaccountNameHistoryflagspreferredDeliveryMethodmsTSExpireDatecountryCode)superr   
setUpClasssambasamdbSamDBhostr   r   credsformat	domain_dnbase_dndelete	create_ouldbLdbErrorargsERRCODE_ENTRY_EXISTSprintname_template	default_n
largeint_fstr_fint_fenum_ftime_franged_int_f)clsou_namee	__class__s      A/usr/lib/python3/dist-packages/samba/tests/complex_expressions.pyr   z!ComplexExpressionTests.setUpClass=   st   $c**55777K%%dr3A3C3C27 & 9 9	 $"))'393F3F3H3HII	IS[?*;<<<<	D	I,,,,| 	 	 	vay000 128&G&2D2DF F F G	 * *(		.
%
(s$   !!C CC+ +D::;D55D:c                 H    | j                             | j        dg           d S )Nr   )r!   r(   r'   )r7   s    r;   tearDownClassz$ComplexExpressionTests.tearDownClassa   s%    	&788888    c                     t           dz  a d                    t            j                   j                                        fd|D             }|D ]f}d |                                D             }	  j                            |           <# t          j        $ r}t          d|z             |d }~ww xY w|fS )Nr   zOU=testou{0},{1}c           
      |    g | ]8}d d                     |          dj                             |          dd|i9S )dnzCN=testuser{0},{1}nameobjectClassuser)r%   r/   ).0nfieldou_dnselfs     r;   
<listcomp>z<ComplexExpressionTests.make_test_objects.<locals>.<listcomp>l   sc     ' ' ' 	 3::1eDD!3!:!:1!=!=&# ' ' 'r>   c                 4    i | ]\  }}|t          |          S  str)rE   kvs      r;   
<dictcomp>z<ComplexExpressionTests.make_test_objects.<locals>.<dictcomp>u   s:     $G $G $G(.A %&s1vv $G $G $Gr>   zfailed to add %s)
ou_countr%   r'   r!   r)   itemsaddr*   r+   r.   )rI   rG   valsldap_objectsldap_objectstringed_ldap_objectr9   rH   s   ``     @r;   make_test_objectsz(ComplexExpressionTests.make_test_objectsf   s   A"))(DLAA
U###' ' ' ' ' ' "&	' ' ' ( 		 		K$G $G2=2C2C2E2E$G $G $G 
34444<   (,@ABBB l""s   ;BB>%B99B>c                 D   d}	 t          j                     }| j                            |t          j        |          }t          j                     |z
  }n&# t
          $ r}t          d|z              |d }~ww xY wt          d                    ||                     ||fS )Nr   basescope
expressionzfailed expr z{0} took {1}s)timer!   searchr*   SCOPE_SUBTREE	Exceptionr.   r%   )rI   exprrA   
time_taken
start_timeresr9   s          r;   time_ldap_searchz'ComplexExpressionTests.time_ldap_search   s    
	J*##*-*;/3 $ 5 5C z1JJ 	 	 	.4'(((G	 	o$$T:66777Js   AA 
A8A33A8c                 2   |                      ||          \  }}d |D             }t                      }|D ]X}		  |j        di |	}
n# t          $ r Y w xY wt	          |
          r(|                    t          |	d                              Y|                     ||           t          j	        rfd |D             }||z
  }d
                    |          pd}d
                    |          pd}t          d                    ||||                     d S d S )Nc                 ^    h | ]*}t          |                    d           d                   +S rB   r   rN   get)rE   rows     r;   	<setcomp>z9ComplexExpressionTests.assertLDAPQuery.<locals>.<setcomp>   s/    :::s3swwvq)**:::r>   rB   c                     h | ]
}|d          S )rB   rL   )rE   ls     r;   rn   z9ComplexExpressionTests.assertLDAPQuery.<locals>.<setcomp>   s     A A Aq6 A A Ar>   z
  z	[NOTHING]zCPASS: Expression {0} took {1}s and returned:
  {2}
Excluded:
  {3}
rL   )rg   setr%   KeyErrorevalrT   rN   assertEqualoptsr
   joinr.   )rI   	ldap_exprrH   py_exprrV   rf   rd   resultsexpected_resultsrW   
final_exprldap_object_namesexcludedreturneds                 r;   assertLDAPQueryz&ComplexExpressionTests.assertLDAPQuery   sp    //	5AAZ::c::: 55' 		? 		?K+W^::k::

    
 J ? $$SV)<%=%=>>>"2333< 	9 A AL A A A(72H{{8,,;H{{#344CH ''-vi.8.6.6(8 (89 9 9 9 9	9 	9s   A
AANc           	         | j         }|p| j        }|                     |t          |                    \  }}d|d|dz
  d|d|dz   d	}d|dz
  ||dz   fz  }|                     ||||           t          |dz            }d	|d|d
}d||fz  }|                     ||||           d	|d|d
}d||fz  }|                     ||||           d S )N(&(>=r   )(<=))%d <= {%s} <= %d   ()
{%s} <= %d
{%s} >= %d)r0   r3   rY   ranger   int)rI   rG   rF   rH   rV   rc   rx   half_ns           r;   test_int_rangez%ComplexExpressionTests.test_int_range   s   N#"44UE!HHEE||(-qsssEEE1Q333?$!UAaC'88T5'<@@@QqS"UUFFF+%0T5'<@@@@"UUFFF+%0T5'<@@@@@r>   c                 :    |                      | j                   d S N)r   r1   rI   s    r;   test_largeint_rangez*ComplexExpressionTests.test_largeint_range   s    DO,,,,,r>   c                 :    |                      | j                   d S r   )r   r4   r   s    r;   test_enum_rangez&ComplexExpressionTests.test_enum_range   s    DK(((((r>   c                     | j         }d}d}t          t          ||z
  |                    }|                     ||          \  }}d||dz   fz  }d||dz   fz  }|                     ||||           d S )Ni      (%s<=%d)   r   )r6   listr   rY   r   )	rI   rG   uboundwidthrU   rH   rV   rc   rx   s	            r;   test_ranged_int_rangez,ComplexExpressionTests.test_ranged_int_range   s    !E&,//00"44UDAA| UF1H--%!22T5'<@@@@@r>   c                   	 | j         }| j        }| j         }t          |dz            }d		fdt          | |          D             }d |D             }|                     ||          \  }}d|dt          	          dz   d}d	|	fz  }|                     ||||           d
|dt          	dz
            dz   d|dt          	dz             dz   d	}d	dz
  |	dz   fz  }|                     ||||           d S )Nr   l   fHc                     g | ]}|z   S rL   rL   )rE   t	base_times     r;   rJ   z:ComplexExpressionTests.test_time_range.<locals>.<listcomp>   s    BBBi!mBBBr>   c                 2    g | ]}t          |          d z   S ).0ZrM   )rE   r   s     r;   rJ   z:ComplexExpressionTests.test_time_range.<locals>.<listcomp>   s"    999c!ffun999r>   r   r   r   r   zint("{%s}"[:-3]) <= %dr   r   r   r   r   z%d <= int("{%s}"[:-3]) <= %d)r0   r5   r   r   rY   rN   r   )
rI   rF   rG   r   
time_rangerH   rV   rc   rx   r   s
            @r;   test_time_rangez&ComplexExpressionTests.test_time_range   sV   NNAaC"	BBBBUE65-A-ABBB
99j999
"44UJGG||"UUC	NNU$:$:$:;*eY-??T5'<@@@@(-s9Q;/?/?%/G/G/G(-s9Q;/?/?%/G/G/GI0IaK494=aK4A A 	T5'<@@@@@r>   c                   
 | j         
p| j        |                     t          
                    \  }}g d}g d}
fd|D             }
fd|D             }t	          ||          D ]\  }}	|                     |||	|           d S )N)=r   r   )z==r   r   c                      g | ]
}d |fz  S )z(%s%s%d)rL   rE   crG   rF   s     r;   rJ   zHComplexExpressionTests.test_int_single_cmp_op_speeds.<locals>.<listcomp>   s$    >>>uam+>>>r>   c                      g | ]
}d |fz  S )z{%s}%s%drL   r   s     r;   rJ   zHComplexExpressionTests.test_int_single_cmp_op_speeds.<locals>.<listcomp>   s$    DDD1J%A.DDDr>   )r0   r3   rY   r   zipr   )rI   rG   rH   rV   comp_opspy_comp_opsexprspy_exprsrc   rx   rF   s    `        @r;   test_int_single_cmp_op_speedsz4ComplexExpressionTests.test_int_single_cmp_op_speeds   s    N#"44UE!HHEE|$$$(((>>>>>X>>>DDDDDDDD 11 	E 	EMD'  ug|DDDD	E 	Er>   c                 :    |                      | j                   d S r   )r   r1   r   s    r;   "test_largeint_single_cmp_op_speedsz9ComplexExpressionTests.test_largeint_single_cmp_op_speeds  s    **4?;;;;;r>   c                 :    |                      | j                   d S r   )r   r4   r   s    r;   test_enum_single_cmp_op_speedsz5ComplexExpressionTests.test_enum_single_cmp_op_speeds  s    **4;77777r>   c                    | j         }t          d          }d}d t          |||z             D             }|                     ||          \  }}t	          ||dz  z             }d|dt          |          d}d|d	t          |          d
}	|                     |||	|           d|dt          |          d}d|dt          |          d
}	|                     |||	|           d|dt          |dz
            d|dt          |dz             d	}dt          |dz
            d|dt          |dz             d
}	|                     |||	|           d|z  }d|z  }	|                     |||	|           d S )NAr   c                 R    g | ]$}d                      t          |                    %S )zabc{0}d)r%   chr)rE   r   s     r;   rJ   z<ComplexExpressionTests.test_str_ordering.<locals>.<listcomp>  s,    MMM!Y%%c!ff--MMMr>   r   r   z>=abcr   z'{z
}' >= 'abc'z<=abcz
}' <= 'abcr   r   r   z'abcz' <= '{z(%s>=1)z'{%s}' >= '1')r2   ordr   rY   r   r   r   )
rI   rG   a_ordrF   	str_rangerH   rV   r   rc   rx   s
             r;   test_str_orderingz(ComplexExpressionTests.test_str_ordering  s   
CMMuUE!G7L7LMMM	"44UIFF|UQqS[!! !&s6{{{{3).F<T5'<@@@@ %s6{{{{3).F<T5'<@@@@ /4eeS]]]].3eeS]]]]D47qMMMM49EE47qMMMMC 	T5'<@@@ E"!U+T5'<@@@@@r>   c                     |p| j         }| j        }|                     |t          t	          |                              \  }}g d}|D ]}||z  }|                     ||d|            d S )N)z	(%s>=abc)z	(%s<=abc)z(%s=abc)False)r3   r0   rY   r   r   r   )rI   rG   rF   rH   rV   int_expressionsrc   s          r;   test_invalid_expressionsz/ComplexExpressionTests.test_invalid_expressions+  s    #N"44UDqNNKK|' ' ' $ 	E 	ED5>D  ug|DDDD	E 	Er>   c                 :    |                      | j                   d S r   )r   r1   r   s    r;   !test_largeint_invalid_expressionsz8ComplexExpressionTests.test_largeint_invalid_expressions7  s    %%do66666r>   c                 :    |                      | j                   d S r   )r   r4   r   s    r;   test_enum_invalid_expressionsz4ComplexExpressionTests.test_enum_invalid_expressions:  s    %%dk22222r>   c                    d t          d          D             }|                     | j        |          \  }}d| j        z  }d| j        z  }|                     ||||           d| j        z  }|                     ||||           d S )Nc                 2    g | ]}d t          |          z   S )u   äbcrM   rE   rF   s     r;   rJ   z@ComplexExpressionTests.test_case_insensitive.<locals>.<listcomp>>  s"    666qVCFF]666r>   r   u
   (%s=äbc1)u   "{%s}"=="äbc1"u
   (%s=ÄbC1))r   rY   r2   r   )rI   r   rH   rV   rc   pyexprs         r;   test_case_insensitivez,ComplexExpressionTests.test_case_insensitive=  s    66E"II666	"44TZKK|tz*"dj1T5&,???tz*T5&,?????r>   c                     |p| j         }d}t          t          | |                    }|                     ||          \  }}d|z  }d|z  }|                     ||||           d S )N   z(%s>=-3)z
{%s} >= -3)r3   r   r   rY   r   )rI   rG   r   around_zerorH   rV   rc   rx   s           r;   test_negative_cmpz(ComplexExpressionTests.test_negative_cmpI  sz    #5%//00"44UKHH|U#%(T5'<@@@@@r>   c                 :    |                      | j                   d S r   )r   r1   r   s    r;   test_negative_cmp_largeintz1ComplexExpressionTests.test_negative_cmp_largeintS  s    t/////r>   c                 :    |                      | j                   d S r   )r   r4   r   s    r;   test_negative_cmp_enumz-ComplexExpressionTests.test_negative_cmp_enumV  s    t{+++++r>   c                    p| j         | j        }|                     t          t	          |                              \  }}d|dz  fz  }d|dz  fz  }|                     ||||           | j                            |dg           d t	          |          D             }	 |                     |          \  }}n5# t          j	        $ r#}|j
        d         t          k    r|Y d }~d S d }~ww xY wt          dz              | j                            |t          j        d	          }	fd
|	D             }
d t	          |          D             }|                     t!          |
          t!          |                     d|dz  fz  }d|dz  fz  }|D ]}t#          |                   |<   |                     ||||           d S )Nz
(%s>=00%d)r   r   r   c                 2    g | ]}d t          |          z   S )00rM   )rE   nums     r;   rJ   z;ComplexExpressionTests.test_zero_prefix.<locals>.<listcomp>j  s"    <<<C$s3xx-<<<r>   r   z4LDAP allowed insertion of 0-prefixed nums for field (objectClass=user)r[   c                 `    g | ]*}t          |                              d                    +S r   rk   rE   rrG   s     r;   rJ   z;ComplexExpressionTests.test_zero_prefix.<locals>.<listcomp>z  /    ;;;!QUU5\\!_--;;;r>   c                 ,    g | ]}t          |          S rL   rM   r   s     r;   rJ   z;ComplexExpressionTests.test_zero_prefix.<locals>.<listcomp>{  s    +++Q#a&&+++r>   (%s>=%d))r3   r0   rY   r   r   r   r!   r(   r*   r+   r,   ERRCODE_INVALID_VALUEr.   r`   ra   rt   rq   r   )rI   rG   rF   rH   rV   rc   rx   zero_pref_numsr9   rf   returned_numsexpectrW   s    `           r;   test_zero_prefixz'ComplexExpressionTests.test_zero_prefix[  s   # N"44UDqNNKK|uacl*%1-T5'<@@@ 	
%/!2333 =<588<<<	"&"8"8"O"OE<<| 	 	 	vay111FFFFF	 	DuLMMMjU&)&7+?   A A <;;;s;;;++%((+++]++S[[999UAaCL(%1-' 	9 	9K!$[%7!8!8KT5'<@@@@@s   'C C3C..C3c                 :    |                      | j                   d S r   )r   r1   r   s    r;   test_zero_prefix_largeintz0ComplexExpressionTests.test_zero_prefix_largeint  s    do.....r>   c                 :    |                      | j                   d S r   )r   r4   r   s    r;   test_zero_prefix_enumz,ComplexExpressionTests.test_zero_prefix_enum  s    dk*****r>   c                 T   p| j         |pd}d}t          t          ||z
  ||z                       }|                     |          \  }}d|dz
  fz  }d|dz
  |fz  }|                     ||||           d|fz  }d}|                     ||||           d|fz  }d	|fz  }|                     ||||           d
z  }d|dz   fz  }|                     ||||           | j                            |t          j        d          }	fd|	D             }
t          t          ||z
  |dz                       }t          t          | dz
  | |z   dz
                      }d ||z   D             }| 	                    t          |
          t          |                     d S )Nr   r      r   r   Truez(&(%s<=%d)(%s>=0))r   z(%s<=0)r   r   r   r[   c                 `    g | ]*}t          |                              d                    +S r   rk   r   s     r;   rJ   z<ComplexExpressionTests.test_int_overflow.<locals>.<listcomp>  r   r>   r   c                 ,    g | ]}t          |          S rL   rM   r   s     r;   rJ   z<ComplexExpressionTests.test_int_overflow.<locals>.<listcomp>  s    ===Q#a&&===r>   )r3   r   r   rY   r   r!   r`   r*   ra   rt   rq   )rI   rG   ofr   rU   rH   rV   rc   rx   rf   r   up_to_overflow	negativesr   s    `            r;   test_int_overflowz(ComplexExpressionTests.test_int_overflow  s	   #]7E"U(BuH--.."44UDAA| UBqDM)$1eR'88T5'<@@@ UBK'T5'<@@@ $ub%&88%,T5'<@@@E"%A.T5'<@@@ jU&)&7+?   A A <;;;s;;; eBuHbd3344s1urc%ik2233	==.9"<===]++S[[99999r>   c                 <    |                      | j        d           d S )Nr   )r   r4   r   s    r;   test_enum_overflowz)ComplexExpressionTests.test_enum_overflow  s     t{G44444r>   c                   
 d
d}|                      
t          t          |                              \  }}| j                            |t
          j        d          }
fd|D             }
fd|D             }t          t          |                    }|t          t          |          dz                     }d
|fz  }d	
|fz  }	| 
                    |||	|           d

|fz  }d
|fz  }	| 
                    |||	|           d S )N
uSNChangedr   r   r[   c           	          g | ]:}d t          |d          d                   t          |         d                   i;S rj   )rN   r   r   s     r;   rJ   z:ComplexExpressionTests.test_usnchanged.<locals>.<listcomp>  sU     & & &  QvYq\!2!2AeHQK 0 02 & & &r>   c                      g | ]
}|         S rL   rL   )rE   rp   rG   s     r;   rJ   z:ComplexExpressionTests.test_usnchanged.<locals>.<listcomp>  s    ///Q%///r>   r   z(&(%s<=%d)(objectClass=user))r   z(&(%s>=%d)(objectClass=user))r   )rY   r   r   r!   r`   r*   ra   sortedr   lenr   )rI   rF   rH   _rf   rV   nums
search_numrc   rx   rG   s             @r;   test_usnchangedz&ComplexExpressionTests.test_usnchanged  sG    ))%eAhh@@q jU&)&7+?   A A
& & & &!$& & &
 0///,///F4LL!!#c$iik**+
.%1DD%!44T5'<@@@.%1DD%!44T5'<@@@@@r>   r   )NN) __name__
__module____qualname__classmethodr   r=   rY   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r:   s   @r;   r   r   :   s        !) !) !) !) [!)F 9 9 [9# # #6  "!9 !9 !9HA A A A(- - -) ) )A A AA A A.E E E E< < <8 8 8A A A>
E 
E 
E 
E7 7 73 3 3	@ 	@ 	@A A A A0 0 0, , ,
(A (A (A (AT/ / /+ + +%: %: %: %:N5 5 5A A A A A A Ar>   r   __main__)TestProgramz://ztdb://%sz	ldap://%s)modulezldap://SERVER).optparser    samba.getoptgetoptoptionssysosr_   
samba.authr   samba.testsr   r*   r-   ERRCODE_OPERATIONS_ERRORr   ERRCODE_CLASS_VIOLATIONOptionParserr%   argvparserSambaOptions	sambaoptsCredentialsOptionscredoptsadd_option_group
add_option
parse_argsru   r,   r   print_usageexitget_loadparmr   get_credentialsr$   r#   rR   r   r   samba.tests.subunitrunr  pathisfilegetenvrL   r>   r;   <module>r$     sW  &         



 				  % % % % % %             



    		|2238A;??	@	@ G ((	 &7%f--    ! ! !   $|)<  > > >  
d3t99q==
CHQKKK  $$  [A [A [A [A [AX [A [A [AD z2222227DD7>>$ 	&$DD%DKx      yry***DDDr>   