Skip to content

Commit db4962c

Browse files
committed
minimal unit tests for image and volume logic
1 parent dfbd927 commit db4962c

2 files changed

Lines changed: 107 additions & 0 deletions

File tree

tests/test_server.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,95 @@
11
from datetime import datetime
2+
from unittest.mock import Mock
23

34
import pytest
45

6+
from chi.server import Server
7+
58

69
@pytest.fixture()
710
def now():
811
return datetime(2021, 1, 1, 0, 0, 0, 0)
912

1013

14+
@pytest.fixture(autouse=True)
15+
def mock_server_deps(mocker):
16+
def _fake_get_image(name):
17+
img = Mock()
18+
img.name = name
19+
return img
20+
21+
mocker.patch("chi.server.chi.image.get_image", side_effect=_fake_get_image)
22+
mocker.patch("chi.server.get_keypair", return_value=Mock(name="test-key"))
23+
mocker.patch("chi.server.connection")
24+
mocker.patch("chi.server.session")
25+
mocker.patch(
26+
"chi.server.chi_network.get_network", return_value={"name": "sharednet1"}
27+
)
28+
29+
30+
def _nova_server_mock():
31+
return Mock(
32+
spec=[
33+
"image",
34+
"flavor",
35+
"networks",
36+
"name",
37+
"key_name",
38+
"id",
39+
"status",
40+
"addresses",
41+
"created",
42+
"hostId",
43+
"host_status",
44+
"hypervisor_hostname",
45+
"is_locked",
46+
]
47+
)
48+
49+
50+
def test_from_nova_server_no_image(mocker):
51+
mocker.patch("chi.server.get_image_name")
52+
ns = _nova_server_mock()
53+
ns.image = None
54+
ns.flavor = {"original_name": "m1.small"}
55+
ns.networks = {"net1": []}
56+
57+
server = Server._from_nova_server(ns)
58+
59+
assert server.image is None
60+
assert server.image_name is None
61+
62+
63+
def test_from_nova_server_with_image_dict(mocker):
64+
mock_get_name = mocker.patch(
65+
"chi.server.get_image_name", return_value="CC-Ubuntu22.04"
66+
)
67+
ns = _nova_server_mock()
68+
ns.image = {"id": "img-123"}
69+
ns.flavor = {"original_name": "m1.small"}
70+
ns.networks = {"net1": []}
71+
72+
server = Server._from_nova_server(ns)
73+
74+
mock_get_name.assert_called_once_with("img-123")
75+
assert server.image_name == "CC-Ubuntu22.04"
76+
77+
78+
def test_from_nova_server_with_image_string(mocker):
79+
mock_get_name = mocker.patch(
80+
"chi.server.get_image_name", return_value="CC-Ubuntu22.04"
81+
)
82+
ns = _nova_server_mock()
83+
ns.image = "img-123"
84+
ns.flavor = {"original_name": "m1.small"}
85+
ns.networks = {"net1": []}
86+
87+
server = Server._from_nova_server(ns)
88+
89+
mock_get_name.assert_called_once_with("img-123")
90+
assert server.image_name == "CC-Ubuntu22.04"
91+
92+
1193
def example_create_server():
1294
"""Launch a bare metal instance.
1395

tests/test_storage.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from unittest.mock import Mock
2+
3+
import cinderclient.exceptions
4+
5+
from chi.storage import get_volume
6+
7+
8+
def test_get_volume_falls_back_to_name_lookup(mocker):
9+
cinder_mock = mocker.patch("chi.storage.cinder")()
10+
cinder_mock.volumes.get.side_effect = cinderclient.exceptions.NotFound(404)
11+
12+
fake_volume = Mock()
13+
fake_volume.name = "my-vol"
14+
fake_volume.size = 10
15+
fake_volume.description = None
16+
fake_volume.metadata = {}
17+
fake_volume.volume_type = "ceph-ssd"
18+
fake_volume.id = "vol-123"
19+
fake_volume.status = "available"
20+
cinder_mock.volumes.list.return_value = [fake_volume]
21+
22+
result = get_volume("my-vol")
23+
24+
assert result.id == "vol-123"
25+
assert result.name == "my-vol"

0 commit comments

Comments
 (0)