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_pattern_normalisation(void **state) {
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James // simple cases
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal( am_normalize_pattern("http://a.c.b/first/second?a=b"), "http://a.c.b:80/first/second?a=b");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal( am_normalize_pattern("https://a.c.b/first/second"), "https://a.c.b:443/first/second");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal( am_normalize_pattern("https://*.com/path"), "https://*.com:443/path");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal( am_normalize_pattern("https://*.com/?a=b"), "https://*.com:443/?a=b");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James // without path
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal( am_normalize_pattern("https://a.b.com"), "https://a.b.com:443");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal( am_normalize_pattern("https://*.com"), "https://*.com:443");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James // without path except params
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal( am_normalize_pattern("https://a.b.c?a=b"), "https://a.b.c:443?a=b");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal( am_normalize_pattern("http://a.b.c?/*"), "http://a.b.c:80?/*");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal( am_normalize_pattern("https://a.b.c?*"), "https://a.b.c:443?*");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_string_equal( am_normalize_pattern("http://a.*.c?*"), "http://a.*.c:80?*");
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James // no path, but wildcard
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_null( am_normalize_pattern("https://*"));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_null( am_normalize_pattern("https://*?a=b"));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_null( am_normalize_pattern("https://a.b.*?a=b"));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James // wildcard disables normalisation
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_null( am_normalize_pattern("http://a.c.b*/first/second"));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_null( am_normalize_pattern("https://*/first/second"));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_null( am_normalize_pattern("http://a.c.b*"));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James // protocol not present or unrecognisable
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_null( am_normalize_pattern("htt://substr.protocol.com/first/second"));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_null( am_normalize_pattern("httpn://superstr.protocol.com/first/second"));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_null( am_normalize_pattern("httpsn://superstr.protocol.com/first/second"));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_null( am_normalize_pattern("no.protocol.com"));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James assert_null( am_normalize_pattern("://empty.protocol.com"));
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James}
a6ec351ba3a72078f9d238c2d490e25a9e0990dbNicholas James