
    Zi                         d dl Z d dlZd dlZd dlZ	 d dlmZ n# e$ r	 d dlmZ Y nw xY wd dlmZm	Z	 d dl
mZ d dlmZ  G d dej                  ZdS )    N)Queue)MAX_MSG_SIZEConsumer)APIError)TEST_API_KEYc                   P    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestConsumerc                     t                      }t          |d          }|                    d           |                                }|                     |dg           d S )N    )r   r   putnextassertEqual)selfqconsumerr   s       U/root/projects/butler/venv/lib/python3.11/site-packages/posthog/test/test_consumer.py	test_nextzTestConsumer.test_next   sR    GGAr??	a}}s#####    c                    t                      }d}t          |d|          }t          d          D ]}|                    |           |                                }|                     |t          t          |                               d S )N2   r   i'  )r   r   ranger   r   r   list)r   r   flush_atr   ir   s         r   test_next_limitzTestConsumer.test_next_limit   s~    GGAr8,,u 	 	AEE!HHHH}}tE(OO4455555r   c                 &   t                      }t          |d          }ddt          z  i}|                    |           |                                }|                     |g            |                     |                                           d S )Nr   mx)r   r   r   r   r   r   
assertTrueempty)r   r   r   oversize_msgr   s        r   test_dropping_oversize_msgz'TestConsumer.test_dropping_oversize_msg"   s|    GGAr??S</0	l}}r"""		"""""r   c                     t                      }t          |t                    }dddd}|                    |           |                                }|                     |           d S Ntrackpython eventdistinct_idtypeeventr(   )r   r   r   r   uploadr    )r   r   r   r&   successs        r   test_uploadzTestConsumer.test_upload+   s_    GGA|,, >-XX	e//##     r   c                    t                      }d}t          |t          d|          }t          j        d          5 }|                                 t          dd          D ]7}dd|z  d	d
}|                    |           t          j	        |dz             8| 
                    |j        d           d d d            d S # 1 swxY w Y   d S )Ng333333?
   r   flush_intervalposthog.consumer.batch_postr      r&   python event %dr(   r)   皙?r   r   r   mockpatchstartr   r   timesleepr   
call_count)r   r   r2   r   	mock_postr   r&   s          r   test_flush_intervalz TestConsumer.test_flush_interval3   s    GGA|bXXXZ566 
	6)NN1a[[ 1 1#.2#0 
 e
>C/0000Y11555
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6s   A8CC	Cc                    t                      }d}d}t          |t          ||          }t          j        d          5 }|                                 t          d|dz            D ] }dd|z  d	d
}|                    |           !t          j	        |dz             | 
                    |j        d           d d d            d S # 1 swxY w Y   d S )Ng      ?r0   r1   r3   r      r&   r5   r(   r)   r6   r7   )r   r   r2   r   r   r>   r   r&   s           r   "test_multiple_uploads_per_intervalz/TestConsumer.test_multiple_uploads_per_intervalF   s0    GG|h~
 
 
 Z566 
	6)NN1hl++  #.2#0 
 eJ~+,,,Y11555
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6 
	6s   A;CCCc                 h    t          d t                    }dddd}|                    |g           d S r%   )r   r   request)r   r   r&   s      r   test_requestzTestConsumer.test_request[   s<    D,// >-XX%!!!!!r   c                    fdd_         t          j        dt          j                            5  dddd}|j        k    r|                    |g           nj	 |                    |g           |                     d	|j        z             n5# t                    $ r }|                     |           Y d }~nd }~ww xY wd d d            d S # 1 swxY w Y   d S )
Nc                  B    xj         dz  c_         j         k    rd S )Nr   )r=   )argskwargsexception_countexpected_exceptionr>   s     r   r>   z3TestConsumer._test_request_retry.<locals>.mock_posta   s3      A%  #66(( 76r   r   r3   side_effectr&   r'   r(   r)   zErequest() should raise an exception if still failing after %d retries)	r=   r8   r9   MockretriesrD   failr*   r   )r   r   rK   rJ   r&   excr>   s     ``  @r   _test_request_retryz TestConsumer._test_request_retry`   s   	) 	) 	) 	) 	) 	) 	)
  !	Z)49+K+K+K
 
 	 	  ', E ("222  %))))
$$eW--- II_"*+    .// > > >$$S*<========>%	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s;   )C$B:CC
*C CC

CC!Cc                    t          d t                    }|                     |t          d          d           t          d t                    }|                     |t	          dd          d           t          d t                    }|                     |t	          dd          d           t          d t                    }t	          dd          }	 |                     ||d	           |                     d
           n# t          $ r Y nw xY wt          d t          d          }|                     |t	          dd          d           d S )Nzgeneric exceptionrA     zInternal Server Errori  zToo Many Requestsi  zClient Errorsr   z+request() should not retry on client errorsr4   )rO   )r   r   rR   	Exceptionr   rP   )r   r   	api_errors      r   test_request_retryzTestConsumer.test_request_retry   sS   D,//  95H+I+I1MMM D,//  8C9P+Q+QSTUUU D,//  8C9L+M+MqQQQ D,//S/22		E$$Xy!<<< IICDDDD  	 	 	D	 D,:::  8C9P+Q+QSTUUUUUs   D 
DDc                     t          d t                    }|                                 |                     |j                   d S )N)r   r   pauseassertFalserunning)r   r   s     r   
test_pausezTestConsumer.test_pause   s>    D,//)*****r   c                 ~    t                      }t          |t          dd          }i }t          dd          D ]}d|t	          |          <   ddd	|d
}t          t          j        |                                                    }t          d|z            } fd}t          j        d|          5 }	|                                 t          d|dz             D ]}
|                    |           |                                                      |	j        d           d d d            d S # 1 swxY w Y   d S )Ni r4   r1   r   rT   ,one_long_property_value_to_build_a_big_eventr&   r'   r(   )r*   r+   r(   
propertiesi z c                     t          j                    }d|_        t          |                                          }                    |dk     d|z             |S )N   g      VAz!batch size (%d) higher than limit)r8   rN   status_codelenencoder    )_datarI   resrequest_sizer   s        r   mock_post_fnz6TestConsumer.test_max_batch_size.<locals>.mock_post_fn   sX    )++C!COt{{}}--LOO663lB   Jr   zposthog.request._session.postrL   rA   )r   r   r   r   strrc   jsondumpsrd   intr8   r9   r:   r   joinr   r=   )r   r   r   r_   nr&   msg_sizen_msgsri   r>   re   s   `          r   test_max_batch_sizez TestConsumer.test_max_batch_size   s   GGA|fQOOO
q# 	P 	PA!OJs1vv#($	
 
 tz%((//1122Y)**		 		 		 		 		 Z+
 
 
 	6NN1fqj))  eFFHHHY11555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   6A/D22D69D6N)__name__
__module____qualname__r   r   r#   r.   r?   rB   rE   rR   rW   r\   rr    r   r   r	   r	      s        $ $ $6 6 6# # #! ! !6 6 6&6 6 6*" " "
     DV V V6+ + +
"6 "6 "6 "6 "6r   r	   )rk   r;   unittestr8   queuer   ImportErrorposthog.consumerr   r   posthog.requestr   posthog.test.test_utilsr   TestCaser	   rv   r   r   <module>r~      s           4 3 3 3 3 3 3 3 $ $ $ $ $ $ 0 0 0 0 0 0s6 s6 s6 s6 s68$ s6 s6 s6 s6 s6s    ''