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");
}
Exemple #2
0
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");
}