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