Skip to content

Commit 7d87294

Browse files
committed
Add tests for reserved ip types, view and list + refactor existing
1 parent 0041c67 commit 7d87294

2 files changed

Lines changed: 111 additions & 66 deletions

File tree

tests/integration/linodes/helpers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import json
2+
import os
23
import time
34

45
from tests.integration.helpers import (
@@ -7,7 +8,7 @@
78
)
89

910
DEFAULT_RANDOM_PASS = exec_test_command(["openssl", "rand", "-base64", "32"])
10-
DEFAULT_REGION = "us-ord"
11+
DEFAULT_REGION = "pl-labkrk-2" if "devcloud" in os.getenv('LINODE_CLI_API_HOST') else "us-ord"
1112

1213
DEFAULT_TEST_IMAGE = exec_test_command(
1314
[

tests/integration/networking/test_networking.py

Lines changed: 109 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
from tests.integration.helpers import (
99
BASE_CMDS,
10+
assert_headers_in_lines,
1011
delete_target_id,
1112
exec_test_command,
12-
get_random_region_with_caps,
1313
)
1414
from tests.integration.linodes.helpers import (
1515
create_linode,
@@ -19,24 +19,30 @@
1919
from tests.integration.sharegroups.fixtures import get_region # noqa: F401
2020

2121

22+
RESERVED_IP_HEADERS = [
23+
"address", "type", "public", "rdns", "linode_id", "reserved", "tags"
24+
]
25+
26+
2227
@pytest.fixture
2328
def create_reserved_ip(request):
2429
tags = getattr(request, "param", None)
2530
command = BASE_CMDS["networking"] + [
2631
"reserved-ip-add",
2732
"--region",
2833
DEFAULT_REGION,
29-
"--json",
34+
"--text",
35+
"--delimiter",
36+
","
3037
]
3138

3239
if tags:
3340
command += ["--tags", tags]
3441

35-
result = json.loads(exec_test_command(command))[0]
36-
37-
yield result
42+
headers, values = get_command_heads_and_vals(command)
43+
yield headers, values
3844

39-
delete_target_id("networking", result["address"], "reserved-ip-delete")
45+
delete_target_id("networking", values[0], "reserved-ip-delete")
4046

4147

4248
@pytest.fixture(scope="package")
@@ -67,6 +73,14 @@ def test_linode_id_shared_ipv4(linode_cloud_firewall):
6773
delete_target_id(target="linodes", id=id)
6874

6975

76+
def get_command_heads_and_vals(command):
77+
result = exec_test_command(command).splitlines()
78+
headers = [item for item in result[0].split(",")]
79+
values = [item for item in result[1].split(",")]
80+
81+
return headers, values
82+
83+
7084
def has_shared_ip(linode_id: int, ip: str) -> bool:
7185
shared_ips = json.loads(
7286
exec_test_command(
@@ -87,12 +101,13 @@ def has_shared_ip(linode_id: int, ip: str) -> bool:
87101

88102
def verify_reserved_ip(reserved_ip):
89103
assert isinstance(
90-
ipaddress.ip_address(reserved_ip["address"]), ipaddress.IPv4Address
104+
ipaddress.ip_address(reserved_ip[0]), ipaddress.IPv4Address
91105
)
92-
assert reserved_ip["type"] == "ipv4"
93-
assert reserved_ip["public"] == True
94-
assert reserved_ip["reserved"] == True
95-
assert reserved_ip["linode_id"] is None
106+
assert reserved_ip[1] == "ipv4"
107+
assert reserved_ip[2] == "True"
108+
assert reserved_ip[4] == DEFAULT_REGION
109+
assert not reserved_ip[5]
110+
assert reserved_ip[7] == "True"
96111
# TODO: To be clarified if it should be returned in CLI
97112
# assert reserved_ip["assigned_entity"] is None
98113

@@ -180,92 +195,121 @@ def test_allocate_additional_private_ipv4_address(test_linode_id):
180195
"ipv4,False,.*,[0-9][0-9][0-9][0-9][0-9][0-9][0-9]*", result
181196
)
182197

183-
198+
@pytest.mark.smoke
184199
@pytest.mark.parametrize(
185200
"create_reserved_ip", ["test", None], indirect=True
186201
)
187202
def test_create_reserved_ip(create_reserved_ip):
188-
reserved_ip = create_reserved_ip
203+
headers, reserved_ip = create_reserved_ip
204+
assert_headers_in_lines(RESERVED_IP_HEADERS, [headers])
189205
verify_reserved_ip(reserved_ip)
190206

191-
tags = reserved_ip["tags"]
192-
assert tags == ["test"] if tags else tags == []
207+
tags = reserved_ip[-1]
208+
assert tags == "test" if tags else tags == ''
193209

194210

195211
@pytest.mark.parametrize(
196212
"create_reserved_ip", ["test"], indirect=True
197213
)
198214
def test_update_reserved_ip_tags(create_reserved_ip):
199-
reserved_ip = create_reserved_ip
200-
verify_reserved_ip(reserved_ip)
201-
assert reserved_ip["tags"] == ["test"]
215+
_, reserved_ip = create_reserved_ip
216+
assert reserved_ip[-1] == "test"
202217

203-
result = json.loads(
204-
exec_test_command(
205-
BASE_CMDS["networking"] + [
206-
"reserved-ip-update",
207-
"--tags",
208-
"updated",
209-
reserved_ip["address"],
210-
"--json",
211-
]
212-
)
213-
)[0]
218+
result = exec_test_command(
219+
BASE_CMDS["networking"] + [
220+
"reserved-ip-update",
221+
"--tags",
222+
"updated",
223+
"--tags",
224+
"updated2",
225+
reserved_ip[0],
226+
"--text",
227+
"--no-headers",
228+
"--delimiter",
229+
","
230+
]
231+
).split(",")
214232
verify_reserved_ip(result)
215-
assert result["tags"] == ["updated"]
233+
assert result[-1] == "updated updated2"
216234

217235

218-
# @pytest.mark.parametrize(
219-
# "create_reserved_ip", ["test"], indirect=True
220-
# )
221-
def test_create_reserved_ip_assigned(test_linode_id, create_reserved_ip):
236+
def test_create_reserved_ip_assigned(create_reserved_ip, test_linode_id):
237+
_, reserved_ip = create_reserved_ip
222238
linode_id = test_linode_id
223-
reserved_ip = create_reserved_ip
224-
verify_reserved_ip(reserved_ip)
225239

226240
exec_test_command(
227241
BASE_CMDS["networking"] + [
228242
"ip-assign",
229243
"--assignments.linode_id",
230244
linode_id,
231245
"--assignments.address",
232-
reserved_ip["address"],
246+
reserved_ip[0],
233247
"--region",
234248
DEFAULT_REGION,
235249
]
236250
)
237251

238-
result = json.loads(
239-
exec_test_command(
240-
BASE_CMDS["linodes"] + [
241-
"ip-view",
242-
linode_id,
243-
reserved_ip["address"],
244-
"--json"
245-
]
246-
)
247-
)[0]
248-
assert result["address"] == reserved_ip["address"]
249-
assert str(result["linode_id"]) == linode_id
250-
assert result["reserved"] == True
251-
# TODO: To be clarified if it should be returned in CLI
252-
# assert result["tags"] == reserved_ip["tags"]
252+
command = BASE_CMDS["linodes"] + [
253+
"ip-view",
254+
linode_id,
255+
reserved_ip[0],
256+
"--text",
257+
"--delimiter",
258+
","
259+
]
260+
headers, values = get_command_heads_and_vals(command)
261+
262+
assert_headers_in_lines(RESERVED_IP_HEADERS[:-1], [headers])
263+
# TODO: To be clarified if tags should be returned in CLI (currently it is)
264+
# assert "tags" not in headers
265+
assert values[0] == reserved_ip[0]
266+
assert str(values[5]) == linode_id
267+
assert values[7] == "True"
253268

254269

255270
def test_get_reserved_ip_types():
256-
result = json.loads(
257-
exec_test_command(
258-
BASE_CMDS["networking"] + [
259-
"reserved-ip-types-list",
260-
"--json"
261-
]
262-
)
263-
)[0]
264-
assert result["id"] == "reserved-ipv4"
265-
assert result["label"] == "Reserved IPv4"
266-
assert "hourly" in result["price"]
267-
assert "monthly" in result["price"]
268-
assert any(price != 0 for price in list(result["price"].values()))
271+
headers_exp = ["id", "label", "price.hourly", "price.monthly"]
272+
command = BASE_CMDS["networking"] + [
273+
"reserved-ip-types-list",
274+
"--text",
275+
"--delimiter",
276+
","
277+
]
278+
headers, values = get_command_heads_and_vals(command)
279+
280+
assert_headers_in_lines(headers_exp, [headers])
281+
assert values[0] == "reserved-ipv4"
282+
assert values[1] == "Reserved IPv4"
283+
assert any(price != 0 for price in values[2:4])
284+
285+
286+
def test_get_reserved_ip_view(create_reserved_ip):
287+
_, reserved_ip = create_reserved_ip
288+
command = BASE_CMDS["networking"] + [
289+
"reserved-ip-view",
290+
reserved_ip[0],
291+
"--text",
292+
"--delimiter",
293+
","
294+
]
295+
headers, values = get_command_heads_and_vals(command)
296+
297+
assert_headers_in_lines(RESERVED_IP_HEADERS, [headers])
298+
verify_reserved_ip(values)
299+
300+
301+
def test_get_reserved_ips_list(create_reserved_ip):
302+
result = exec_test_command(
303+
BASE_CMDS["networking"] + [
304+
"reserved-ips-list",
305+
"--text",
306+
"--no-headers",
307+
"--format",
308+
"reserved"
309+
]
310+
).splitlines()
311+
312+
assert all(item == "True" for item in result)
269313

270314

271315
def test_share_ipv4_address(

0 commit comments

Comments
 (0)