
    Ji                         d Z ddlZddlmc mZ ddlZddlZddl	m
Z
 ej                  j                  dd       de
deddfdZd	 Zd
 Zd Zd Zd Zd Zy)uV   
통합 테스트: dispatch.py - check_batch_completion
task-1837_5.1 - 엔키 작성
    N)Pathz/home/jay/workspacetmp_pathdatareturnc                     | dz  }|j                  dd       |dz  j                  t        j                  |      d       y)u0   task-timers.json을 tmp_path/memory/ 에 작성.memoryTparentsexist_okztask-timers.jsonzutf-8)encodingN)mkdir
write_textjsondumps)r   r   r   s      >/home/jay/workspace/tests/integration/test_batch_completion.py_write_timersr      s>     F
LLL-  ,,TZZ-=,P    c                 |   dddddii}t        | |       ddl}|j                  |d|        |j                  d	      }|d
   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}|d   }g }||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}y)uI   batch_id가 없는 경우 complete=False, total=0을 반환해야 한다.taskstask-1batch-otherdonebatch_idstatusr   N	WORKSPACEzbatch-notexistcompleteFisz%(py1)s is %(py4)spy1py4assert %(py6)spy6total==z%(py1)s == %(py4)spending	r   dispatchsetattrcheck_batch_completion
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanation
r   monkeypatchr   _dresult@py_assert0@py_assert3@py_assert2@py_format5@py_format7s
             r   *test_batch_completion_no_matching_batch_idr=      s    	=FC
D
 (D!K2&&'78F*&&&&&&&&&&&&&&&&&&&'?a?a?a?a&>Q>Q>Q>Q)"""""""""""""""""""r   c                    dddddddddddi}t        | |       d	d
l}|j                  |d|        |j                  d      }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d
x}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d
x}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d
x}x}}|d   }g }||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d
x}x}}y
)uI   모든 task가 done/completed이면 complete=True를 반환해야 한다.r   batch-1r   r   	completedr   running)r   task-2task-3r   Nr   r   Tr   r    r!   r$   r%   r&      r'   r)   r*   r+   r4   s
             r   test_batch_completion_all_donerE   )   s    	#,?#,D#0IF
D (D!K2&&y1F*%%%%%%%%%%%%%%%%%%%'?a?a?a?a&>Q>Q>Q>Q)"""""""""""""""""""r   c                    ddddddddi}t        | |       ddl}|j                  |d	|        |j                  d      }|d
   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}d}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}y)ua   일부 task가 running이면 complete=False, pending에 해당 task_id가 포함되어야 한다.r   r?   r   r   rA   )r   rB   r   Nr   r   Fr   r    r!   r$   r%   r&   rD   r'   r)      rB   r*   inz%(py1)s in %(py4)sr+   r4   s
             r   "test_batch_completion_some_runningrK   >   s    	#,?#,	B
D (D!K2&&y1F*&&&&&&&&&&&&&&&&&&&'?a?a?a?a&>Q>Q>Q>Q(vi((8(((((8((((8(((((((((((r   c                 ~   | dz  j                  dd       ddl}|j                  |d|        |j                  d      }|d   }d	}||u }|slt	        j
                  d
|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            dx}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            dx}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            dx}x}}|d   }g }||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            dx}x}}y)uM   task-timers.json이 없으면 complete=False, total=0을 반환해야 한다.r   Tr	   r   Nr   r?   r   Fr   r    r!   r$   r%   r&   r'   r)   r   r*   )	r   r,   r-   r.   r/   r0   r1   r2   r3   )	r   r5   r6   r7   r8   r9   r:   r;   r<   s	            r   $test_batch_completion_no_timers_filerM   R   s   t< K2&&y1F*&&&&&&&&&&&&&&&&&&&'?a?a?a?a&>Q>Q>Q>Q)"""""""""""""""""""r   c                 d   ddddddddddddddi}t        | |       d	d
l}|j                  |d|        |j                  d      }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d
x}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d
x}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d
x}x}}|d   }
t        |
      }d}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |
      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d
x}
x}x}}d}|d   }||v }|slt	        j
                  d|fd ||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d
x}x}}d!}|d   }||v }|slt	        j
                  d|fd ||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d
x}x}}y
)"uG   done/completed/running 혼합 시 정확한 카운팅을 해야 한다.r   zbatch-2r   r   r@   rA   reserved)r   rB   rC   task-4r   Nr   r   Fr   r    r!   r$   r%   r&      r'   r)   rD   r*   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)slen)py0py2r#   py7zassert %(py9)spy9rC   rH   rJ   rP   )r   r,   r-   r.   r/   r0   r1   r2   r3   rR   @py_builtinslocals_should_repr_global_name)r   r5   r   r6   r7   r8   r9   r:   r;   r<   @py_assert1@py_assert6@py_assert5@py_format8@py_format10s                  r   $test_batch_completion_mixed_statusesr_   a   s~    	#,?#,D#,	B#,
C	
D (D!K2&&y1F*&&&&&&&&&&&&&&&&&&&'?a?a?a?a&>Q>Q>Q>Qi &3 !&Q&!Q&&&&!Q&&&&&&3&&&3&&& &&&!&&&Q&&&&&&&(vi((8(((((8((((8((((((((((((vi((8(((((8((((8(((((((((((r   c                 z   dddddii}t        | |       ddl}|j                  |d|        |j                  d      }|d	   }d
}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}d}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}y)uN   단일 task가 running이면 complete=False, pending에 해당 task_id 포함.r   z	task-soloz
batch-solorA   r   r   Nr   r   Fr   r    r!   r$   r%   r&   rG   r'   r)   r   r*   rH   rJ   r+   r4   s
             r   )test_batch_completion_single_task_runningra   y   s    	liH
D
 (D!K2&&|4F*&&&&&&&&&&&&&&&&&&&'?a?a?a?a&>Q>Q>Q>Q+&++;+++++;++++;+++++++++++r   )__doc__builtinsrW   _pytest.assertion.rewrite	assertionrewriter/   r   syspathlibr   pathinsertdictr   r=   rE   rK   rM   r_   ra    r   r   <module>rm      sh   
   
  ( )QD Q Q Q#&#*)(#)0,r   