On Mon, Oct 19, 2009 at 10:22:21AM +0200, Dor Laor wrote:
> On 10/15/2009 11:48 AM, Amos Kong wrote:
>>
>> Test 802.1Q vlan of nic, config it by vconfig command.
>>    1) Create two VMs
>>    2) Setup guests in different vlan by vconfig and test communication by 
>> ping
>>       using hard-coded ip address
>>    3) Setup guests in same vlan and test communication by ping
>>    4) Recover the vlan config
>>
>> Signed-off-by: Amos Kong<ak...@redhat.com>
>> ---
>>   client/tests/kvm/kvm_tests.cfg.sample |    6 +++
>>   client/tests/kvm/tests/vlan_tag.py    |   73 
>> +++++++++++++++++++++++++++++++++
>>   2 files changed, 79 insertions(+), 0 deletions(-)
>>   mode change 100644 =>  100755 client/tests/kvm/scripts/qemu-ifup
>
> In general the above should come as an independent patch.

yes.

>>   create mode 100644 client/tests/kvm/tests/vlan_tag.py
>>
>> diff --git a/client/tests/kvm/kvm_tests.cfg.sample 
>> b/client/tests/kvm/kvm_tests.cfg.sample
>> index 9ccc9b5..4e47767 100644
>> --- a/client/tests/kvm/kvm_tests.cfg.sample
>> +++ b/client/tests/kvm/kvm_tests.cfg.sample
>> @@ -166,6 +166,12 @@ variants:
>>           used_cpus = 5
>>           used_mem = 2560
>>
>> +    - vlan_tag:  install setup
>> +        type = vlan_tag
>> +        subnet2 = 192.168.123
>> +        vlans = "10 20"
>
> If we want to be fanatic and safe we should dynamically choose subnet  
> and vlans numbers that are not used on the host instead of hard code it.
>
>> +        nic_mode = tap
>> +        nic_model = e1000
>
> Why only e1000? Let's test virtio and rtl8139 as well. Can't you inherit  
> the nic model from the config?

yes, we should remove 'nic_model = e1000' for testing all kind of nic.

It seems that there exists a kvm bug 
(https://bugzilla.redhat.com/show_bug.cgi?id=516587)
It was found by this testcase.

>>       - autoit:       install setup
>>           type = autoit
>> diff --git a/client/tests/kvm/scripts/qemu-ifup 
>> b/client/tests/kvm/scripts/qemu-ifup
>> old mode 100644
>> new mode 100755
>> diff --git a/client/tests/kvm/tests/vlan_tag.py 
>> b/client/tests/kvm/tests/vlan_tag.py
>> new file mode 100644
>> index 0000000..15e763f
>> --- /dev/null
>> +++ b/client/tests/kvm/tests/vlan_tag.py
>> @@ -0,0 +1,73 @@
>> +import logging, time
>> +from autotest_lib.client.common_lib import error
>> +import kvm_subprocess, kvm_test_utils, kvm_utils
>> +
>> +def run_vlan_tag(test, params, env):
>> +    """
>> +    Test 802.1Q vlan of nic, config it by vconfig command.
>> +
>> +    1) Create two VMs
>> +    2) Setup guests in different vlan by vconfig and test communication by 
>> ping
>> +       using hard-coded ip address
>> +    3) Setup guests in same vlan and test communication by ping
>> +    4) Recover the vlan config
>> +
>> +    @param test: Kvm test object
>> +    @param params: Dictionary with the test parameters.
>> +    @param env: Dictionary with test environment.
>> +    """
>> +
>> +    vm = []
>> +    session = []
>> +    subnet2 = params.get("subnet2")
>> +    vlans = params.get("vlans").split()
>> +
>> +    vm.append(kvm_test_utils.get_living_vm(env, "%s" % 
>> params.get("main_vm")))
>> +
>> +    params_vm2 = params.copy()
>> +    params_vm2['image_snapshot'] = "yes"
>> +    params_vm2['kill_vm_gracefully'] = "no"
>> +    params_vm2["address_index"] = int(params.get("address_index", 0))+1
>> +    vm.append(vm[0].clone("vm2", params_vm2))
>> +    kvm_utils.env_register_vm(env, "vm2", vm[1])
>> +    if not vm[1].create():
>> +        raise error.TestError("VM 1 create faild")
>
>
> The whole 7-8 lines above should be grouped as a function to clone  
> existing VM. It should be part of kvm autotest infrastructure.
>
> Besides that, it looks good.
>
>> +
>> +    for i in range(2):
>> +        session.append(kvm_test_utils.wait_for_login(vm[i]))
>> +
>> +    try:
>> +        vconfig_cmd = "vconfig add eth0 %s;ifconfig eth0.%s %s.%s"
>> +        # Attempt to configure IPs for the VMs and record the results in
>> +        # boolean variables
>> +        # Make vm1 and vm2 in the different vlan
>> +
>> +        ip_config_vm1_ok = (session[0].get_command_status(vconfig_cmd
>> +                                   % (vlans[0], vlans[0], subnet2, "11")) 
>> == 0)
>> +        ip_config_vm2_ok = (session[1].get_command_status(vconfig_cmd
>> +                                   % (vlans[1], vlans[1], subnet2, "12")) 
>> == 0)
>> +        if not ip_config_vm1_ok or not ip_config_vm2_ok:
>> +            raise error.TestError, "Fail to config VMs ip address"
>> +        ping_diff_vlan_ok = (session[0].get_command_status(
>> +                             "ping -c 2 %s.12" % subnet2) == 0)
>> +
>> +        if ping_diff_vlan_ok:
>> +            raise error.TestFail("VM 2 is unexpectedly pingable in 
>> different "
>> +                                 "vlan")
>> +        # Make vm2 in the same vlan with vm1
>> +        vlan_config_vm2_ok = (session[1].get_command_status(
>> +                              "vconfig rem eth0.%s;vconfig add eth0 %s;"
>> +                              "ifconfig eth0.%s %s.12" %
>> +                              (vlans[1], vlans[0], vlans[0], subnet2)) == 0)
>> +        if not vlan_config_vm2_ok:
>> +            raise error.TestError, "Fail to config ip address of VM 2"
>> +
>> +        ping_same_vlan_ok = (session[0].get_command_status(
>> +                             "ping -c 2 %s.12" % subnet2) == 0)
>> +        if not ping_same_vlan_ok:
>> +            raise error.TestFail("Fail to ping the guest in same vlan")
>> +    finally:
>> +        # Clean the vlan config
>> +        for i in range(2):
>> +            session[i].sendline("vconfig rem eth0.%s" % vlans[0])
>> +            session[i].close()


-- 
Amos Kong
Quality Engineer
Raycom Office(Beijing), Red Hat Inc.
Phone: +86-10-62608183
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to