Skip to content

Commit 528fcf6

Browse files
authored
Merge pull request #116 from stfc/Cover_edge_case_no_image
Rabbit consumers: Cover edge case of no image
2 parents 6e1392d + 6baca09 commit 528fcf6

File tree

4 files changed

+46
-2
lines changed

4 files changed

+46
-2
lines changed

.pre-commit-config.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
repos:
2+
- repo: https://github.com/psf/black
3+
rev: 22.10.0
4+
hooks:
5+
- id: black

openstack-rabbit-consumer/rabbit_consumer/openstack_api.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,15 @@ def get_image(vm_data: VmData) -> Optional[Image]:
9292
Gets the image name from Openstack for the virtual machine.
9393
"""
9494
server = get_server_details(vm_data)
95-
uuid = server.image.id
95+
96+
try:
97+
# This is caused by the user booking from a volume or snapshot
98+
uuid = server.image.id
99+
except AttributeError:
100+
uuid = None
101+
96102
if not uuid:
103+
logger.warning("No image or ID found for server %s", server.name)
97104
return None
98105

99106
with OpenstackConnection() as conn:

openstack-rabbit-consumer/tests/test_openstack_api.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,35 @@ def test_get_image_no_image_id(server_details, vm_data):
159159

160160
result = get_image(vm_data)
161161
assert not result
162+
163+
164+
@patch("rabbit_consumer.openstack_api.get_server_details")
165+
def test_get_image_no_image(server_details, vm_data):
166+
"""
167+
Tests that get image handles a None type image, since this
168+
is another edge-case we've seen when a volume was used
169+
"""
170+
server_details.return_value = NonCallableMock()
171+
server_details.return_value.image = None
172+
173+
result = get_image(vm_data)
174+
assert not result
175+
176+
177+
@patch("rabbit_consumer.openstack_api.OpenstackConnection")
178+
@patch("rabbit_consumer.openstack_api.get_server_details")
179+
def test_get_image_valid_data(server_details, conn, vm_data):
180+
"""
181+
Tests that get image handles a valid image
182+
"""
183+
server_details.return_value = NonCallableMock()
184+
server_details.return_value.image.id = "UUID-1234"
185+
186+
openstack_connection = conn.return_value.__enter__.return_value
187+
find_image_result = NonCallableMock()
188+
openstack_connection.compute.find_image.return_value = find_image_result
189+
190+
result = get_image(vm_data)
191+
192+
openstack_connection.compute.find_image.assert_called_once_with("UUID-1234")
193+
assert result == find_image_result

openstack-rabbit-consumer/version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.2.0
1+
3.2.1

0 commit comments

Comments
 (0)