[spice-gtk,v4,29/29] test-cd-emu: Test no libusb context support

Submitted by Frediano Ziglio on Aug. 27, 2019, 9:22 a.m.

Details

Message ID 20190827092246.10276-30-fziglio@redhat.com
State Superseded
Headers show
Series "added feature of sharing CD image" ( rev: 6 ) in Spice

Not browsing as part of any series.

Commit Message

Frediano Ziglio Aug. 27, 2019, 9:22 a.m.
Although currently not supported the code try to support it
in order to be able to have only emulated devices if the
libusb layer is failing.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
---
 tests/cd-emu.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

Patch hide | download patch | download mbox

diff --git a/tests/cd-emu.c b/tests/cd-emu.c
index da6e3c3f..cc5cf8fd 100644
--- a/tests/cd-emu.c
+++ b/tests/cd-emu.c
@@ -180,7 +180,8 @@  printf("LOOP %d\n", loop);
 
 static void attach(const void *param)
 {
-    const bool attach_on_connect = !!GPOINTER_TO_UINT(param);
+    const bool attach_on_connect = !!(GPOINTER_TO_UINT(param) & 1);
+    const bool libusb_enabled = !!(GPOINTER_TO_UINT(param) & 2);
 
     hellos_sent = 0;
     messages_sent = 0;
@@ -223,7 +224,12 @@  static void attach(const void *param)
     g_assert_nonnull(device);
     g_assert_false(device->edev_configured);
 
+    void *libusb_context_saved = be->libusb_context;
+    if (!libusb_enabled) {
+        be->libusb_context = NULL;
+    }
     usb_ch = spice_usb_backend_channel_new(be, SPICE_USBREDIR_CHANNEL(ch));
+    be->libusb_context = libusb_context_saved;
     g_assert_nonnull(usb_ch);
 
     for (int loop = 0; loop < 2; ++loop) {
@@ -285,8 +291,12 @@  int main(int argc, char* argv[])
 
     g_test_add_data_func("/cd-emu/simple", GUINT_TO_POINTER(1), multiple);
     g_test_add_data_func("/cd-emu/multiple", GUINT_TO_POINTER(128), multiple);
-    g_test_add_data_func("/cd-emu/attach_no_auto", GUINT_TO_POINTER(0), attach);
-    g_test_add_data_func("/cd-emu/attach_auto", GUINT_TO_POINTER(1), attach);
+#define ATTACH_PARAM(auto_attach, libusb) \
+    GUINT_TO_POINTER(!!(auto_attach) + 2 * !!(libusb))
+    g_test_add_data_func("/cd-emu/attach_no_auto", ATTACH_PARAM(0, 1), attach);
+    g_test_add_data_func("/cd-emu/attach_auto", ATTACH_PARAM(1, 1), attach);
+    g_test_add_data_func("/cd-emu/attach_no_auto_no_libusb", ATTACH_PARAM(0, 0), attach);
+    g_test_add_data_func("/cd-emu/attach_auto_no_libusb", ATTACH_PARAM(1, 0), attach);
 
     return g_test_run();
 }

Comments

Frediano Ziglio writes:

> Although currently not supported the code try to support it

"not supported in the code, try to support it" ?

(Not really sure what you really mean)

> in order to be able to have only emulated devices if the
> libusb layer is failing.
>
> Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
> ---
>  tests/cd-emu.c | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/tests/cd-emu.c b/tests/cd-emu.c
> index da6e3c3f..cc5cf8fd 100644
> --- a/tests/cd-emu.c
> +++ b/tests/cd-emu.c
> @@ -180,7 +180,8 @@ printf("LOOP %d\n", loop);
>
>  static void attach(const void *param)
>  {
> -    const bool attach_on_connect = !!GPOINTER_TO_UINT(param);
> +    const bool attach_on_connect = !!(GPOINTER_TO_UINT(param) & 1);
> +    const bool libusb_enabled = !!(GPOINTER_TO_UINT(param) & 2);
>
>      hellos_sent = 0;
>      messages_sent = 0;
> @@ -223,7 +224,12 @@ static void attach(const void *param)
>      g_assert_nonnull(device);
>      g_assert_false(device->edev_configured);
>
> +    void *libusb_context_saved = be->libusb_context;
> +    if (!libusb_enabled) {
> +        be->libusb_context = NULL;
> +    }
>      usb_ch = spice_usb_backend_channel_new(be, SPICE_USBREDIR_CHANNEL(ch));
> +    be->libusb_context = libusb_context_saved;
>      g_assert_nonnull(usb_ch);
>
>      for (int loop = 0; loop < 2; ++loop) {
> @@ -285,8 +291,12 @@ int main(int argc, char* argv[])
>
>      g_test_add_data_func("/cd-emu/simple", GUINT_TO_POINTER(1), multiple);
>      g_test_add_data_func("/cd-emu/multiple", GUINT_TO_POINTER(128), multiple);
> -    g_test_add_data_func("/cd-emu/attach_no_auto", GUINT_TO_POINTER(0), attach);
> -    g_test_add_data_func("/cd-emu/attach_auto", GUINT_TO_POINTER(1), attach);
> +#define ATTACH_PARAM(auto_attach, libusb) \
> +    GUINT_TO_POINTER(!!(auto_attach) + 2 * !!(libusb))
> +    g_test_add_data_func("/cd-emu/attach_no_auto", ATTACH_PARAM(0, 1), attach);
> +    g_test_add_data_func("/cd-emu/attach_auto", ATTACH_PARAM(1, 1), attach);
> +    g_test_add_data_func("/cd-emu/attach_no_auto_no_libusb", ATTACH_PARAM(0, 0), attach);
> +    g_test_add_data_func("/cd-emu/attach_auto_no_libusb", ATTACH_PARAM(1, 0), attach);
>
>      return g_test_run();
>  }


--
Cheers,
Christophe de Dinechin (IRC c3d)