
    "lj+                         d dl Zd dlmc mZ d dlmZmZmZ d dl	m
Z
mZmZ d dlmZ d dlmZ  edddd	d e
      Zd ZddZddZddZddZddZddZy)    N)UTCdatetime	timedelta)HealthStatusObservationStatusOperationalState)JobDescriptor)normalize_statusi           )tzinfoc                  J    dddddd}|j                  |        t        di |S )Nzworker.process.mainWorkertestworker<   )job_keynamesource_typejob_typestale_after_seconds )updater	   )kwargsvaluess     G/opt/struktur/hermes-workspace/worker-watcher/tests/unit/test_status.pyjobr   
   s6    .QWem  GI  JF
MM&"6""    c                     t        t               dt        t        d      z
  dt              } | j                  }t
        j                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dt        j                         v st        j                  t
              rt        j                  t
              ndt        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}y )NT
   secondsprocess_existsheartbeat_at==zR%(py2)s
{%(py2)s = %(py0)s.health_status
} == %(py6)s
{%(py6)s = %(py4)s.HEALTHY
}statusr   py0py2py4py6assert %(py8)spy8)r
   r   NOWr   health_statusr   HEALTHY
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr*   @py_assert1@py_assert5@py_assert3@py_format7@py_format9s         r   test_current_heartbeat_healthyrC      s    cecT]fhTiNi%jlopF7<#7#77#77777#777777767776777777777<777<777#77777777r   c                     t        t               dt        t        d      z
  dt              } | j                  }t
        j                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dt        j                         v st        j                  t
              rt        j                  t
              ndt        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}| j                  }t         j"                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dt        j                         v st        j                  t               rt        j                  t               ndt        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}y )NTx   r"   r$   r'   )zV%(py2)s
{%(py2)s = %(py0)s.operational_state
} == %(py6)s
{%(py6)s = %(py4)s.RUNNING
}r*   r   r+   r0   r1   )zP%(py2)s
{%(py2)s = %(py0)s.health_status
} == %(py6)s
{%(py6)s = %(py4)s.STALE
}r   )r
   r   r2   r   operational_stater   RUNNINGr5   r6   r7   r8   r9   r:   r;   r<   r3   r   STALEr=   s         r   test_old_heartbeat_stalerI      s[   cecT]fiTjNj%kmpqF##?'7'?'??#'?????#'???????6???6???#??????'7???'7???'????????5<#5#55#55555#555555565556555555555<555<555#55555555r   c                  x   t        t               ddit              } | j                  }t        j
                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}y )
N	exit_code   r'   )zQ%(py2)s
{%(py2)s = %(py0)s.health_status
} == %(py6)s
{%(py6)s = %(py4)s.FAILED
}r*   r   r+   r0   r1   )r
   r   r2   r3   r   FAILEDr5   r6   r7   r8   r9   r:   r;   r<   r=   s         r   test_nonzero_exit_failedrN      s    cek1%5s;F6<#6#66#66666#666666666666666666666<666<666#66666666r   c                     t        t               ddit              } | j                  }t        j
                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}| j                  }t        j                   }||k(  }|st        j                  d|fd
||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}y )NpausedTr'   )zU%(py2)s
{%(py2)s = %(py0)s.operational_state
} == %(py6)s
{%(py6)s = %(py4)s.PAUSED
}r*   r   r+   r0   r1   r)   r   )r
   r   r2   rF   r   PAUSEDr5   r6   r7   r8   r9   r:   r;   r<   r3   r   r4   r=   s         r   test_paused_is_not_failedrR       sN   ceh%5s;F##>'7'>'>>#'>>>>>#'>>>>>>>6>>>6>>>#>>>>>>'7>>>'7>>>'>>>>>>>>7<#7#77#77777#777777767776777777777<777<777#77777777r   c                     t        t               i t              } | j                  }t        j
                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| j                  }t        j                   }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      d	t        j                         v st        j                  t              rt        j                  t              nd	t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )
Nr'   zR%(py2)s
{%(py2)s = %(py0)s.health_status
} == %(py6)s
{%(py6)s = %(py4)s.UNKNOWN
}r*   r   r+   r0   r1   )zU%(py2)s
{%(py2)s = %(py0)s.observation_status
} == %(py6)s
{%(py6)s = %(py4)s.FRESH
}r   )r
   r   r2   r3   r   UNKNOWNr5   r6   r7   r8   r9   r:   r;   r<   observation_statusr   FRESHr=   s         r   test_readable_unknown_is_freshrX   &   sI   ceR-F7<#7#77#77777#777777767776777777777<777<777#77777777$$?(9(?(??$(?????$(???????6???6???$??????(9???(9???(????????r   c                     t        t               ddit              } | j                  }t        j
                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}| j                  }t        j                   }||k(  }|st        j                  d|fd
||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}y )Npermission_deniedTr'   rT   r*   r   r+   r0   r1   )z[%(py2)s
{%(py2)s = %(py0)s.observation_status
} == %(py6)s
{%(py6)s = %(py4)s.UNAVAILABLE
}r   )r
   r   r2   r3   r   rU   r5   r6   r7   r8   r9   r:   r;   r<   rV   r   UNAVAILABLEr=   s         r   #test_unavailable_is_not_job_failurer\   ,   sO   ce&94%@#FF7<#7#77#77777#777777767776777777777<777<777#77777777$$E(9(E(EE$(EEEEE$(EEEEEEE6EEE6EEE$EEEEEE(9EEE(9EEE(EEEEEEEEr   )returnN)builtinsr7   _pytest.assertion.rewrite	assertionrewriter5   r   r   r   worker_watcher.enumsr   r   r   worker_watcher.modelsr	   worker_watcher.normalizerr
   r2   r   rC   rI   rN   rR   rX   r\   r   r   r   <module>re      sU       - - R R / 6tQB#.#8
67
8@Fr   