1f86bcc87SEd Tanous 
2f0b59af4SEd Tanous #include "http_response.hpp"
3f86bcc87SEd Tanous #include "update_service.hpp"
4f86bcc87SEd Tanous 
55b90429aSEd Tanous #include <boost/url/url.hpp>
65b90429aSEd Tanous 
7f0b59af4SEd Tanous #include <optional>
8f0b59af4SEd Tanous 
9f86bcc87SEd Tanous #include <gtest/gtest.h>
10f86bcc87SEd Tanous 
11f86bcc87SEd Tanous namespace redfish
12f86bcc87SEd Tanous {
13f86bcc87SEd Tanous namespace
14f86bcc87SEd Tanous {
15f86bcc87SEd Tanous 
TEST(UpdateService,ParseTFTPPostitive)16f86bcc87SEd Tanous TEST(UpdateService, ParseTFTPPostitive)
17f86bcc87SEd Tanous {
18f86bcc87SEd Tanous     crow::Response res;
19f86bcc87SEd Tanous     {
20f86bcc87SEd Tanous         // No protocol, schema on url
21757178a5SEd Tanous         std::optional<boost::urls::url> ret =
22757178a5SEd Tanous             parseSimpleUpdateUrl("tftp://1.1.1.1/path", std::nullopt, res);
23d547d8d2SEd Tanous         ASSERT_TRUE(ret);
24d547d8d2SEd Tanous         if (!ret)
25d547d8d2SEd Tanous         {
26d547d8d2SEd Tanous             return;
27d547d8d2SEd Tanous         }
28757178a5SEd Tanous         EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1");
29757178a5SEd Tanous         EXPECT_EQ(ret->encoded_path(), "/path");
30757178a5SEd Tanous         EXPECT_EQ(ret->scheme(), "tftp");
31f86bcc87SEd Tanous     }
32f86bcc87SEd Tanous     {
33f86bcc87SEd Tanous         // Protocol, no schema on url
34757178a5SEd Tanous         std::optional<boost::urls::url> ret =
35757178a5SEd Tanous             parseSimpleUpdateUrl("1.1.1.1/path", "TFTP", res);
36d547d8d2SEd Tanous         ASSERT_TRUE(ret);
37d547d8d2SEd Tanous         if (!ret)
38d547d8d2SEd Tanous         {
39d547d8d2SEd Tanous             return;
40d547d8d2SEd Tanous         }
41757178a5SEd Tanous         EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1");
42757178a5SEd Tanous         EXPECT_EQ(ret->encoded_path(), "/path");
43757178a5SEd Tanous         EXPECT_EQ(ret->scheme(), "tftp");
44f86bcc87SEd Tanous     }
45f86bcc87SEd Tanous     {
46e5cf777eSEd Tanous         // Both protocol and schema on url
47757178a5SEd Tanous         std::optional<boost::urls::url> ret =
48757178a5SEd Tanous             parseSimpleUpdateUrl("tftp://1.1.1.1/path", "TFTP", res);
49d547d8d2SEd Tanous         ASSERT_TRUE(ret);
50d547d8d2SEd Tanous         if (!ret)
51d547d8d2SEd Tanous         {
52d547d8d2SEd Tanous             return;
53d547d8d2SEd Tanous         }
54757178a5SEd Tanous         EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1");
55757178a5SEd Tanous         EXPECT_EQ(ret->encoded_path(), "/path");
56757178a5SEd Tanous         EXPECT_EQ(ret->scheme(), "tftp");
57f86bcc87SEd Tanous     }
58f86bcc87SEd Tanous }
59f86bcc87SEd Tanous 
TEST(UpdateService,ParseHTTPSPostitive)60e5cf777eSEd Tanous TEST(UpdateService, ParseHTTPSPostitive)
61e5cf777eSEd Tanous {
62e5cf777eSEd Tanous     crow::Response res;
63e5cf777eSEd Tanous     {
64e5cf777eSEd Tanous         // No protocol, schema on url
65e5cf777eSEd Tanous         std::optional<boost::urls::url> ret =
66e5cf777eSEd Tanous             parseSimpleUpdateUrl("https://1.1.1.1/path", std::nullopt, res);
67e5cf777eSEd Tanous         ASSERT_TRUE(ret);
68e5cf777eSEd Tanous         if (!ret)
69e5cf777eSEd Tanous         {
70e5cf777eSEd Tanous             return;
71e5cf777eSEd Tanous         }
72e5cf777eSEd Tanous         EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1");
73e5cf777eSEd Tanous         EXPECT_EQ(ret->encoded_path(), "/path");
74e5cf777eSEd Tanous         EXPECT_EQ(ret->scheme(), "https");
75e5cf777eSEd Tanous     }
76e5cf777eSEd Tanous     {
77e5cf777eSEd Tanous         // Protocol, no schema on url
78e5cf777eSEd Tanous         std::optional<boost::urls::url> ret =
79e5cf777eSEd Tanous             parseSimpleUpdateUrl("1.1.1.1/path", "HTTPS", res);
80e5cf777eSEd Tanous         ASSERT_TRUE(ret);
81e5cf777eSEd Tanous         if (!ret)
82e5cf777eSEd Tanous         {
83e5cf777eSEd Tanous             return;
84e5cf777eSEd Tanous         }
85e5cf777eSEd Tanous         EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1");
86e5cf777eSEd Tanous         EXPECT_EQ(ret->encoded_path(), "/path");
87e5cf777eSEd Tanous         EXPECT_EQ(ret->scheme(), "https");
88e5cf777eSEd Tanous     }
89e5cf777eSEd Tanous     {
90e5cf777eSEd Tanous         // Both protocol and schema on url with path
91e5cf777eSEd Tanous         std::optional<boost::urls::url> ret =
92e5cf777eSEd Tanous             parseSimpleUpdateUrl("https://1.1.1.1/path", "HTTPS", res);
93e5cf777eSEd Tanous         ASSERT_TRUE(ret);
94e5cf777eSEd Tanous         if (!ret)
95e5cf777eSEd Tanous         {
96e5cf777eSEd Tanous             return;
97e5cf777eSEd Tanous         }
98e5cf777eSEd Tanous         EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1");
99e5cf777eSEd Tanous         EXPECT_EQ(ret->encoded_path(), "/path");
100e5cf777eSEd Tanous         EXPECT_EQ(ret->scheme(), "https");
101e5cf777eSEd Tanous     }
102e5cf777eSEd Tanous     {
103e5cf777eSEd Tanous         // Both protocol and schema on url without path
104e5cf777eSEd Tanous         std::optional<boost::urls::url> ret =
105e5cf777eSEd Tanous             parseSimpleUpdateUrl("https://1.1.1.1", "HTTPS", res);
106e5cf777eSEd Tanous         ASSERT_TRUE(ret);
107e5cf777eSEd Tanous         if (!ret)
108e5cf777eSEd Tanous         {
109e5cf777eSEd Tanous             return;
110e5cf777eSEd Tanous         }
111e5cf777eSEd Tanous         EXPECT_EQ(ret->encoded_host_and_port(), "1.1.1.1");
112e5cf777eSEd Tanous         EXPECT_EQ(ret->encoded_path(), "/");
113e5cf777eSEd Tanous         EXPECT_EQ(ret->scheme(), "https");
114e5cf777eSEd Tanous     }
115*dae38db4SEd Tanous     {
116*dae38db4SEd Tanous         // Both protocol and schema on url without path
117*dae38db4SEd Tanous         std::optional<boost::urls::url> ret =
118*dae38db4SEd Tanous             parseSimpleUpdateUrl("https://[2001:db8::1]", "HTTPS", res);
119*dae38db4SEd Tanous         ASSERT_TRUE(ret);
120*dae38db4SEd Tanous         if (!ret)
121*dae38db4SEd Tanous         {
122*dae38db4SEd Tanous             return;
123*dae38db4SEd Tanous         }
124*dae38db4SEd Tanous         EXPECT_EQ(ret->encoded_host_and_port(), "[2001:db8::1]");
125*dae38db4SEd Tanous         EXPECT_EQ(ret->encoded_path(), "/");
126*dae38db4SEd Tanous         EXPECT_EQ(ret->scheme(), "https");
127*dae38db4SEd Tanous     }
128e5cf777eSEd Tanous }
129e5cf777eSEd Tanous 
TEST(UpdateService,ParseTFTPNegative)130f86bcc87SEd Tanous TEST(UpdateService, ParseTFTPNegative)
131f86bcc87SEd Tanous {
132f86bcc87SEd Tanous     crow::Response res;
133f86bcc87SEd Tanous     // No protocol, no schema
134757178a5SEd Tanous     ASSERT_EQ(parseSimpleUpdateUrl("1.1.1.1/path", std::nullopt, res),
135757178a5SEd Tanous               std::nullopt);
136f86bcc87SEd Tanous     // No host
137757178a5SEd Tanous     ASSERT_EQ(parseSimpleUpdateUrl("/path", "TFTP", res), std::nullopt);
138f86bcc87SEd Tanous 
139f86bcc87SEd Tanous     // No host
140757178a5SEd Tanous     ASSERT_EQ(parseSimpleUpdateUrl("path", "TFTP", res), std::nullopt);
141f86bcc87SEd Tanous 
142f86bcc87SEd Tanous     // No path
143757178a5SEd Tanous     ASSERT_EQ(parseSimpleUpdateUrl("tftp://1.1.1.1", "TFTP", res),
144757178a5SEd Tanous               std::nullopt);
145757178a5SEd Tanous     ASSERT_EQ(parseSimpleUpdateUrl("tftp://1.1.1.1/", "TFTP", res),
146757178a5SEd Tanous               std::nullopt);
147f86bcc87SEd Tanous }
148f86bcc87SEd Tanous } // namespace
149f86bcc87SEd Tanous } // namespace redfish
150