1414groups:
1515- name: promgen.example.com
1616 rules:
17- - alert: RuleName
17+ - alert: example-rule
1818 annotations:
19- rule: https://promgen.example.com/rule/%d
20- summary: Test case
21- expr: up==0
19+ rule: https://promgen.example.com/rule/1
20+ summary: Example rule summary
21+ expr: up==1
2222 for: 1s
2323 labels:
24- severity: severe
24+ severity: high
2525""" .lstrip ().encode (
2626 "utf-8"
2727)
3030
3131
3232class RuleTest (tests .PromgenTest ):
33- @mock .patch ("django.dispatch.dispatcher.Signal.send" )
34- def setUp (self , mock_signal ):
35- self .user = self .force_login (username = "demo" )
36- self .site = models .Site .objects .get_current ()
37- self .shard = models .Shard .objects .create (name = "Shard 1" )
38- self .service = models .Service .objects .create (id = 999 , name = "Service 1" )
39- self .rule = models .Rule .objects .create (
40- name = "RuleName" ,
41- clause = "up==0" ,
42- duration = "1s" ,
43- obj = self .site ,
44- )
45- models .RuleLabel .objects .create (
46- name = "severity" ,
47- value = "severe" ,
48- rule = self .rule ,
49- )
50- models .RuleAnnotation .objects .create (
51- name = "summary" ,
52- value = "Test case" ,
53- rule = self .rule ,
54- )
33+ fixtures = ["testcases.yaml" , "extras.yaml" ]
5534
5635 @override_settings (PROMGEN_SCHEME = "https" )
5736 @mock .patch ("django.dispatch.dispatcher.Signal.send" )
5837 def test_write_new (self , mock_post ):
5938 result = prometheus .render_rules ()
60- self .assertEqual (result , _RULE_V2 % self . rule . id )
39+ self .assertEqual (result , _RULE_V2 )
6140
6241 @mock .patch ("django.dispatch.dispatcher.Signal.send" )
6342 def test_copy (self , mock_post ):
64- service = models .Service .objects .create ( name = "Service 2" )
65- copy = self . rule .copy_to (content_type = "service" , object_id = service . id )
43+ rule = models .Rule .objects .get ( pk = 1 )
44+ copy = rule .copy_to (content_type = "service" , object_id = 2 )
6645 # Test that our copy has the same labels and annotations
6746 self .assertIn ("severity" , copy .labels )
6847 self .assertIn ("summary" , copy .annotations )
@@ -77,6 +56,7 @@ def test_copy(self, mock_post):
7756 @override_settings (PROMGEN = TEST_SETTINGS )
7857 @mock .patch ("django.dispatch.dispatcher.Signal.send" )
7958 def test_import_v2 (self , mock_post ):
59+ self .user = self .force_login (username = "demo" )
8060 self .add_user_permissions ("promgen.change_rule" , "promgen.change_site" )
8161 response = self .client .post (
8262 reverse ("rule-import" ),
@@ -93,12 +73,11 @@ def test_import_v2(self, mock_post):
9373 @override_settings (PROMGEN = TEST_SETTINGS )
9474 @mock .patch ("django.dispatch.dispatcher.Signal.send" )
9575 def test_import_project_rule (self , mock_post ):
76+ self .user = self .force_login (username = "demo" )
9677 self .add_user_permissions ("promgen.add_rule" , "promgen.change_project" )
97- project = models .Project .objects .create (
98- name = "Project 1" , service = self .service , shard = self .shard
99- )
78+
10079 response = self .client .post (
101- reverse ("rule-new" , kwargs = {"content_type" : "project" , "object_id" : project . id }),
80+ reverse ("rule-new" , kwargs = {"content_type" : "project" , "object_id" : 1 }),
10281 {"rules" : tests .Data ("examples" , "import.rule.yml" ).raw ()},
10382 follow = True ,
10483 )
@@ -110,11 +89,12 @@ def test_import_project_rule(self, mock_post):
11089 @override_settings (PROMGEN = TEST_SETTINGS )
11190 @mock .patch ("django.dispatch.dispatcher.Signal.send" )
11291 def test_import_service_rule (self , mock_post ):
92+ self .user = self .force_login (username = "demo" )
11393 self .add_user_permissions ("promgen.add_rule" , "promgen.change_service" )
11494 response = self .client .post (
11595 reverse (
11696 "rule-new" ,
117- kwargs = {"content_type" : "service" , "object_id" : self . service . id },
97+ kwargs = {"content_type" : "service" , "object_id" : 1 },
11898 ),
11999 {"rules" : tests .Data ("examples" , "import.rule.yml" ).raw ()},
120100 follow = True ,
@@ -136,15 +116,16 @@ def test_missing_permission(self, mock_post):
136116
137117 @mock .patch ("django.dispatch.dispatcher.Signal.send" )
138118 def test_macro (self , mock_post ):
139- self .project = models .Project .objects .create (
140- name = "Project 1" , service = self .service , shard = self .shard
141- )
119+ self .site = models .Site .objects .get (pk = 1 )
120+ self .service = models .Service .objects .get (pk = 1 )
121+ self .project = models .Project .objects .get (pk = 1 )
122+
142123 clause = "up{%s}" % macro .EXCLUSION_MACRO
143124
144125 rules = {
145- "common" : {"assert" : 'up{service!~"Service 1 "}' },
146- "service" : {"assert" : 'up{service="Service 1 ",project!~"Project 1 "}' },
147- "project" : {"assert" : 'up{service="Service 1 ",project="Project 1 ",}' },
126+ "common" : {"assert" : 'up{service!~"test-service "}' },
127+ "service" : {"assert" : 'up{service="test-service ",project!~"test-project "}' },
128+ "project" : {"assert" : 'up{service="test-service ",project="test-project ",}' },
148129 }
149130
150131 common_rule = models .Rule .objects .create (
@@ -162,7 +143,8 @@ def test_macro(self, mock_post):
162143 @override_settings (PROMGEN = TEST_SETTINGS )
163144 @mock .patch ("django.dispatch.dispatcher.Signal.send" )
164145 def test_invalid_annotation (self , mock_post ):
146+ rule = models .Rule .objects .get (pk = 1 )
165147 # $label.foo is invalid (should be $labels) so make sure we raise an exception
166- models .RuleAnnotation .objects .create (name = "summary" , value = "{{$label.foo}}" , rule = self . rule )
148+ models .RuleAnnotation .objects .create (name = "summary" , value = "{{$label.foo}}" , rule = rule )
167149 with self .assertRaises (ValidationError ):
168- prometheus .check_rules ([self . rule ])
150+ prometheus .check_rules ([rule ])
0 commit comments