o
    پi~                     @   sf   d 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 G dd dej	Z
edkr1e  dS dS )z&Unit tests for dump_metric() function.    N)Path)dump_metricc                   @   sP   e Zd ZdZddgZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )TestDumpMetricz&Test suite for dump_metric() function.SGLANG_TEST_METRICS_OUTPUTPYTEST_CURRENT_TESTc                 C      | j D ]	}tj|d qdS )z#Clean up env vars before each test.N_ENV_KEYS_TO_CLEANosenvironpopselfkey r   P/home/ubuntu/.local/lib/python3.10/site-packages/sglang/test/test_dump_metric.pysetUp      
zTestDumpMetric.setUpc                 C   r   )z"Clean up env vars after each test.Nr   r   r   r   r   tearDown   r   zTestDumpMetric.tearDownc              	   C   s@  t  }tj|d}|tjd< tddddid t }| d| d	}| tj	| t
|d
d}| }W d   n1 sDw   Y  | t|d t|d }| d| | d| | |d d | |d d | d| | |d ttf | |d ddi W d   dS 1 sw   Y  dS )zATest that dump_metric writes one valid JSON line when env is set.metricsr   test_accuracygffffff?modelllamalabels..jsonlutf-8encodingN   r   filename	test_casemetric_namevaluetsr   )tempfileTemporaryDirectoryr
   pathjoinr   r   getpid
assertTrueexistsopen	readlinesassertEquallenjsonloadsassertInassertIsInstanceintfloatr   tmpdir	base_pathpid
jsonl_pathflinesrecordr   r   r   test_writes_valid_jsonl   s(   


"z&TestDumpMetric.test_writes_valid_jsonlc                 C   sZ   t  }tdd tt|d}| t|d W d   dS 1 s&w   Y  dS )z?Test that dump_metric doesn't create file when env var not set.test_metric*   z*.jsonlr   N)r&   r'   r   listr   globr/   r0   )r   r8   filesr   r   r   test_no_env_no_file:   s
   

"z"TestDumpMetric.test_no_env_no_filec           	   	   C   s   t  a}tj|d}|tjd< G dd d}tddd| id t }| d	| d
}t|dd}|	 }W d   n1 sCw   Y  t
|d }| d| | |d t W d   dS 1 shw   Y  dS )z2Test that non-serializable labels are stringified.r   r   c                   @   s   e Zd ZdS )zPTestDumpMetric.test_labels_not_serializable_stringified.<locals>.NonSerializableN)__name__
__module____qualname__r   r   r   r   NonSerializableK   s    rI   r@   d   objr   r   r   r   r   Nr   r   )r&   r'   r
   r(   r)   r   r   r*   r-   r.   r1   r2   r3   r4   str)	r   r8   r9   rI   r:   r;   r<   r=   r>   r   r   r   (test_labels_not_serializable_stringifiedD   s   


"z7TestDumpMetric.test_labels_not_serializable_stringifiedc           	   	   C   s   t  k}tj|d}|tjd< tdd tdd t }| d| d}t|d	d
}|	 }W d   n1 s<w   Y  | 
t|d t|d }t|d }| 
|d d | 
|d d W d   dS 1 srw   Y  dS )z+Test that bool values are converted to int.r   r   	bool_trueT
bool_falseFr   r   r   r   N   r   r    r$   )r&   r'   r
   r(   r)   r   r   r*   r-   r.   r/   r0   r1   r2   )	r   r8   r9   r:   r;   r<   r=   record1record2r   r   r   test_bool_to_intY   s    




"zTestDumpMetric.test_bool_to_intc              	   C   s   t  T}tj|d}|tjd< dtjd< tdd t }| d| d}t|d	d
}|	 }W d   n1 s<w   Y  t
|d }| |d d W d   dS 1 s[w   Y  dS )z/Test PYTEST_CURRENT_TEST parsing for test_case.r   r   z7test/srt/test_example.py::TestClass::test_method (call)r   pytest_metric{   r   r   r   r   Nr   r"   zTestClass.test_method)r&   r'   r
   r(   r)   r   r   r*   r-   r.   r1   r2   r/   r7   r   r   r    test_pytest_current_test_parsingn   s   



"z/TestDumpMetric.test_pytest_current_test_parsingN)rF   rG   rH   __doc__r	   r   r   r?   rE   rM   rS   rV   r   r   r   r   r      s    
r   __main__)rW   r1   r
   r&   unittestpathlibr   sglang.test.test_utilsr   TestCaser   rF   mainr   r   r   r   <module>   s    w