Ever since v7.6.0-rc1~235 we can use ovs-vsctl to set QoS instead of tc. However, we don't have a test that's verifying generated cmd line for ovs-vsctl. Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> --- tests/virnetdevbandwidthtest.c | 85 +++++++++++++++++++++++++++------- 1 file changed, 69 insertions(+), 16 deletions(-) diff --git a/tests/virnetdevbandwidthtest.c b/tests/virnetdevbandwidthtest.c index 51e5ec016b..d5e4092fc3 100644 --- a/tests/virnetdevbandwidthtest.c +++ b/tests/virnetdevbandwidthtest.c @@ -22,13 +22,17 @@ #define LIBVIRT_VIRCOMMANDPRIV_H_ALLOW #include "vircommandpriv.h" #include "virnetdevbandwidth.h" +#include "virnetdevopenvswitch.h" #include "netdev_bandwidth_conf.c" #define VIR_FROM_THIS VIR_FROM_NONE struct testSetStruct { const char *band; - const char *exp_cmd; + const char *exp_cmd_tc; + const char *exp_cmd_ovs; + bool ovs; + const unsigned char *uuid; const char *iface; const bool hierarchical_class; }; @@ -59,6 +63,7 @@ testVirNetDevBandwidthSet(const void *data) { const struct testSetStruct *info = data; const char *iface = info->iface; + const char *exp_cmd = NULL; g_autoptr(virNetDevBandwidth) band = NULL; g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; g_autofree char *actual_cmd = NULL; @@ -72,17 +77,24 @@ testVirNetDevBandwidthSet(const void *data) virCommandSetDryRun(dryRunToken, &buf, false, false, NULL, NULL); - if (virNetDevBandwidthSet(iface, band, info->hierarchical_class, true) < 0) - return -1; + if (info->ovs) { + exp_cmd = info->exp_cmd_ovs; + if (virNetDevOpenvswitchInterfaceSetQos(iface, band, info->uuid, true) < 0) + return -1; + } else { + exp_cmd = info->exp_cmd_tc; + if (virNetDevBandwidthSet(iface, band, info->hierarchical_class, true) < 0) + return -1; + } if (!(actual_cmd = virBufferContentAndReset(&buf))) { /* This is interesting, no command has been executed. * Maybe that's expected, actually. */ } - if (STRNEQ_NULLABLE(info->exp_cmd, actual_cmd)) { + if (STRNEQ_NULLABLE(exp_cmd, actual_cmd)) { virTestDifference(stderr, - NULLSTR(info->exp_cmd), + NULLSTR(exp_cmd), NULLSTR(actual_cmd)); return -1; } @@ -94,22 +106,37 @@ static int mymain(void) { int ret = 0; + unsigned char uuid[VIR_UUID_BUFLEN] = { 0 }; -#define DO_TEST_SET(Band, Exp_cmd, ...) \ +#define VMUUID "c1018351-a229-4209-9faf-42446e0b53e5" + + if (virUUIDParse(VMUUID, uuid) < 0) + return -1; + +#define DO_TEST_SET(Band, Exp_cmd_tc, Exp_cmd_ovs, ...) \ do { \ struct testSetStruct data = {.band = Band, \ - .exp_cmd = Exp_cmd, \ + .exp_cmd_tc = Exp_cmd_tc, \ + .exp_cmd_ovs = Exp_cmd_ovs, \ + .ovs = false, \ + .uuid = uuid, \ __VA_ARGS__}; \ - if (virTestRun("virNetDevBandwidthSet", \ + if (virTestRun("virNetDevBandwidthSet TC", \ testVirNetDevBandwidthSet, \ - &data) < 0) \ + &data) < 0) { \ ret = -1; \ + } \ + data.ovs = true; \ + if (virTestRun("virNetDevBandwidthSet OVS", \ + testVirNetDevBandwidthSet, \ + &data) < 0) { \ + ret = -1; \ + } \ } while (0) + DO_TEST_SET(NULL, NULL, NULL); - DO_TEST_SET(NULL, NULL); - - DO_TEST_SET("<bandwidth/>", NULL); + DO_TEST_SET("<bandwidth/>", NULL, NULL); DO_TEST_SET("<bandwidth>" " <inbound average='1024'/>" @@ -119,7 +146,14 @@ mymain(void) TC " qdisc add dev eth0 root handle 1: htb default 1\n" TC " class add dev eth0 parent 1: classid 1:1 htb rate 1024kbps quantum 87\n" TC " qdisc add dev eth0 parent 1:1 handle 2: sfq perturb 10\n" - TC " filter add dev eth0 parent 1:0 protocol all prio 1 handle 1 fw flowid 1\n"); + TC " filter add dev eth0 parent 1:0 protocol all prio 1 handle 1 fw flowid 1\n", + OVS_VSCTL " --timeout=5 --no-heading --columns=_uuid find queue 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"'\n" + OVS_VSCTL " --timeout=5 --no-heading --columns=_uuid find qos 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"'\n" + OVS_VSCTL " --timeout=5 set port eth0 qos=@qos1 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"' --" + " --id=@qos1 create qos type=linux-htb other_config:min-rate=8192000 queues:0=@queue0 'external-ids:vm-id=\"" VMUUID "\"'" + " 'external-ids:ifname=\"eth0\"' --" + " --id=@queue0 create queue other_config:min-rate=8192000 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"'\n" + OVS_VSCTL " --timeout=5 set Interface eth0 ingress_policing_rate=0 ingress_policing_burst=0\n"); DO_TEST_SET("<bandwidth>" " <outbound average='1024'/>" @@ -128,7 +162,10 @@ mymain(void) TC " qdisc del dev eth0 ingress\n" TC " qdisc add dev eth0 ingress\n" TC " filter add dev eth0 parent ffff: protocol all u32 match u32 0 0" - " police rate 1024kbps burst 1024kb mtu 64kb drop flowid :1\n"); + " police rate 1024kbps burst 1024kb mtu 64kb drop flowid :1\n", + OVS_VSCTL " --timeout=5 --no-heading --columns=_uuid find queue 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"'\n" + OVS_VSCTL " --timeout=5 --no-heading --columns=_uuid find qos 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"'\n" + OVS_VSCTL " --timeout=5 set Interface eth0 ingress_policing_rate=8192\n"); DO_TEST_SET("<bandwidth>" " <inbound average='1' peak='2' floor='3' burst='4'/>" @@ -142,7 +179,15 @@ mymain(void) TC " filter add dev eth0 parent 1:0 protocol all prio 1 handle 1 fw flowid 1\n" TC " qdisc add dev eth0 ingress\n" TC " filter add dev eth0 parent ffff: protocol all u32 match u32 0 0" - " police rate 5kbps burst 7kb mtu 64kb drop flowid :1\n"); + " police rate 5kbps burst 7kb mtu 64kb drop flowid :1\n", + OVS_VSCTL " --timeout=5 --no-heading --columns=_uuid find queue 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"'\n" + OVS_VSCTL " --timeout=5 --no-heading --columns=_uuid find qos 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"'\n" + OVS_VSCTL " --timeout=5 set port eth0 qos=@qos1 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"' --" + " --id=@qos1 create qos type=linux-htb other_config:min-rate=8000 other_config:burst=32768 other_config:max-rate=16000" + " queues:0=@queue0 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"' --" + " --id=@queue0 create queue other_config:min-rate=8000 other_config:burst=32768 other_config:max-rate=16000" + " 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"'\n" + OVS_VSCTL " --timeout=5 set Interface eth0 ingress_policing_rate=40 ingress_policing_burst=56\n"); DO_TEST_SET("<bandwidth>" " <inbound average='4294967295'/>" @@ -157,7 +202,15 @@ mymain(void) TC " qdisc add dev eth0 ingress\n" TC " filter add dev eth0 parent ffff: protocol all u32 match" " u32 0 0 police rate 4294967295kbps burst 4194303kb mtu 64kb" - " drop flowid :1\n"); + " drop flowid :1\n", + OVS_VSCTL " --timeout=5 --no-heading --columns=_uuid find queue 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"'\n" + OVS_VSCTL " --timeout=5 --no-heading --columns=_uuid find qos 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"'\n" + OVS_VSCTL " --timeout=5 set port eth0 qos=@qos1 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"' --" + " --id=@qos1 create qos type=linux-htb other_config:min-rate=34359738360000" + " queues:0=@queue0 'external-ids:vm-id=\"" VMUUID "\"' 'external-ids:ifname=\"eth0\"' --" + " --id=@queue0 create queue other_config:min-rate=34359738360000 'external-ids:vm-id=\"" VMUUID "\"'" + " 'external-ids:ifname=\"eth0\"'\n" + OVS_VSCTL " --timeout=5 set Interface eth0 ingress_policing_rate=34359738360\n"); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; } -- 2.35.1