[libvirt] [test-API][PATCH] Add network update test case
Guannan Ren
gren at redhat.com
Mon Aug 12 05:27:20 UTC 2013
On 08/09/2013 05:28 PM, hongming zhang wrote:
> The patch add network update test case to cover network update api.
> modified: cases/basic_network.conf
> - The test suite covers add/modify/delete ip-dhcp-host in network. For other test
> scenario, they can be test via customing the conf file.
> new file: repos/network/update.py
> - So far the network update test case only checking when flag is live or current.
> new file: repos/network/xmls/ip-dhcp-host.xml
> - Create the ip-dhcp-host sample xml file for adding/deleting ip-dhcp-host
> new file: repos/network/xmls/modify-ip-dhcp-host.xml
> - Create the ip-dhcp-host sample xml file for modifying ip-dhcp-host
> Known bug:
> - Bug 985782 - Some flag values of method are missing in libvirt-python bindings
> ---
> cases/basic_network.conf | 28 ++++++++++
> repos/network/update.py | 82 ++++++++++++++++++++++++++++
> repos/network/xmls/ip-dhcp-host.xml | 1 +
> repos/network/xmls/modify-ip-dhcp-host.xml | 1 +
> 4 files changed, 112 insertions(+), 0 deletions(-)
> create mode 100644 repos/network/update.py
> create mode 100644 repos/network/xmls/ip-dhcp-host.xml
> create mode 100644 repos/network/xmls/modify-ip-dhcp-host.xml
>
> diff --git a/cases/basic_network.conf b/cases/basic_network.conf
> index 91d7f21..e9abd57 100644
> --- a/cases/basic_network.conf
> +++ b/cases/basic_network.conf
> @@ -32,6 +32,34 @@ network:autostart
> autostart
> enable
>
> +network:update
> + networkname
> + $defaultnetname
> + command
> + add-first
> + section
> + ip-dhcp-host
> +
> +network:update
> + networkname
> + $defaultnetname
> + command
> + modify
> + section
> + ip-dhcp-host
> + xml
> + xmls/modify-ip-dhcp-host.xml
> +
> +network:update
> + networkname
> + $defaultnetname
> + command
> + delete
> + section
> + ip-dhcp-host
> + xml
> + xmls/modify-ip-dhcp-host.xml
> +
> network:destroy
> networkname
> $defaultnetname
> diff --git a/repos/network/update.py b/repos/network/update.py
> new file mode 100644
> index 0000000..0024a5e
> --- /dev/null
> +++ b/repos/network/update.py
> @@ -0,0 +1,82 @@
> +#!/usr/bin/evn python
> +#Update a network
> +
> +import libvirt
> +from libvirt import libvirtError
> +from src import sharedmod
> +
> +COMMANDDICT = {"none":0, "modify":1, "delete":2, "add-first":4}
> +SECTIONDICT = {"none":0, "bridge":1, "domain":2, "ip":3, "ip-dhcp-host":4, \
> + "ip-dhcp-range":5, "forward":6, "forward-interface":7,\
> + "forward-pf":8, "portgroup":9, "dns-host":10, "dns-txt":11,\
> + "dns-srv":12}
> +FLAGSDICT = {"current":0, "live":1, "config": 2}
> +
> +required_params = ('networkname', )
> +optional_params = {
> + 'command': 'add-first',
> + 'section': 'ip-dhcp-host',
> + 'parentIndex': 0,
> + 'xml': 'xmls/ip-dhcp-host.xml',
> + 'flag': 'current',
> + }
> +
> +def update(params):
> + """Update a network from xml"""
> + global logger
> + logger = params['logger']
> + networkname = params['networkname']
> + conn = sharedmod.libvirtobj['conn']
> +
> + command = params['command']
> + logger.info("The specified command is %s" % command)
> + section = params['section']
> + logger.info("The specified section is %s" % section)
> + parentIndex = int(params.get('parentIndex', 0))
> + logger.info("The specified parentIndex is %d" % parentIndex)
> + xmlstr = params.get('xml', 'xmls/ip-dhcp-host.xml').replace('\"','\'')
> + logger.info("The specified updatexml is %s" % xmlstr)
> + flag = params.get('flag', 'current')
> + logger.info("The specified flag is %s" % flag)
> +
> + command_val = 0
> + section_val = 0
> + flag_val = 0
> + if COMMANDDICT.has_key(command):
> + command_val = COMMANDDICT.get(command)
> + if SECTIONDICT.has_key(section):
> + section_val = SECTIONDICT.get(section)
> + if FLAGSDICT.has_key(flag):
> + flag_val = FLAGSDICT.get(flag)
> +
> + try:
> + network = conn.networkLookupByName(networkname)
> + logger.info("The original network xml is %s" % network.XMLDesc(0))
> + network.update(command_val, section_val, parentIndex, xmlstr, \
> + flag_val)
> + updated_netxml = network.XMLDesc(0)
> + logger.info("The updated network xml is %s" % updated_netxml)
> + #The check only works when flag isn't set as config
> + if flag_val !=2:
> + if command_val == 0 or command_val == 2:
> + if xmlstr not in updated_netxml:
> + logger.info("Successfully update network")
> + return 0
> + else:
> + logger.error("Failed to update network")
> + return 1
> +
> + elif command_val == 1 or command_val == 4:
> + if xmlstr in updated_netxml:
> + logger.info("Successfully update network")
> + return 0
> + else:
> + logger.error("Failed to update network")
> + return 1
> +
> + except libvirtError, e:
> + logger.error("API error message: %s, error code is %s" \
> + % (e.message, e.get_error_code()))
> + return 1
> +
> + return 0
> diff --git a/repos/network/xmls/ip-dhcp-host.xml b/repos/network/xmls/ip-dhcp-host.xml
> new file mode 100644
> index 0000000..50e7908
> --- /dev/null
> +++ b/repos/network/xmls/ip-dhcp-host.xml
> @@ -0,0 +1 @@
> +<host mac="00:16:3e:77:e2:ed" name="foo.example.com" ip="192.168.122.10" />
> diff --git a/repos/network/xmls/modify-ip-dhcp-host.xml b/repos/network/xmls/modify-ip-dhcp-host.xml
> new file mode 100644
> index 0000000..a10e9fa
> --- /dev/null
> +++ b/repos/network/xmls/modify-ip-dhcp-host.xml
> @@ -0,0 +1 @@
> +<host mac="00:16:3e:77:e2:ed" name="beijing.redhat.com" ip="192.168.122.101" />
ACK, pushed.
Thanks
Guannan
More information about the libvir-list
mailing list