Skip to content

Commit f71bcb7

Browse files
committed
minimal unit tests for image and volume logic
1 parent 26f4ec8 commit f71bcb7

2 files changed

Lines changed: 105 additions & 0 deletions

File tree

tests/test_server.py

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,93 @@
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+
def _nova_server_mock():
30+
return Mock(
31+
spec=[
32+
"image",
33+
"flavor",
34+
"networks",
35+
"name",
36+
"key_name",
37+
"id",
38+
"status",
39+
"addresses",
40+
"created",
41+
"hostId",
42+
"host_status",
43+
"hypervisor_hostname",
44+
"is_locked",
45+
]
46+
)
47+
48+
def test_from_nova_server_no_image(mocker):
49+
mocker.patch("chi.server.get_image_name")
50+
ns = _nova_server_mock()
51+
ns.image = None
52+
ns.flavor = {"original_name": "m1.small"}
53+
ns.networks = {"net1": []}
54+
55+
server = Server._from_nova_server(ns)
56+
57+
assert server.image is None
58+
assert server.image_name is None
59+
60+
61+
def test_from_nova_server_with_image_dict(mocker):
62+
mock_get_name = mocker.patch(
63+
"chi.server.get_image_name", return_value="CC-Ubuntu22.04"
64+
)
65+
ns = _nova_server_mock()
66+
ns.image = {"id": "img-123"}
67+
ns.flavor = {"original_name": "m1.small"}
68+
ns.networks = {"net1": []}
69+
70+
server = Server._from_nova_server(ns)
71+
72+
mock_get_name.assert_called_once_with("img-123")
73+
assert server.image_name == "CC-Ubuntu22.04"
74+
75+
76+
def test_from_nova_server_with_image_string(mocker):
77+
mock_get_name = mocker.patch(
78+
"chi.server.get_image_name", return_value="CC-Ubuntu22.04"
79+
)
80+
ns = _nova_server_mock()
81+
ns.image = "img-123"
82+
ns.flavor = {"original_name": "m1.small"}
83+
ns.networks = {"net1": []}
84+
85+
server = Server._from_nova_server(ns)
86+
87+
mock_get_name.assert_called_once_with("img-123")
88+
assert server.image_name == "CC-Ubuntu22.04"
89+
90+
1191
def example_create_server():
1292
"""Launch a bare metal instance.
1393

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)