diff options
| author | Jakub Hrozek <jhrozek@redhat.com> | 2015-10-11 15:34:44 +0200 |
|---|---|---|
| committer | Jakub Hrozek <jhrozek@redhat.com> | 2015-10-23 10:21:13 +0200 |
| commit | 10c07e188323a2f9824b5e34379f3b1a9b37759e (patch) | |
| tree | 8d8951b12cf5bff8d089cc76d0a2f8bd19a68359 /src/tests | |
| parent | 4a4af8e1b6a9bab7c7a34d86055a400376e3829e (diff) | |
| download | sssd-10c07e188323a2f9824b5e34379f3b1a9b37759e.tar.gz sssd-10c07e188323a2f9824b5e34379f3b1a9b37759e.tar.xz sssd-10c07e188323a2f9824b5e34379f3b1a9b37759e.zip | |
FO: Use refcount to keep track of servers returned to callers
Resolves:
https://fedorahosted.org/sssd/ticket/2829
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Diffstat (limited to 'src/tests')
| -rw-r--r-- | src/tests/cmocka/test_fo_srv.c | 26 | ||||
| -rw-r--r-- | src/tests/fail_over-tests.c | 2 |
2 files changed, 17 insertions, 11 deletions
diff --git a/src/tests/cmocka/test_fo_srv.c b/src/tests/cmocka/test_fo_srv.c index 109f664c..67f86fb1 100644 --- a/src/tests/cmocka/test_fo_srv.c +++ b/src/tests/cmocka/test_fo_srv.c @@ -201,6 +201,8 @@ struct test_fo_ctx { struct fo_service *fo_svc; struct sss_test_ctx *ctx; int ttl; + + struct fo_server *srv; }; int test_fo_srv_data_cmp(void *ud1, void *ud2) @@ -401,7 +403,7 @@ static void test_fo_srv_done1(struct tevent_req *req) struct fo_server *srv; errno_t ret; - ret = fo_resolve_service_recv(req, &srv); + ret = fo_resolve_service_recv(req, req, &srv); talloc_zfree(req); assert_int_equal(ret, ERR_OK); @@ -426,7 +428,7 @@ static void test_fo_srv_done2(struct tevent_req *req) struct fo_server *srv; errno_t ret; - ret = fo_resolve_service_recv(req, &srv); + ret = fo_resolve_service_recv(req, req, &srv); talloc_zfree(req); assert_int_equal(ret, ERR_OK); @@ -450,7 +452,7 @@ static void test_fo_srv_done3(struct tevent_req *req) struct fo_server *srv; errno_t ret; - ret = fo_resolve_service_recv(req, &srv); + ret = fo_resolve_service_recv(req, req, &srv); talloc_zfree(req); assert_int_equal(ret, ERR_OK); @@ -474,7 +476,7 @@ static void test_fo_srv_done4(struct tevent_req *req) struct fo_server *srv; errno_t ret; - ret = fo_resolve_service_recv(req, &srv); + ret = fo_resolve_service_recv(req, req, &srv); talloc_zfree(req); /* No servers are left..*/ assert_int_equal(ret, ENOENT); @@ -499,7 +501,7 @@ static void test_fo_srv_done5(struct tevent_req *req) struct fo_server *srv; errno_t ret; - ret = fo_resolve_service_recv(req, &srv); + ret = fo_resolve_service_recv(req, req, &srv); talloc_zfree(req); assert_int_equal(ret, ERR_OK); @@ -558,20 +560,19 @@ static void test_fo_srv_before(struct tevent_req *req) { struct test_fo_ctx *test_ctx = \ tevent_req_callback_data(req, struct test_fo_ctx); - struct fo_server *srv; struct ares_srv_reply *s1; struct ares_srv_reply *s2; char *dns_domain; errno_t ret; - ret = fo_resolve_service_recv(req, &srv); + ret = fo_resolve_service_recv(req, test_ctx, &test_ctx->srv); talloc_zfree(req); assert_int_equal(ret, ERR_OK); DEBUG(SSSDBG_TRACE_FUNC, "Before TTL change\n"); - check_server(test_ctx, srv, 389, "ldap1.sssd.com"); - fo_set_server_status(srv, SERVER_WORKING); + check_server(test_ctx, test_ctx->srv, 389, "ldap1.sssd.com"); + fo_set_server_status(test_ctx->srv, SERVER_WORKING); /* Simulate changing the DNS environment. Change the host names */ s1 = mock_ares_reply(test_ctx, "ldap2.sssd.com", 100, 2, 389); @@ -602,10 +603,15 @@ static void test_fo_srv_after(struct tevent_req *req) struct fo_server *srv; errno_t ret; - ret = fo_resolve_service_recv(req, &srv); + ret = fo_resolve_service_recv(req, req, &srv); talloc_zfree(req); assert_int_equal(ret, ERR_OK); + /* Try accessing server from a previous iteration. The + * server should be collapsed, but at least we shouldn't crash + */ + fo_set_server_status(test_ctx->srv, SERVER_WORKING); + /* Must be a different server now */ check_server(test_ctx, srv, 389, "ldap3.sssd.com"); diff --git a/src/tests/fail_over-tests.c b/src/tests/fail_over-tests.c index b21ead38..7c296d11 100644 --- a/src/tests/fail_over-tests.c +++ b/src/tests/fail_over-tests.c @@ -154,7 +154,7 @@ test_resolve_service_callback(struct tevent_req *req) task->test_ctx->tasks--; - recv_status = fo_resolve_service_recv(req, &server); + recv_status = fo_resolve_service_recv(req, req, &server); talloc_free(req); fail_if(recv_status != task->recv, "%s: Expected return of %d, got %d", task->location, task->recv, recv_status); |
