Skip to content

Commit fc0d2cb

Browse files
committed
Add unit test for the analyze-kubernetes management command
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent aaf2ddb commit fc0d2cb

2 files changed

Lines changed: 58 additions & 3 deletions

File tree

scanpipe/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,6 +1533,11 @@ def has_single_resource(self):
15331533
"""
15341534
return self.resource_count == 1
15351535

1536+
@property
1537+
def pipelines(self):
1538+
"""Return the list of pipeline names assigned to this Project."""
1539+
return list(self.runs.values_list("pipeline_name", flat=True))
1540+
15361541
def get_policies_dict(self):
15371542
"""
15381543
Load and return the policies from the following locations in that order:

scanpipe/tests/test_commands.py

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ def test_scanpipe_management_command_create_project_pipelines(self):
144144
"analyze_root_filesystem_or_vm_image",
145145
"scan_single_package",
146146
]
147-
self.assertEqual(expected, [run.pipeline_name for run in project.runs.all()])
147+
self.assertEqual(expected, project.pipelines)
148148
run = project.runs.get(pipeline_name="analyze_root_filesystem_or_vm_image")
149149
self.assertEqual(["group1", "group2"], run.selected_groups)
150150

@@ -422,7 +422,7 @@ def test_scanpipe_management_command_add_pipeline(self):
422422
"analyze_root_filesystem_or_vm_image",
423423
"scan_single_package",
424424
]
425-
self.assertEqual(expected, [run.pipeline_name for run in project.runs.all()])
425+
self.assertEqual(expected, project.pipelines)
426426
run = project.runs.get(pipeline_name="analyze_root_filesystem_or_vm_image")
427427
self.assertEqual(["group1", "group2"], run.selected_groups)
428428

@@ -1474,6 +1474,56 @@ def test_scanpipe_management_command_extract_tag_from_input_file(self):
14741474
expected = ("file.ext", "tag1,tag2")
14751475
self.assertEqual(expected, extract_tag("file.ext:tag1,tag2"))
14761476

1477+
@mock.patch("scanpipe.pipes.kubernetes.get_images_from_kubectl")
1478+
def test_scanpipe_management_command_analyze_kubernetes_from_kubectl(
1479+
self, mock_get_images
1480+
):
1481+
mock_get_images.return_value = ["nginx:latest", "redis:alpine"]
1482+
1483+
project_name = "kube-from-cluster-single"
1484+
out = StringIO()
1485+
call_command(
1486+
"analyze-kubernetes",
1487+
project_name,
1488+
"--label",
1489+
"label1",
1490+
"--notes",
1491+
"Notes",
1492+
"--find-vulnerabilities",
1493+
stdout=out,
1494+
)
1495+
self.assertIn("Extracting images from Kubernetes cluster", out.getvalue())
1496+
self.assertEqual(1, Project.objects.count())
1497+
project = Project.objects.get(name=project_name)
1498+
self.assertEqual(["label1"], list(project.labels.names()))
1499+
self.assertEqual("Notes", project.notes)
1500+
self.assertEqual(
1501+
["analyze_docker_image", "find_vulnerabilities"], project.pipelines
1502+
)
1503+
expected = ["docker://nginx:latest", "docker://redis:alpine"]
1504+
download_urls = project.inputsources.values_list("download_url", flat=True)
1505+
self.assertEqual(expected, sorted(download_urls))
1506+
project.delete()
1507+
1508+
project_name = "kube-from-cluster-multi"
1509+
out = StringIO()
1510+
call_command(
1511+
"analyze-kubernetes",
1512+
project_name,
1513+
"--multi",
1514+
stdout=out,
1515+
)
1516+
self.assertIn("Extracting images from Kubernetes cluster", out.getvalue())
1517+
self.assertEqual(2, Project.objects.count())
1518+
expected = [
1519+
"kube-from-cluster-multi: nginx:latest",
1520+
"kube-from-cluster-multi: redis:alpine",
1521+
]
1522+
names = Project.objects.values_list("name", flat=True)
1523+
self.assertEqual(expected, sorted(names))
1524+
for project in Project.objects.all():
1525+
self.assertEqual(1, project.inputsources.count())
1526+
14771527

14781528
class ScanPipeManagementCommandMixinTest(TestCase):
14791529
class CreateProjectCommand(
@@ -1525,7 +1575,7 @@ def test_scanpipe_management_command_mixin_create_project_pipelines(self):
15251575
"analyze_root_filesystem_or_vm_image",
15261576
"scan_single_package",
15271577
]
1528-
self.assertEqual(expected, [run.pipeline_name for run in project.runs.all()])
1578+
self.assertEqual(expected, project.pipelines)
15291579
run = project.runs.get(pipeline_name="analyze_root_filesystem_or_vm_image")
15301580
self.assertEqual(["group1", "group2"], run.selected_groups)
15311581

0 commit comments

Comments
 (0)