
    g                         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m	Z	 d dl
mZ d dlmZ  G d dej                        Zy# e$ r	 d dlmZ Y 7w xY w)    N)Queue)MAX_MSG_SIZEConsumer)APIError)TEST_API_KEYc                   N    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y)TestConsumerc                     t               }t        |d      }|j                  d       |j                         }| j	                  |dg       y )N    )r   r   putnextassertEqual)selfqconsumerr   s       O/var/www/openai/venv/lib/python3.12/site-packages/posthog/test/test_consumer.py	test_nextzTestConsumer.test_next   s<    GAr?	a}}s#    c                     t               }d}t        |d|      }t        d      D ]  }|j                  |        |j	                         }| j                  |t        t        |                   y )N2   r   i'  )r   r   ranger   r   r   list)r   r   flush_atr   ir   s         r   test_next_limitzTestConsumer.test_next_limit   sY    GAr8,uAEE!H }}tE(O45r   c                     t               }t        |d      }ddt        z  i}|j                  |       |j	                         }| j                  |g        | j                  |j                                y )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\    GAr?S</0	l}}r"	"r   c                     t               }t        |t              }dddd}|j                  |       |j	                         }| j                  |       y Ntrackpython eventdistinct_idtypeeventr(   )r   r   r   r   uploadr    )r   r   r   r&   successs        r   test_uploadzTestConsumer.test_upload+   sD    GA|, >-X	e//# r   c                 t   t               }d}t        |t        d|      }t        j                  d      5 }|j                          t        dd      D ]4  }dd|z  d	d
}|j                  |       t        j                  |dz         6 | j                  |j                  d       d d d        y # 1 sw Y   y xY w)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     GA|bXZZ56)NN1a[!(3Dq3HYfge

>C/0 ! Y1115 766s   A0B..B7c                 ~   t               }d}d}t        |t        ||      }t        j                  d      5 }|j                          t        d|dz        D ]  }dd|z  d	d
}|j                  |        t        j                  |dz         | j                  |j                  d       d d d        y # 1 sw Y   y xY w)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_intervalB   s     GA|h~^ZZ56)NN1hl+!(3Dq3HYfge , JJ~+,Y1115 766s   A3B33B<c                 T    t        d t              }dddd}|j                  |g       y r%   )r   r   request)r   r   r&   s      r   test_requestzTestConsumer.test_requestQ   s*    D,/ >-X%!r   c                    fdd_         t        j                  dt        j                              5  dddd}|j                  k  r|j                  |g       n1	 |j                  |g       | j                  d	|j                  z         d d d        y # t              $ r}| j                  |       Y d }~.d }~ww xY w# 1 sw Y   y xY w)
Nc                  R    xj                   dz  c_         j                   k  ry )Nr   )r=   )argskwargsexception_countexpected_exceptionr>   s     r   r>   z3TestConsumer._test_request_retry.<locals>.mock_postW   s-      A% ##6(( 7r   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_retryV   s    	)
  !	ZZ5tyyY7WX$~m\E ("2"22  %)
$$eW- II_bjbrbrr YX ./ >$$S*<==> YXs5   )C&B8CC	-C?CC		CCc                    t        d t              }| j                  |t        d      d       t        d t              }| j                  |t	        dd      d       t        d t              }| j                  |t	        dd      d       t        d t              }t	        dd      }	 | j                  ||d	       | j                  d
       t        d t        d      }| j                  |t	        dd      d       y # t        $ r Y ;w xY w)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_retryq   s    D,/  95H+I1M D,/  8C9P+QSTU D,/  8C9L+MqQ D,/S/2		E$$Xy!< IICD D,:  8C9P+QSTU  		s   $C8 8	DDc                 z    t        d t              }|j                          | j                  |j                         y )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                  |      j                               }t        d|z        } fd}t        j                  d|      5 }	|j                          t        d|dz         D ]  }
|j                  |        |j                           j                  |	j                   d       d d d        y # 1 sw Y   y xY w)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        |j	                               }j                  |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   sE    ))+C!COt{{}-LOOL+BBDgjvDvw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    GA|fQO
q#A!OJs1v  >-gqrtzz%(//12Y)*	 ZZ7\RV_NN1fqj)e *FFHY1115 SRRs   A"DDN)__name__
__module____qualname__r   r   r#   r.   r?   rB   rE   rR   rW   r\   rr    r   r   r	   r	      s:    $6#!66"
6V6+
6r   r	   )rk   r;   unittestr8   queuer   ImportErrorposthog.consumerr   r   posthog.requestr   posthog.test.test_utilsr   TestCaser	   rv   r   r   <module>r~      sL        4 $ 0X68$$ X6  s   A AA