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
TEST(UpdateService,ParseHTTSPPostitive)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
TEST(UpdateService,ParseHTTPSPostitive)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
TEST(UpdateService,ParseHTTPSNegative)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