diff options
author | Volker Lendecke <vl@samba.org> | 2019-02-07 17:48:34 +0100 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2019-03-05 07:39:27 +0000 |
commit | e2b7d3ff62745c1205a36b296e9371636950cc85 (patch) | |
tree | 8eb77abdce1dd0c0efc937ef3ebf170dfd51eca4 /source3 | |
parent | 069dd7189c10ba5ffdbe5f70f91a11ba4e55981f (diff) | |
download | samba-e2b7d3ff62745c1205a36b296e9371636950cc85.tar.gz |
torture3: Extend read3 for the "messaging target re-inits" failure
Do ping_pong a hundred times, re-initializing the msg_ctx every time.
https://bugzilla.samba.org/show_bug.cgi?id=13786
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
(cherry picked from commit 8d8f62c4b9dea381ce9f5833bc794553ae358173)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/torture/test_messaging_read.c | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/source3/torture/test_messaging_read.c b/source3/torture/test_messaging_read.c index d3e4079074b..555f084c040 100644 --- a/source3/torture/test_messaging_read.c +++ b/source3/torture/test_messaging_read.c @@ -250,14 +250,13 @@ fail: } struct msg_pingpong_state { - uint8_t dummy; + struct messaging_context *msg_ctx; }; static void msg_pingpong_done(struct tevent_req *subreq); static struct tevent_req *msg_pingpong_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, - struct messaging_context *msg_ctx, struct server_id dst) { struct tevent_req *req, *subreq; @@ -269,13 +268,23 @@ static struct tevent_req *msg_pingpong_send(TALLOC_CTX *mem_ctx, return NULL; } - status = messaging_send_buf(msg_ctx, dst, MSG_PING, NULL, 0); + if (!tevent_req_set_endtime(req, ev, timeval_current_ofs(10, 0))) { + return tevent_req_post(req, ev); + } + + state->msg_ctx = messaging_init(state, ev); + if (tevent_req_nomem(state->msg_ctx, req)) { + return tevent_req_post(req, ev); + } + + status = messaging_send_buf(state->msg_ctx, dst, MSG_PING, NULL, 0); if (!NT_STATUS_IS_OK(status)) { + DBG_DEBUG("messaging_send_buf failed: %s\n", nt_errstr(status)); tevent_req_error(req, map_errno_from_nt_status(status)); return tevent_req_post(req, ev); } - subreq = messaging_read_send(state, ev, msg_ctx, MSG_PONG); + subreq = messaging_read_send(state, ev, state->msg_ctx, MSG_PONG); if (tevent_req_nomem(subreq, req)) { return tevent_req_post(req, ev); } @@ -308,18 +317,17 @@ static int msg_pingpong_recv(struct tevent_req *req) return 0; } -static int msg_pingpong(struct messaging_context *msg_ctx, - struct server_id dst) +static int msg_pingpong(struct server_id dst) { struct tevent_context *ev; struct tevent_req *req; int ret = ENOMEM; - ev = tevent_context_init(msg_ctx); + ev = tevent_context_init(talloc_tos()); if (ev == NULL) { goto fail; } - req = msg_pingpong_send(ev, ev, msg_ctx, dst); + req = msg_pingpong_send(ev, ev, dst); if (req == NULL) { goto fail; } @@ -398,7 +406,7 @@ bool run_messaging_read3(int dummy) pid_t child; int ready_pipe[2]; int exit_pipe[2]; - int ret; + int i, ret; char c; struct server_id dst; ssize_t written; @@ -433,19 +441,15 @@ bool run_messaging_read3(int dummy) fprintf(stderr, "tevent_context_init failed\n"); goto fail; } - msg_ctx = messaging_init(ev, ev); - if (msg_ctx == NULL) { - fprintf(stderr, "messaging_init failed\n"); - goto fail; - } - dst = messaging_server_id(msg_ctx); - dst.pid = child; + dst = (struct server_id){ .pid = child, .vnn = NONCLUSTER_VNN, }; - ret = msg_pingpong(msg_ctx, dst); - if (ret != 0){ - fprintf(stderr, "msg_pingpong failed\n"); - goto fail; + for (i=0; i<100; i++) { + ret = msg_pingpong(dst); + if (ret != 0){ + fprintf(stderr, "msg_pingpong failed\n"); + goto fail; + } } printf("Parent: telling child to exit\n"); |