77
88from 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)
1414from tests .integration .linodes .helpers import (
1515 create_linode ,
1919from 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
2328def 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+
7084def 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
88102def 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)
187202def 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)
198214def 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
255270def 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
271315def test_share_ipv4_address (
0 commit comments