blob: 4d1a7442c989d1277c2013e0e5e74e0671b996a1 [file] [log] [blame]
Nan Zhoud5c80ad2022-07-11 01:16:31 +00001#include "async_resp.hpp" // IWYU pragma: keep
Ed Tanous88a03c52022-03-14 10:16:07 -07002#include "http_request.hpp"
3#include "routing.hpp"
Nan Zhoudff2f9b2022-06-26 23:50:39 +00004#include "utility.hpp"
Ed Tanous88a03c52022-03-14 10:16:07 -07005
Nan Zhoud5c80ad2022-07-11 01:16:31 +00006#include <boost/beast/http/message.hpp> // IWYU pragma: keep
Nan Zhoudff2f9b2022-06-26 23:50:39 +00007#include <boost/beast/http/verb.hpp>
8
9#include <memory>
10#include <string>
11#include <string_view>
12#include <system_error>
13
Nan Zhoud5c80ad2022-07-11 01:16:31 +000014#include <gtest/gtest.h> // IWYU pragma: keep
15
16// IWYU pragma: no_include <boost/beast/http/impl/message.hpp>
17// IWYU pragma: no_include "gtest/gtest_pred_impl.h"
18// IWYU pragma: no_include <boost/intrusive/detail/list_iterator.hpp>
19// IWYU pragma: no_include <gtest/gtest-message.h>
20// IWYU pragma: no_include <gtest/gtest-test-part.h>
21// IWYU pragma: no_forward_declare bmcweb::AsyncResp
Ed Tanous88a03c52022-03-14 10:16:07 -070022
Nan Zhouef740262022-06-26 23:55:13 +000023namespace crow
24{
25namespace
26{
27
28using ::crow::black_magic::getParameterTag;
29
Ed Tanous88a03c52022-03-14 10:16:07 -070030TEST(Router, AllowHeader)
31{
32 // Callback handler that does nothing
Nan Zhouef740262022-06-26 23:55:13 +000033 auto nullCallback = [](const Request&,
Ed Tanous88a03c52022-03-14 10:16:07 -070034 const std::shared_ptr<bmcweb::AsyncResp>&) {};
35
Nan Zhouef740262022-06-26 23:55:13 +000036 Router router;
Ed Tanous88a03c52022-03-14 10:16:07 -070037 std::error_code ec;
38
39 constexpr const std::string_view url = "/foo";
40
Nan Zhouef740262022-06-26 23:55:13 +000041 Request req{{boost::beast::http::verb::get, url, 11}, ec};
Ed Tanous88a03c52022-03-14 10:16:07 -070042
43 // No route should return no methods.
44 router.validate();
45 EXPECT_EQ(router.buildAllowHeader(req), "");
46
Nan Zhouef740262022-06-26 23:55:13 +000047 router.newRuleTagged<getParameterTag(url)>(std::string(url))
Ed Tanous88a03c52022-03-14 10:16:07 -070048 .methods(boost::beast::http::verb::get)(nullCallback);
49 router.validate();
50 EXPECT_EQ(router.buildAllowHeader(req), "GET");
51
Nan Zhouef740262022-06-26 23:55:13 +000052 router.newRuleTagged<getParameterTag(url)>(std::string(url))
Ed Tanous88a03c52022-03-14 10:16:07 -070053 .methods(boost::beast::http::verb::patch)(nullCallback);
54 router.validate();
55 EXPECT_EQ(router.buildAllowHeader(req), "GET, PATCH");
Nan Zhouef740262022-06-26 23:55:13 +000056}
57} // namespace
58} // namespace crow