diff options
Diffstat (limited to 'source4/torture/nbt/query.c')
-rw-r--r-- | source4/torture/nbt/query.c | 61 |
1 files changed, 22 insertions, 39 deletions
diff --git a/source4/torture/nbt/query.c b/source4/torture/nbt/query.c index 10e8848b46..33cf2d4335 100644 --- a/source4/torture/nbt/query.c +++ b/source4/torture/nbt/query.c @@ -24,6 +24,7 @@ #include "lib/events/events.h" #include "libcli/resolve/resolve.h" #include "torture/torture.h" +#include "torture/nbt/proto.h" struct result_struct { int num_pass; @@ -44,39 +45,40 @@ static void increment_handler(struct nbt_name_request *req) /* benchmark simple name queries */ -static BOOL bench_namequery(TALLOC_CTX *mem_ctx, struct nbt_name *name, const char *address) +static bool bench_namequery(struct torture_context *tctx) { - struct nbt_name_socket *nbtsock = nbt_name_socket_init(mem_ctx, NULL); + struct nbt_name_socket *nbtsock = nbt_name_socket_init(tctx, NULL); int num_sent=0; struct result_struct *result; struct nbt_name_query io; struct timeval tv = timeval_current(); - BOOL ret = True; - int timelimit = lp_parm_int(-1, "torture", "timelimit", 10); + int timelimit = torture_setting_int(tctx, "timelimit", 10); - io.in.name = *name; + const char *address; + struct nbt_name name; + + if (!torture_nbt_get_name(tctx, &name, &address)) + return false; + + io.in.name = name; io.in.dest_addr = address; io.in.broadcast = False; io.in.wins_lookup = False; io.in.timeout = 1; - result = talloc_zero(mem_ctx, struct result_struct); + result = talloc_zero(tctx, struct result_struct); - printf("Running for %d seconds\n", timelimit); + torture_comment(tctx, "Running for %d seconds\n", timelimit); while (timeval_elapsed(&tv) < timelimit) { while (num_sent - (result->num_pass+result->num_fail) < 10) { struct nbt_name_request *req; req = nbt_name_query_send(nbtsock, &io); - if (req == NULL) { - printf("Failed to setup request!\n"); - ret = False; - goto failed; - } + torture_assert(tctx, req != NULL, "Failed to setup request!"); req->async.fn = increment_handler; req->async.private = result; num_sent++; if (num_sent % 1000 == 0) { - printf("%.1f queries per second (%d failures) \r", + torture_comment(tctx, "%.1f queries per second (%d failures) \r", result->num_pass / timeval_elapsed(&tv), result->num_fail); } @@ -89,41 +91,22 @@ static BOOL bench_namequery(TALLOC_CTX *mem_ctx, struct nbt_name *name, const ch event_loop_once(nbtsock->event_ctx); } - printf("%.1f queries per second (%d failures) \n", + torture_comment(tctx, "%.1f queries per second (%d failures) \n", result->num_pass / timeval_elapsed(&tv), result->num_fail); -failed: - talloc_free(nbtsock); - return ret; + return true; } /* benchmark how fast a server can respond to name queries */ -BOOL torture_bench_nbt(struct torture_context *torture) +struct torture_suite *torture_bench_nbt(void) { - const char *address; - struct nbt_name name; - TALLOC_CTX *mem_ctx = talloc_new(NULL); - NTSTATUS status; - BOOL ret = True; - - make_nbt_name_server(&name, lp_parm_string(-1, "torture", "host")); - - /* do an initial name resolution to find its IP */ - status = resolve_name(&name, mem_ctx, &address, event_context_find(mem_ctx)); - if (!NT_STATUS_IS_OK(status)) { - printf("Failed to resolve %s - %s\n", - name.name, nt_errstr(status)); - talloc_free(mem_ctx); - return False; - } - - ret &= bench_namequery(mem_ctx, &name, address); - - talloc_free(mem_ctx); + struct torture_suite *suite = torture_suite_create(talloc_autofree_context(), + "BENCH"); + torture_suite_add_simple_test(suite, "namequery", bench_namequery); - return ret; + return suite; } |