da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs/**
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs * The contents of this file are subject to the terms of the Common Development and
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs * Distribution License (the License). You may not use this file except in compliance with the
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs * License.
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs *
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs * specific language governing permission and limitations under the License.
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs *
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs * When distributing Covered Software, include this CDDL Header Notice in each file and include
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs * Header, with the fields enclosed by brackets [] replaced by your own identifying
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs * information: "Portions copyright [year] [name of copyright owner]".
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs *
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs * Copyright 2015 ForgeRock AS.
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs */
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#include <stdio.h>
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#include <string.h>
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#include <setjmp.h>
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#include "platform.h"
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#include "am.h"
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#include "utility.h"
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#include "net_client.h"
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#include "thread.h"
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#include "cmocka.h"
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacsvoid am_net_init_ssl_reset();
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacsstatic void install_log(const char *format, ...) {
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs char ts[64];
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs struct tm now;
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#ifdef _WIN32
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs FILE *f = fopen("c:\\windows\\temp\\test.log", "a+");
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs time_t tv;
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs time(&tv);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs localtime_s(&now, &tv);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#else
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs FILE *f = fopen("/tmp/test.log", "a+");
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs struct timeval tv;
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs gettimeofday(&tv, NULL);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs localtime_r(&tv.tv_sec, &now);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs#endif
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs strftime(ts, sizeof (ts) - 1, "%Y-%m-%d %H:%M:%S", &now);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs if (f != NULL) {
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs va_list args;
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs fprintf(f, "%s ", ts);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs va_start(args, format);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs vfprintf(f, format, args);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs va_end(args);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs fprintf(f, "\n");
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs fclose(f);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs }
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs}
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacsvoid test_single_request(void **state) {
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs int rv;
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs const char *openam_url = "https://am.example.com:443/am";
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs int httpcode = 0;
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs am_net_options_t net_options;
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs memset(&net_options, 0, sizeof (am_net_options_t));
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs net_options.keepalive = net_options.local = net_options.cert_trust = AM_TRUE;
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs net_options.log = install_log;
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs am_net_init();
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs rv = am_url_validate(0, openam_url, &net_options, &httpcode);
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs am_net_options_delete(&net_options);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs assert_int_equal(rv, AM_SUCCESS);
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs am_net_shutdown();
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs am_net_init_ssl_reset();
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs fprintf(stderr, "STATUS: %s\n", am_strerror(rv));
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs fprintf(stderr, "HTTP STATUS: %d\n", httpcode);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs}
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacsvoid test_multiple_requests(void **state) {
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs int rv;
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs const char *openam_url = "https://am.example.com:443/am";
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs const char *agent_user = "agent";
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs const char *agent_password = "password";
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs const char *agent_realm = "/";
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs char *agent_token = NULL;
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs am_net_options_t net_options;
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs memset(&net_options, 0, sizeof (am_net_options_t));
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs net_options.keepalive = net_options.local = net_options.cert_trust = AM_TRUE;
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs net_options.log = install_log;
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs am_net_init();
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs rv = am_agent_login(0, openam_url, agent_user, agent_password, agent_realm, &net_options,
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs &agent_token, NULL, NULL, NULL);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs fprintf(stderr, "LOGIN STATUS: %s\n", am_strerror(rv));
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs assert_int_equal(rv, AM_SUCCESS);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs if (agent_token != NULL) {
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs rv = am_agent_logout(0, openam_url, agent_token, &net_options);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs fprintf(stderr, "LOGOUT STATUS: %s\n", am_strerror(rv));
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs assert_int_equal(rv, AM_SUCCESS);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs }
219d7da202ac0880b886d6d5948844dd40f5a1d5Mareks Malnacs am_net_options_delete(&net_options);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs am_net_shutdown();
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs am_net_init_ssl_reset();
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs fprintf(stderr, "TOKEN: %s\n", LOGEMPTY(agent_token));
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs am_free(agent_token);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs}