diff --git a/tests/Makefile.am b/tests/Makefile.am index 0962c0a4..cb46c7af 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -32,7 +32,7 @@ perfs_LDFLAGS = -rpath `cd $(top_builddir)/lasso/.libs/; pwd` endif -EXTRA_DIST = tests.c login_tests.c basic_tests.c random_tests.c metadata_tests.c integration +EXTRA_DIST = tests.c login_tests.c basic_tests.c random_tests.c metadata_tests.c integration tests.h SUBDIRS = data metadata diff --git a/tests/login_tests_saml2.c b/tests/login_tests_saml2.c index 87a812e3..2d1c2c7c 100644 --- a/tests/login_tests_saml2.c +++ b/tests/login_tests_saml2.c @@ -32,6 +32,7 @@ #include "../lasso/utils.h" #include "../lasso/backward_comp.h" +#include "./tests.h" static char* generateIdentityProviderContextDump() @@ -135,10 +136,13 @@ START_TEST(test02_saml2_serviceProviderLogin) char *serviceProviderContextDump = NULL, *identityProviderContextDump = NULL; LassoServer *spContext = NULL, *idpContext = NULL; LassoLogin *spLoginContext = NULL, *idpLoginContext = NULL; + LassoLogout *spLogoutContext = NULL, *idpLogoutContext = NULL; LassoSamlp2AuthnRequest *request = NULL; int rc; char *relayState = NULL; char *authnRequestUrl = NULL, *authnRequestQuery = NULL; + char *logoutRequestUrl = NULL, *logoutRequestQuery = NULL; + char *logoutResponseUrl = NULL, *logoutResponseQuery = NULL; char *responseUrl = NULL, *responseQuery = NULL; char *idpIdentityContextDump = NULL, *idpSessionContextDump = NULL; char *serviceProviderId = NULL, *soapRequestMsg = NULL, *soapResponseMsg = NULL; @@ -288,6 +292,43 @@ START_TEST(test02_saml2_serviceProviderLogin) rc = lasso_login_accept_sso(spLoginContext); fail_unless(rc != 0, "lasso_login_accept_sso must fail"); + /* logout test */ + /* generate a logout request */ + check_not_null(idpLogoutContext = lasso_logout_new(idpContext)); + check_good_rc(lasso_profile_set_session_from_dump(&idpLogoutContext->parent, idpSessionContextDump)); + check_good_rc(lasso_logout_init_request(idpLogoutContext, NULL, LASSO_HTTP_METHOD_REDIRECT)); + check_good_rc(lasso_logout_build_request_msg(idpLogoutContext)); + check_not_null(idpLogoutContext->parent.msg_url); + check_null(idpLogoutContext->parent.msg_body); + check_null(idpLogoutContext->parent.msg_relayState); + lasso_assign_string(logoutRequestUrl, idpLogoutContext->parent.msg_url); + lasso_release_gobject(idpLogoutContext); + logoutRequestQuery = strchr(logoutRequestUrl, '?'); + logoutRequestQuery += 1; /* keep only the query */ + check_not_null(logoutRequestQuery); + + /* process the logout request */ + check_not_null(spLogoutContext = lasso_logout_new(spContext)); + check_good_rc(rc = lasso_profile_set_session_from_dump(&spLogoutContext->parent, spSessionDump)); + check_good_rc(rc = lasso_logout_process_request_msg(spLogoutContext, logoutRequestQuery)); + check_good_rc(rc = lasso_logout_validate_request(spLogoutContext)); + check_good_rc(rc = lasso_logout_build_response_msg(spLogoutContext)); + check_not_null(spLogoutContext->parent.msg_url); + check_null(spLogoutContext->parent.msg_body); + check_null(spLogoutContext->parent.msg_relayState); + lasso_assign_string(logoutResponseUrl, spLogoutContext->parent.msg_url); + check_not_null(logoutResponseQuery = strchr(logoutResponseUrl, '?')); + logoutResponseQuery += 1; /* keep only the query */ + lasso_release_gobject(spLogoutContext); + + /* process the response */ + check_not_null(idpLogoutContext = lasso_logout_new(idpContext)); + check_good_rc(lasso_profile_set_session_from_dump(&idpLogoutContext->parent, idpSessionContextDump)); + check_good_rc(lasso_logout_process_response_msg(idpLogoutContext, logoutResponseQuery)); + lasso_release_gobject(idpLogoutContext); + lasso_release_string(logoutRequestUrl); + lasso_release_string(logoutResponseUrl); + g_free(idpLoginDump); g_free(serviceProviderId); g_free(serviceProviderContextDump); diff --git a/tests/tests.h b/tests/tests.h new file mode 100644 index 00000000..a4293ce0 --- /dev/null +++ b/tests/tests.h @@ -0,0 +1,43 @@ +/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. + * + * Copyright (C) 2004-2007 Entr'ouvert + * http://lasso.entrouvert.org + * + * Authors: See AUTHORS file in top-level directory. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __TESTS_H__ +#define __TESTS_H__ + +#define check_not_null(what) \ + fail_unless((what) != NULL, #what " returned NULL"); + +#define check_null(what) \ + fail_unless((what) == NULL, #what " returned NULL"); + + +#define check_good_rc(what) \ +{ int __rc = (what); \ + fail_unless(__rc == 0, #what " failed, rc = %s", lasso_strerror(__rc)); \ +} + +#define check_bad_rc(what, how) \ +{ int __rc = (what); \ + fail_unless(__rc == how, #what " is not %s, rc = %s", lasso_strerror(how), lasso_strerror(__rc)); \ +} + +#endif /*__TESTS_H__ */