/* * Lasso library C unit tests * * 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 */ #include #include #include #include #include #include #include #include Suite* random_suite(); START_TEST(test01_provider_new) { LassoProvider *provider; char *dump; provider = lasso_provider_new(LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp1-la/metadata.xml", TESTSDATADIR "/sp1-la/public-key.pem", TESTSDATADIR "/ca1-la/certificate.pem"); dump = lasso_node_dump(LASSO_NODE(provider)); printf("dump:\n%s\n", dump); g_object_unref(provider); } END_TEST START_TEST(test02_provider_new_from_dump) { LassoProvider *provider1, *provider2; char *dump; provider1 = lasso_provider_new(LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp1-la/metadata.xml", TESTSDATADIR "/sp1-la/public-key.pem", TESTSDATADIR "/ca1-la/certificate.pem"); dump = lasso_node_dump(LASSO_NODE(provider1)); provider2 = lasso_provider_new_from_dump(dump); dump = lasso_node_dump(LASSO_NODE(provider2)); printf("dump:\n%s\n", dump); g_object_unref(provider1); g_object_unref(provider2); } END_TEST START_TEST(test01_server_new) { LassoServer *server; char *dump; server = lasso_server_new( TESTSDATADIR "/idp1-la/metadata.xml", TESTSDATADIR "/idp1-la/private-key-raw.pem", NULL, /* Secret key to unlock private key */ TESTSDATADIR "/idp1-la/certificate.pem"); dump = lasso_node_dump(LASSO_NODE(server)); printf("dump:%s\n", dump); g_object_unref(server); } END_TEST START_TEST(test02_server_add_provider) { LassoServer *server; char *dump; server = lasso_server_new( TESTSDATADIR "/idp1-la/metadata.xml", TESTSDATADIR "/idp1-la/private-key-raw.pem", NULL, /* Secret key to unlock private key */ TESTSDATADIR "/idp1-la/certificate.pem"); lasso_server_add_provider( server, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp1-la/metadata.xml", TESTSDATADIR "/sp1-la/public-key.pem", TESTSDATADIR "/ca1-la/certificate.pem"); dump = lasso_node_dump(LASSO_NODE(server)); g_object_unref(server); } END_TEST START_TEST(test03_server_new_from_dump) { LassoServer *server1, *server2; char *dump; server1 = lasso_server_new( TESTSDATADIR "/idp1-la/metadata.xml", TESTSDATADIR "/idp1-la/private-key-raw.pem", NULL, /* Secret key to unlock private key */ TESTSDATADIR "/idp1-la/certificate.pem"); lasso_server_add_provider( server1, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp1-la/metadata.xml", TESTSDATADIR "/sp1-la/public-key.pem", TESTSDATADIR "/ca1-la/certificate.pem"); dump = lasso_node_dump(LASSO_NODE(server1)); server2 = lasso_server_new_from_dump(dump); g_free(dump); dump = lasso_node_dump(LASSO_NODE(server2)); g_object_unref(server1); g_object_unref(server2); g_free(dump); } END_TEST START_TEST(test04_node_new_from_dump) { LassoNode *node; char *msg = \ "" \ "https://idp1/metadata" \ "_AF452F97C9E1590DDEB91D5BA6AA48ED"\ ""\ ""; node = lasso_node_new_from_dump(msg); fail_unless(node != NULL, "new_from_dump failed"); g_object_unref(node); } END_TEST START_TEST(test05_xsi_type) { /* check lib:AuthnContext element is not converted to * saml:AuthnContext xsi:type="lib:AuthnContextType" and * lib:AuthenticationStatement is converted to * saml:AuthenticationStatement * xsi:type="lib:AuthenticationStatementType" */ LassoSamlAssertion *assertion; LassoLibAuthenticationStatement *stmt; LassoSamlNameIdentifier *name_identifier; char *dump; name_identifier = lasso_saml_name_identifier_new(); assertion = LASSO_SAML_ASSERTION(lasso_lib_assertion_new_full("", "", "", "", "")); assertion->AuthenticationStatement = LASSO_SAML_AUTHENTICATION_STATEMENT( lasso_lib_authentication_statement_new_full( "toto", "toto", "toto", NULL, name_identifier)); g_object_unref(name_identifier); stmt = LASSO_LIB_AUTHENTICATION_STATEMENT(assertion->AuthenticationStatement); stmt->AuthnContext = LASSO_LIB_AUTHN_CONTEXT(lasso_lib_authn_context_new()); stmt->AuthnContext->AuthnContextClassRef = g_strdup("urn:toto"); dump = lasso_node_dump(LASSO_NODE(assertion)); fail_unless(strstr(dump, "xsi:type=\"lib:AuthnContextType\"") == NULL, "AuthnContext got a xsi:type"); g_free(dump); dump = lasso_node_dump(LASSO_NODE(assertion)); fail_unless(strstr(dump, "xsi:type=\"lib:AuthenticationStatementType\"") != NULL, "AuthenticationStatement didn't get a xsi:type"); g_free(dump); g_object_unref(assertion); } END_TEST START_TEST(test06_lib_statuscode) { /* check status code value in samlp:Response; it is a QName, if it * starts with lib:, that namespace must be defined. (was bug#416) */ LassoSamlpResponse *response = LASSO_SAMLP_RESPONSE(lasso_samlp_response_new()); response->Status->StatusCode->Value = g_strdup(LASSO_SAML_STATUS_CODE_SUCCESS); fail_unless(strstr(lasso_node_dump(LASSO_NODE(response)), "xmlns:lib=") == NULL, "liberty namespace should not be defined"); response->Status->StatusCode->Value = g_strdup(LASSO_SAML_STATUS_CODE_RESPONDER); response->Status->StatusCode->StatusCode = lasso_samlp_status_code_new(); response->Status->StatusCode->StatusCode->Value = g_strdup( LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL); fail_unless(strstr(lasso_node_dump(LASSO_NODE(response)), "xmlns:lib=") != NULL, "liberty namespace should be defined"); g_object_unref(response); } END_TEST Suite* random_suite() { Suite *s = suite_create("Random tests"); TCase *tc_providers = tcase_create("Provider stuffs"); TCase *tc_servers = tcase_create("Server stuffs"); TCase *tc_node = tcase_create("Node stuff"); suite_add_tcase(s, tc_providers); tcase_add_test(tc_providers, test01_provider_new); tcase_add_test(tc_providers, test02_provider_new_from_dump); suite_add_tcase(s, tc_servers); tcase_add_test(tc_servers, test01_server_new); tcase_add_test(tc_servers, test02_server_add_provider); tcase_add_test(tc_servers, test03_server_new_from_dump); suite_add_tcase(s, tc_node); tcase_add_test(tc_node, test04_node_new_from_dump); tcase_add_test(tc_node, test05_xsi_type); tcase_add_test(tc_node, test06_lib_statuscode); return s; }