pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/libosmocore/+/39411?usp=email )

Change subject: tests/osmo_io: Rework test_file()
......................................................................

tests/osmo_io: Rework test_file()

The amount of read and write on each callback is actually not
really managed by us but by the kernel. Instead of validating the amount
of read/write callbacks, monitor the amount of read/write bytes (and
also make sure the received a final read with len=0 to signal EOF).

Add fflush(stdout) before calling ASSERT to make sure stdout is flushed
before terminating the program.

Related: OS#6708
Change-Id: Ie1e686b407532eee76a8692dfc632af73183e614
---
M tests/osmo_io/osmo_io_test.c
1 file changed, 23 insertions(+), 13 deletions(-)

Approvals:
  fixeria: Looks good to me, approved
  Jenkins Builder: Verified
  osmith: Looks good to me, but someone else must approve




diff --git a/tests/osmo_io/osmo_io_test.c b/tests/osmo_io/osmo_io_test.c
index 82de564..d072ebe 100644
--- a/tests/osmo_io/osmo_io_test.c
+++ b/tests/osmo_io/osmo_io_test.c
@@ -20,6 +20,7 @@

 #include <stdio.h>
 #include <stdint.h>
+#include <stdbool.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
@@ -45,18 +46,23 @@

 static void *ctx = NULL;

-static unsigned file_read_wr_compl_counter = 0;
+static unsigned file_bytes_read = 0;
+static unsigned file_bytes_write_compl = 0;
+static bool file_eof_read = false;
 static void file_read_cb(struct osmo_io_fd *iofd, int rc, struct msgb *msg)
 {
        printf("%s: read() msg with rc=%d\n", osmo_iofd_get_name(iofd), rc);
        if (rc < 0)
                printf("%s: error: %s\n", osmo_iofd_get_name(iofd), 
strerror(-rc));
-       if (msg)
+       if (msg) {
                printf("%s\n", osmo_hexdump(msgb_data(msg), msgb_length(msg)));
-       file_read_wr_compl_counter++;
-       talloc_free(msg);
-       if (rc == 0)
+               file_bytes_read += msgb_length(msg);
+               talloc_free(msg);
+       }
+       if (rc == 0) {
+               file_eof_read = true;
                osmo_iofd_close(iofd);
+       }
 }

 static void file_write_cb(struct osmo_io_fd *iofd, int rc, struct msgb *msg)
@@ -64,9 +70,10 @@
        printf("%s: write() returned rc=%d\n", osmo_iofd_get_name(iofd), rc);
        if (rc < 0)
                printf("%s: error: %s\n", osmo_iofd_get_name(iofd), 
strerror(-rc));
-       if (msg)
+       if (msg) {
                printf("%s\n", osmo_hexdump(msgb_data(msg), msgb_length(msg)));
-       file_read_wr_compl_counter++;
+               file_bytes_write_compl += msgb_length(msg);
+       }
 }

 static void test_file(void)
@@ -97,12 +104,13 @@
        osmo_iofd_write_msgb(iofd, msg);
        /* Allow enough cycles to handle the messages */
        for (int i = 0; i < 128; i++) {
-               OSMO_ASSERT(file_read_wr_compl_counter <= 1);
-               if (file_read_wr_compl_counter == 1)
+               OSMO_ASSERT(file_bytes_write_compl <= sizeof(TESTDATA));
+               if (file_bytes_write_compl == sizeof(TESTDATA))
                        break;
                osmo_select_main(1);
        }
-       OSMO_ASSERT(file_read_wr_compl_counter == 1);
+       fflush(stdout);
+       OSMO_ASSERT(file_bytes_write_compl == sizeof(TESTDATA));

        /* Now, re-configure iofd to only read from the fd. Adjust the 
read/write offset beforehand: */
        printf("Enable read\n");
@@ -113,12 +121,14 @@
        OSMO_ASSERT(rc == 0);
        /* Allow enough cycles to handle the message. We expect 2 reads, 2nd 
read will return 0. */
        for (int i = 0; i < 128; i++) {
-               OSMO_ASSERT(file_read_wr_compl_counter <= 3);
-               if (file_read_wr_compl_counter == 3)
+               OSMO_ASSERT(file_bytes_read <= sizeof(TESTDATA));
+               if (file_bytes_read == sizeof(TESTDATA) && file_eof_read)
                        break;
                osmo_select_main(1);
        }
-       OSMO_ASSERT(file_read_wr_compl_counter == 3);
+       fflush(stdout);
+       OSMO_ASSERT(file_bytes_read == sizeof(TESTDATA));
+       OSMO_ASSERT(file_eof_read);

        osmo_iofd_free(iofd);


--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/39411?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: Ie1e686b407532eee76a8692dfc632af73183e614
Gerrit-Change-Number: 39411
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <[email protected]>
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to