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