o
    i1                     @   s  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m	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 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 d dlmZ d dlmZ eeZeeejf Z ej!deejejf dZ"ej#e"ge f Z$G dd deZ%G dd de%Z&G dd de%Z'dede fddZ(dede fddZ)d ede fd!d"Z*d#ede fd$d%Z+dS )&    )ABC)abstractmethodN)BackendConnectorSetup)FileAttachment)	Subdomain)TelemetryAPI)TestItem)
TestModule)TestRun)TestSession)
TestStatus)	TestSuite)	StopWatchmsgpack_packb)__version__TSerializable)boundc                   @   s   e Zd ZdddZdeddfddZdee fdd	Zdd
dZdddZ	dddZ
dddZdddZedee ddfddZedee defddZdee dee fddZdS )
BaseWriterreturnNc                 C   s.   t  | _t  | _d| _g | _td| _d S )N<   g      RA)		threadingRLocklockEventshould_finishflush_interval_secondseventsintmax_payload_sizeself r"   S/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/testing/internal/writer.py__init__"   s
   

zBaseWriter.__init__eventc                 C   s8   | j  | j| W d    d S 1 sw   Y  d S N)r   r   append)r!   r%   r"   r"   r#   	put_event*   s   "zBaseWriter.put_eventc                 C   s8   | j  | j}g | _W d    |S 1 sw   Y  |S r&   )r   r   r!   r   r"   r"   r#   
pop_events.   s   
zBaseWriter.pop_eventsc                 C   s    t j| jdd| _| j  d S )NT)targetdaemon)r   Thread_periodic_tasktaskstartr    r"   r"   r#   r0   5      zBaseWriter.startc                 C   s   t d| jj | j  d S )Nz)Signalling for %s writer thread to finish)logdebug	__class____name__r   setr    r"   r"   r#   signal_finish9   s   zBaseWriter.signal_finishc                 C   s   | j   td| jj d S )Nz%s writer thread finished)r/   joinr2   r3   r4   r5   r    r"   r"   r#   wait_finish=   s   
zBaseWriter.wait_finishc                 C   sL   	 | j j| jd td| jj |   | j  rnqtd| jj d S )NT)timeoutz%Flushing %s events in background taskzExiting %s background task)	r   waitr   r2   r3   r4   r5   flushis_setr    r"   r"   r#   r.   A   s   
zBaseWriter._periodic_taskc                 C   s4   |    }rtdt|| jj | | d S d S )NzSending %d events for %s)r*   r2   r3   lenr4   r5   _send_eventsr)   r"   r"   r#   r<   L   s   zBaseWriter.flushr   c                 C      d S r&   r"   r)   r"   r"   r#   r?   Q      zBaseWriter._send_eventsc                 C   r@   r&   r"   r)   r"   r"   r#   _encode_eventsU   rA   zBaseWriter._encode_eventsc                 C   sd   |  |}t|| jkr/t|dkr/~t|d }| |d| }|| ||d  7 }|S |gS )N      r   )rB   r>   r   _split_pack_events)r!   r   packmidpointpacksr"   r"   r#   rE   Y   s   
zBaseWriter._split_pack_events)r   N)r5   
__module____qualname__r$   r   r(   listr*   r0   r7   r9   r.   r<   r   r?   bytesrB   rE   r"   r"   r"   r#   r   !   s    





r   c                       s   e Zd ZdZdeddf fddZdedeeef ddfd	d
Zde	e
je
jf ddfddZdee defddZdee ddfddZ  ZS )TestOptWriterFconnector_setupr   Nc              	      sb   t    dt jt dddddddddddd| _|tj	| _
tttttttti| _d S )	Npythonz
ciapp-testz-0)languagez
runtime-idlibrary_versionz
_dd.originz_dd.p.dm15)z._dd.library_capabilities.early_flake_detectionz*_dd.library_capabilities.auto_test_retriesz-_dd.library_capabilities.test_impact_analysisz3_dd.library_capabilities.test_management.quarantinez0_dd.library_capabilities.test_management.disablez7_dd.library_capabilities.test_management.attempt_to_fixz/_dd.library_capabilities.coverage_report_upload)*test)superr$   uuiduuid4hexr   metadataget_connector_for_subdomainr   CITESTCYCLE	connectorr
   serialize_test_runr   serialize_suiter	   serialize_moduler   serialize_sessionserializersr!   rN   r4   r"   r#   r$   i   s,   
	
zTestOptWriter.__init__
event_typerZ   c                 C   s   | j | | d S r&   )rZ   update)r!   re   rZ   r"   r"   r#   add_metadata   s   zTestOptWriter.add_metadataitemc                 C   s    | j t| |}| | d S r&   )rb   typer(   )r!   rh   r%   r"   r"   r#   put_item   r1   zTestOptWriter.put_itemr   c                 C   s   d| j |d}t|S )NrC   )versionrZ   r   )rZ   r   )r!   r   payloadr"   r"   r#   rB      s
   zTestOptWriter._encode_eventsc                 C   s   t  }| |}W d    n1 sw   Y  t d|  |D ]&}| jjdd|ddidd}| j  t j	dt
||jt
||jd q$d S )	N
test_cyclePOSTz/api/v2/citestcyclezContent-Typeapplication/msgpackT)dataheaders	send_gzipendpointpayload_sizerequest_secondsevents_counterror)r   rE   r   get*record_event_payload_serialization_secondselapsedr]   requestcloserecord_event_payloadr>   elapsed_seconds
error_type)r!   r   serialization_timerH   rF   resultr"   r"   r#   r?      s*   
zTestOptWriter._send_events)r5   rI   rJ   __test__r   r$   strdictrg   r   tAnyrj   rK   r   rL   rB   r?   __classcell__r"   r"   rd   r#   rM   f   s     rM   c                       sz   e Zd ZdZdeddf fddZdedeje	e
ef  ddfd	d
Zdee defddZdee ddfddZ  ZS )TestCoverageWriterFrN   r   Nc                    s   t    |tj| _d S r&   )rV   r$   r[   r   	CITESTCOVr]   rc   rd   r"   r#   r$      s   
zTestCoverageWriter.__init__test_runcoverage_bitmapsc                 C   s\   dd |D }t  t| |st    d S t|jj|jj|j	|d}| 
| d S )Nc                 S   s   g | ]	\}}||d qS ))filenamebitmapr"   ).0pathnamer   r"   r"   r#   
<listcomp>   s    z3TestCoverageWriter.put_coverage.<locals>.<listcomp>)test_session_idtest_suite_idspan_idfiles)r   ry   record_coverage_filesr>   record_coverage_is_emptyr   sessionitem_idsuiter   r(   )r!   r   r   r   r%   r"   r"   r#   put_coverage   s   zTestCoverageWriter.put_coverager   c                 C   s   t d|dS )NrD   )rk   	coveragesr   r)   r"   r"   r#   rB      s   z!TestCoverageWriter._encode_eventsc                 C   s   t  }| |}W d    n1 sw   Y  t d|  |D ]2}tddd|dtdddd	dg}| jjd
|dd}| j	  t j
dt||jt||jd q$d S )Ncode_coverage	coverage1zcoverage1.msgpackro   )namer   content_typerp   r%   z
event.jsonzapplication/jsons   {"dummy":true}z/api/v2/citestcovT)r   rr   rs   )r   rE   r   ry   rz   r{   r   r]   
post_filesr}   r~   r>   r   r   )r!   r   r   rH   rF   r   r   r"   r"   r#   r?      s8   
zTestCoverageWriter._send_events)r5   rI   rJ   r   r   r$   r
   r   Iterabletupler   rL   r   rK   r   rB   r?   r   r"   r"   rd   r#   r      s    $r   r   r   c                 C   s   t dd| jd| j| j| jd|  tjkrdnd| j| j	d| j
j| j
j| j|  j| jjdd| jj| jddddd| jd| jj| j
j| jjd	d
S )NrD   rU   rC   zpytest.testr   )	span.kindtest.moduletest.module_pathz	test.nametest.status
test.suiteri         ?_dd.py.partial_flushz_dd.top_level_dd.tracer_kr_sampling_priority_v1)trace_id	parent_idr   serviceresourcer   rx   r0   durationmetametricsri   r   test_module_idr   rk   ri   content)r   r   r   r   r   
get_statusr   FAILstart_nsduration_nsmodulemodule_pathvaluer   rU   tagsr   r   r   )r   r"   r"   r#   r^      sJ   	r^   r   c                 C   s`   t dd| j| jdd| j| jd| j|  jdd| jdddd| jd| j	j
| jj
| j
d	d
S )NrC   test_suite_endzpytest.test_suiter   rU   )r   r   r   ri   r   r   r   r   )r   r   r   rx   r0   r   r   r   ri   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r"   r"   r#   r_     s8   r_   r   c                 C   s^   t dd| j| jdd| j| jd| j| j|  jdd| jdddd| j	d| j
j| jd	d
S )NrC   test_module_endzpytest.test_moduler   rU   )r   r   r   r   ri   r   r   )r   r   r   rx   r0   r   r   r   ri   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r"   r"   r#   r`   8  s8   	r`   r   c                 C   sR   t dd| j| jdd| j| jd|  jdd| jddddd| jd| j	d	
d
S )NrC   test_session_endzpytest.test_sessionr   rU   )r   r   ri   r   r   )
r   r   r   rx   r0   r   r   r   ri   r   r   )
r   r   r   r   r   r   r   r   r   r   )r   r"   r"   r#   ra   X  s4   ra   ),abcr   r   loggingr   typingr   rW   ddtrace.testing.internal.httpr   r   r   "ddtrace.testing.internal.telemetryr   "ddtrace.testing.internal.test_datar   r	   r
   r   r   r   #ddtrace.testing.internal.tracer_apir   r   ddtrace.versionr   	getLoggerr5   r2   r   r   r   r   TypeVarr   CallableEventSerializerr   rM   r   r^   r_   r`   ra   r"   r"   r"   r#   <module>   s<    
EL>(  