]>
git.proxmox.com Git - ceph.git/blob - ceph/src/spdk/test/iscsi_tgt/rpc_config/rpc_config.py
11 from subprocess
import check_call
, call
, check_output
, Popen
, PIPE
, CalledProcessError
13 if (len(sys
.argv
) == 8):
14 target_ip
= sys
.argv
[2]
15 initiator_ip
= sys
.argv
[3]
18 namespace
= sys
.argv
[6]
19 test_type
= sys
.argv
[7]
21 ns_cmd
= 'ip netns exec ' + namespace
22 other_ip
= '127.0.0.6'
23 initiator_name
= 'ANY'
28 'target_ip': target_ip
,
29 'initiator_ip': initiator_ip
,
31 'initiator_name': initiator_name
,
34 'malloc_bdev_size': 64,
35 'malloc_block_size': 512,
37 'target_name': 'Target3',
38 'alias_name': 'Target3_alias',
41 'require_chap': False,
43 'header_digest': False,
50 class RpcException(Exception):
52 def __init__(self
, retval
, msg
):
53 super(RpcException
, self
).__init
__(msg
)
58 class spdk_rpc(object):
60 def __init__(self
, rpc_py
):
63 def __getattr__(self
, name
):
65 cmd
= "{} {}".format(self
.rpc_py
, name
)
67 cmd
+= " {}".format(arg
)
68 return check_output(cmd
, shell
=True).decode("utf-8")
72 def verify(expr
, retcode
, msg
):
74 raise RpcException(retcode
, msg
)
77 def verify_log_flag_rpc_methods(rpc_py
, rpc_param
):
78 rpc
= spdk_rpc(rpc_py
)
79 output
= rpc
.log_get_flags()
80 jsonvalue
= json
.loads(output
)
81 verify(not jsonvalue
[rpc_param
['log_flag']], 1,
82 "log_get_flags returned {}, expected false".format(jsonvalue
))
83 rpc
.log_set_flag(rpc_param
['log_flag'])
84 output
= rpc
.log_get_flags()
85 jsonvalue
= json
.loads(output
)
86 verify(jsonvalue
[rpc_param
['log_flag']], 1,
87 "log_get_flags returned {}, expected true".format(jsonvalue
))
88 rpc
.log_clear_flag(rpc_param
['log_flag'])
89 output
= rpc
.log_get_flags()
90 jsonvalue
= json
.loads(output
)
91 verify(not jsonvalue
[rpc_param
['log_flag']], 1,
92 "log_get_flags returned {}, expected false".format(jsonvalue
))
94 print("verify_log_flag_rpc_methods passed")
97 def verify_iscsi_connection_rpc_methods(rpc_py
):
98 rpc
= spdk_rpc(rpc_py
)
99 output
= rpc
.iscsi_get_connections()
100 jsonvalue
= json
.loads(output
)
101 verify(not jsonvalue
, 1,
102 "iscsi_get_connections returned {}, expected empty".format(jsonvalue
))
104 rpc
.bdev_malloc_create(rpc_param
['malloc_bdev_size'], rpc_param
['malloc_block_size'])
105 rpc
.iscsi_create_portal_group(portal_tag
, "{}:{}".format(rpc_param
['target_ip'], str(rpc_param
['port'])))
106 rpc
.iscsi_create_initiator_group(initiator_tag
, rpc_param
['initiator_name'], rpc_param
['netmask'])
108 lun_mapping
= "Malloc" + str(rpc_param
['lun_total']) + ":0"
109 net_mapping
= portal_tag
+ ":" + initiator_tag
110 rpc
.iscsi_create_target_node(rpc_param
['target_name'], rpc_param
['alias_name'], lun_mapping
,
111 net_mapping
, rpc_param
['queue_depth'], '-d')
112 check_output('iscsiadm -m discovery -t st -p {}'.format(rpc_param
['target_ip']), shell
=True)
113 check_output('iscsiadm -m node --login', shell
=True)
114 name
= json
.loads(rpc
.iscsi_get_target_nodes())[0]['name']
115 output
= rpc
.iscsi_get_connections()
116 jsonvalues
= json
.loads(output
)
117 verify(jsonvalues
[0]['target_node_name'] == rpc_param
['target_name'], 1,
118 "target node name vaule is {}, expected {}".format(jsonvalues
[0]['target_node_name'], rpc_param
['target_name']))
119 verify(jsonvalues
[0]['initiator_addr'] == rpc_param
['initiator_ip'], 1,
120 "initiator address values is {}, expected {}".format(jsonvalues
[0]['initiator_addr'], rpc_param
['initiator_ip']))
121 verify(jsonvalues
[0]['target_addr'] == rpc_param
['target_ip'], 1,
122 "target address values is {}, expected {}".format(jsonvalues
[0]['target_addr'], rpc_param
['target_ip']))
124 check_output('iscsiadm -m node --logout', shell
=True)
125 check_output('iscsiadm -m node -o delete', shell
=True)
126 rpc
.iscsi_delete_initiator_group(initiator_tag
)
127 rpc
.iscsi_delete_portal_group(portal_tag
)
128 rpc
.iscsi_delete_target_node(name
)
129 output
= rpc
.iscsi_get_connections()
130 jsonvalues
= json
.loads(output
)
131 verify(not jsonvalues
, 1,
132 "iscsi_get_connections returned {}, expected empty".format(jsonvalues
))
134 print("verify_iscsi_connection_rpc_methods passed")
137 def verify_scsi_devices_rpc_methods(rpc_py
):
138 rpc
= spdk_rpc(rpc_py
)
139 output
= rpc
.scsi_get_devices()
140 jsonvalue
= json
.loads(output
)
141 verify(not jsonvalue
, 1,
142 "scsi_get_devices returned {}, expected empty".format(jsonvalue
))
144 rpc
.bdev_malloc_create(rpc_param
['malloc_bdev_size'], rpc_param
['malloc_block_size'])
145 rpc
.iscsi_create_portal_group(portal_tag
, "{}:{}".format(rpc_param
['target_ip'], str(rpc_param
['port'])))
146 rpc
.iscsi_create_initiator_group(initiator_tag
, rpc_param
['initiator_name'], rpc_param
['netmask'])
148 lun_mapping
= "Malloc" + str(rpc_param
['lun_total']) + ":0"
149 net_mapping
= portal_tag
+ ":" + initiator_tag
150 rpc
.iscsi_create_target_node(rpc_param
['target_name'], rpc_param
['alias_name'], lun_mapping
,
151 net_mapping
, rpc_param
['queue_depth'], '-d')
152 check_output('iscsiadm -m discovery -t st -p {}'.format(rpc_param
['target_ip']), shell
=True)
153 check_output('iscsiadm -m node --login', shell
=True)
154 name
= json
.loads(rpc
.iscsi_get_target_nodes())[0]['name']
155 output
= rpc
.iscsi_get_options()
156 jsonvalues
= json
.loads(output
)
157 nodebase
= jsonvalues
['node_base']
158 output
= rpc
.scsi_get_devices()
159 jsonvalues
= json
.loads(output
)
160 verify(jsonvalues
[0]['device_name'] == nodebase
+ ":" + rpc_param
['target_name'], 1,
161 "device name vaule is {}, expected {}".format(jsonvalues
[0]['device_name'], rpc_param
['target_name']))
162 verify(jsonvalues
[0]['id'] == 0, 1,
163 "device id value is {}, expected 0".format(jsonvalues
[0]['id']))
165 check_output('iscsiadm -m node --logout', shell
=True)
166 check_output('iscsiadm -m node -o delete', shell
=True)
167 rpc
.iscsi_delete_initiator_group(initiator_tag
)
168 rpc
.iscsi_delete_portal_group(portal_tag
)
169 rpc
.iscsi_delete_target_node(name
)
170 output
= rpc
.scsi_get_devices()
171 jsonvalues
= json
.loads(output
)
172 verify(not jsonvalues
, 1,
173 "scsi_get_devices returned {}, expected empty".format(jsonvalues
))
175 print("verify_scsi_devices_rpc_methods passed")
178 def create_malloc_bdevs_rpc_methods(rpc_py
, rpc_param
):
179 rpc
= spdk_rpc(rpc_py
)
181 for i
in range(1, rpc_param
['lun_total'] + 1):
182 rpc
.bdev_malloc_create(rpc_param
['malloc_bdev_size'], rpc_param
['malloc_block_size'])
184 print("create_malloc_bdevs_rpc_methods passed")
187 def verify_portal_groups_rpc_methods(rpc_py
, rpc_param
):
188 rpc
= spdk_rpc(rpc_py
)
189 output
= rpc
.iscsi_get_portal_groups()
190 jsonvalues
= json
.loads(output
)
191 verify(not jsonvalues
, 1,
192 "iscsi_get_portal_groups returned {} groups, expected empty".format(jsonvalues
))
194 lo_ip
= (target_ip
, other_ip
)
195 nics
= json
.loads(rpc
.net_get_interfaces())
197 if x
["ifc_index"] == 'lo':
198 rpc
.net_interface_add_ip_address(x
["ifc_index"], lo_ip
[1])
199 for idx
, value
in enumerate(lo_ip
):
200 # The portal group tag must start at 1
202 rpc
.iscsi_create_portal_group(tag
, "{}:{}".format(value
, rpc_param
['port']))
203 output
= rpc
.iscsi_get_portal_groups()
204 jsonvalues
= json
.loads(output
)
205 verify(len(jsonvalues
) == tag
, 1,
206 "iscsi_get_portal_groups returned {} groups, expected {}".format(len(jsonvalues
), tag
))
209 for idx
, value
in enumerate(jsonvalues
):
210 verify(value
['portals'][0]['host'] == lo_ip
[idx
], 1,
211 "host value is {}, expected {}".format(value
['portals'][0]['host'], rpc_param
['target_ip']))
212 verify(value
['portals'][0]['port'] == str(rpc_param
['port']), 1,
213 "port value is {}, expected {}".format(value
['portals'][0]['port'], str(rpc_param
['port'])))
214 tag_list
.append(value
['tag'])
215 verify(value
['tag'] == idx
+ 1, 1,
216 "tag value is {}, expected {}".format(value
['tag'], idx
+ 1))
218 for idx
, value
in enumerate(tag_list
):
219 rpc
.iscsi_delete_portal_group(value
)
220 output
= rpc
.iscsi_get_portal_groups()
221 jsonvalues
= json
.loads(output
)
222 verify(len(jsonvalues
) == (len(tag_list
) - (idx
+ 1)), 1,
223 "get_portal_group returned {} groups, expected {}".format(len(jsonvalues
), (len(tag_list
) - (idx
+ 1))))
227 for jidx
, jvalue
in enumerate(jsonvalues
):
228 verify(jvalue
['portals'][0]['host'] == lo_ip
[idx
+ jidx
+ 1], 1,
229 "host value is {}, expected {}".format(jvalue
['portals'][0]['host'], lo_ip
[idx
+ jidx
+ 1]))
230 verify(jvalue
['portals'][0]['port'] == str(rpc_param
['port']), 1,
231 "port value is {}, expected {}".format(jvalue
['portals'][0]['port'], str(rpc_param
['port'])))
232 verify(jvalue
['tag'] != value
or jvalue
['tag'] == tag_list
[idx
+ jidx
+ 1], 1,
233 "tag value is {}, expected {} and not {}".format(jvalue
['tag'], tag_list
[idx
+ jidx
+ 1], value
))
236 if x
["ifc_index"] == 'lo':
237 rpc
.net_interface_delete_ip_address(x
["ifc_index"], lo_ip
[1])
239 print("verify_portal_groups_rpc_methods passed")
242 def verify_initiator_groups_rpc_methods(rpc_py
, rpc_param
):
243 rpc
= spdk_rpc(rpc_py
)
244 output
= rpc
.iscsi_get_initiator_groups()
245 jsonvalues
= json
.loads(output
)
246 verify(not jsonvalues
, 1,
247 "iscsi_get_initiator_groups returned {}, expected empty".format(jsonvalues
))
248 for idx
, value
in enumerate(rpc_param
['netmask']):
249 # The initiator group tag must start at 1
251 rpc
.iscsi_create_initiator_group(tag
, rpc_param
['initiator_name'], value
)
252 output
= rpc
.iscsi_get_initiator_groups()
253 jsonvalues
= json
.loads(output
)
254 verify(len(jsonvalues
) == tag
, 1,
255 "iscsi_get_initiator_groups returned {} groups, expected {}".format(len(jsonvalues
), tag
))
258 for idx
, value
in enumerate(jsonvalues
):
259 verify(value
['initiators'][0] == rpc_param
['initiator_name'], 1,
260 "initiator value is {}, expected {}".format(value
['initiators'][0], rpc_param
['initiator_name']))
261 tag_list
.append(value
['tag'])
262 verify(value
['tag'] == idx
+ 1, 1,
263 "tag value is {}, expected {}".format(value
['tag'], idx
+ 1))
264 verify(value
['netmasks'][0] == rpc_param
['netmask'][idx
], 1,
265 "netmasks value is {}, expected {}".format(value
['netmasks'][0], rpc_param
['netmask'][idx
]))
267 for idx
, value
in enumerate(rpc_param
['netmask']):
269 rpc
.iscsi_initiator_group_remove_initiators(tag
, '-n', rpc_param
['initiator_name'], '-m', value
)
271 output
= rpc
.iscsi_get_initiator_groups()
272 jsonvalues
= json
.loads(output
)
273 verify(len(jsonvalues
) == tag
, 1,
274 "iscsi_get_initiator_groups returned {} groups, expected {}".format(len(jsonvalues
), tag
))
276 for idx
, value
in enumerate(jsonvalues
):
277 verify(value
['tag'] == idx
+ 1, 1,
278 "tag value is {}, expected {}".format(value
['tag'], idx
+ 1))
279 initiators
= value
.get('initiators')
280 verify(len(initiators
) == 0, 1,
281 "length of initiator list is {}, expected 0".format(len(initiators
)))
282 netmasks
= value
.get('netmasks')
283 verify(len(netmasks
) == 0, 1,
284 "length of netmask list is {}, expected 0".format(len(netmasks
)))
286 for idx
, value
in enumerate(rpc_param
['netmask']):
288 rpc
.iscsi_initiator_group_add_initiators(tag
, '-n', rpc_param
['initiator_name'], '-m', value
)
289 output
= rpc
.iscsi_get_initiator_groups()
290 jsonvalues
= json
.loads(output
)
291 verify(len(jsonvalues
) == tag
, 1,
292 "iscsi_get_initiator_groups returned {} groups, expected {}".format(len(jsonvalues
), tag
))
295 for idx
, value
in enumerate(jsonvalues
):
296 verify(value
['initiators'][0] == rpc_param
['initiator_name'], 1,
297 "initiator value is {}, expected {}".format(value
['initiators'][0], rpc_param
['initiator_name']))
298 tag_list
.append(value
['tag'])
299 verify(value
['tag'] == idx
+ 1, 1,
300 "tag value is {}, expected {}".format(value
['tag'], idx
+ 1))
301 verify(value
['netmasks'][0] == rpc_param
['netmask'][idx
], 1,
302 "netmasks value is {}, expected {}".format(value
['netmasks'][0], rpc_param
['netmask'][idx
]))
304 for idx
, value
in enumerate(tag_list
):
305 rpc
.iscsi_delete_initiator_group(value
)
306 output
= rpc
.iscsi_get_initiator_groups()
307 jsonvalues
= json
.loads(output
)
308 verify(len(jsonvalues
) == (len(tag_list
) - (idx
+ 1)), 1,
309 "iscsi_get_initiator_groups returned {} groups, expected {}".format(len(jsonvalues
), (len(tag_list
) - (idx
+ 1))))
312 for jidx
, jvalue
in enumerate(jsonvalues
):
313 verify(jvalue
['initiators'][0] == rpc_param
['initiator_name'], 1,
314 "initiator value is {}, expected {}".format(jvalue
['initiators'][0], rpc_param
['initiator_name']))
315 verify(jvalue
['tag'] != value
or jvalue
['tag'] == tag_list
[idx
+ jidx
+ 1], 1,
316 "tag value is {}, expected {} and not {}".format(jvalue
['tag'], tag_list
[idx
+ jidx
+ 1], value
))
317 verify(jvalue
['netmasks'][0] == rpc_param
['netmask'][idx
+ jidx
+ 1], 1,
318 "netmasks value is {}, expected {}".format(jvalue
['netmasks'][0], rpc_param
['netmask'][idx
+ jidx
+ 1]))
320 print("verify_initiator_groups_rpc_method passed.")
323 def verify_target_nodes_rpc_methods(rpc_py
, rpc_param
):
324 rpc
= spdk_rpc(rpc_py
)
325 output
= rpc
.iscsi_get_options()
326 jsonvalues
= json
.loads(output
)
327 nodebase
= jsonvalues
['node_base']
328 output
= rpc
.iscsi_get_target_nodes()
329 jsonvalues
= json
.loads(output
)
330 verify(not jsonvalues
, 1,
331 "iscsi_get_target_nodes returned {}, expected empty".format(jsonvalues
))
333 rpc
.bdev_malloc_create(rpc_param
['malloc_bdev_size'], rpc_param
['malloc_block_size'])
334 rpc
.iscsi_create_portal_group(portal_tag
, "{}:{}".format(rpc_param
['target_ip'], str(rpc_param
['port'])))
335 rpc
.iscsi_create_initiator_group(initiator_tag
, rpc_param
['initiator_name'], rpc_param
['netmask'])
337 lun_mapping
= "Malloc" + str(rpc_param
['lun_total']) + ":0"
338 net_mapping
= portal_tag
+ ":" + initiator_tag
339 rpc
.iscsi_create_target_node(rpc_param
['target_name'], rpc_param
['alias_name'], lun_mapping
,
340 net_mapping
, rpc_param
['queue_depth'], '-d')
341 output
= rpc
.iscsi_get_target_nodes()
342 jsonvalues
= json
.loads(output
)
343 verify(len(jsonvalues
) == 1, 1,
344 "iscsi_get_target_nodes returned {} nodes, expected 1".format(len(jsonvalues
)))
345 bdev_name
= jsonvalues
[0]['luns'][0]['bdev_name']
346 verify(bdev_name
== "Malloc" + str(rpc_param
['lun_total']), 1,
347 "bdev_name value is {}, expected Malloc{}".format(jsonvalues
[0]['luns'][0]['bdev_name'], str(rpc_param
['lun_total'])))
348 name
= jsonvalues
[0]['name']
349 verify(name
== nodebase
+ ":" + rpc_param
['target_name'], 1,
350 "target name value is {}, expected {}".format(name
, nodebase
+ ":" + rpc_param
['target_name']))
351 verify(jsonvalues
[0]['alias_name'] == rpc_param
['alias_name'], 1,
352 "target alias_name value is {}, expected {}".format(jsonvalues
[0]['alias_name'], rpc_param
['alias_name']))
353 verify(jsonvalues
[0]['luns'][0]['lun_id'] == 0, 1,
354 "lun id value is {}, expected 0".format(jsonvalues
[0]['luns'][0]['lun_id']))
355 verify(jsonvalues
[0]['pg_ig_maps'][0]['ig_tag'] == int(initiator_tag
), 1,
356 "initiator group tag value is {}, expected {}".format(jsonvalues
[0]['pg_ig_maps'][0]['ig_tag'], initiator_tag
))
357 verify(jsonvalues
[0]['queue_depth'] == rpc_param
['queue_depth'], 1,
358 "queue depth value is {}, expected {}".format(jsonvalues
[0]['queue_depth'], rpc_param
['queue_depth']))
359 verify(jsonvalues
[0]['pg_ig_maps'][0]['pg_tag'] == int(portal_tag
), 1,
360 "portal group tag value is {}, expected {}".format(jsonvalues
[0]['pg_ig_maps'][0]['pg_tag'], portal_tag
))
361 verify(jsonvalues
[0]['disable_chap'] == rpc_param
['disable_chap'], 1,
362 "disable chap value is {}, expected {}".format(jsonvalues
[0]['disable_chap'], rpc_param
['disable_chap']))
363 verify(jsonvalues
[0]['mutual_chap'] == rpc_param
['mutual_chap'], 1,
364 "chap mutual value is {}, expected {}".format(jsonvalues
[0]['mutual_chap'], rpc_param
['mutual_chap']))
365 verify(jsonvalues
[0]['require_chap'] == rpc_param
['require_chap'], 1,
366 "chap required value is {}, expected {}".format(jsonvalues
[0]['require_chap'], rpc_param
['require_chap']))
367 verify(jsonvalues
[0]['chap_group'] == rpc_param
['chap_group'], 1,
368 "chap auth group value is {}, expected {}".format(jsonvalues
[0]['chap_group'], rpc_param
['chap_group']))
369 verify(jsonvalues
[0]['header_digest'] == rpc_param
['header_digest'], 1,
370 "header digest value is {}, expected {}".format(jsonvalues
[0]['header_digest'], rpc_param
['header_digest']))
371 verify(jsonvalues
[0]['data_digest'] == rpc_param
['data_digest'], 1,
372 "data digest value is {}, expected {}".format(jsonvalues
[0]['data_digest'], rpc_param
['data_digest']))
374 rpc
.iscsi_target_node_add_lun(name
, bdev_name
, "-i", lun_id
)
375 output
= rpc
.iscsi_get_target_nodes()
376 jsonvalues
= json
.loads(output
)
377 verify(jsonvalues
[0]['luns'][1]['bdev_name'] == "Malloc" + str(rpc_param
['lun_total']), 1,
378 "bdev_name value is {}, expected Malloc{}".format(jsonvalues
[0]['luns'][0]['bdev_name'], str(rpc_param
['lun_total'])))
379 verify(jsonvalues
[0]['luns'][1]['lun_id'] == 1, 1,
380 "lun id value is {}, expected 1".format(jsonvalues
[0]['luns'][1]['lun_id']))
382 rpc
.iscsi_delete_target_node(name
)
383 output
= rpc
.iscsi_get_target_nodes()
384 jsonvalues
= json
.loads(output
)
385 verify(not jsonvalues
, 1,
386 "iscsi_get_target_nodes returned {}, expected empty".format(jsonvalues
))
388 rpc
.iscsi_create_target_node(rpc_param
['target_name'], rpc_param
['alias_name'], lun_mapping
,
389 net_mapping
, rpc_param
['queue_depth'], '-d')
391 rpc
.iscsi_delete_portal_group(portal_tag
)
392 rpc
.iscsi_delete_initiator_group(initiator_tag
)
393 rpc
.iscsi_delete_target_node(name
)
394 output
= rpc
.iscsi_get_target_nodes()
395 jsonvalues
= json
.loads(output
)
397 print("This issue will be fixed later.")
399 print("verify_target_nodes_rpc_methods passed.")
402 def verify_net_get_interfaces(rpc_py
):
403 rpc
= spdk_rpc(rpc_py
)
404 nics
= json
.loads(rpc
.net_get_interfaces())
405 nics_names
= set(x
["name"] for x
in nics
)
406 # parse ip link show to verify the net_get_interfaces result
407 ip_show
= ns_cmd
+ " ip link show"
408 ifcfg_nics
= set(re
.findall(r
'\S+:\s(\S+?)(?:@\S+){0,1}:\s<.*', check_output(ip_show
.split()).decode()))
409 verify(nics_names
== ifcfg_nics
, 1, "net_get_interfaces returned {}".format(nics
))
410 print("verify_net_get_interfaces passed.")
413 def help_get_interface_ip_list(rpc_py
, nic_name
):
414 rpc
= spdk_rpc(rpc_py
)
415 nics
= json
.loads(rpc
.net_get_interfaces())
416 nic
= list([x
for x
in nics
if x
["name"] == nic_name
])
417 verify(len(nic
) != 0, 1,
418 "Nic name: {} is not found in {}".format(nic_name
, [x
["name"] for x
in nics
]))
419 return nic
[0]["ip_addr"]
422 def verify_net_interface_add_delete_ip_address(rpc_py
):
423 rpc
= spdk_rpc(rpc_py
)
424 nics
= json
.loads(rpc
.net_get_interfaces())
425 # add ip on up to first 2 nics
427 faked_ip
= "123.123.{}.{}".format(random
.randint(1, 254), random
.randint(1, 254))
428 ping_cmd
= ns_cmd
+ " ping -c 1 -W 1 " + faked_ip
429 rpc
.net_interface_add_ip_address(x
["ifc_index"], faked_ip
)
430 verify(faked_ip
in help_get_interface_ip_list(rpc_py
, x
["name"]), 1,
431 "add ip {} to nic {} failed.".format(faked_ip
, x
["name"]))
433 check_call(ping_cmd
.split())
434 except BaseException
:
436 "ping ip {} for {} was failed(adding was successful)".format
437 (faked_ip
, x
["name"]))
438 rpc
.net_interface_delete_ip_address(x
["ifc_index"], faked_ip
)
439 verify(faked_ip
not in help_get_interface_ip_list(rpc_py
, x
["name"]), 1,
440 "delete ip {} from nic {} failed.(adding and ping were successful)".format
441 (faked_ip
, x
["name"]))
442 # ping should be failed and throw an CalledProcessError exception
444 check_call(ping_cmd
.split())
445 except CalledProcessError
as _
:
447 except Exception as e
:
449 "Unexpected exception was caught {}(adding/ping/delete were successful)".format
453 "ip {} for {} could be pinged after delete ip(adding/ping/delete were successful)".format
454 (faked_ip
, x
["name"]))
455 print("verify_net_interface_add_delete_ip_address passed.")
458 if __name__
== "__main__":
463 verify_log_flag_rpc_methods(rpc_py
, rpc_param
)
464 verify_net_get_interfaces(rpc_py
)
465 # Add/delete IP will not be supported in VPP.
466 # It has separate vppctl utility for that.
467 if test_type
== 'posix':
468 verify_net_interface_add_delete_ip_address(rpc_py
)
469 create_malloc_bdevs_rpc_methods(rpc_py
, rpc_param
)
470 verify_portal_groups_rpc_methods(rpc_py
, rpc_param
)
471 verify_initiator_groups_rpc_methods(rpc_py
, rpc_param
)
472 verify_target_nodes_rpc_methods(rpc_py
, rpc_param
)
473 verify_scsi_devices_rpc_methods(rpc_py
)
474 verify_iscsi_connection_rpc_methods(rpc_py
)
475 except RpcException
as e
:
476 print("{}. Exiting with status {}".format(e
.message
, e
.retval
))
478 except Exception as e
: