o
    -7_                     @   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ZddlZddlZddl	Z	ddl
Z
ddl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 ddlmZ dd	lmZ dddZdddZG dd dejZG dd deZdS )ar  Unit tests for the InfluxDBClient.

NB/WARNING:
This module implements tests for the InfluxDBClient class
but does so
 + without any server instance running
 + by mocking all the expected responses.

So any change of (response format from) the server will **NOT** be
detected by this module.

See client_test_with_server.py for tests against a running server instance.

    )absolute_import)division)print_function)unicode_literalsN)raises)InfluxDBClient)	ResultSet    c                 C   s   t  }| |_|d|_|S )Nutf8)requestsResponsestatus_codeencodeZ_content)r   contentZresp r   </usr/lib/python3/dist-packages/influxdb/tests/client_test.py_build_response_object)   s   r   GETc                    s,      fdd}tjj| jd|dS )Nc                     s|    }| ddksJ dkr.| dd}|dur.t|ts!J |tj|ddks,J |}t|ts8t|}t|dS )	z(Request content from the mocked session.methodr   POSTdataNT)strict)r   r   )get
isinstancestrjsonloadsdumpsr   )argskwargscr   r   r   r   r   r   request3   s   

z _mocked_session.<locals>.requestr#   )side_effect)uppermockpatchobject_session)clir   r   r   r#   r   r"   r   _mocked_session0   s   r+   c                   @   s*  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zeedd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zeed*d+ Zd,d- Zd.d/ Zd0d1 Zed2d3d4 Z eed5d6 Z!d7d8 Z"d9d: Z#d;d< Z$eed=d> Z%d?d@ Z&dAdB Z'dCdD Z(dEdF Z)eedGdH Z*dIdJ Z+dKdL Z,dMdN Z-dOdP Z.eedQdR Z/dSdT Z0dUdV Z1dWdX Z2dYdZ Z3d[d\ Z4eed]d^ Z5d_d` Z6eedadb Z7dcdd Z8e9:dedfdg Z;e9:dedhdi Z<e9:dedjdk Z=e9:dedldm Z>dndo Z?dpdq Z@drds ZAeedtdu ZBdvdw ZCeedxdy ZDdzd{ ZEeed|d} ZFd~d ZGeedd ZHdd ZIeedd ZJdd ZKeedd ZLdd ZMeedd ZNdd ZOeedd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdS )TestInfluxDBClientz%Set up the TestInfluxDBClient object.c                 C   sB   t dt tdddd| _dddd	d
ddidg| _d| _dS )z4Initialize an instance of TestInfluxDBClient object.error	localhost  usernamepasswordcpu_load_shortserver01us-westhostregionz2009-11-10T23:00:00.123456Zvalue{Gz?measurementtagstimeZfieldsz%influxdb://uSr:pWd@my.host.fr:1886/dbN)warningssimplefilterFutureWarningr   r*   dummy_points
dsn_stringselfr   r   r   setUpR   s   
zTestInfluxDBClient.setUpc              	   C   s   t ddddd}| d|j t ddddddd}| d	|j t ddddddd
d}| d|j t dddddddd}| d	|j t dddddddd}| d|j dS )z5Set up the test schema for TestInfluxDBClient object.r6   r/   r0   r1   databasezhttp://host:8086T)sslzhttps://host:8086Zsomepath)rG   pathzhttps://host:8086/somepathNz	/somepath)r   assertEqual_baseurlrD   r*   r   r   r   test_schemeh   s*   zTestInfluxDBClient.test_schemec                 C   s   t d}| d|j t | j}| d|j | d|j | d|j | d|j | |j	 t d| j }| 
|j	 t d| j }| d	|j t jd| j fi d
di}| d|j dS )z>Set up the test datasource name for TestInfluxDBClient object.zinfluxdb://192.168.0.1:1886zhttp://192.168.0.1:1886zhttp://my.host.fr:1886ZuSrZpWddbzudp+zhttps+zhttps://my.host.fr:1886rG   FN)r   Zfrom_dsnrI   rJ   rB   	_username	_password	_databaseassertFalseZ_use_udp
assertTruerK   r   r   r   test_dsn   s    
zTestInfluxDBClient.test_dsnc                 C   sV   t ddd}| |jjd | t t dd}W d   dS 1 s$w   Y  dS )z=Test mutual TLS authentication for TestInfluxDBClient object.Tz/etc/pki/tls/private/dummy.crt)rG   cert)rT   N)r   rI   r)   rT   assertRaises
ValueErrorrK   r   r   r   	test_cert   s
   "zTestInfluxDBClient.test_certc                 C   s,   t ddddd}|d | d|j dS )z2Test switch database in TestInfluxDBClient object.r6   r/   r0   r1   rF   Zanother_databaseN)r   Zswitch_databaserI   rP   rK   r   r   r   test_switch_database   s   
z'TestInfluxDBClient.test_switch_databasec                 C   s<   t ddddd}|dd | d|j | d|j dS )	z.Test switch user in TestInfluxDBClient object.r6   r/   r0   r1   rF   Zanother_usernameZanother_passwordN)r   Zswitch_userrI   rN   rO   rK   r   r   r   test_switch_user   s   z#TestInfluxDBClient.test_switch_userc              
   C   s   t  3}|jt jddd tdd}|dddd	d
ddddidgd | |jjd W d   dS 1 s:w   Y  dS )(Test write in TestInfluxDBClient object.http://localhost:8086/write   r   rM   rF   mydbmypolicyr2   r3   r4   r5   2009-11-10T23:00:00Zr8   r9   r:   rF   ZretentionPolicypointsK   cpu_load_short,host=server01,region=us-west value=0.64 1257894000000000000
N)	requests_mockMockerregister_urir   r   writerI   last_requestbodyrD   mr*   r   r   r   
test_write   s0   


"zTestInfluxDBClient.test_writec                 C   sl   t  (}|jt jddd tdd}|| j | d|jj	
d W d   dS 1 s/w   Y  dS )	0Test write points for TestInfluxDBClient object.r[   r\   r]   rM   r^   Kcpu_load_short,host=server01,region=us-west value=0.64 1257894000123456000
utf-8Nre   rf   rg   r   r   write_pointsrA   rI   ri   rj   decoderk   r   r   r   test_write_points   s   

"z$TestInfluxDBClient.test_write_pointsc              
   C   s   t  W}|jt jddd tddd}|ddd	d
dddddidgd t }tj	d|dd}|d W d   n1 sDw   Y  | 
|jj|  W d   dS 1 s^w   Y  dS )rZ   r[   r\   r]   rM   TrF   gzipr_   r`   r2   r3   r4   r5   ra   r8   r9   r:   rb   	   wcompresslevelZfileobjmoderd   N)re   rf   rg   r   r   rh   ioBytesIOrv   GzipFilerI   ri   rj   getvaluerD   rl   r*   
compressedfr   r   r   test_write_gzip   sF   


"z"TestInfluxDBClient.test_write_gzipc              	   C   s   t  I}|jt jddd tddd}|| j t }t	j
d|dd	}|d
 W d   n1 s6w   Y  | |jj|  W d   dS 1 sPw   Y  dS )rn   r[   r\   r]   rM   Tru   rw   rx   ry   K   cpu_load_short,host=server01,region=us-west value=0.64 1257894000123456000
N)re   rf   rg   r   r   rr   rA   r|   r}   rv   r~   rh   rI   ri   rj   r   r   r   r   r   test_write_points_gzip   s4   
	"z)TestInfluxDBClient.test_write_points_gzipc                 C   sx   t  .}|jt jddd tdd}|j| jdddid	d
 | d|jj	
d W d   dS 1 s5w   Y  dS )z6Test write points attrs for TestInfluxDBClient object.r[   r\   r]   rM   r^   testdbtagZhelloZ
somepolicy)rF   r<   Zretention_policyzUcpu_load_short,host=server01,region=us-west,tag=hello value=0.64 1257894000123456000
rp   Nrq   rk   r   r   r   %test_write_points_toplevel_attributes  s$   

"z8TestInfluxDBClient.test_write_points_toplevel_attributesc                 C   s   dddidddiddd	d
idddiddd	didddidg}d}t  "}|jt jddd tdd}|j|dddddd W d   n1 sKw   Y  | |jd | ||jj	
d dS )z6Test write points batch for TestInfluxDBClient object.	cpu_usageunitpercentra   r8   Gz(@r:   network	directionin     ^@out      (@Rnetwork,direction=out,host=server01,region=us-west value=12.0 1257894000000000000
r[   r\   r]   rM   r^   r3   r4   r5      rc   rF   r<   Z
batch_sizeNrp   re   rf   rg   r   r   rr   rI   Z
call_countri   rj   rs   )rD   rA   expected_last_bodyrl   r*   r   r   r   test_write_points_batch2  s<   	


z*TestInfluxDBClient.test_write_points_batchc                 C   s   dddidddiddd	d
idddiddd	didddidg}dd |D }d}t  "}|jt jddd tdd}|j|dddddd W d   n1 sRw   Y  | |jd | ||jj	
d dS )z@Test write points batch from a generator for TestInfluxDBClient.r   r   r   ra   r8   r   r:   r   r   r   r   r   r   c                 s   s    | ]}|V  qd S )Nr   ).0Zpointr   r   r   	<genexpr>Y  s    zGTestInfluxDBClient.test_write_points_batch_generator.<locals>.<genexpr>r   r[   r\   r]   rM   r^   r3   r4   r5   r   r   Nrp   r   )rD   rA   Zdummy_points_generatorr   rl   r*   r   r   r   !test_write_points_batch_generatorO  s>   


z4TestInfluxDBClient.test_write_points_batch_generatorc              	   C   sn   t  t jt j}tdd}|d|f tdddddd|d	}|| j |	d
\}}| 
d|  dS )z4Test write points UDP for TestInfluxDBClient object.  @  0.0.0.0r.   r/   roottestTZuse_udpZudp_port   ro   N)socketAF_INET
SOCK_DGRAMrandomrandintbindr   rr   rA   recvfromrI   rs   rD   sZportr*   Zreceived_dataZaddrr   r   r   test_write_points_udpm  s   z(TestInfluxDBClient.test_write_points_udpc                 C   L   t ddddd}t|dd |g  W d   dS 1 sw   Y  dS )	z5Test write points fail for TestInfluxDBClient object.r6   r/   r0   r1   rM   post  N)r   r+   rr   rK   r   r   r   test_write_points_fails     "z*TestInfluxDBClient.test_write_points_failsc                 C   s
  t  w}|jt jddd tdd}|j| jdd | d|jj	 |j| jd	d | d
|jj	 |j| jdd | d|jj	 |j| jdd | d|jj	 |j| jdd | d|jj	 |j| jdd | d|jj	 W d   dS 1 s~w   Y  dS )?Test write points with precision for TestInfluxDBClient object.r[   r\   r]   rM   r^   nZtime_precisionr   uH   cpu_load_short,host=server01,region=us-west value=0.64 1257894000123456
msE   cpu_load_short,host=server01,region=us-west value=0.64 1257894000123
r   B   cpu_load_short,host=server01,region=us-west value=0.64 1257894000
rl   @   cpu_load_short,host=server01,region=us-west value=0.64 20964900
h>   cpu_load_short,host=server01,region=us-west value=0.64 349415
N)
re   rf   rg   r   r   rr   rA   rI   ri   rj   rk   r   r   r    test_write_points_with_precision  sL   

"z3TestInfluxDBClient.test_write_points_with_precisionc                 C   st   t  ,}|jt jddd tdd}|j| jdd | |jj	dgdgd W d	   d	S 1 s3w   Y  d	S )
zATest write points with consistency for TestInfluxDBClient object.r[   r\   r]   rM   r^   anyconsistency)rM   r   N)
re   rf   rg   r   r   rr   rA   rI   ri   qsrk   r   r   r   "test_write_points_with_consistency  s   

"z5TestInfluxDBClient.test_write_points_with_consistencyc              	   C   s@  t  t jt j}tdd}|d|f tdddddd|d	}|j| jd
d |	d\}}| 
d| |j| jdd |	d\}}| 
d| |j| jdd |	d\}}| 
d| |j| jdd |	d\}}| 
d| |j| jdd |	d\}}| 
d| |j| jdd |	d\}}| 
d| dS )r   r   r   r   r.   r/   r   r   Tr   r   r   r   r   r   r   r   r   r   r   rl   r   r   r   N)r   r   r   r   r   r   r   rr   rA   r   rI   r   r   r   r   $test_write_points_with_precision_udp  sV   z7TestInfluxDBClient.test_write_points_with_precision_udpc                 C   sH   t  }| td |j| jdd W d   dS 1 sw   Y  dS )z<Test write points w/bad precision TestInfluxDBClient object.zHInvalid time precision is given. \(use 'n', 'u', 'ms', 's', 'm' or 'h'\)gr   N)r   ZassertRaisesRegexp	Exceptionrr   rA   rK   r   r   r   test_write_points_bad_precision	  s   "z2TestInfluxDBClient.test_write_points_bad_precisionc                 C   sF   t  }| t |j| jdd W d   dS 1 sw   Y  dS )z*Test write points w/bad consistency value.Zboor   N)r   rU   rV   rr   rA   rK   r   r   r   !test_write_points_bad_consistency  s   "z4TestInfluxDBClient.test_write_points_bad_consistencyc                 C   r   )	zATest write points w/precision fail for TestInfluxDBClient object.r6   r/   r0   r1   rM   r   r   N)r   r+   Zwrite_points_with_precisionrK   r   r   r   &test_write_points_with_precision_fails  r   z9TestInfluxDBClient.test_write_points_with_precision_failsc                 C   p   d}t  (}|jt jd|d | jd}| t|d  dddg W d	   d	S 1 s1w   Y  d	S )
z0Test query method for TestInfluxDBClient object.{"results": [{"series": [{"measurement": "sdfsdfsdf", "columns": ["time", "value"], "values": [["2009-11-10T23:00:00Z", 0.64]]}]}, {"series": [{"measurement": "cpu_load_short", "columns": ["time", "value"], "values": [["2009-11-10T23:00:00Z", 0.64]]}]}]}http://localhost:8086/querytextselect * from foor   r9   ra   r8   r=   N)	re   rf   rg   r   r*   queryassertListEquallist
get_pointsrD   example_responserl   Zrsr   r   r   
test_query&     

"zTestInfluxDBClient.test_queryc                 C   s   t td}t ,}|jtjdddiddi|d | jd}| 	t
| dd	d
g W d   dS 1 s:w   Y  dS )z.Test query method with a messagepack response.Z81a7726573756c74739182ac73746174656d656e745f696400a67365726965739183a46e616d65a161a7636f6c756d6e7392a474696d65a176a676616c7565739192c70c05000000005d26178a019096c8cb3ff0000000000000r   ZAcceptzapplication/x-msgpackzContent-Type)Zrequest_headersheadersr   zselect * from ag      ?z2019-07-10T16:51:22.026253Z)vr=   N)bytes	bytearrayfromhexre   rf   rg   r   r*   r   r   r   r   r   r   r   r   test_query_msgpack=  s"   


"z%TestInfluxDBClient.test_query_msgpackc                 C   r   )
zTest SELECT.*INTO is POSTed.r   r   r   zselect * INTO newmeas from foor   r9   ra   r   N)	re   rf   rg   r   r*   r   r   r   r   r   r   r   r   test_select_into_postT  r   z(TestInfluxDBClient.test_select_into_postzNot implemented for 0.9c                 C   s   t dd}g dg dg dg dg dgdg d	d
}t|t| }t }|jtjd|d | |jddd||g W d   dS 1 sLw   Y  dS )z1Test chunked query for TestInfluxDBClient object.rM   r^   )l   &&iA  i  )l   &i1u     )l   Q&i!N  i  )l   t&'  i+  )l   "& &r      Zfoo)r=   Zsequence_numberval)rc   r;   columnsz"http://localhost:8086/db/db/seriesr   r   T)chunkedN)	r   r   r   re   rf   rg   r   r   r   )rD   r*   Zexample_objectr   rl   r   r   r   test_query_chunkedk  s.   

"z%TestInfluxDBClient.test_query_chunkedc                 C   @   t | jdd | jd W d   dS 1 sw   Y  dS )z0Test query failed for TestInfluxDBClient object.r     zselect column_one from foo;N)r+   r*   r   rC   r   r   r   test_query_fail     "z"TestInfluxDBClient.test_query_failc                 C   s\   t   }|jt jddddid | j }| |d W d   dS 1 s'w   Y  dS )z$Test ping querying InfluxDB version.http://localhost:8086/pingr\   X-Influxdb-Version1.2.3r   r   N)re   rf   rg   r   r*   pingrI   )rD   rl   versionr   r   r   	test_ping  s   

"zTestInfluxDBClient.test_pingc                 C   d   t  $}|jt jddd | jd | |jjd d d W d   dS 1 s+w   Y  dS )	z3Test create database for TestInfluxDBClient object.r   {"results":[{}]}r   new_dbqr   zcreate database "new_db"N	re   rf   rg   r   r*   create_databaserI   ri   r   rD   rl   r   r   r   test_create_database     
"z'TestInfluxDBClient.test_create_databasec                 C   r   )	z<Test create db w/numeric name for TestInfluxDBClient object.r   r   r   123r   r   zcreate database "123"Nr   r   r   r   r   "test_create_numeric_named_database  r   z5TestInfluxDBClient.test_create_numeric_named_databasec                 C   r   )z8Test create database fail for TestInfluxDBClient object.r   r   r   N)r+   r*   r   rC   r   r   r   test_create_database_fails  r   z-TestInfluxDBClient.test_create_database_failsc                 C   r   )	z1Test drop database for TestInfluxDBClient object.r   r   r   r   r   r   zdrop database "new_db"N	re   rf   rg   r   r*   Zdrop_databaserI   ri   r   r   r   r   r   test_drop_database  r   z%TestInfluxDBClient.test_drop_databasec                 C   r   )	z4Test drop measurement for TestInfluxDBClient object.r   r   r   Znew_measurementr   r   z"drop measurement "new_measurement"N)	re   rf   rg   r   r*   Zdrop_measurementrI   ri   r   r   r   r   r   test_drop_measurement  r   z(TestInfluxDBClient.test_drop_measurementc                 C   r   )	z3Test drop numeric db for TestInfluxDBClient object.r   r   r   r   r   r   zdrop database "123"Nr   r   r   r   r    test_drop_numeric_named_database  r   z3TestInfluxDBClient.test_drop_numeric_named_databasec                 C   s|   ddddgdggdgdgigi}t | jdd	t| | | j ddiddig W d
   d
S 1 s7w   Y  d
S )z9Test get list of databases for TestInfluxDBClient object.resultsseriesZ	databasesZnew_db_1Znew_db_2name)r  valuesr   r   r	   N)r+   r*   r   r   r   get_list_databaserD   r   r   r   r   test_get_list_database  s    	"z)TestInfluxDBClient.test_get_list_databasec                 C   H   t dddd}t|dd |  W d   dS 1 sw   Y  dS )z8Test get list of dbs fail for TestInfluxDBClient object.r6   r/   r0   r1   r   r   N)r   r+   r  rK   r   r   r   test_get_list_database_fails     
"z/TestInfluxDBClient.test_get_list_database_failsc                 C   s|   ddddgdgdggdgigi}t | jdd	t| | | j ddiddig W d
   d
S 1 s7w   Y  d
S )z<Test get list of measurements for TestInfluxDBClient object.r  r  Zmeasurementsr  cpuZdiskr  r   r  r   r	   N)r+   r*   r   r   r   Zget_list_measurementsr  r   r   r   test_get_list_measurements  s   

"z-TestInfluxDBClient.test_get_list_measurementsc                 C   sr   dddgdggdgdgigi}t | jddt| | | j ddg W d	   d	S 1 s2w   Y  d	S )
z,Test get a list of series from the database.r  r  +cpu_load_short,host=server01,region=us-westz)memory_usage,host=server02,region=us-eastkeyr  r   r   r	   Nr+   r*   r   r   r   get_list_seriesr  r   r   r   test_get_list_series  s"   "z'TestInfluxDBClient.test_get_list_seriesc                 C   sp   dddggdgdgigi}t | jddt| | | jjdd	dg W d
   d
S 1 s1w   Y  d
S )z6Test get a list of series from the database by filter.r  r  r  r  r  r   r	   r2   )r;   Nr  r  r   r   r   %test_get_list_series_with_measurement(  s   
"z8TestInfluxDBClient.test_get_list_series_with_measurementc                 C   st   dddggdgdgigi}t | jddt| | | jjdd	id
dg W d   dS 1 s3w   Y  dS )z4Test get a list of series from the database by tags.r  r  r  r  r  r   r	   r7   r4   )r<   Nr  r  r   r   r   test_get_list_series_with_tags9  s   
"z1TestInfluxDBClient.test_get_list_series_with_tagsc                 C   r  )z5Test get a list of series from the database but fail.r6   r/   r0   r1   r   r   N)r   r+   r  rK   r   r   r   test_get_list_series_failsJ  r
  z-TestInfluxDBClient.test_get_list_series_failsc                 C   r   d}t  )}|jt jd|d | jjdddddd	 | |jjd
 d d W d   dS 1 s2w   Y  dS )z=Test create default ret policy for TestInfluxDBClient object.r   r   r   somename1d   TrM   )defaultrF   r   r   z^create retention policy "somename" on "db" duration 1d replication 4 shard duration 0s defaultN	re   rf   rg   r   r*   Zcreate_retention_policyrI   ri   r   rD   r   rl   r   r   r   $test_create_retention_policy_defaultQ  s   

"z7TestInfluxDBClient.test_create_retention_policy_defaultc                 C   sp   d}t  (}|jt jd|d | jjddddd | |jjd	 d
 d W d   dS 1 s1w   Y  dS )z;Test create retention policy for TestInfluxDBClient object.r   r   r   r  r  r  rM   r^   r   r   zVcreate retention policy "somename" on "db" duration 1d replication 4 shard duration 0sNr  r  r   r   r   test_create_retention_policye  s   
"z/TestInfluxDBClient.test_create_retention_policyc                 C   r  )z:Test create retention policy with a custom shard duration.r   r   r   Z	somename2r  r  rM   1h)rF   shard_durationr   r   zWcreate retention policy "somename2" on "db" duration 1d replication 4 shard duration 1hNr  r  r   r   r   +test_create_retention_policy_shard_durationy  s    
"z>TestInfluxDBClient.test_create_retention_policy_shard_durationc              	   C   st   d}t  *}|jt jd|d | jjdddddd	d
 | |jjd d d W d   dS 1 s3w   Y  dS )z;Test create retention policy with a default shard duration.r   r   r   Z	somename3r  r  rM   r   T)rF   r!  r  r   r   z_create retention policy "somename3" on "db" duration 1d replication 4 shard duration 1h defaultNr  r  r   r   r   3test_create_retention_policy_shard_duration_default  s    
"zFTestInfluxDBClient.test_create_retention_policy_shard_duration_defaultc                 C   s   d}t  f}|jt jd|d | jjdddd | |jjd d	 d
 | jjdddd | |jjd d	 d | jjdddd | |jjd d	 d | jjdddd | |jjd d	 d W d   dS 1 sow   Y  dS )z:Test alter retention policy for TestInfluxDBClient object.r   r   r   r  rM   Z4d)durationr   r   z5alter retention policy "somename" on "db" duration 4dr  )Zreplicationz7alter retention policy "somename" on "db" replication 4r   )r!  z;alter retention policy "somename" on "db" shard duration 1hT)r  z1alter retention policy "somename" on "db" defaultN)	re   rf   rg   r   r*   alter_retention_policyrI   ri   r   r  r   r   r   test_alter_retention_policy  sH   




"z.TestInfluxDBClient.test_alter_retention_policyc                 C   sN   t dddd}t|dd | jdd W d	   d	S 1 s w   Y  d	S )
z<Test invalid alter ret policy for TestInfluxDBClient object.r6   r/   r0   r1   r     r  rM   N)r   r+   r*   r%  rK   r   r   r   #test_alter_retention_policy_invalid  s   "z6TestInfluxDBClient.test_alter_retention_policy_invalidc                 C   sj   d}t  %}|jt jd|d | jdd | |jjd d d W d	   d	S 1 s.w   Y  d	S )
z9Test drop retention policy for TestInfluxDBClient object.r   r   r   r  rM   r   r   z(drop retention policy "somename" on "db"N)	re   rf   rg   r   r*   drop_retention_policyrI   ri   r   r  r   r   r   test_drop_retention_policy  s   
"z-TestInfluxDBClient.test_drop_retention_policyc                 C   sL   t dddd}t|dd |dd W d	   d	S 1 sw   Y  d	S )
z:Test failed drop ret policy for TestInfluxDBClient object.r6   r/   r0   r1   deleter   r  rM   N)r   r+   r)  rK   r   r   r    test_drop_retention_policy_fails     "z3TestInfluxDBClient.test_drop_retention_policy_failsc                 C   sb   d}t  !}|jt jd|d | | jdddddg W d	   d	S 1 s*w   Y  d	S )
z:Test get retention policies for TestInfluxDBClient object.zq{"results": [{"series": [{"values": [["fsfdsdf", "24h0m0s", 2]], "columns": ["name", "duration", "replicaN"]}]}]}r   r   rM   Z24h0m0sZfsfdsdfr   )r$  r  ZreplicaNN)re   rf   rg   r   r   r*   Zget_list_retention_policiesr  r   r   r    test_get_list_retention_policies  s   

"z3TestInfluxDBClient.test_get_list_retention_policieszrequests.Session.requestc                 C   s4   G dd dt }| j|_tdd}|| j dS )z0Test that two connection errors will be handled.c                   @       e Zd ZdZdd Zdd ZdS )z9TestInfluxDBClient.test_request_retry.<locals>.CustomMock#Create custom mock object for test.c                 S   
   d| _ d S Nr   irC   r   r   r   __init__     
zBTestInfluxDBClient.test_request_retry.<locals>.CustomMock.__init__c                 _   2   |  j d7  _ | j dk rtjjt }d|_|S )4Handle a connection error for the CustomMock object.      r\   )r4  r   
exceptionsConnectionErrorr   r   rD   r   r    rr   r   r   connection_error     
zJTestInfluxDBClient.test_request_retry.<locals>.CustomMock.connection_errorN__name__
__module____qualname____doc__r5  r?  r   r   r   r   
CustomMock       rF  rM   r^   N)r(   r?  r$   r   rr   rA   rD   mock_requestrF  r*   r   r   r   test_request_retry  s   

z%TestInfluxDBClient.test_request_retryc                 C   sd   G dd dt }| j|_tdd}| tjj || j	 W d   dS 1 s+w   Y  dS )z4Test that three requests errors will not be handled.c                   @   r/  )z@TestInfluxDBClient.test_request_retry_raises.<locals>.CustomMockr0  c                 S   r1  r2  r3  rC   r   r   r   r5    r6  zITestInfluxDBClient.test_request_retry_raises.<locals>.CustomMock.__init__c                 _   r7  )r8  r9  r  r	   )r4  r   r;  	HTTPErrorr   r   r=  r   r   r   r?  !  r@  zQTestInfluxDBClient.test_request_retry_raises.<locals>.CustomMock.connection_errorNrA  r   r   r   r   rF    rG  rF  rM   r^   N)
r(   r?  r$   r   rU   r   r;  rK  rr   rA   rH  r   r   r   test_request_retry_raises  s   

"z,TestInfluxDBClient.test_request_retry_raisesc                 C   sD   G dd dt }tdd}||j|_td|d}|| j dS )z?Test that a random number of connection errors will be handled.c                   @   r/  )z@TestInfluxDBClient.test_random_request_retry.<locals>.CustomMockr0  c                 S      d| _ || _d S r2  r4  retriesrD   rO  r   r   r   r5  9     
zITestInfluxDBClient.test_random_request_retry.<locals>.CustomMock.__init__c                 _   s4   |  j d7  _ | j | jk rtjjt }d|_|S )r8  r9  r\   r4  rO  r   r;  r<  r   r   r=  r   r   r   r?  =  s   zQTestInfluxDBClient.test_random_request_retry.<locals>.CustomMock.connection_errorNrA  r   r   r   r   rF  6      rF  r9     rM   rF   rO  N)r(   r   r   r?  r$   r   rr   rA   rD   rI  rF  rO  r*   r   r   r   test_random_request_retry3  s
   z,TestInfluxDBClient.test_random_request_retryc                 C   st   G dd dt }tdd}||j|_td|d}| tjj	 |
| j W d   dS 1 s3w   Y  dS )zATest a random number of conn errors plus one will not be handled.c                   @   r/  )zGTestInfluxDBClient.test_random_request_retry_raises.<locals>.CustomMockr0  c                 S   rM  r2  rN  rP  r   r   r   r5  T  rQ  zPTestInfluxDBClient.test_random_request_retry_raises.<locals>.CustomMock.__init__c                 _   s8   |  j d7  _ | j | jd k rtjjt }d|_|S )r8  r9  r	   rR  r=  r   r   r   r?  X  s   zXTestInfluxDBClient.test_random_request_retry_raises.<locals>.CustomMock.connection_errorNrA  r   r   r   r   rF  Q  rS  rF  r9  rT  rM   rU  N)r(   r   r   r?  r$   r   rU   r   r;  r<  rr   rA   rV  r   r   r    test_random_request_retry_raisesN  s   "z3TestInfluxDBClient.test_random_request_retry_raisesc                 C   s^   d}t  }|jt jd|d | | j dddg W d   dS 1 s(w   Y  dS )z-Test get users for TestInfluxDBClient object.zQ{"results":[{"series":[{"columns":["user","admin"],"values":[["test",false]]}]}]}r   r   r   F)userZadminNre   rf   rg   r   r   r*   Zget_list_usersr  r   r   r   test_get_list_usersk  s   

"z&TestInfluxDBClient.test_get_list_usersc                 C   sV   d}t  }|jt jd|d | | j g  W d   dS 1 s$w   Y  dS )z6Test get empty userlist for TestInfluxDBClient object.z7{"results":[{"series":[{"columns":["user","admin"]}]}]}r   r   NrZ  r  r   r   r   test_get_list_users_empty~  s   
"z,TestInfluxDBClient.test_get_list_users_emptyc                 C   h   d}t  $}|jt jd|d | jd | |jjd d d W d   dS 1 s-w   Y  dS )	z5Test grant admin privs for TestInfluxDBClient object.r   r   r   r   r   r   zgrant all privileges to "test"N)	re   rf   rg   r   r*   grant_admin_privilegesrI   ri   r   r  r   r   r   test_grant_admin_privileges     
"z.TestInfluxDBClient.test_grant_admin_privilegesc                 C   L   t dddd}t|dd | jd W d   dS 1 sw   Y  dS )	z=Test grant invalid admin privs for TestInfluxDBClient object.r6   r/   r0   r1   r   r'  r
   N)r   r+   r*   r^  rK   r   r   r   #test_grant_admin_privileges_invalid  r-  z6TestInfluxDBClient.test_grant_admin_privileges_invalidc                 C   r]  )	z6Test revoke admin privs for TestInfluxDBClient object.r   r   r   r   r   r   z!revoke all privileges from "test"N)	re   rf   rg   r   r*   revoke_admin_privilegesrI   ri   r   r  r   r   r   test_revoke_admin_privileges  r`  z/TestInfluxDBClient.test_revoke_admin_privilegesc                 C   ra  )	z>Test revoke invalid admin privs for TestInfluxDBClient object.r6   r/   r0   r1   r   r'  r
   N)r   r+   r*   rc  rK   r   r   r   $test_revoke_admin_privileges_invalid  r-  z7TestInfluxDBClient.test_revoke_admin_privileges_invalidc                 C   l   d}t  &}|jt jd|d | jddd | |jjd d d	 W d
   d
S 1 s/w   Y  d
S )z/Test grant privs for TestInfluxDBClient object.r   r   r   readr   r   r   r   z grant read on "testdb" to "test"N)	re   rf   rg   r   r*   grant_privilegerI   ri   r   r  r   r   r   test_grant_privilege     
"z'TestInfluxDBClient.test_grant_privilegec                 C   P   t dddd}t|dd | jddd	 W d
   d
S 1 s!w   Y  d
S )z7Test grant invalid privs for TestInfluxDBClient object.r6   r/   r0   r1   r   r'  r
   r   r   N)r   r+   r*   rh  rK   r   r   r   test_grant_privilege_invalid     "z/TestInfluxDBClient.test_grant_privilege_invalidc                 C   rf  )z0Test revoke privs for TestInfluxDBClient object.r   r   r   rg  r   r   r   r   z#revoke read on "testdb" from "test"N)	re   rf   rg   r   r*   revoke_privilegerI   ri   r   r  r   r   r   test_revoke_privilege  rj  z(TestInfluxDBClient.test_revoke_privilegec                 C   rk  )z8Test revoke invalid privs for TestInfluxDBClient object.r6   r/   r0   r1   r   r'  r
   r   r   N)r   r+   r*   rn  rK   r   r   r   test_revoke_privilege_invalid  rm  z0TestInfluxDBClient.test_revoke_privilege_invalidc              	   C   s   ddddgddgddgd	d
ggdgigi}t | jddt| | | jdddddddd	d
dg W d   dS 1 sCw   Y  dS )z5Test get list of privs for TestInfluxDBClient object.r  r  rF   	privilegeZdb1ZREADZdb2zALL PRIVILEGESZdb3zNO PRIVILEGESr   r  r   r	   r   )rF   rq  N)r+   r*   r   r   r   get_list_privilegesr  r   r   r   test_get_list_privileges  s&   

"z+TestInfluxDBClient.test_get_list_privilegesc                 C   sJ   t dddd}t|dd |d W d   dS 1 sw   Y  dS )	z<Test failed get list of privs for TestInfluxDBClient object.r6   r/   r0   r1   r   r   r   N)r   r+   rs  rK   r   r   r   test_get_list_privileges_fails   s   "z1TestInfluxDBClient.test_get_list_privileges_failsc              	   C   s   dddddgddgdd	ggd
dddgddggd
dddgdgdgi}t | jddt|' | | j dddddd	dgiddddgidg ig W d   dS 1 sZw   Y  dS )z*Test getting a list of continuous queries.r  r   Ztestdb01r  r   Z
testname01Ztestquery01Z
testname02Ztestquery02r  Ztestdb02Z
testname03Ztestquery03Ztestdb03)r  r   )Zstatement_idr  r   r	   )r  r   N)r+   r*   r   r   r   get_list_continuous_queriesr  r   r   r    test_get_list_continuous_queries  sH   "z3TestInfluxDBClient.test_get_list_continuous_queriesc                 C   s>   t | jdd | j  W d   dS 1 sw   Y  dS )z1Test failing to get a list of continuous queries.r   r'  N)r+   r*   rv  rC   r   r   r   &test_get_list_continuous_queries_fails7  s   "z9TestInfluxDBClient.test_get_list_continuous_queries_failsc                 C   s   di gi}t  @}|jt jdt|d d}| jd|d | |j	j
d d d	 | jd|dd
 | |j	j
d d d W d   dS 1 sLw   Y  dS )zTest continuous query creation.r  r   r   zOSELECT count("value") INTO "6_months"."events" FROM "events" GROUP BY time(10m)cq_namedb_namer   r   zcreate continuous query "cq_name" on "db_name" begin select count("value") into "6_months"."events" from "events" group by time(10m) endzEVERY 10s FOR 2mzcreate continuous query "cq_name" on "db_name" resample every 10s for 2m begin select count("value") into "6_months"."events" from "events" group by time(10m) endN)re   rf   rg   r   r   r   r*   create_continuous_queryrI   ri   r   )rD   r   rl   r   r   r   r   test_create_continuous_query=  s*   

"z/TestInfluxDBClient.test_create_continuous_queryc                 C   sD   t | jdd | jddd W d   dS 1 sw   Y  dS )z*Test failing to create a continuous query.r   r'  ry  Zselectrz  N)r+   r*   r{  rC   r   r   r   "test_create_continuous_query_failsX  s   "z5TestInfluxDBClient.test_create_continuous_query_failsc                 C   sv   di gi}t  (}|jt jdt|d | jdd | |j	j
d d d W d	   d	S 1 s4w   Y  d	S )
z!Test dropping a continuous query.r  r   r   ry  rz  r   r   z,drop continuous query "cq_name" on "db_name"N)re   rf   rg   r   r   r   r*   drop_continuous_queryrI   ri   r   )rD   r   rl   r   r   r   test_drop_continuous_query^  s   

"z-TestInfluxDBClient.test_drop_continuous_queryc                 C   sB   t | jdd | jdd W d   dS 1 sw   Y  dS )z(Test failing to drop a continuous query.r   r'  ry  rz  N)r+   r*   r~  rC   r   r   r    test_drop_continuous_query_failsm  s   "z3TestInfluxDBClient.test_drop_continuous_query_failsc                 C   s>   |  t tdddd W d   dS 1 sw   Y  dS )z5Test invalid port fail for TestInfluxDBClient object.r6   z80/redirr0   r1   N)rU   rV   r   rC   r   r   r   test_invalid_port_failss  s   "z*TestInfluxDBClient.test_invalid_port_failsc                 C   s   d}t  b}|jt jd|d | jjdddd}t|}| t|dk | 	|d	 
 td
dgdgdgdgdggdgi
  | 	|d 
 td
dgdgdgdgdggdgi
  W d   dS 1 skw   Y  dS )z3Test chunked reponse for TestInfluxDBClient object.a   {"results":[{"statement_id":0,"series":[{"columns":["key"],"values":[["cpu"],["memory"],["iops"],["network"]],"partial":true}],"partial":true}]}
{"results":[{"statement_id":0,"series":[{"columns":["key"],"values":[["qps"],["uptime"],["df"],["mount"]]}]}]}
r   r   zshow seriesTr  )r   Z
chunk_sizer   r   r  r  r  ZmemoryZiopsr   rr  r9  ZqpsZuptimeZdfZmountN)re   rf   rg   r   r*   r   r   rR   lenrI   __repr__r   )rD   r   rl   Zresponseresr   r   r   test_chunked_responsex  s<   
"z(TestInfluxDBClient.test_chunked_responsec                 C   sh   t  &}|jt jddddid t }|  | |jjd d W d   dS 1 s-w   Y  dS )	z Test auth with default settings.r   r\   r   r   r   AuthorizationzBasic cm9vdDpyb290N	re   rf   rg   r   r   r   rI   ri   r   rk   r   r   r   test_auth_default  s   
"z$TestInfluxDBClient.test_auth_defaultc                 C   sn   t  )}|jt jddddid tddd}|  | |jjd	 d
 W d   dS 1 s0w   Y  dS )z,Test auth with custom username and password.r   r\   r   r   r   zmy-usernamezmy-passwordr0   r1   r  z&Basic bXktdXNlcm5hbWU6bXktcGFzc3dvcmQ=Nr  rk   r   r   r   test_auth_username_password  s   
"z.TestInfluxDBClient.test_auth_username_passwordc                 C   s   t  L}|jt jddddid tddd}|  | d|jjv  tdd	}|  | d|jjv  tdd
}|  | d|jjv  W d   dS 1 sSw   Y  dS )z0Test auth with not defined username or password.r   r\   r   r   r   Nr  r  )r0   )r1   )	re   rf   rg   r   r   r   rQ   ri   r   rk   r   r   r    test_auth_username_password_none  s"   


"z3TestInfluxDBClient.test_auth_username_password_nonec                 C   st   t  ,}|jt jddddid tddddid	}|  | |jjd d W d   dS 1 s3w   Y  dS )
z+Test auth with custom authorization header.r   r\   r   r   r   Nr  zmy-token)r0   r1   r   r  rk   r   r   r   test_auth_token  s   
"z"TestInfluxDBClient.test_auth_tokenN)WrB  rC  rD  rE  rE   rL   rS   rW   rX   rY   rm   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   unittestskipr   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  r  r"  r#  r&  r(  r*  r,  r.  r&   r'   rJ  rL  rW  rX  r[  r\  r_  rb  rd  re  ri  rl  ro  rp  rt  ru  rw  rx  r|  r}  r  r  r  r  r  r  r  r  r   r   r   r   r,   O   s    $
5;	

!



)










0


r,   c                       s0   e Zd ZdZ fddZ			dddZ  ZS )	
FakeClientz0Set up a fake client instance of InfluxDBClient.c                    s   t t| j|i | dS )z0Initialize an instance of the FakeClient object.N)superr  r5  )rD   r   r    	__class__r   r   r5    s   zFakeClient.__init__Nr	   c                 C   sH   |dkrt d|dkr| jdkrt d|dkr"| jdv r"t ddS )	z&Query data from the FakeClient object.ZFailz	Fail onceZhost1z	Fail Oncez
Fail twicezhost1 host2z
Fail TwiceZSuccess)r   Z_host)rD   r   paramsZexpected_response_coderF   r   r   r   r     s   zFakeClient.query)Nr	   N)rB  rC  rD  rE  r5  r   __classcell__r   r   r  r   r    s    r  )r	   r
   )r   r	   r
   )rE  Z
__future__r   r   r   r   r   r   r  r>   r|   rv   r   r&   r   Zrequests.exceptionsre   Z
nose.toolsr   Zinfluxdbr   Zinfluxdb.resultsetr   r   r+   ZTestCaser,   r  r   r   r   r   <module>   sD   

           