src/server/test/testutils.c

changeset 498
0d80f8a2b29f
parent 415
d938228c382e
child 513
9a49c245a49c
--- a/src/server/test/testutils.c	Wed May 31 19:39:10 2023 +0200
+++ b/src/server/test/testutils.c	Sun Jun 04 20:09:18 2023 +0200
@@ -28,6 +28,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <limits.h>
 
 #include <cx/string.h>
 #include <cx/utils.h>
@@ -121,13 +122,32 @@
 }
 
 
-static ssize_t test_io_write(IOStream *io, void *buf, size_t size) {
+static ssize_t test_io_write(IOStream *io, const void *buf, size_t size) {
     TestIOStream *st = (TestIOStream*)io;
+    if(size > st->max_write) size = st->max_write;
     return cxBufferWrite(buf, 1, size, st->buf);
 }
 
 static ssize_t test_io_writev(IOStream *io, struct iovec *iovec, int iovctn) {
-    return -1;
+    TestIOStream *st = (TestIOStream*)io;
+    ssize_t wv = 0;
+    for(int i=0;i<iovctn;i++) {
+        ssize_t available = st->max_write - wv;
+        size_t len = iovec[i].iov_len;
+        if(len > available) {
+            len = available;
+        }
+        
+        ssize_t w =  test_io_write(io, iovec[i].iov_base, len);
+        if(w <= 0) {
+            break;
+        }
+        wv += w;
+        if(wv >= st->max_write) {
+            break;
+        }
+    }
+    return wv;
 }
 
 static ssize_t test_io_read(IOStream *io, void *buf, size_t size) {
@@ -157,6 +177,7 @@
         flags = CX_BUFFER_AUTO_EXTEND|CX_BUFFER_FREE_CONTENTS;
     }
     stream->buf = malloc(sizeof(CxBuffer));
+    stream->max_write = INT_MAX;
     cxBufferInit(stream->buf, NULL, size, cxDefaultAllocator, flags);
     
     stream->io.st.write = test_io_write;

mercurial