tests: fix libhusb_release_interface tests
authorMichal Bloch <m.bloch@samsung.com>
Mon, 26 Oct 2015 16:43:49 +0000 (17:43 +0100)
committerStanislaw Wadas <s.wadas@samsung.com>
Wed, 2 Dec 2015 12:50:46 +0000 (13:50 +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 16105684729142de3c0f72119344cb0998ebdf93..d9f0afc1c53ff7df175049bb0a767ef8e29b043a 100644 (file)
@@ -405,9 +405,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);
@@ -418,6 +419,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;
@@ -733,6 +758,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),