xref: /openbmc/bmcweb/test/redfish-core/lib/update_service_test.cpp (revision 40e9b92ec19acffb46f83a6e55b18974da5d708e)
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