a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James/**
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James * The contents of this file are subject to the terms of the Common Development and
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James * Distribution License (the License). You may not use this file except in compliance with the
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James * License.
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James *
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James * specific language governing permission and limitations under the License.
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James *
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James * When distributing Covered Software, include this CDDL Header Notice in each file and include
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James * Header, with the fields enclosed by brackets [] replaced by your own identifying
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James * information: "Portions copyright [year] [name of copyright owner]".
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James *
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James * Copyright 2015 ForgeRock AS.
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James */
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James#include <stdio.h>
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James#include <string.h>
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James#include <stdlib.h>
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James#include <stdint.h>
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James#include <setjmp.h>
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James#include "am.h"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James#include "platform.h"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James#include "utility.h"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James#include "log.h"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James#include "cmocka.h"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas Jamesvoid test_config_url_maps(void **state) {
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James int i;
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James am_config_t * conf;
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James char *value;
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James char buffer [] = "config-tests-XXXXXXX";
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James char *path = mktemp(buffer);
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James char *configs =
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "com.sun.identity.agents.config.repository.location = local\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "com.sun.identity.agents.config.notenforced.regex.enable = false\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "com.sun.identity.agents.config.notenforced.url[0] = http://a.b.c/path\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "com.sun.identity.agents.config.notenforced.url[1] = https://a.b.c:1234/path\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "org.forgerock.agents.config.notenforced.ext.regex.enable = false\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "org.forgerock.agents.config.notenforced.ipurl[0] = http://a.b.c/path\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "org.forgerock.agents.config.notenforced.ipurl[1] = https://a.b.c/path\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "org.forgerock.agents.config.logout.regex.enable = false\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "com.sun.identity.agents.config.agent.logout.url[0]= http://a.b.c/path\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "com.sun.identity.agents.config.agent.logout.url[1]= https://a.b.c/path\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "org.forgerock.agents.config.json.url[0] = http://a.b.c/path\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "org.forgerock.agents.config.json.url[1] = https://a.b.c/path\n"
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James "";
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James write_file(path, configs, strlen(configs));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James conf = am_get_config_file(1, path);
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_int_equal(!conf->not_enforced_regex_enable, AM_TRUE);
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_int_equal(conf->not_enforced_map_sz, 2);
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal(conf->not_enforced_map[0].value, "http://a.b.c:80/path");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal(conf->not_enforced_map[1].value, "https://a.b.c:1234/path");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_int_equal(!conf->not_enforced_ext_regex_enable, AM_TRUE);
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_int_equal(conf->not_enforced_ext_map_sz, 2);
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal(conf->not_enforced_ext_map[0].value, "http://a.b.c:80/path");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal(conf->not_enforced_ext_map[1].value, "https://a.b.c:443/path");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_int_equal(!conf->logout_regex_enable, AM_TRUE);
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_int_equal(conf->logout_map_sz, 2);
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal(conf->logout_map[0].value, "http://a.b.c:80/path");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal(conf->logout_map[1].value, "https://a.b.c:443/path");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_int_equal(conf->json_url_map_sz, 2);
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal(conf->json_url_map[0].value, "http://a.b.c:80/path");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal(conf->json_url_map[1].value, "https://a.b.c:443/path");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James unlink(path);
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James}
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacsvoid test_config_map_value_reorder(void **state) {
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs am_config_t conf;
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs#define MAP_SIZE 3
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs am_config_map_t *map = calloc(MAP_SIZE, sizeof (am_config_map_t));
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs assert_non_null(map);
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs memset(&conf, 0, sizeof (am_config_t));
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs conf.login_url = map;
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs conf.login_url_sz = MAP_SIZE;
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs map[0].name = strdup("2");
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs map[0].value = strdup("test 2");
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs map[1].name = strdup("10");
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs map[1].value = strdup("test 10");
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs map[2].name = strdup("0");
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs map[2].value = strdup("test 0");
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs update_agent_configuration_reorder_map_values(&conf);
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs assert_string_equal(map[2].name, "10");
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs assert_string_equal(map[2].value, "test 10");
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs free(map[0].name);
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs free(map[0].value);
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs free(map[1].name);
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs free(map[1].value);
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs free(map[2].name);
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs free(map[2].value);
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs free(map);
66cd56d62643989151785ea129c09cf50d9d3ad8Mareks Malnacs}