1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors 3 4 #include "http_response.hpp" 5 #include "update_service.hpp" 6 7 #include <boost/url/url.hpp> 8 9 #include <optional> 10 11 #include <gtest/gtest.h> 12 13 namespace redfish 14 { 15 namespace 16 { 17 18 TEST(UpdateService, ParseHTTSPPostitive) 19 { 20 crow::Response res; 21 { 22 // No protocol, schema on url 23 std::optional<boost::urls::url> ret = 24 parseSimpleUpdateUrl("https://1.1.1.1/path", std::nullopt, res); 25 ASSERT_TRUE(ret); 26 if (!ret) 27 { 28 return; 29 } 30 EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1"); 31 EXPECT_EQ(ret->encoded_path(), "/path"); 32 EXPECT_EQ(ret->scheme(), "https"); 33 } 34 { 35 // Protocol, no schema on url 36 std::optional<boost::urls::url> ret = 37 parseSimpleUpdateUrl("1.1.1.1/path", "HTTPS", res); 38 ASSERT_TRUE(ret); 39 if (!ret) 40 { 41 return; 42 } 43 EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1"); 44 EXPECT_EQ(ret->encoded_path(), "/path"); 45 EXPECT_EQ(ret->scheme(), "https"); 46 } 47 { 48 // Both protocol and schema on url 49 std::optional<boost::urls::url> ret = 50 parseSimpleUpdateUrl("https://1.1.1.1/path", "HTTPS", res); 51 ASSERT_TRUE(ret); 52 if (!ret) 53 { 54 return; 55 } 56 EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1"); 57 EXPECT_EQ(ret->encoded_path(), "/path"); 58 EXPECT_EQ(ret->scheme(), "https"); 59 } 60 } 61 62 TEST(UpdateService, ParseHTTPSPostitive) 63 { 64 crow::Response res; 65 { 66 // No protocol, schema on url 67 std::optional<boost::urls::url> ret = 68 parseSimpleUpdateUrl("https://1.1.1.1/path", std::nullopt, res); 69 ASSERT_TRUE(ret); 70 if (!ret) 71 { 72 return; 73 } 74 EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1"); 75 EXPECT_EQ(ret->encoded_path(), "/path"); 76 EXPECT_EQ(ret->scheme(), "https"); 77 } 78 { 79 // Protocol, no schema on url 80 std::optional<boost::urls::url> ret = 81 parseSimpleUpdateUrl("1.1.1.1/path", "HTTPS", res); 82 ASSERT_TRUE(ret); 83 if (!ret) 84 { 85 return; 86 } 87 EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1"); 88 EXPECT_EQ(ret->encoded_path(), "/path"); 89 EXPECT_EQ(ret->scheme(), "https"); 90 } 91 { 92 // Both protocol and schema on url with path 93 std::optional<boost::urls::url> ret = 94 parseSimpleUpdateUrl("https://1.1.1.1/path", "HTTPS", res); 95 ASSERT_TRUE(ret); 96 if (!ret) 97 { 98 return; 99 } 100 EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1"); 101 EXPECT_EQ(ret->encoded_path(), "/path"); 102 EXPECT_EQ(ret->scheme(), "https"); 103 } 104 { 105 // Both protocol and schema on url without path 106 std::optional<boost::urls::url> ret = 107 parseSimpleUpdateUrl("https://1.1.1.1", "HTTPS", res); 108 ASSERT_TRUE(ret); 109 if (!ret) 110 { 111 return; 112 } 113 EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1"); 114 EXPECT_EQ(ret->encoded_path(), "/"); 115 EXPECT_EQ(ret->scheme(), "https"); 116 } 117 { 118 // Both protocol and schema on url without path 119 std::optional<boost::urls::url> ret = 120 parseSimpleUpdateUrl("https://[2001:db8::1]", "HTTPS", res); 121 ASSERT_TRUE(ret); 122 if (!ret) 123 { 124 return; 125 } 126 EXPECT_EQ(ret->encoded_host_and_port(), "[2001:db8::1]"); 127 EXPECT_EQ(ret->encoded_path(), "/"); 128 EXPECT_EQ(ret->scheme(), "https"); 129 } 130 } 131 132 TEST(UpdateService, ParseHTTPSNegative) 133 { 134 crow::Response res; 135 // No protocol, no schema 136 ASSERT_EQ(parseSimpleUpdateUrl("1.1.1.1/path", std::nullopt, res), 137 std::nullopt); 138 // No host 139 ASSERT_EQ(parseSimpleUpdateUrl("/path", "HTTPS", res), std::nullopt); 140 } 141 } // namespace 142 } // namespace redfish 143