void pipe_transform_stream() { setup(); sst_t *src = sst_new(); sst_t *tx = sst_new(); src->end_cb = onsrc_end; tx->write = upper_onwrite; tx->emit_cb = ondata; tx->end = onuppertx_end; sst_pipe(src, tx); src->write(src, sst_chunk_new("d0", NULL)); t_ok(emit_count == 1, "after one write, one chunk was emitted"); t_equal_str(emitted, "D0", "first emitted chunk is the one first emitted uppercased"); free(emitted); src->write(src, sst_chunk_new("d1", NULL)); t_ok(emit_count == 2, "after two writes, two chunks were emitted"); t_equal_str(emitted, "D1", "second emitted chunk is the one second emitted uppercased"); free(emitted); src->end(src); t_ok(end_src_called == 1, "end src is called exactly once after src stream was ended"); t_ok(end_uppertx_called == 1, "end upper tx is called exactly once after src stream was ended"); }
static int walker(struct key_value *kv, void *discard) { static struct kvvec *vec = (void *)1; static int step; walking_steps++; if (vec != discard) { walks++; vec = (struct kvvec *)discard; step = 0; } if (discard && vec) { t_ok(!kv_compare(&vec->kv[step], kv), "step %d on walk %d", step, walks); } step++; return 0; }
void pipe_multi_transform_stream() { setup(); sst_t *src = sst_new(); sst_t *uppertx = sst_new(); sst_t *reversetx = sst_new(); sst_t *dst = sst_new(); src->end_cb = onsrc_end; uppertx->write = upper_onwrite; uppertx->end_cb = onuppertx_end; reversetx->write = reverse_onwrite; reversetx->end_cb = onreversetx_end; dst->emit_cb = ondata; dst->end_cb = ondst_end; sst_pipe(src, uppertx, reversetx, dst); src->write(src, sst_chunk_new("d0", NULL)); t_ok(emit_count == 1, "after one write, one chunk was emitted by dst"); t_equal_str(emitted, "0D", "first emitted chunk is the one first emitted reversed and uppercased"); free(emitted); src->write(src, sst_chunk_new("d1", NULL)); t_ok(emit_count == 2, "after two writes, two chunks were emitted by dst"); t_equal_str(emitted, "1D", "second emitted chunk is the one second emitted reversed and uppercased"); free(emitted); src->end(src); t_ok(end_src_called == 1, "end src is called exactly once after src stream was ended"); t_ok(end_uppertx_called == 1, "end upper tx is called exactly once after src stream was ended"); t_ok(end_reversetx_called == 1, "end reverse tx is called exactly once after src stream was ended"); t_ok(end_dst_called == 1, "end dst is called exactly once after src stream was ended"); }