@@ -75,7 +75,7 @@ def test_init_rule(ea):
75
75
ea .rules [0 ]['starttime' ] = '2014-01-02T00:11:22'
76
76
ea .rules [0 ]['processed_hits' ] = ['abcdefg' ]
77
77
new_rule = ea .init_rule (new_rule , False )
78
- for prop in ['starttime' , 'agg_matches' , 'current_aggregate_id' , 'processed_hits' , 'minimum_starttime' ]:
78
+ for prop in ['starttime' , 'agg_matches' , 'current_aggregate_id' , 'processed_hits' , 'minimum_starttime' , 'run_every' ]:
79
79
assert new_rule [prop ] == ea .rules [0 ][prop ]
80
80
81
81
# Properties are fresh
@@ -84,6 +84,11 @@ def test_init_rule(ea):
84
84
assert 'starttime' not in new_rule
85
85
assert new_rule ['processed_hits' ] == {}
86
86
87
+ # Assert run_every is unique
88
+ new_rule ['run_every' ] = datetime .timedelta (seconds = 17 )
89
+ new_rule = ea .init_rule (new_rule , True )
90
+ assert new_rule ['run_every' ] == datetime .timedelta (seconds = 17 )
91
+
87
92
88
93
def test_query (ea ):
89
94
ea .thread_data .current_es .search .return_value = {'hits' : {'total' : 0 , 'hits' : []}}
@@ -989,17 +994,20 @@ def test_kibana_dashboard(ea):
989
994
def test_rule_changes (ea ):
990
995
ea .rule_hashes = {'rules/rule1.yaml' : 'ABC' ,
991
996
'rules/rule2.yaml' : 'DEF' }
992
- ea .rules = [ea .init_rule (rule , True ) for rule in [{'rule_file' : 'rules/rule1.yaml' , 'name' : 'rule1' , 'filter' : []},
993
- {'rule_file' : 'rules/rule2.yaml' , 'name' : 'rule2' , 'filter' : []}]]
997
+ run_every = datetime .timedelta (seconds = 1 )
998
+ ea .rules = [ea .init_rule (rule , True ) for rule in [{'rule_file' : 'rules/rule1.yaml' , 'name' : 'rule1' , 'filter' : [],
999
+ 'run_every' : run_every },
1000
+ {'rule_file' : 'rules/rule2.yaml' , 'name' : 'rule2' , 'filter' : [],
1001
+ 'run_every' : run_every }]]
994
1002
ea .rules [1 ]['processed_hits' ] = ['save me' ]
995
1003
new_hashes = {'rules/rule1.yaml' : 'ABC' ,
996
1004
'rules/rule3.yaml' : 'XXX' ,
997
1005
'rules/rule2.yaml' : '!@#$' }
998
1006
999
1007
with mock .patch .object (ea .conf ['rules_loader' ], 'get_hashes' ) as mock_hashes :
1000
1008
with mock .patch .object (ea .conf ['rules_loader' ], 'load_configuration' ) as mock_load :
1001
- mock_load .side_effect = [{'filter' : [], 'name' : 'rule2' , 'rule_file' : 'rules/rule2.yaml' },
1002
- {'filter' : [], 'name' : 'rule3' , 'rule_file' : 'rules/rule3.yaml' }]
1009
+ mock_load .side_effect = [{'filter' : [], 'name' : 'rule2' , 'rule_file' : 'rules/rule2.yaml' , 'run_every' : run_every },
1010
+ {'filter' : [], 'name' : 'rule3' , 'rule_file' : 'rules/rule3.yaml' , 'run_every' : run_every }]
1003
1011
mock_hashes .return_value = new_hashes
1004
1012
ea .load_rule_changes ()
1005
1013
@@ -1021,7 +1029,7 @@ def test_rule_changes(ea):
1021
1029
with mock .patch .object (ea .conf ['rules_loader' ], 'load_configuration' ) as mock_load :
1022
1030
with mock .patch .object (ea , 'send_notification_email' ) as mock_send :
1023
1031
mock_load .return_value = {'filter' : [], 'name' : 'rule3' , 'new' : 'stuff' ,
1024
- 'rule_file' : 'rules/rule4.yaml' }
1032
+ 'rule_file' : 'rules/rule4.yaml' , 'run_every' : run_every }
1025
1033
mock_hashes .return_value = new_hashes
1026
1034
ea .load_rule_changes ()
1027
1035
mock_send .assert_called_once_with (exception = mock .ANY , rule_file = 'rules/rule4.yaml' )
@@ -1033,7 +1041,8 @@ def test_rule_changes(ea):
1033
1041
new_hashes .update ({'rules/rule4.yaml' : 'asdf' })
1034
1042
with mock .patch .object (ea .conf ['rules_loader' ], 'get_hashes' ) as mock_hashes :
1035
1043
with mock .patch .object (ea .conf ['rules_loader' ], 'load_configuration' ) as mock_load :
1036
- mock_load .return_value = {'filter' : [], 'name' : 'rule4' , 'new' : 'stuff' , 'is_enabled' : False , 'rule_file' : 'rules/rule4.yaml' }
1044
+ mock_load .return_value = {'filter' : [], 'name' : 'rule4' , 'new' : 'stuff' , 'is_enabled' : False ,
1045
+ 'rule_file' : 'rules/rule4.yaml' , 'run_every' : run_every }
1037
1046
mock_hashes .return_value = new_hashes
1038
1047
ea .load_rule_changes ()
1039
1048
assert len (ea .rules ) == 3
@@ -1044,7 +1053,8 @@ def test_rule_changes(ea):
1044
1053
new_hashes ['rules/rule4.yaml' ] = 'qwerty'
1045
1054
with mock .patch .object (ea .conf ['rules_loader' ], 'get_hashes' ) as mock_hashes :
1046
1055
with mock .patch .object (ea .conf ['rules_loader' ], 'load_configuration' ) as mock_load :
1047
- mock_load .return_value = {'filter' : [], 'name' : 'rule4' , 'new' : 'stuff' , 'rule_file' : 'rules/rule4.yaml' }
1056
+ mock_load .return_value = {'filter' : [], 'name' : 'rule4' , 'new' : 'stuff' , 'rule_file' : 'rules/rule4.yaml' ,
1057
+ 'run_every' : run_every }
1048
1058
mock_hashes .return_value = new_hashes
1049
1059
ea .load_rule_changes ()
1050
1060
assert len (ea .rules ) == 4
@@ -1053,7 +1063,8 @@ def test_rule_changes(ea):
1053
1063
new_hashes .pop ('rules/rule4.yaml' )
1054
1064
with mock .patch .object (ea .conf ['rules_loader' ], 'get_hashes' ) as mock_hashes :
1055
1065
with mock .patch .object (ea .conf ['rules_loader' ], 'load_configuration' ) as mock_load :
1056
- mock_load .return_value = {'filter' : [], 'name' : 'rule4' , 'new' : 'stuff' , 'rule_file' : 'rules/rule4.yaml' }
1066
+ mock_load .return_value = {'filter' : [], 'name' : 'rule4' , 'new' : 'stuff' , 'rule_file' : 'rules/rule4.yaml' ,
1067
+ 'run_every' : run_every }
1057
1068
mock_hashes .return_value = new_hashes
1058
1069
ea .load_rule_changes ()
1059
1070
ea .scheduler .remove_job .assert_called_with (job_id = 'rule4' )
0 commit comments