Skip to content

Commit 03ec81f

Browse files
committed
Add tests for onetime pipeline
Signed-off-by: Keshav Priyadarshi <[email protected]>
1 parent 3e311ed commit 03ec81f

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
#
2+
# Copyright (c) nexB Inc. and others. All rights reserved.
3+
# VulnerableCode is a trademark of nexB Inc.
4+
# SPDX-License-Identifier: Apache-2.0
5+
# See http://www.apache.org/licenses/LICENSE-2.0 for the license text.
6+
# See https://github.com/aboutcode-org/vulnerablecode for support or download.
7+
# See https://aboutcode.org for more information about nexB OSS projects.
8+
#
9+
10+
11+
from unittest import mock
12+
13+
from django.test import TestCase
14+
15+
from vulnerabilities.models import PipelineRun
16+
from vulnerabilities.models import PipelineSchedule
17+
from vulnerabilities.pipelines import VulnerableCodeBaseImporterPipelineV2
18+
from vulnerabilities.tasks import execute_pipeline
19+
20+
21+
class OneTimePipeline(VulnerableCodeBaseImporterPipelineV2):
22+
pipeline_id = "one_time_pipeline_test"
23+
run_once = True
24+
25+
def collect_advisories(self):
26+
return []
27+
28+
def advisories_count(self):
29+
return 0
30+
31+
32+
class NotOneTimePipeline(VulnerableCodeBaseImporterPipelineV2):
33+
pipeline_id = "not_one_time_pipeline_test"
34+
run_once = False
35+
36+
def collect_advisories(self):
37+
return []
38+
39+
def advisories_count(self):
40+
return 0
41+
42+
43+
class TestOneTimePipelineExecution(TestCase):
44+
@mock.patch("vulnerabilities.models.PipelineSchedule.create_new_job")
45+
@mock.patch(
46+
"vulnerabilities.models.PipelineSchedule.pipeline_class",
47+
new_callable=mock.PropertyMock,
48+
)
49+
def test_onetime_pipeline_deactivation(self, mock_pipeline_class, mock_create_job):
50+
mock_create_job.return_value = True
51+
mock_pipeline_class.return_value = OneTimePipeline
52+
53+
ps, _ = PipelineSchedule.objects.get_or_create(
54+
pipeline_id=OneTimePipeline.pipeline_id,
55+
defaults={
56+
"is_run_once": OneTimePipeline.run_once,
57+
},
58+
)
59+
60+
self.assertTrue(ps.is_run_once)
61+
self.assertTrue(ps.is_active)
62+
63+
run = PipelineRun.objects.create(
64+
pipeline=ps,
65+
)
66+
execute_pipeline(ps.pipeline_id, run.run_id)
67+
68+
ps.refresh_from_db()
69+
self.assertTrue(ps.is_run_once)
70+
self.assertFalse(ps.is_active)
71+
72+
@mock.patch("vulnerabilities.models.PipelineSchedule.create_new_job")
73+
@mock.patch(
74+
"vulnerabilities.models.PipelineSchedule.pipeline_class",
75+
new_callable=mock.PropertyMock,
76+
)
77+
def test_normal_pipeline_no_deactivation(self, mock_pipeline_class, mock_create_job):
78+
mock_create_job.return_value = True
79+
mock_pipeline_class.return_value = NotOneTimePipeline
80+
81+
ps, _ = PipelineSchedule.objects.get_or_create(
82+
pipeline_id=NotOneTimePipeline.pipeline_id,
83+
defaults={
84+
"is_run_once": NotOneTimePipeline.run_once,
85+
},
86+
)
87+
88+
self.assertFalse(ps.is_run_once)
89+
self.assertTrue(ps.is_active)
90+
91+
run = PipelineRun.objects.create(
92+
pipeline=ps,
93+
)
94+
execute_pipeline(ps.pipeline_id, run.run_id)
95+
96+
ps.refresh_from_db()
97+
self.assertFalse(ps.is_run_once)
98+
self.assertTrue(ps.is_active)

0 commit comments

Comments
 (0)