Skip to content

Commit 3363e91

Browse files
authored
[INTERNAL] Migrate more tests to use fixtures #418
2 parents 10900ca + 8f7516e commit 3363e91

File tree

2 files changed

+36
-59
lines changed

2 files changed

+36
-59
lines changed

promgen/tests/test_alert_rules.py

Lines changed: 25 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
groups:
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
)
@@ -30,39 +30,18 @@
3030

3131

3232
class 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])

promgen/tests/test_cli.py

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,46 +11,41 @@
1111

1212

1313
class CLITests(PromgenTest):
14+
fixtures = ["testcases.yaml", "extras.yaml"]
15+
1416
@mock.patch("promgen.signals._trigger_write_config")
1517
def test_register_job(self, mock_signal):
1618
# Assert when project doesn't exist
1719
with self.assertRaises(CommandError):
1820
management.call_command("register-job", "missing-project", "example", 1234)
1921

20-
# Create a Service and Project and then try adding our job
21-
shard = models.Shard.objects.create(name="TestShard")
22-
service = models.Service.objects.create(name="TestService")
23-
_ = models.Project.objects.create(name="TestProject", service=service, shard=shard)
24-
management.call_command("register-job", "TestProject", "example", 1234)
22+
management.call_command("register-job", "test-project", "example", 1234)
2523

2624
# Ensure the jobs we expect exist
2725
self.assertCount(models.Exporter, 1)
2826

2927
# Registering the same job again shouldn't change our count
30-
management.call_command("register-job", "TestProject", "example", 1234)
28+
management.call_command("register-job", "test-project", "example", 1234)
3129
self.assertCount(models.Exporter, 1)
3230

3331
# But registering a new one will
34-
management.call_command("register-job", "TestProject", "example", 4321)
32+
management.call_command("register-job", "test-project", "example", 4321)
3533
self.assertCount(models.Exporter, 2)
3634

3735
@mock.patch("promgen.signals._trigger_write_config")
3836
def test_register_host(self, mock_signal):
3937
# Assert when project doesn't exist
4038
with self.assertRaises(CommandError):
41-
management.call_command("register-host", "missing-project", "example.com")
39+
management.call_command("register-host", "missing-project", "cli.example.com")
4240

43-
# Create a Service and Project and then try adding our job
44-
shard = models.Shard.objects.create(name="TestShard")
45-
service = models.Service.objects.create(name="TestService")
46-
project = models.Project.objects.create(name="TestProject", service=service, shard=shard)
41+
project = models.Project.objects.create(name="cli-project", service_id=1, shard_id=1)
4742

4843
# Still assert an error if there is no Farm
4944
with self.assertRaises(CommandError):
50-
management.call_command("register-host", "TestProject", "example.com")
45+
management.call_command("register-host", "cli-project", "cli.example.com")
5146

5247
# Register farm and finally register host
53-
project.farm = models.Farm.objects.create(name="TestFarm")
48+
project.farm = models.Farm.objects.create(name="cli-farm")
5449
project.save()
55-
management.call_command("register-host", "TestProject", "example.com")
56-
self.assertCount(models.Host, 1, "Should be a single host registered")
50+
management.call_command("register-host", "cli-project", "cli.example.com")
51+
self.assertCount(models.Host, 2, "Should be a new host registered (1 host from fixture)")

0 commit comments

Comments
 (0)