a
    )&i                     @   s   d Z ddlZddlZddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ eedZg d	ZG d
d deZG dd deZdS )zTests for samba.dcerpc.mdssvc    N)
HTTPServerBaseHTTPRequestHandler)mdssvc)RpcInterfaceTestCase)mdscli)get_samba_logger)name)foobarx+xx*xx=xx'xx?xx"xx\xx(xx xc                   @   s   e Zd Zdd ZdS )MdssvcHTTPRequestHandlerc                 C   s   t | jd }| j|}t|}t| jj}||krft	d||f  | 
ddd||f  d S t| jjdd}| d | d	d
 | dt| |   | j| d S )Nzcontent-lengthz"Bad request, expected:
%s
Got:
%s
i  zBad requestzExpected: %s
Got: %s
zutf-8)encoding   zcontent-typezapplication/json; charset=UTF-8)intZheadersZrfilereadjsonloadsserverjson_inloggererrorZ
send_errorbytesjson_outZsend_responseZsend_headerlenZend_headersZwfilewrite)selfZcontent_lengthbodyZactual_jsonZexpected_jsonZresp r%   ;/usr/lib/python3/dist-packages/samba/tests/dcerpc/mdssvc.pydo_POST1   s&    

z MdssvcHTTPRequestHandler.do_POSTN)__name__
__module____qualname__r'   r%   r%   r%   r&   r   0   s   r   c                       sH   e Zd Z fddZ fddZdd Zdd Zd	d
 Zdd Z  Z	S )MdssvcTestsc                    s   t t|   td|  | _tdtdd| _t	j
tj| fd| _| jd | j  tjd | _td t| jd	d
}| | _|| j tD ] }td| j|f d}|  qd S )Nz!ncacn_np:fileserver[/pipe/mdssvc])z10.53.57.35i  F)Zbind_and_activate)targetargsTZ
LOCAL_PATH   	spotlight/foo%s/%sw)superr+   setUpr   Zget_loadparmpiper   r   r   	threadingZThreadhttp_servertZ	setDaemonstartosenviron	sharepathtimesleepr   connfakepath
disconnect	testfilesopenclose)r#   r?   filef	__class__r%   r&   r4   K   s"    


zMdssvcTests.setUpc                    s0   t t|   tD ]}td| j|f  qd S )Nr1   )r3   r   tearDownrB   r:   remover<   )r#   rE   rG   r%   r&   rI   b   s    zMdssvcTests.tearDownc                 C   s"   | j   | j   | j   d S )N)r   Zserver_bindZserver_activateZserve_forever)r#   r%   r%   r&   r7   g   s    

zMdssvcTests.http_serverc                 C   s   | d| j| j_| d| j| j_t| jdd| _| j| j|| j	}t
d || j}| || || j | j| j d S )Nz
%BASEPATH%r/   r0   r.   )replacer<   r   r   r    r   r?   r5   searchr@   r=   r>   Zget_resultsZassertEqualrD   rA   )r#   ZqueryZexpectr   r    rL   Zresultsr%   r%   r&   run_testl   s    
zMdssvcTests.run_testc                 C   s$   d}d}ddg}|  d||| d S )Nz{
          "from": 0, "size": 100, "_source": ["path.real"],
          "query": {
            "query_string": {
              "query": "(samba*) AND path.real.fulltext:\"%BASEPATH%\""
            }
          }
        }z{
          "hits" : {
            "total" : { "value" : 2},
            "hits" : [
              {"_source" : {"path" : {"real" : "%BASEPATH%/foo"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/bar"}}}
            ]
          }
        }r	   r
   z*=="samba*"rM   )r#   exp_json_queryfake_json_responseexp_resultsr%   r%   r&   test_mdscli_search~   s    	zMdssvcTests.test_mdscli_searchc                 C   s(   d}d}d}g d}|  |||| d S )NzkMDItemFSName=="x+x"||kMDItemFSName=="x\*x"||kMDItemFSName=="x=x"||kMDItemFSName=="x'x"||kMDItemFSName=="x?x"||kMDItemFSName=="x x"||kMDItemFSName=="x(x"||kMDItemFSName=="x\"x"||kMDItemFSName=="x\\x"a  {
          "from": 0, "size": 100, "_source": ["path.real"],
          "query": {
            "query_string": {
              "query": "(file.filename:x\\+x OR file.filename:x\\*x OR file.filename:x=x OR file.filename:x'x OR file.filename:x\\?x OR file.filename:x\\ x OR file.filename:x\\(x OR file.filename:x\\\"x OR file.filename:x\\\\x) AND path.real.fulltext:\"%BASEPATH%\""
            }
          }
        }a  {
          "hits" : {
            "total" : {"value" : 2},
            "hits" : [
              {"_source" : {"path" : {"real" : "%BASEPATH%/x+x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x*x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x=x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x'x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x?x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x(x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x\"x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x\\x"}}}
            ]
          }
        })	r   r   r   r   r   r   r   r   r   rN   )r#   Zsl_queryrO   rP   rQ   r%   r%   r&   test_mdscli_search_escapes   s    z&MdssvcTests.test_mdscli_search_escapes)
r(   r)   r*   r4   rI   r7   rM   rR   rS   __classcell__r%   r%   rG   r&   r+   I   s   r+   )__doc__r:   r=   r6   Zloggingr   Zhttp.serverr   r   Zsamba.dcerpcr   Zsamba.testsr   Zsamba.samba3r   Zsamba.loggerr   r(   r   rB   r   r+   r%   r%   r%   r&   <module>   s   
