o
    譐^A                     @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZm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 G d
d dejZdS )z(Set of series helper functions for test.    )absolute_import)division)print_function)unicode_literals)datetime	timedeltaN)SeriesHelperInfluxDBClient)ConnectionErrorc                       s   e Zd ZdZe fddZ fddZ fddZdd	 Ze	
d
dd Ze	
d
dd Ze	
d
dd Zdd Ze	
d
dd Zdd Zeddd Zdd Zdd Zdd Z  ZS ) TestSeriesHelperz$Define the SeriesHelper test object.c                    s:   t t|   tdddddt_G dd dt}|t_dS )	z#Set up the TestSeriesHelper object.Zhosti  ZusernameZpasswordZdatabasec                   @      e Zd ZdZG dd dZdS )z3TestSeriesHelper.setUpClass.<locals>.MySeriesHelperzDefine a SeriesHelper object.c                   @   s0   e Zd ZdZejZdZdgZddgZdZ	dZ
dS )	z8TestSeriesHelper.setUpClass.<locals>.MySeriesHelper.Metaz,Define metadata for the SeriesHelper object.events.stats.{server_name}	some_statserver_name	other_tag   TN)__name__
__module____qualname____doc__r   clientseries_namefieldstags	bulk_size
autocommit r   r   </usr/lib/python3/dist-packages/influxdb/tests/helper_test.pyMeta&   s    r   Nr   r   r   r   r   r   r   r   r   MySeriesHelper#       r    N)superr   
setUpClassr	   r   r   r    )clsr    	__class__r   r   r#      s   
zTestSeriesHelper.setUpClassc                    s&   t t|   | tj g d dS )z/Check that MySeriesHelper has empty datapoints.z6Resetting helper in teardown did not empty datapoints.N)r"   r   setUpassertEqualr    _json_body_selfr%   r   r   r'   2   s   zTestSeriesHelper.setUpc                    s0   t t|   tj  | tj g d dS )z(Deconstruct the TestSeriesHelper object.z*Resetting helper did not empty datapoints.N)r"   r   tearDownr    Z_reset_r(   r)   r*   r%   r   r   r,   :   s   
zTestSeriesHelper.tearDownc                 C   s   G dd dt }t }|dddd ||j_|dddd |dddd |dd	dd | |j |dd
dd | |j dS )z6Test write_points called after valid number of events.c                   @   r   )z9TestSeriesHelper.test_auto_commit.<locals>.AutoCommitTestz2Define a SeriesHelper instance to test autocommit.c                   @   s0   e Zd ZdZdZdgZddgZdZe Z	dZ
dS )	z>TestSeriesHelper.test_auto_commit.<locals>.AutoCommitTest.Metaz#Define metadata for AutoCommitTest.r   r   r   r   r   TN)r   r   r   r   r   r   r   r   r	   r   r   r   r   r   r   r   H   s    r   Nr   r   r   r   r   AutoCommitTestE   r!   r-   	us.east-1   ggr   r   r            is  N)r   mock	MagicMock_clientwrite_pointsZassertFalseZcalled
assertTrue)r+   r-   fake_write_pointsr   r   r   test_auto_commitC   s   z!TestSeriesHelper.test_auto_commitz/influxdb.helper.SeriesHelper._current_timestampc                    s   t   |_}tjdddd tjdddd tjdddd tjdddd dddd	d
di|ddddd	d
di|ddddd	d
di|ddddd	d
di|dg tj | t fddD oqtfdd D d dS )z8Test JSON conversion when there is only one series name.r.   ellor/   r   r   r   r2   r3   r4   events.stats.us.east-1r   r   r   )measurementr   r   timec                       g | ]}| v qS r   r   .0elexpectationr   r   
<listcomp>       z9TestSeriesHelper.testSingleSeriesName.<locals>.<listcomp>c                    rB   r   r   rC   rcvdr   r   rH      rI   zTInvalid JSON body of time series returned from _json_body_ for one series name: {0}.N	r   todayreturn_valuer   r    r)   r9   allformatr+   current_timestampcurrent_dater   rG   rK   r   testSingleSeriesName\   sh   
/z%TestSeriesHelper.testSingleSeriesNamec                    s   t   |_}tjdddd tjdddd tjdddd tjd	d
dd ddidddd|ddd
iddd	d|dddidddd|dddidddd|dg tj | t fddD oqtfdd D d dS )z:Test JSON conversion when there are multiple series names.r.   r/   r<   r1   zfr.paris-10r2   zlu.luxr3   z	uk.londonr4   r   zevents.stats.lu.luxr?   )r   r@   r   rA   zevents.stats.uk.londonzevents.stats.fr.paris-10r>   c                    rB   r   r   rC   rF   r   r   rH      rI   z;TestSeriesHelper.testSeveralSeriesNames.<locals>.<listcomp>c                    rB   r   r   rC   rJ   r   r   rH      rI   zYInvalid JSON body of time series returned from _json_body_ for several series names: {0}.NrL   rQ   r   rT   r   testSeveralSeriesNames   sh   
/z'TestSeriesHelper.testSeveralSeriesNamesc                 C   s   t  }|tdd }||_tjddd|d tjdddd tj \}}| d	|v o/d	|v  | |d	 | | |d	 | d
S )z<Test that time is optional on a series without a time field.   Zdaysr.   r<   r/   r   r   r   rA   r2   r=   rA   N)	r   rM   r   rN   r   r    r)   r9   r(   )r+   rR   rS   	yesterdaypoint1point2r   r   r   testSeriesWithoutTimeField   s   z+TestSeriesHelper.testSeriesWithoutTimeFieldc                 C   s.   G dd dt }| jt|fi ddd dS )z>Test that creating a data point without a tag throws an error.c                   @      e Zd ZG dd dZdS )zJTestSeriesHelper.testSeriesWithoutAllTags.<locals>.MyTimeFieldSeriesHelperc                   @   .   e Zd ZejZdZddgZddgZdZdZ	dS )	zOTestSeriesHelper.testSeriesWithoutAllTags.<locals>.MyTimeFieldSeriesHelper.Metar   r   rA   r   r   r   TN
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r          r   Nr   r   r   r   r   r   r   r   MyTimeFieldSeriesHelper       rc   r.   r2   )r   r   N)r   assertRaises	NameError)r+   rc   r   r   r   testSeriesWithoutAllTags   s   

z)TestSeriesHelper.testSeriesWithoutAllTagsc                 C   s   t  }|tdd }||_G dd dt}|ddd|d |ddd	d
 | \}}| d|v o4d|v  | |d | | |d | dS )z9Test that time is optional on a series with a time field.rW   rX   c                   @   r^   )zITestSeriesHelper.testSeriesWithTimeField.<locals>.MyTimeFieldSeriesHelperc                   @   r_   )	zNTestSeriesHelper.testSeriesWithTimeField.<locals>.MyTimeFieldSeriesHelper.Metar   r   rA   r   r   r   TNr`   r   r   r   r   r     ra   r   Nrb   r   r   r   r   rc   	  rd   rc   r.   r<   r/   rY   r2   r=   rA   N)r   rM   r   rN   r   r)   r9   r(   )r+   rR   rS   rZ   rc   r[   r\   r   r   r   testSeriesWithTimeField  s    
z(TestSeriesHelper.testSeriesWithTimeFieldc                 C   s   G dd dt }G dd dt }G dd dt }G dd dt }G d	d
 d
t }|||||fD ]}| jt|fi ddd q/dS )zTest errors in invalid helpers.c                   @   s   e Zd ZdZdS )z8TestSeriesHelper.testInvalidHelpers.<locals>.MissingMetaz1Define instance of SeriesHelper for missing meta.N)r   r   r   r   r   r   r   r   MissingMeta"  s    ri   c                   @   r   )z:TestSeriesHelper.testInvalidHelpers.<locals>.MissingClientz,Define SeriesHelper for missing client data.c                   @   s    e Zd ZdZdZddgZdZdS )z?TestSeriesHelper.testInvalidHelpers.<locals>.MissingClient.Metaz!Define metadat for MissingClient.r   rA   r   TN)r   r   r   r   r   r   r   r   r   r   r   r   *  s
    r   Nr   r   r   r   r   MissingClient'  r!   rj   c                   @   r   )z>TestSeriesHelper.testInvalidHelpers.<locals>.MissingSeriesNamez3Define instance of SeriesHelper for missing series.c                   @   s   e Zd ZdZddgZdS )zCTestSeriesHelper.testInvalidHelpers.<locals>.MissingSeriesName.Metaz&Define metadata for MissingSeriesName.rA   r   N)r   r   r   r   r   r   r   r   r   r   4  s    r   Nr   r   r   r   r   MissingSeriesName1  r!   rk   c                   @   r   )z:TestSeriesHelper.testInvalidHelpers.<locals>.MissingFieldsz3Define instance of SeriesHelper for missing fields.c                   @   s   e Zd ZdZdZdS )z?TestSeriesHelper.testInvalidHelpers.<locals>.MissingFields.Metaz"Define metadata for MissingFields.r   N)r   r   r   r   r   r   r   r   r   r   <  s    r   Nr   r   r   r   r   MissingFields9  r!   rl   c                   @   r   )zATestSeriesHelper.testInvalidHelpers.<locals>.InvalidTimePrecisionz;Define instance of SeriesHelper for invalid time precision.c                   @   s$   e Zd ZdZdZdZddgZdZdS )zFTestSeriesHelper.testInvalidHelpers.<locals>.InvalidTimePrecision.Metaz)Define metadata for InvalidTimePrecision.r   ksrA   r   TN)r   r   r   r   r   Ztime_precisionr   r   r   r   r   r   r   D  s    r   Nr   r   r   r   r   InvalidTimePrecisionA  r!   rn   r/   r.   rA   r   N)r   re   AttributeError)r+   ri   rj   rk   rl   rn   r$   r   r   r   testInvalidHelpers   s    
z#TestSeriesHelper.testInvalidHelperszFails on py32c              	   C   s   G dd dt }tjdd8}td z|ddd W n	 ty%   Y nw | t|d	d
| | dt	|d j
d W d   dS 1 sIw   Y  dS )z&Test warning for an invalid bulk size.c                   @   r^   )z?TestSeriesHelper.testWarnBulkSizeZero.<locals>.WarnBulkSizeZeroc                   @   s*   e Zd ZejZdZddgZg ZdZdZ	dS )zDTestSeriesHelper.testWarnBulkSizeZero.<locals>.WarnBulkSizeZero.Metar   rA   r   r   TNr`   r   r   r   r   r   W  s    r   Nrb   r   r   r   r   WarnBulkSizeZeroU  rd   rr   Trecordalwaysr/   r.   ro   rW   +{0} call should have generated one warning.zforced to 1z.Warning message did not contain "forced to 1".N)r   warningscatch_warningssimplefilterr
   r(   lenrP   assertInstrmessage)r+   rr   wr   r   r   testWarnBulkSizeZeroR  s    

"z%TestSeriesHelper.testWarnBulkSizeZeroc                 C   s   G dd dt }tjdd,}td |ddd | t|d	d
| | dt|d j	d W d   dS 1 s=w   Y  dS )z6Test warning for a set bulk size but autocommit False.c                   @   r   )zGTestSeriesHelper.testWarnBulkSizeNoEffect.<locals>.WarnBulkSizeNoEffectz-Define SeriesHelper for warning on bulk size.c                   @   s(   e Zd ZdZdZddgZdZg ZdZdS )zLTestSeriesHelper.testWarnBulkSizeNoEffect.<locals>.WarnBulkSizeNoEffect.Metaz(Define metadat for WarnBulkSizeNoEffect.r   rA   r   r   FN)	r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  s    r   Nr   r   r   r   r   WarnBulkSizeNoEffecto  r!   r   Trs   ru   r/   r.   ro   rW   rv   zhas no affectrw   z1Warning message did not contain "has not affect".N)
r   rx   ry   rz   r(   r{   rP   r|   r}   r~   )r+   r   r   r   r   r   testWarnBulkSizeNoEffectm  s   
"z)TestSeriesHelper.testWarnBulkSizeNoEffectc                    st   d G  fdddt }t }|dddd ||j_|ddd	d |j}|\}}| d
|v  | |d
   dS )z@Test that the data is saved with the specified retention policy.	my_policyc                       s   e Zd ZG  fdddZdS )zSTestSeriesHelper.testSeriesWithRetentionPolicy.<locals>.RetentionPolicySeriesHelperc                       s2   e Zd Ze ZdZddgZddgZdZdZ	 Z
dS )	zXTestSeriesHelper.testSeriesWithRetentionPolicy.<locals>.RetentionPolicySeriesHelper.Metar   r   rA   r   r      TN)r   r   r   r	   r   r   r   r   r   r   retention_policyr   r   r   r   r     s    r   Nrb   r   r   r   r   RetentionPolicySeriesHelper  s    r   r.   r/   r0   r1   r2   aar   Nr   r5   r6   r7   r8   Z	call_argsr9   r(   )r+   r   r:   kallargskwargsr   r   r   testSeriesWithRetentionPolicy  s   z.TestSeriesHelper.testSeriesWithRetentionPolicyc                 C   sl   G dd dt }t }|dddd ||j_|dddd |j}|\}}| d	|v  | |d	 d
 d
S )z9Test that the data is saved without any retention policy.c                   @   r^   )zXTestSeriesHelper.testSeriesWithoutRetentionPolicy.<locals>.NoRetentionPolicySeriesHelperc                   @   s.   e Zd Ze ZdZddgZddgZdZdZ	dS )	z]TestSeriesHelper.testSeriesWithoutRetentionPolicy.<locals>.NoRetentionPolicySeriesHelper.Metar   r   rA   r   r   r   TN)
r   r   r   r	   r   r   r   r   r   r   r   r   r   r   r     ra   r   Nrb   r   r   r   r   NoRetentionPolicySeriesHelper  rd   r   r.   r/   r0   r1   r2   r   r   Nr   )r+   r   r:   r   r   r   r   r   r    testSeriesWithoutRetentionPolicy  s   
z1TestSeriesHelper.testSeriesWithoutRetentionPolicy)r   r   r   r   classmethodr#   r'   r,   r;   r5   ZpatchrU   rV   r]   rg   rh   rq   unittestskipr   r   r   r   __classcell__r   r   r%   r   r      s,    	
@
A

2
r   )r   Z
__future__r   r   r   r   r   r   r   rx   r5   Zinfluxdbr   r	   Zrequests.exceptionsr
   ZTestCaser   r   r   r   r   <module>   s   