test_network.c revision da770c2324ca473ff5cf479d2960b05a284493d4
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;
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs am_net_init();
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs rv = am_url_validate(0, openam_url, NULL, &httpcode, install_log);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs assert_int_equal(rv, AM_SUCCESS);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks 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;
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs am_net_init();
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs rv = am_agent_login(0, openam_url, NULL,
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs agent_user, agent_password, agent_realm, AM_TRUE, 0, NULL,
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs &agent_token, NULL, NULL, NULL, install_log);
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) {
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs rv = am_agent_logout(0, openam_url, agent_token,
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs NULL, NULL, install_log);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs fprintf(stderr, "LOGOUT STATUS: %s\n", am_strerror(rv));
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs assert_int_equal(rv, AM_SUCCESS);
da770c2324ca473ff5cf479d2960b05a284493d4Mareks Malnacs }
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}