Pārlūkot izejas kodu

Handle test case where fgets() sees EOF on the last read

On some platforms, with non-blocking IO, on EOF you first
get EAGAIN, and then on the second read you get zero bytes
and EOF is set. However on others, the EOF flag is set as
soon as the last byte is read. This patch fixes the test
case in the latter scenario.
Steven Murdoch 14 gadi atpakaļ
vecāks
revīzija
f5df96c94f
1 mainītis faili ar 7 papildinājumiem un 3 dzēšanām
  1. 7 3
      src/test/test_util.c

+ 7 - 3
src/test/test_util.c

@@ -1541,14 +1541,18 @@ test_util_spawn_background_partial_read(void *ptr)
   pos = tor_read_all_handle(process_handle.stdout_pipe, stdout_buf,
                             sizeof(stdout_buf) - 1,
                             &process_handle);
+  tt_int_op(pos, ==, 0);
 #else
-  if (!eof)
+  if (!eof) {
+    /* We should have got all the data, but maybe not the EOF flag */
     pos = tor_read_all_handle(process_handle.stdout_handle, stdout_buf,
                               sizeof(stdout_buf) - 1,
                               &process_handle, &eof);
-  tt_assert(eof)
+    tt_int_op(pos, ==, 0);
+    tt_assert(eof);
+  }
+  /* Otherwise, we got the EOF on the last read */
 #endif
-  tt_int_op(pos, ==, 0);
 
   /* Check it terminated correctly */
   retval = tor_get_exit_code(process_handle, 1, &exit_code);