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