tests: fix libhusb_release_interface tests
authorMichal Bloch <m.bloch@samsung.com>
Mon, 26 Oct 2015 16:43:49 +0000 (17:43 +0100)
committerMichal Bloch <m.bloch@samsung.com>
Tue, 27 Oct 2015 14:44:28 +0000 (15:44 +0100)
The kernel driver attachment part of the
function was ignored, which would sometimes
lead to the test failing when the attachment
was called - this happened randomly because
the value was never initialized.

The simple test for libhusb_release_interface
is changed to make sure it does not check this
scenario. A new sub-test is added to do so.
The invalid arguments test is unaffected as it
never gets to the kernel driver attachment part.

Change-Id: I3628942b436940508ab5b93a76cc59b596645f2a
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
tests/libhusb-test.c

index 8d4dca8e5410b4911a208f4d892eaf0b47d41f9a..aeddf662925ad02665373f24bbd66e0fe87db715 100644 (file)
@@ -366,9 +366,10 @@ static void test_release_interface_simple(void **state)
        libhusb_device_handle *handle;
        int interface_nmb, ret;
 
-       interface_nmb = 1;
+       interface_nmb = rand() % MAX_NMB_OF_CONFIGS;
        handle = (libhusb_device_handle *)(*state);
        assert_non_null(handle);
+       handle->driver_detached[interface_nmb] = 0;
 
        expect_value(libusb_release_interface, dev, handle->lusb_dev_handle);
        expect_value(libusb_release_interface, interface_number, interface_nmb);
@@ -379,6 +380,30 @@ static void test_release_interface_simple(void **state)
        assert_return_code(ret, 0);
 }
 
+static void test_release_interface_attachment(void **state)
+{
+       libhusb_device_handle *handle;
+       int interface_nmb, ret;
+
+       interface_nmb = rand() % MAX_NMB_OF_CONFIGS;
+       handle = (libhusb_device_handle *)(*state);
+       assert_non_null(handle);
+       handle->driver_detached[interface_nmb] = 1;
+
+       expect_value(libusb_release_interface, dev, handle->lusb_dev_handle);
+       expect_value(libusb_release_interface, interface_number, interface_nmb);
+       will_return(libusb_release_interface, 0);
+
+       expect_value(libusb_attach_kernel_driver, dev, handle->lusb_dev_handle);
+       expect_value(libusb_attach_kernel_driver, interface_number, interface_nmb);
+       will_return(libusb_attach_kernel_driver, 0);
+
+       ret = libhusb_release_interface(handle, interface_nmb);
+
+       assert_return_code(ret, 0);
+       assert_int_equal(0, handle->driver_detached[interface_nmb]);
+}
+
 static void test_release_interface_invalid(void **state)
 {
        libhusb_device_handle *handle;
@@ -691,6 +716,7 @@ static struct CMUnitTest tests[] = {
                HUSB_TEST_DEV_HANDLE(test_bulk_transfer_simple),
                HUSB_TEST_DEV_HANDLE(test_bulk_transfer_length_check),
                HUSB_TEST_DEV_HANDLE(test_release_interface_simple),
+               HUSB_TEST_DEV_HANDLE(test_release_interface_attachment),
                HUSB_TEST_DEV_HANDLE(test_release_interface_invalid),
                HUSB_TEST_DEV_HANDLE(test_interrupt_transfer_simple),
                HUSB_TEST_DEV_HANDLE(test_interrupt_transfer_length_check),