blob: 991c9b3713760b63c6978eb683f4fa30170215ab [file] [log] [blame]
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <string>
#include "unit/TestBase.h"
#include "unit/Catch.h"
#include "http/BaseHTTPClient.h"
TEST_CASE("The URL class can parse various URL strings", "[URL][parsing]") {
const auto canParseURL = [](const std::string& url_string) { return minifi::http::URL{url_string}.toString() == url_string; };
REQUIRE(canParseURL("http://nifi.io"));
REQUIRE(canParseURL("http://nifi.io:777"));
REQUIRE(canParseURL("http://nifi.io/nifi"));
REQUIRE(canParseURL("https://nifi.somewhere.far.away:321/nifi"));
REQUIRE(canParseURL("http://nifi.io?what_is_love"));
REQUIRE(canParseURL("http://nifi.io:123?what_is_love"));
REQUIRE(canParseURL("https://nifi.io/nifi_path?what_is_love"));
REQUIRE(canParseURL("http://nifi.io:4321/nifi_path?what_is_love"));
REQUIRE(canParseURL("http://nifi.io#anchors_aweigh"));
REQUIRE(canParseURL("https://nifi.io:123#anchors_aweigh"));
REQUIRE(canParseURL("http://nifi.io/nifi_path#anchors_aweigh"));
REQUIRE(canParseURL("https://nifi.io:4321/nifi_path#anchors_aweigh"));
}
TEST_CASE("The URL class will fail to parse invalid URL strings", "[URL][parsing]") {
const auto failToParseURL = [](const std::string& url_string) { return minifi::http::URL{url_string}.toString() == "INVALID"; };
REQUIRE(failToParseURL("mailto:santa.claus@north.pole.org"));
REQUIRE(failToParseURL("http:nifi.io"));
REQUIRE(failToParseURL("http://"));
REQUIRE(failToParseURL("http://:123"));
REQUIRE(failToParseURL("http://nifi.io:0x50"));
REQUIRE(failToParseURL("http://nifi.io:port_number"));
}
TEST_CASE("The URL class can extract the port from URL strings", "[URL][port]") {
REQUIRE(minifi::http::URL{"http://nifi.io"}.port() == 80);
REQUIRE(minifi::http::URL{"http://nifi.io/nifi"}.port() == 80);
REQUIRE(minifi::http::URL{"https://nifi.io"}.port() == 443);
REQUIRE(minifi::http::URL{"https://nifi.io/nifi"}.port() == 443);
REQUIRE(minifi::http::URL{"http://nifi.io:123"}.port() == 123);
REQUIRE(minifi::http::URL{"http://nifi.io:123/nifi"}.port() == 123);
REQUIRE(minifi::http::URL{"https://nifi.io:456"}.port() == 456);
REQUIRE(minifi::http::URL{"https://nifi.io:456/nifi"}.port() == 456);
}
TEST_CASE("The URL class can extract the host", "[URL][host]") {
REQUIRE(minifi::http::URL{"http://nifi.io"}.host() == "nifi.io");
REQUIRE(minifi::http::URL{"http://nifi.io:777"}.host() == "nifi.io");
REQUIRE(minifi::http::URL{"http://nifi.io/nifi"}.host() == "nifi.io");
REQUIRE(minifi::http::URL{"https://nifi.somewhere.far.away:321/nifi"}.host() == "nifi.somewhere.far.away");
REQUIRE(minifi::http::URL{"http://nifi.io?what_is_love"}.host() == "nifi.io");
REQUIRE(minifi::http::URL{"http://nifi.io:123?what_is_love"}.host() == "nifi.io");
REQUIRE(minifi::http::URL{"https://nifi.io/nifi_path?what_is_love"}.host() == "nifi.io");
REQUIRE(minifi::http::URL{"http://nifi.io:4321/nifi_path?what_is_love"}.host() == "nifi.io");
REQUIRE(minifi::http::URL{"http://nifi.io#anchors_aweigh"}.host() == "nifi.io");
REQUIRE(minifi::http::URL{"https://nifi.io:123#anchors_aweigh"}.host() == "nifi.io");
REQUIRE(minifi::http::URL{"http://nifi.io/nifi_path#anchors_aweigh"}.host() == "nifi.io");
REQUIRE(minifi::http::URL{"https://nifi.io:4321/nifi_path#anchors_aweigh"}.host() == "nifi.io");
}
TEST_CASE("The URL class can extract the host and port", "[URL][hostPort]") {
REQUIRE(minifi::http::URL{"http://nifi.io"}.hostPort() == "http://nifi.io");
REQUIRE(minifi::http::URL{"http://nifi.io:777"}.hostPort() == "http://nifi.io:777");
REQUIRE(minifi::http::URL{"http://nifi.io/nifi"}.hostPort() == "http://nifi.io");
REQUIRE(minifi::http::URL{"https://nifi.somewhere.far.away:321/nifi"}.hostPort() == "https://nifi.somewhere.far.away:321");
REQUIRE(minifi::http::URL{"http://nifi.io?what_is_love"}.hostPort() == "http://nifi.io");
REQUIRE(minifi::http::URL{"http://nifi.io:123?what_is_love"}.hostPort() == "http://nifi.io:123");
REQUIRE(minifi::http::URL{"https://nifi.io/nifi_path?what_is_love"}.hostPort() == "https://nifi.io");
REQUIRE(minifi::http::URL{"http://nifi.io:4321/nifi_path?what_is_love"}.hostPort() == "http://nifi.io:4321");
REQUIRE(minifi::http::URL{"http://nifi.io#anchors_aweigh"}.hostPort() == "http://nifi.io");
REQUIRE(minifi::http::URL{"https://nifi.io:123#anchors_aweigh"}.hostPort() == "https://nifi.io:123");
REQUIRE(minifi::http::URL{"http://nifi.io/nifi_path#anchors_aweigh"}.hostPort() == "http://nifi.io");
REQUIRE(minifi::http::URL{"https://nifi.io:4321/nifi_path#anchors_aweigh"}.hostPort() == "https://nifi.io:4321");
}