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; |