
    #mjo              	           d dl Zd dlmc mZ 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)    N)datetime)WatcherRepository)HealthStatusObservationStatusOperationalStateSeverity)EvidenceItemInstanceDescriptorJobDescriptorJobObservationRunDescriptor)	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         I/opt/struktur/hermes-workspace/worker-watcher/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                 0   | j                  d      j                         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}}| j                  d	      j                         d   }|j                  } |       }d
}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}x}x}}| j                  d      j                         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}}y )NzPRAGMA foreign_keysr      ==z%(py1)s == %(py4)spy1py4assert %(py6)spy6zPRAGMA journal_modewal)zD%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.lower
}()
} == %(py8)s)r0   py3py5py8zassert %(py10)spy10z&SELECT COUNT(*) FROM schema_migrations   )executefetchone
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationlower)
connection@py_assert0@py_assert3@py_assert2@py_format5@py_format7@py_assert4@py_assert7@py_assert6@py_format9@py_format11s              r'   #test_migration_foreign_keys_and_walrM      si   34==?BGaGBaGGGGBaGGGBGGGaGGGGGGG34==?BSBHHSHJSeSJeSSSSJeSSSBSSSHSSSJSSSeSSSSSSSFGPPRSTUZYZZUYZZZZZUYZZZZUZZZYZZZZZZZZr)   c                    ddl m}  ||       }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      nddt	        j
                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}y )Nr   )apply_migrationsr9   r,   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)srO   rB   py0r0   r5   r3   assert %(py8)sr7   )
worker_watcher.db.migrationsrO   r<   r=   @py_builtinslocals_should_repr_global_namer>   r?   r@   )rB   tmp_pathrO   rE   @py_assert5rH   rG   rK   s           r'   test_idempotent_migrationrZ      s    =J',1,'1,,,,'1,,,,,,,,,,,,,,,J,,,J,,,',,,1,,,,,,,r)   c                    t        |       }t        |      }|j                  |d |       |j                  |d |       | j                  d      j	                         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}}y )	N"SELECT COUNT(*) FROM status_eventsr   r+   r,   r.   r/   r2   r3   
r   r(   persist_observationr:   r;   r<   r=   r>   r?   r@   	rB   r   
repositoryobservationrC   rD   rE   rF   rG   s	            r'   1test_identical_scan_has_no_duplicate_status_eventrb   #   s    ":.J"3'K"";c:"";c:BCLLNqQVUVVQUVVVVVQUVVVVQVVVUVVVVVVVVr)   c                    t        |       }|j                  t        |      d |       |j                  t        |d      d |       | j                  d      j	                         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}}| j                  d
      j	                         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}}y )Nr9   )r   r\   r   r,   r.   r/   r2   r3   z5SELECT event_type FROM status_events ORDER BY id DESCerror_raised)
r   r^   r(   r:   r;   r<   r=   r>   r?   r@   )rB   r   r`   rC   rD   rE   rF   rG   s           r'   $test_status_change_creates_one_eventre   +   s   ":.J""#3C#8$D""#3C1#EtSQBCLLNqQVUVVQUVVVVVQUVVVVQVVVUVVVVVVVVUV__abcdvhvvdhvvvvvdhvvvvdvvvhvvvvvvvvr)   c                    t        |       }t        |d      }|j                  |d |       |j                  |d |       | j                  d      j	                         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}}y )Nznative-1)r   zSELECT COUNT(*) FROM job_runsr   r+   r,   r.   r/   r2   r3   r]   r_   s	            r'   !test_native_run_is_not_duplicatedrg   3   s    ":.J"3z:K"";c:"";c:=>GGI!LQPQQLPQQQQQLPQQQQLQQQPQQQQQ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(  }|st'        j(                  d|fd||f      dt+        j,                         v st'        j.                  t$              rt'        j0                  t$              ndd	t+        j,                         v st'        j.                  |      rt'        j0                  |      nd	t'        j0                  |      t'        j0                  |      d
z  }dd|iz  }	t3        t'        j4                  |	            d x}x}}y )Nr+   )minutezpermission deniedzSSELECT operational_state, health_status, observation_status FROM job_status_current)runninghealthyunavailabler,   rP   tuplerowrQ   rS   r7   )r   r^   r(   replacer   r$   r%   r&   r   UNKNOWNr   r   UNAVAILABLEr   WARNINGobserved_atr:   r;   rm   r<   r=   rU   rV   rW   r>   r?   r@   )
rB   r   r`   rl   rn   rE   rY   rH   rG   rK   s
             r'   ,test_unavailable_retains_previous_job_healthrt   ;   sV   ":.J""#3C#8$D"3;;a;#89K +2F2FYiYqYq!-!5!57H7T7TV^VfVfh{  ~I  ~U  ~UVK"";k6M6MN


r
s
|
|
~C:>>>:>>>>>:>>>>>>>5>>>5>>>>>>>>>>>>:>>>>>>>>>>>r)   )r   N)builtinsrU   _pytest.assertion.rewrite	assertionrewriter<   r   worker_watcher.db.repositoriesr   worker_watcher.enumsr   r   r   r   worker_watcher.modelsr	   r
   r   r   r   intstrr(   rM   rZ   rb   re   rg   rt    r)   r'   <module>r      s|        < \ \  @DZ^ R( R#* RSSWZ Rcq R[-
WwR?r)   