src/server/test/testutils.c

changeset 498
0d80f8a2b29f
parent 415
d938228c382e
child 513
9a49c245a49c
equal deleted inserted replaced
497:8827517054ec 498:0d80f8a2b29f
26 * POSSIBILITY OF SUCH DAMAGE. 26 * POSSIBILITY OF SUCH DAMAGE.
27 */ 27 */
28 28
29 #include <stdio.h> 29 #include <stdio.h>
30 #include <stdlib.h> 30 #include <stdlib.h>
31 #include <limits.h>
31 32
32 #include <cx/string.h> 33 #include <cx/string.h>
33 #include <cx/utils.h> 34 #include <cx/utils.h>
34 #include <cx/printf.h> 35 #include <cx/printf.h>
35 36
119 void testutil_destroy_session(Session *sn) { 120 void testutil_destroy_session(Session *sn) {
120 pool_destroy(sn->pool); 121 pool_destroy(sn->pool);
121 } 122 }
122 123
123 124
124 static ssize_t test_io_write(IOStream *io, void *buf, size_t size) { 125 static ssize_t test_io_write(IOStream *io, const void *buf, size_t size) {
125 TestIOStream *st = (TestIOStream*)io; 126 TestIOStream *st = (TestIOStream*)io;
127 if(size > st->max_write) size = st->max_write;
126 return cxBufferWrite(buf, 1, size, st->buf); 128 return cxBufferWrite(buf, 1, size, st->buf);
127 } 129 }
128 130
129 static ssize_t test_io_writev(IOStream *io, struct iovec *iovec, int iovctn) { 131 static ssize_t test_io_writev(IOStream *io, struct iovec *iovec, int iovctn) {
130 return -1; 132 TestIOStream *st = (TestIOStream*)io;
133 ssize_t wv = 0;
134 for(int i=0;i<iovctn;i++) {
135 ssize_t available = st->max_write - wv;
136 size_t len = iovec[i].iov_len;
137 if(len > available) {
138 len = available;
139 }
140
141 ssize_t w = test_io_write(io, iovec[i].iov_base, len);
142 if(w <= 0) {
143 break;
144 }
145 wv += w;
146 if(wv >= st->max_write) {
147 break;
148 }
149 }
150 return wv;
131 } 151 }
132 152
133 static ssize_t test_io_read(IOStream *io, void *buf, size_t size) { 153 static ssize_t test_io_read(IOStream *io, void *buf, size_t size) {
134 return -1; 154 return -1;
135 } 155 }
155 int flags = 0; 175 int flags = 0;
156 if(autoextend) { 176 if(autoextend) {
157 flags = CX_BUFFER_AUTO_EXTEND|CX_BUFFER_FREE_CONTENTS; 177 flags = CX_BUFFER_AUTO_EXTEND|CX_BUFFER_FREE_CONTENTS;
158 } 178 }
159 stream->buf = malloc(sizeof(CxBuffer)); 179 stream->buf = malloc(sizeof(CxBuffer));
180 stream->max_write = INT_MAX;
160 cxBufferInit(stream->buf, NULL, size, cxDefaultAllocator, flags); 181 cxBufferInit(stream->buf, NULL, size, cxDefaultAllocator, flags);
161 182
162 stream->io.st.write = test_io_write; 183 stream->io.st.write = test_io_write;
163 stream->io.st.writev = test_io_writev; 184 stream->io.st.writev = test_io_writev;
164 stream->io.st.close = test_io_close; 185 stream->io.st.close = test_io_close;

mercurial