shared/tester: Add tester_io_set_complete_func
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 9 Nov 2022 21:00:47 +0000 (13:00 -0800)
committerAyush Garg <ayush.garg@samsung.com>
Fri, 5 Jan 2024 10:11:33 +0000 (15:41 +0530)
This adds tester_io_set_complete_func which can be used to set a
callback when all iovec has been sent/received.

src/shared/tester.c
src/shared/tester.h

index fab1d47..0f35b36 100755 (executable)
@@ -88,6 +88,7 @@ struct test_case {
        tester_data_func_t test_func;
        tester_data_func_t teardown_func;
        tester_data_func_t post_teardown_func;
+       tester_data_func_t io_complete_func;
        gdouble start_time;
        gdouble end_time;
        unsigned int timeout;
@@ -912,6 +913,9 @@ static bool test_io_send(struct io *io, void *user_data)
 
        g_assert_cmpint(len, ==, iov->iov_len);
 
+       if (!test->iovcnt && test->io_complete_func)
+               test->io_complete_func(test->test_data);
+
        return false;
 }
 
@@ -936,10 +940,15 @@ static bool test_io_recv(struct io *io, void *user_data)
 
        g_assert_cmpint(len, ==, iov->iov_len);
 
+       if (memcmp(buf, iov->iov_base, len))
+               tester_monitor('!', 0x0004, 0x0000, iov->iov_base, len);
+
        g_assert(memcmp(buf, iov->iov_base, len) == 0);
 
        if (test->iovcnt)
                io_set_write_handler(io, test_io_send, NULL, NULL);
+       else if (test->io_complete_func)
+               test->io_complete_func(test->test_data);
 
        return true;
 }
@@ -1003,6 +1012,13 @@ void tester_io_send(void)
                io_set_write_handler(ios[1], test_io_send, NULL, NULL);
 }
 
+void tester_io_set_complete_func(tester_data_func_t func)
+{
+       struct test_case *test = tester_get_test();
+
+       test->io_complete_func = func;
+}
+
 int tester_run(void)
 {
        int ret;
index c28f61e..4961018 100755 (executable)
@@ -78,3 +78,4 @@ void tester_wait(unsigned int seconds, tester_wait_func_t func,
 
 struct io *tester_setup_io(const struct iovec *iov, int iovcnt);
 void tester_io_send(void);
+void tester_io_set_complete_func(tester_data_func_t func);