Skip to content
Snippets Groups Projects
Commit 719b834a authored by Dmitry Simonenko's avatar Dmitry Simonenko
Browse files

connector/c: tnt_call no args fix, test added

parent 940661bd
No related branches found
No related tags found
No related merge requests found
......@@ -65,6 +65,8 @@ tnt_call(struct tnt_stream *s, uint32_t flags, char *proc,
hdr.type = TNT_OP_CALL;
hdr.len = sizeof(struct tnt_header_call) +
proc_enc_size + proc_len + args->size;
if (args->size == 0)
hdr.len += 4;
hdr.reqid = s->reqid;
/* filling call header */
struct tnt_header_call hdr_call;
......@@ -79,7 +81,13 @@ tnt_call(struct tnt_stream *s, uint32_t flags, char *proc,
v[2].iov_len = proc_enc_size;
v[3].iov_base = proc;
v[3].iov_len = proc_len;
v[4].iov_base = args->data;
v[4].iov_len = args->size;
if (args->size == 0) {
uint32_t argc = 0;
v[4].iov_base = &argc;
v[4].iov_len = 4;
} else {
v[4].iov_base = args->data;
v[4].iov_len = args->size;
}
return s->writev(s, v, 5);
}
......@@ -251,10 +251,10 @@ tnt_io_send_raw(struct tnt_stream_net *s, char *buf, size_t size, int all)
do {
ssize_t r;
if (s->sbuf.tx) {
r = s->sbuf.tx(s->sbuf.buf, buf, size);
r = s->sbuf.tx(s->sbuf.buf, buf + off, size - off);
} else {
do {
r = send(s->fd, buf, size, 0);
r = send(s->fd, buf + off, size - off, 0);
} while (r == -1 && (errno == EINTR));
}
if (r <= 0) {
......@@ -368,10 +368,10 @@ tnt_io_recv_raw(struct tnt_stream_net *s, char *buf, size_t size, int all)
do {
ssize_t r;
if (s->rbuf.tx) {
r = s->rbuf.tx(s->rbuf.buf, buf, size);
r = s->rbuf.tx(s->rbuf.buf, buf + off, size - off);
} else {
do {
r = recv(s->fd, buf, size, 0);
r = recv(s->fd, buf + off, size - off, 0);
} while (r == -1 && (errno == EINTR));
}
if (r <= 0) {
......
......@@ -13,6 +13,7 @@
> select [OK]
> delete [OK]
> call [OK]
> call (no args) [OK]
> reply [OK]
> lex ws [OK]
> lex integer [OK]
......
......@@ -425,6 +425,23 @@ static void tt_tnt_net_call(struct tt_test *test) {
tnt_iter_free(&i);
}
/* call (no args) */
static void tt_tnt_net_call_na(struct tt_test *test) {
struct tnt_tuple args;
tnt_tuple_init(&args);
TT_ASSERT(tnt_call(&net, 0, "box.insert", &args) > 0);
TT_ASSERT(tnt_flush(&net) > 0);
tnt_tuple_free(&args);
struct tnt_iter i;
tnt_iter_stream(&i, &net);
while (tnt_next(&i)) {
struct tnt_reply *r = TNT_ISTREAM_REPLY(&i);
TT_ASSERT(r->code != 0);
TT_ASSERT(strcmp(r->error, "Illegal parameters, tuple cardinality is 0") == 0);
}
tnt_iter_free(&i);
}
/* reply */
static void tt_tnt_net_reply(struct tt_test *test) {
struct tnt_tuple kv1, kv2;
......@@ -866,6 +883,7 @@ main(int argc, char * argv[])
tt_test(&t, "select", tt_tnt_net_select);
tt_test(&t, "delete", tt_tnt_net_delete);
tt_test(&t, "call", tt_tnt_net_call);
tt_test(&t, "call (no args)", tt_tnt_net_call_na);
tt_test(&t, "reply", tt_tnt_net_reply);
/* sql lexer */
tt_test(&t, "lex ws", tt_tnt_lex_ws);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment