
    #mjo              	           d dl m Z  d dlmZ d dlmZmZmZmZ d dlm	Z	m
Z
mZmZmZ dddde dedz  d	edz  d
efdZddZddZddZddZddZddZy)    )datetime)WatcherRepository)HealthStatusObservationStatusOperationalStateSeverity)EvidenceItemInstanceDescriptorJobDescriptorJobObservationRunDescriptorN)	exit_coderun_idnowr   r   returnc                   t        ddddd      }t        |ddd	d	
      }|s|t        || d ||rdnd       nd }t        ||||st        j
                  nt        j                  |st        j                  nt        j                  t        j                  |st        j                  nt        j                  d| t        ddd|       f
      S )Nztest.worker.mainzTest workertestworker<   )stale_after_secondsz	test-hostprocessztest-worker)process_nameboom)r   error_messagefixtureT)evidence)r   r
   r   r   r   RUNNINGSTOPPEDr   HEALTHYFAILEDr   FRESHr   INFOCRITICALr	   )r   r   r   jobinstanceruns         tests/unit/test_database.pymake_observationr(      s    
*M68ac
dC!#{I}[hiHpv  {D  {P-TYXafgk
l  VZC#xi.>.F.F]m]u]u6?,..\EXEXZkZqZq/8(--h>O>OQWY\$0D&#$N#PR R    c                 
   | j                  d      j                         d   dk(  sJ | j                  d      j                         d   j                         dk(  sJ | j                  d      j                         d   dk(  sJ y )NzPRAGMA foreign_keysr      zPRAGMA journal_modewalz&SELECT COUNT(*) FROM schema_migrations   )executefetchonelower)
connections    r'   #test_migration_foreign_keys_and_walr2      s    34==?BaGGG34==?BHHJeSSSFGPPRSTUYZZZZr)   c                 *    ddl m}  ||       dk(  sJ y )Nr   )apply_migrationsr-   )worker_watcher.db.migrationsr4   )r1   tmp_pathr4   s      r'   test_idempotent_migrationr7      s    =J'1,,,r)   c                     t        |       }t        |      }|j                  |d |       |j                  |d |       | j                  d      j	                         d   dk(  sJ y )N"SELECT COUNT(*) FROM status_eventsr   r+   r   r(   persist_observationr.   r/   r1   r   
repositoryobservations       r'   1test_identical_scan_has_no_duplicate_status_eventr?   #   sc    ":.J"3'K"";c:"";c:BCLLNqQUVVVVr)   c                 *   t        |       }|j                  t        |      d |       |j                  t        |d      d |       | j                  d      j	                         d   dk(  sJ | j                  d      j	                         d   dk(  sJ y )Nr-   )r   r9   r   z5SELECT event_type FROM status_events ORDER BY id DESCerror_raised)r   r;   r(   r.   r/   )r1   r   r=   s      r'   $test_status_change_creates_one_eventrB   +   s    ":.J""#3C#8$D""#3C1#EtSQBCLLNqQUVVVVUV__abcdhvvvvr)   c                     t        |       }t        |d      }|j                  |d |       |j                  |d |       | j                  d      j	                         d   dk(  sJ y )Nznative-1)r   zSELECT COUNT(*) FROM job_runsr   r+   r:   r<   s       r'   !test_native_run_is_not_duplicatedrD   3   se    ":.J"3z:K"";c:"";c:=>GGI!LPQQQQr)   c                    t        |       }|j                  t        |      d |       t        |j                  d            }t	        |j
                  |j                  |j                  t        j                  t        j                  t        j                  t        j                  d|j                  	      }|j                  |d |j                         | j!                  d      j#                         }t%        |      dk(  sJ y )Nr+   )minutezpermission deniedzSSELECT operational_state, health_status, observation_status FROM job_status_current)runninghealthyunavailable)r   r;   r(   replacer   r$   r%   r&   r   UNKNOWNr   r   UNAVAILABLEr   WARNINGobserved_atr.   r/   tuple)r1   r   r=   rI   rows        r'   ,test_unavailable_retains_previous_job_healthrQ   ;   s    ":.J""#3C#8$D"3;;a;#89K +2F2FYiYqYq!-!5!57H7T7TV^VfVfh{  ~I  ~U  ~UVK"";k6M6MN


r
s
|
|
~C:>>>>r)   )r   N)r   worker_watcher.db.repositoriesr   worker_watcher.enumsr   r   r   r   worker_watcher.modelsr	   r
   r   r   r   intstrr(   r2   r7   r?   rB   rD   rQ    r)   r'   <module>rX      sw     < \ \  @DZ^ R( R#* RSSWZ Rcq R[-
WwR?r)   