def testJournalWriteAlertDB4(self): ''' Test writing of Alert log queue after reading from DB ''' # This test does not work with duplicate checking -- probably don't want it to keep_ADC = self.force_env('TEAL_ALERT_DUPLICATE_CHECK', 'No') self.teal = Teal('data/journal_test/events_002.conf','stderr',msgLevel=self.msglevel) # Events je = Journal('DB test input EVENTS', file='data/journal_test/events_002.json') je.insert_in_db(truncate=True, no_delay=True) # Alerts ja = Journal('DB test input ALERTS', file='data/journal_test/alerts_002.json') ja.insert_in_db(truncate=False, no_delay=True) # Check events jedb = Journal('Read DB test EVENTS') jedb.select_from_db('event') self.assertTrue(je.deep_match(jedb, ignore_delay=True, ignore_times=False, ignore_rec_id=False)) # Check alerts jadb = Journal('Read DB test ALERTS') jadb.select_from_db('alert') self.assertTrue(ja.deep_match(jadb, ignore_delay=True, ignore_times=False, ignore_rec_id=False)) # Now insert into the Delivery Queue and make sure all come out jadb.inject_queue(get_service(SERVICE_ALERT_DELIVERY_Q), progress_cb=None, fail_on_invalid=False, no_delay=True) listeners = get_service(SERVICE_ALERT_DELIVERY).listeners for listener in listeners: name = listener.get_name() if name == 'Journal': j_out_all = listener.journal self.assertTrue(j_out_all.wait_for_entries(6)) self.assertTrue(j_out_all.deep_match(jadb, ignore_delay=True, ignore_times=True)) self.teal.shutdown() self.restore_env('TEAL_ALERT_DUPLICATE_CHECK', keep_ADC) return
def _add_journal(self, json_file): ''' Load the alert DB from the journal JSON file ''' self.teal = Teal('data/tllsalert_test/test.conf','stderr',msgLevel=self.msglevel) # Alerts ja = Journal('temp_journal', file=json_file) ja.insert_in_db(truncate=False, no_delay=True) self.teal.shutdown()
def inject_new_entries(self,exp_json='data/restart_test/three_events_one_fromq.json',exp_num=3): ''' Verify that events still flow through TEAL after startup ''' # Now make sure we start getting new events j_inj = Journal('After restart','data/restart_test/three_events_one.json') j_inj.insert_in_db(use_rec_ids=False, no_delay=True) registry.get_service(registry.SERVICE_NOTIFIER).post() j_exp = Journal('Inject New Entries', exp_json) j_act = self.find_analyzer().journal self.assertTrue(j_act.wait_for_entries(exp_num)) self.assertTrue(j_act.deep_match(j_exp, ignore_delay=True))
def testJournalWriteEventDB1(self): ''' Test writing to Event log DB basic ''' self.teal = Teal('data/journal_test/events_001.conf','stderr',msgLevel=self.msglevel) j = Journal('DB test journal to write', file='data/journal_test/events_001.json') j.insert_in_db(truncate=True, no_delay=True) jdb = Journal('DB test journal to read') jdb.select_from_db('event') self.assertTrue(j.deep_match(jdb, ignore_delay=True, ignore_times=False, ignore_rec_id=False)) #p rint j #p rint jdb self.teal.shutdown() return
def testDemo1DB(self): '''Test demo flow by injecting into DB''' self.prepare_db() keep_var = self.force_env('TEAL_TEST_POOL_TIMERS_OFF', 'YES') self.teal = Teal('data/teal_test/configurationtest_05_semaphore_auto.conf', 'stderr', msgLevel=self.msglevel) j_in = Journal('j_in', file='data/demo/data_sample_demo_NEW_001.json') j_out_eq = Journal('j_out_eq') j_out_aaq = Journal('j_out_aaq') j_out_dq = Journal('j_out_dq') j_out_lis = Journal('j_out_lis') q_out_eq = registry.get_service(SERVICE_EVENT_Q) q_out_aaq = registry.get_service(SERVICE_ALERT_ANALYZER_Q) q_out_dq = registry.get_service(SERVICE_ALERT_DELIVERY_Q) q_out_eq.register_listener(j_out_eq) q_out_dq.register_listener(j_out_dq) q_out_aaq.register_listener(j_out_aaq) listeners = get_service(SERVICE_ALERT_DELIVERY).listeners for listener in listeners: if listener.get_name() == 'outputJournal': j_out_lis = listener.journal try: j_in.insert_in_db(progress_cb=None, truncate=False, use_rec_ids=True, no_delay=False, post=True) except: print 'INSERTION FAILED' q_out_eq.unregister_listener(j_out_eq) q_out_dq.unregister_listener(j_out_dq) q_out_aaq.unregister_listener(j_out_aaq) raise # Yes, only 2: Flush can't be injected to connector, so pool does not get closed, so last event # Does not get turned into an alert! self.assertTrue(j_out_lis.wait_for_entries(2)) # Note these connector ('C') versions have one less alert # The analyzer is being run in historic mode (see configuration) if that was # changed to runtime then the pool would time out and the last alert would be journaled j_exp_aaq = Journal('j_exp_aaq', 'data/teal_test/data_sample_demo_NEW_001_AAQ_Result_C.json') self.assertTrue(j_out_aaq.deep_match(j_exp_aaq, ignore_delay=True, ignore_times=True)) j_exp_dq = Journal('j_exp_dq', 'data/teal_test/data_sample_demo_NEW_001_DQ_Result_C.json') self.assertTrue(j_out_dq.deep_match(j_exp_dq, ignore_delay=True, ignore_times=True)) j_exp_lis = Journal('j_exp_lis', 'data/teal_test/data_sample_demo_NEW_001_LIS_Result_C.json') self.assertTrue(j_out_lis.deep_match(j_exp_lis, ignore_delay=True, ignore_times=True)) q_out_eq.unregister_listener(j_out_eq) q_out_dq.unregister_listener(j_out_dq) q_out_aaq.unregister_listener(j_out_aaq) self.teal.shutdown() self.restore_env('TEAL_TEST_POOL_TIMERS_OFF', keep_var)
def testJournalWriteEventDB3(self): ''' Test reading from event DB with a subset of fields ''' self.teal = Teal('data/journal_test/events_001.conf','stderr',msgLevel=self.msglevel) j = Journal('DB test journal to write', file='data/journal_test/events_001.json') j.insert_in_db(truncate=True, use_rec_ids=False, no_delay=True) jdb = Journal('DB test journal to read') jdb.select_from_db('event', event_fields=[EVENT_ATTR_REC_ID, EVENT_ATTR_EVENT_ID]) jexp = Journal('DB expected', 'data/journal_test/events_004.json') self.assertTrue(jexp.deep_match(jdb, ignore_delay=True, ignore_times=False, ignore_rec_id=True)) #p rint j #p rint jdb self.teal.shutdown() return
def add_entries_before_restart(self, stop_teal=True): ''' Add events to TEAL and make sure they are processed ''' self.start_teal('now') # Insert a set of events and process them j_act = self.find_analyzer().journal j_inj = Journal('Pre-populate','data/restart_test/three_events_one.json') j_inj.insert_in_db(no_delay=True, truncate=True) # Truncate is testing that we handle the ckpt table being destroyed registry.get_service(registry.SERVICE_NOTIFIER).post() self.assertTrue(j_act.wait_for_entries(3)) j_exp = Journal('Expected', 'data/restart_test/three_events_one_fromq.json') self.assertTrue(j_act.deep_match(j_exp, ignore_delay=True)) # Stop this instance of TEAL if requested otherwise it is up # to the caller to stop it if stop_teal: self.stop_teal()
def testJournalWriteAlertDB3(self): ''' Test getting only some fields of an alert ''' self.teal = Teal('data/journal_test/events_001.conf','stderr',msgLevel=self.msglevel) # Events je = Journal('DB test input EVENTS', file='data/journal_test/events_002.json') je.insert_in_db(truncate=True, no_delay=True) # Alerts ja = Journal('DB test input ALERTS', file='data/journal_test/alerts_002.json') ja.insert_in_db(truncate=False, no_delay=True) # Check alerts jadb = Journal('Read DB test ALERTS') jadb.select_from_db('alert', include_alert_assoc=False, alert_fields=[ALERT_ATTR_REC_ID, ALERT_ATTR_ALERT_ID, ALERT_ATTR_RECOMMENDATION]) jaexp = Journal('DB test expected', 'data/journal_test/alerts_005.json') self.assertTrue(jaexp.deep_match(jadb, ignore_delay=True, ignore_times=False, ignore_rec_id=False)) #p rint ja #p rint jadb self.teal.shutdown() return
def testJournalWriteAlertDB2(self): ''' Test getting alerts without associations ''' self.teal = Teal('data/journal_test/events_001.conf','stderr',msgLevel=self.msglevel) # Events je = Journal('DB test input EVENTS', file='data/journal_test/events_002.json') je.insert_in_db(truncate=True, no_delay=True) # Alerts ja = Journal('DB test input ALERTS', file='data/journal_test/alerts_002.json') ja.insert_in_db(truncate=False, no_delay=True) # Check alerts jadb = Journal('Read DB test ALERTS') jadb.select_from_db('alert', include_alert_assoc=False) jaexp = Journal('DB test expected', 'data/journal_test/alerts_003.json') self.assertTrue(jaexp.deep_match(jadb, ignore_delay=True, ignore_times=False, ignore_rec_id=False)) #p rint ja #p rint jadb self.teal.shutdown() return
def testRestartLastProc(self): ''' Verify lastproc mode by reading events that have been added after shutdown ''' self.add_entries_before_restart() # Add a few more events so we process things self.start_teal_no_monitor() j_inj = Journal('Pre-populate','data/restart_test/three_events_one.json') j_inj.insert_in_db(use_rec_ids=False, no_delay=True) self.stop_teal() # Now start up in lastproc mode and see that we don't get entries ... not checkpoints so acts like Now self.start_teal('lastproc') j_act = self.find_analyzer().journal self.assertFalse(j_act.wait_for_entries(1,seconds=3, msg_mode='quiet')) #self.assertTrue(j_act.wait_for_entries(3)) #j_exp = Journal('After restart','data/restart_test/three_events_one_fromq.json') #self.assertTrue(j_act.deep_match(j_exp,ignore_delay=True)) j_act.clear() # Make sure we start getting new entries self.inject_new_entries()
def testJournalWriteAlertDB1(self): ''' Test writing of Alert log DB basic ''' self.teal = Teal('data/journal_test/events_001.conf','stderr',msgLevel=self.msglevel) # Events je = Journal('DB test input EVENTS', file='data/journal_test/events_002.json') je.insert_in_db(truncate=True, no_delay=True) # Alerts ja = Journal('DB test input ALERTS', file='data/journal_test/alerts_002.json') ja.insert_in_db(truncate=False, no_delay=True) # Check events jedb = Journal('Read DB test EVENTS') jedb.select_from_db('event') self.assertTrue(je.deep_match(jedb, ignore_delay=True, ignore_times=False, ignore_rec_id=False)) #p rint je #p rint jedb # Check alerts jadb = Journal('Read DB test ALERTS') jadb.select_from_db('alert') self.assertTrue(ja.deep_match(jadb, ignore_delay=True, ignore_times=False, ignore_rec_id=False)) #p rint ja #p rint jadb self.teal.shutdown() return