Re: [RFC PATCH v3 6/6] tests: Added tests for eBPF blob loading.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

On Fri, May 17, 2024 at 5:00 PM Michal Prívozník <mprivozn@xxxxxxxxxx> wrote:
>
> On 5/12/24 21:45, Andrew Melnychenko wrote:
> > Added net-virtio-rss-bpf to qemuxmlconf's test.
> > Synthetically modified caps-9.0.0 with a reply.
> > Added mock functions for loading eBPF.
> >
> > Signed-off-by: Andrew Melnychenko <andrew@xxxxxxxxxx>
> > ---
> >  .../caps_9.0.0_x86_64.replies                 | 199 ++++++++++--------
> >  .../caps_9.0.0_x86_64.xml                     |   4 +
> >  tests/qemuxml2argvmock.c                      |  21 ++
> >  .../net-virtio-rss-bpf.x86_64-latest.args     |  37 ++++
> >  .../net-virtio-rss-bpf.x86_64-latest.xml      |  46 ++++
> >  tests/qemuxmlconfdata/net-virtio-rss-bpf.xml  |  46 ++++
> >  tests/qemuxmlconftest.c                       |   4 +
> >  7 files changed, 265 insertions(+), 92 deletions(-)
> >  create mode 100644 tests/qemuxmlconfdata/net-virtio-rss-bpf.x86_64-latest.args
> >  create mode 100644 tests/qemuxmlconfdata/net-virtio-rss-bpf.x86_64-latest.xml
> >  create mode 100644 tests/qemuxmlconfdata/net-virtio-rss-bpf.xml
> >
> > diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.replies
> > index 5d36853ce3..b94625904b 100644
> > --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.replies
> > +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.replies
>
>
> Changes to this file should be done earlier.
>
> > diff --git a/tests/qemuxml2argvmock.c b/tests/qemuxml2argvmock.c
> > index 9cc97199c4..0d1ebbe5b9 100644
> > --- a/tests/qemuxml2argvmock.c
> > +++ b/tests/qemuxml2argvmock.c
> > @@ -292,3 +292,24 @@ virNetDevSetMTU(const char *ifname G_GNUC_UNUSED,
> >  {
> >      return 0;
> >  }
> > +
> > +int
> > +qemuInterfaceLoadEbpf(__attribute__((unused)) const char *ebpfObject,
> > +        __attribute__((unused)) void **retLibbpfObj, int *fds, size_t nfds)
> > +{
> > +    if (nfds >= 4) {
> > +        fds[0] = 0x100;
> > +        fds[1] = 0x101;
> > +        fds[2] = 0x102;
> > +        fds[3] = 0x103;
> > +        return 4;
> > +    } else {
> > +        return -1;
> > +    }
> > +}
> > +
> > +void
> > +qemuInterfaceCloseEbpf(__attribute__((unused)) void *libbpfObj)
> > +{
> > +    return;
> > +}
> > diff --git a/tests/qemuxmlconfdata/net-virtio-rss-bpf.x86_64-latest.args b/tests/qemuxmlconfdata/net-virtio-rss-bpf.x86_64-latest.args
> > new file mode 100644
> > index 0000000000..b9497e5a73
> > --- /dev/null
> > +++ b/tests/qemuxmlconfdata/net-virtio-rss-bpf.x86_64-latest.args
> > @@ -0,0 +1,37 @@
> > +LC_ALL=C \
> > +PATH=/bin \
> > +HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \
> > +USER=test \
> > +LOGNAME=test \
> > +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \
> > +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \
> > +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
> > +/usr/bin/qemu-system-x86_64 \
> > +-name guest=QEMUGuest1,debug-threads=on \
> > +-S \
> > +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \
> > +-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \
> > +-accel tcg \
> > +-cpu qemu64 \
> > +-m size=219136k \
> > +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
> > +-overcommit mem-lock=off \
> > +-smp 1,sockets=1,cores=1,threads=1 \
> > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
> > +-display none \
> > +-no-user-config \
> > +-nodefaults \
> > +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
> > +-mon chardev=charmonitor,id=monitor,mode=control \
> > +-rtc base=utc \
> > +-no-shutdown \
> > +-boot strict=on \
> > +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \
> > +-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","read-only":false}' \
> > +-device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-1-storage","id":"ide0-0-0","bootindex":1}' \
> > +-netdev '{"type":"user","id":"hostnet0"}' \
> > +-device '{"driver":"virtio-net-pci","rss":true,"ebpf-rss-fds":["256","257","258","259"],"netdev":"hostnet0","id":"net0","mac":"00:11:22:33:44:55","bus":"pci.0","addr":"0x2"}' \
> > +-audiodev '{"id":"audio1","driver":"none"}' \
> > +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x5"}' \
> > +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
> > +-msg timestamp=on
> > diff --git a/tests/qemuxmlconfdata/net-virtio-rss-bpf.x86_64-latest.xml b/tests/qemuxmlconfdata/net-virtio-rss-bpf.x86_64-latest.xml
> > new file mode 100644
> > index 0000000000..198540380c
> > --- /dev/null
> > +++ b/tests/qemuxmlconfdata/net-virtio-rss-bpf.x86_64-latest.xml
> > @@ -0,0 +1,46 @@
> > +<domain type='qemu'>
> > +  <name>QEMUGuest1</name>
> > +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
> > +  <memory unit='KiB'>219100</memory>
> > +  <currentMemory unit='KiB'>219100</currentMemory>
> > +  <vcpu placement='static'>1</vcpu>
> > +  <os>
> > +    <type arch='i686' machine='pc'>hvm</type>
> > +    <boot dev='hd'/>
> > +  </os>
> > +  <cpu mode='custom' match='exact' check='none'>
> > +    <model fallback='forbid'>qemu64</model>
> > +  </cpu>
> > +  <clock offset='utc'/>
> > +  <on_poweroff>destroy</on_poweroff>
> > +  <on_reboot>restart</on_reboot>
> > +  <on_crash>destroy</on_crash>
> > +  <devices>
> > +    <emulator>/usr/bin/qemu-system-x86_64</emulator>
> > +    <disk type='block' device='disk'>
> > +      <driver name='qemu' type='raw'/>
> > +      <source dev='/dev/HostVG/QEMUGuest1'/>
> > +      <target dev='hda' bus='ide'/>
> > +      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
> > +    </disk>
> > +    <controller type='usb' index='0' model='piix3-uhci'>
> > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
> > +    </controller>
> > +    <controller type='pci' index='0' model='pci-root'/>
> > +    <controller type='ide' index='0'>
> > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
> > +    </controller>
> > +    <interface type='user'>
> > +      <mac address='00:11:22:33:44:55'/>
> > +      <model type='virtio'/>
> > +      <driver rss='on'/>
> > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
> > +    </interface>
> > +    <input type='mouse' bus='ps2'/>
> > +    <input type='keyboard' bus='ps2'/>
> > +    <audio id='1' type='none'/>
> > +    <memballoon model='virtio'>
> > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
> > +    </memballoon>
> > +  </devices>
> > +</domain>
> > diff --git a/tests/qemuxmlconfdata/net-virtio-rss-bpf.xml b/tests/qemuxmlconfdata/net-virtio-rss-bpf.xml
> > new file mode 100644
> > index 0000000000..198540380c
> > --- /dev/null
> > +++ b/tests/qemuxmlconfdata/net-virtio-rss-bpf.xml
> > @@ -0,0 +1,46 @@
> > +<domain type='qemu'>
> > +  <name>QEMUGuest1</name>
> > +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
> > +  <memory unit='KiB'>219100</memory>
> > +  <currentMemory unit='KiB'>219100</currentMemory>
> > +  <vcpu placement='static'>1</vcpu>
> > +  <os>
> > +    <type arch='i686' machine='pc'>hvm</type>
> > +    <boot dev='hd'/>
> > +  </os>
> > +  <cpu mode='custom' match='exact' check='none'>
> > +    <model fallback='forbid'>qemu64</model>
> > +  </cpu>
> > +  <clock offset='utc'/>
> > +  <on_poweroff>destroy</on_poweroff>
> > +  <on_reboot>restart</on_reboot>
> > +  <on_crash>destroy</on_crash>
> > +  <devices>
> > +    <emulator>/usr/bin/qemu-system-x86_64</emulator>
> > +    <disk type='block' device='disk'>
> > +      <driver name='qemu' type='raw'/>
> > +      <source dev='/dev/HostVG/QEMUGuest1'/>
> > +      <target dev='hda' bus='ide'/>
> > +      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
> > +    </disk>
> > +    <controller type='usb' index='0' model='piix3-uhci'>
> > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
> > +    </controller>
> > +    <controller type='pci' index='0' model='pci-root'/>
> > +    <controller type='ide' index='0'>
> > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
> > +    </controller>
> > +    <interface type='user'>
> > +      <mac address='00:11:22:33:44:55'/>
> > +      <model type='virtio'/>
> > +      <driver rss='on'/>
> > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
> > +    </interface>
> > +    <input type='mouse' bus='ps2'/>
> > +    <input type='keyboard' bus='ps2'/>
> > +    <audio id='1' type='none'/>
> > +    <memballoon model='virtio'>
> > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
> > +    </memballoon>
> > +  </devices>
> > +</domain>
> > diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c
> > index 2842b44b3e..0f53ef0408 100644
> > --- a/tests/qemuxmlconftest.c
> > +++ b/tests/qemuxmlconftest.c
> > @@ -1785,7 +1785,11 @@ mymain(void)
> >      DO_TEST_CAPS_LATEST_FAILURE("net-hostdev-fail");
> >      DO_TEST_CAPS_LATEST("net-vdpa");
> >      DO_TEST_CAPS_LATEST("net-vdpa-multiqueue");
> > +
> > +    driver.config->allowEBPF = false;
> >      DO_TEST_CAPS_LATEST("net-virtio-rss");
> > +    driver.config->allowEBPF = true;
> > +    DO_TEST_CAPS_LATEST("net-virtio-rss-bpf");
>
> What we usually do in this case is something like:
>
> g_setenv("SOME_ENV_VAR", 0, true);
> DO_TEST_CAPS_LATEST();
> unsetenv("SOME_ENV_VAR");
>
> See TEST_TPM_ENV_VAR for example.
>
> And then the mocked version of qemuInterfaceLoadEbpf() would check for
> this envvar and if set/unset do the mocked code or just return 0 or
> something.

Thank you, I'll check what I can implement in the next version.

>
> >
> >      DO_TEST_CAPS_LATEST("hostdev-pci-multifunction");
> >
>
> Michal
>




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux