Signed-off-by: Yu Mingfei <[email protected]>
---
libvirt/tests/virsh_net_define_undefine.py | 184 +++++++++++++++++++++++++++++
1 file changed, 184 insertions(+)
create mode 100644 libvirt/tests/virsh_net_define_undefine.py
diff --git a/libvirt/tests/virsh_net_define_undefine.py
b/libvirt/tests/virsh_net_define_undefine.py
new file mode 100644
index 0000000..0a86931
--- /dev/null
+++ b/libvirt/tests/virsh_net_define_undefine.py
@@ -0,0 +1,184 @@
+import logging
+from autotest.client.shared import error
+from virttest import virsh, libvirt_vm, xml_utils
+from virttest.libvirt_xml import network_xml
+
+
+def get_network_xml_instance(virsh_dargs, test_xml, net_name,
+ net_uuid, bridge):
+ test_netxml = network_xml.NetworkXML(
+ virsh_instance=virsh.Virsh(**virsh_dargs))
+ test_netxml.xml = test_xml.name
+
+ # modify XML if called for
+ if net_name is not "":
+ test_netxml.name = net_name
+ else:
+ test_netxml.name = "default"
+ if net_uuid is not "":
+ test_netxml.uuid = net_uuid
+ else:
+ del test_netxml.uuid # let libvirt auto-generate
+ if bridge is not None:
+ test_netxml.bridge = bridge
+
+ # TODO: Test other network parameters
+
+ logging.debug("Modified XML:")
+ test_netxml.debug_xml()
+ return test_netxml
+
+
+def run_virsh_net_define_undefine(test, params, env):
+ """
+ Test command: virsh net-define/net-undefine.
+
+ 1) Collect parameters&environment info before test
+ 2) Prepare options for command
+ 3) Execute command for test
+ 4) Check state of defined network
+ 5) Recover environment
+ 6) Check result
+ """
+ uri = libvirt_vm.normalize_connect_uri(params.get("connect_uri",
+ "default"))
+ net_name = params.get("net_define_undefine_net_name", "default")
+ net_uuid = params.get("net_define_undefine_net_uuid", "")
+ options_ref = params.get("net_define_undefine_options_ref", "default")
+ trans_ref = params.get("net_define_undefine_trans_ref", "trans")
+ extra_args = params.get("net_define_undefine_extra", "")
+ remove_existing = params.get("net_define_undefine_remove_existing", "yes")
+ status_error = "yes" == params.get("status_error", "no")
+
+ virsh_dargs = {'uri':uri, 'debug':False, 'ignore_status':True}
+ virsh_instance = virsh.VirshPersistent(**virsh_dargs)
+
+ # Prepare environment and record current net_state_dict
+ backup = network_xml.NetworkXML.new_all_networks_dict(virsh_instance)
+ backup_state = virsh_instance.net_state_dict()
+ logging.debug("Backed up network(s): %s", backup_state)
+
+ # Make some XML to use for testing, for now we just copy 'default'
+ test_xml = xml_utils.TempXMLFile() # temporary file
+ try:
+ # LibvirtXMLBase.__str__ returns XML content
+ test_xml.write(str(backup['default']))
+ test_xml.flush()
+ except (KeyError, AttributeError):
+ raise error.TestNAError("Test requires default network to exist")
+
+ testnet_xml = get_network_xml_instance(virsh_dargs, test_xml, net_name,
+ net_uuid, bridge=None)
+
+ if remove_existing:
+ for netxml in backup.values():
+ netxml.orbital_nuclear_strike()
+
+ # Test both define and undefine, So collect info
+ # both of them for result check.
+ # When something wrong with network, set it to 1
+ fail_flag = 0
+ result_info = []
+
+ if options_ref == "correct_arg":
+ define_options = testnet_xml.xml
+ undefine_options = net_name
+ elif options_ref == "no_option":
+ define_options = ""
+ undefine_options = ""
+ elif options_ref == "not_exist_option":
+ define_options = "/not/exist/file"
+ undefine_options = "NOT_EXIST_NETWORK"
+
+ define_extra = undefine_extra = extra_args
+ if trans_ref != "define":
+ define_extra = ""
+
+ #Run test case
+ define_result = virsh.net_define(define_options, define_extra,
+ **virsh_dargs)
+ logging.debug(define_result)
+ define_status = define_result.exit_status
+
+ # If defining network succeed, then trying to start it.
+ if define_status == 0:
+ start_result = virsh.net_start(net_name, extra="", **virsh_dargs)
+ logging.debug(start_result)
+ start_status = start_result.exit_status
+
+ if trans_ref == "trans":
+ if define_status:
+ fail_flag = 1
+ result_info.append("Define network with right command failed.")
+ else:
+ if start_status:
+ fail_flag = 1
+ result_info.append("Network is defined as expected, "
+ "but failed to start it.")
+
+ # Stop network for undefine test anyway
+ destroy_result = virsh.net_destroy(net_name, extra="", **virsh_dargs)
+ logging.debug(destroy_result)
+
+ # Undefine network
+ undefine_result = virsh.net_undefine(undefine_options, undefine_extra,
+ **virsh_dargs)
+ if trans_ref != "define":
+ logging.debug(undefine_result)
+ undefine_status = undefine_result.exit_status
+
+ # Recover environment
+ leftovers = network_xml.NetworkXML.new_all_networks_dict(virsh_instance)
+ for netxml in leftovers.values():
+ netxml.orbital_nuclear_strike()
+
+ # Recover from backup
+ for netxml in backup.values():
+ netxml.create()
+ # autostart = True requires persistent = True first!
+ for state in ['active', 'autostart', 'persistent']:
+ netxml[state] = backup_state[netxml.name][state]
+
+ # Close down persistent virsh session (including for all netxml copies)
+ if hasattr(virsh_instance, 'close_session'):
+ virsh_instance.close_session()
+
+ # Done with file, cleanup
+ del test_xml
+ del testnet_xml
+
+ # Check status_error
+ # If fail_flag is set, it must be transaction test.
+ if fail_flag:
+ raise error.TestFail("Define network for transaction test "
+ "failed:%s", result_info)
+
+ # The logic to check result:
+ # status_error&only undefine:it is negative undefine test only
+ # status_error&(no undefine):it is negative define test only
+ # (not status_error)&(only undefine):it is positive transaction test.
+ # (not status_error)&(no undefine):it is positive define test only
+ if status_error:
+ if trans_ref == "undefine":
+ if undefine_status == 0:
+ raise error.TestFail("Run successfully with wrong command.")
+ else:
+ if define_status == 0:
+ if start_status == 0:
+ raise error.TestFail("Define an unexpected network, "
+ "and start it successfully.")
+ else:
+ raise error.TestFail("Define an unexpected network, "
+ "but start it failed.")
+ else:
+ if trans_ref == "undefine":
+ if undefine_status:
+ raise error.TestFail("Define network for transaction "
+ "successfully, but undefine failed.")
+ else:
+ if define_status != 0:
+ raise error.TestFail("Run failed with right command")
+ else:
+ if start_status != 0:
+ raise error.TestFail("Network is defined as expected, "
+ "but start it failed.")
--
1.7.11.7
_______________________________________________
Virt-test-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/virt-test-devel