1 #include "event_service_manager.hpp"
2 #include "filter_expr_printer.hpp"
3
4 #include <boost/asio/io_context.hpp>
5 #include <boost/url/url.hpp>
6 #include <nlohmann/json.hpp>
7
8 #include <optional>
9 #include <string_view>
10
11 #include <gtest/gtest.h>
12
13 namespace redfish
14 {
15
TEST(EventServiceManager,eventMatchesFilter)16 TEST(EventServiceManager, eventMatchesFilter)
17 {
18 boost::asio::io_context io;
19 boost::urls::url url;
20
21 {
22 Subscription sub(url, io);
23 nlohmann::json::object_t event;
24
25 // Default constructed should always pass
26 EXPECT_TRUE(sub.eventMatchesFilter(event, "Event"));
27 }
28 {
29 nlohmann::json::object_t event;
30 // Resource types filter
31 Subscription sub(url, io);
32 sub.resourceTypes.emplace_back("Task");
33 EXPECT_FALSE(sub.eventMatchesFilter(event, "Event"));
34 EXPECT_TRUE(sub.eventMatchesFilter(event, "Task"));
35 }
36 {
37 nlohmann::json::object_t event;
38 // Resource types filter
39 Subscription sub(url, io);
40 sub.registryMsgIds.emplace_back("OpenBMC.PostComplete");
41
42 // Correct message registry
43 event["MessageId"] = "OpenBMC.0.1.PostComplete";
44 EXPECT_TRUE(sub.eventMatchesFilter(event, "Event"));
45
46 // Different message registry
47 event["MessageId"] = "Task.0.1.PostComplete";
48 EXPECT_FALSE(sub.eventMatchesFilter(event, "Event"));
49
50 // Different MessageId
51 event["MessageId"] = "OpenBMC.0.1.NoMatch";
52 EXPECT_FALSE(sub.eventMatchesFilter(event, "Event"));
53 }
54 {
55 nlohmann::json::object_t event;
56 // Resource types filter
57 Subscription sub(url, io);
58 event["MessageId"] = "OpenBMC.0.1.PostComplete";
59
60 // Correct message registry
61 sub.filter = parseFilter("MessageId eq 'OpenBMC.0.1.PostComplete'");
62 EXPECT_TRUE(sub.eventMatchesFilter(event, "Event"));
63
64 // Different message registry
65 sub.filter = parseFilter("MessageId ne 'OpenBMC.0.1.PostComplete'");
66 EXPECT_FALSE(sub.eventMatchesFilter(event, "Event"));
67 }
68 {
69 nlohmann::json::object_t event;
70 // Resource types filter
71 Subscription sub(url, io);
72 event["MessageId"] = "OpenBMC.0.1.PostComplete";
73
74 // Correct message registry
75 sub.registryPrefixes.emplace_back("OpenBMC");
76 EXPECT_TRUE(sub.eventMatchesFilter(event, "Event"));
77
78 // Different message registry
79 event["MessageId"] = "Task.0.1.PostComplete";
80 EXPECT_FALSE(sub.eventMatchesFilter(event, "Event"));
81 }
82 {
83 nlohmann::json::object_t event;
84 // Resource types filter
85 {
86 Subscription sub(url, io);
87 event["OriginOfCondition"] = "/redfish/v1/Managers/bmc";
88
89 // Correct origin
90 sub.originResources.emplace_back("/redfish/v1/Managers/bmc");
91 EXPECT_TRUE(sub.eventMatchesFilter(event, "Event"));
92 }
93 {
94 Subscription sub(url, io);
95 // Incorrect origin
96 sub.originResources.clear();
97 sub.originResources.emplace_back("/redfish/v1/Managers/bmc_not");
98 EXPECT_FALSE(sub.eventMatchesFilter(event, "Event"));
99 }
100 }
101 }
102 } // namespace redfish
103