xref: /openbmc/sdbusplus/test/gen/test_aserver_multiple_interfaces.cpp (revision a0fe02cad6645d0cd9328db414758d3f2f921663)
1*a0fe02caSAlexander Hansen #include "server/Test/aserver.hpp"
2*a0fe02caSAlexander Hansen #include "server/Test/client.hpp"
3*a0fe02caSAlexander Hansen #include "server/Test2/aserver.hpp"
4*a0fe02caSAlexander Hansen #include "server/Test2/client.hpp"
5*a0fe02caSAlexander Hansen #include "server/Test3/aserver.hpp"
6*a0fe02caSAlexander Hansen 
7*a0fe02caSAlexander Hansen #include <sdbusplus/async/context.hpp>
8*a0fe02caSAlexander Hansen #include <sdbusplus/async/match.hpp>
9*a0fe02caSAlexander Hansen #include <sdbusplus/async/timer.hpp>
10*a0fe02caSAlexander Hansen 
11*a0fe02caSAlexander Hansen class A
12*a0fe02caSAlexander Hansen {};
13*a0fe02caSAlexander Hansen 
constructInterfaces(sdbusplus::async::context & ctx,std::string & busName)14*a0fe02caSAlexander Hansen auto constructInterfaces(sdbusplus::async::context& ctx, std::string& busName)
15*a0fe02caSAlexander Hansen     -> sdbusplus::async::task<>
16*a0fe02caSAlexander Hansen {
17*a0fe02caSAlexander Hansen     auto x = std::variant<sdbusplus::common::server::Test::EnumOne, std::string,
18*a0fe02caSAlexander Hansen                           sdbusplus::common::server::Test::EnumTwo>(
19*a0fe02caSAlexander Hansen         sdbusplus::common::server::Test::EnumOne::OneA);
20*a0fe02caSAlexander Hansen 
21*a0fe02caSAlexander Hansen     sdbusplus::common::server::Test::properties_t props{
22*a0fe02caSAlexander Hansen         832, 0, 0, 0, 0, 0, 0, std::string("/my/path"), 1.0, 1.0, 1.0, 1.0, x};
23*a0fe02caSAlexander Hansen 
24*a0fe02caSAlexander Hansen     sdbusplus::common::server::Test2::properties_t props2{4200, 2};
25*a0fe02caSAlexander Hansen 
26*a0fe02caSAlexander Hansen     sdbusplus::aserver::server::Test<A> a0(ctx, "/0");
27*a0fe02caSAlexander Hansen 
28*a0fe02caSAlexander Hansen     sdbusplus::aserver::server::Test<A> a1(ctx, "/1", props);
29*a0fe02caSAlexander Hansen 
30*a0fe02caSAlexander Hansen     // construct without properties
31*a0fe02caSAlexander Hansen     sdbusplus::async::server_t<A, sdbusplus::aserver::server::Test> a2(
32*a0fe02caSAlexander Hansen         ctx, "/2");
33*a0fe02caSAlexander Hansen 
34*a0fe02caSAlexander Hansen     // construct Test with properties
35*a0fe02caSAlexander Hansen     auto a3 = std::make_unique<
36*a0fe02caSAlexander Hansen         sdbusplus::async::server_t<A, sdbusplus::aserver::server::Test>>(
37*a0fe02caSAlexander Hansen         ctx, "/3", props);
38*a0fe02caSAlexander Hansen 
39*a0fe02caSAlexander Hansen     // construct Test2 with properties
40*a0fe02caSAlexander Hansen     sdbusplus::async::server_t<A, sdbusplus::aserver::server::Test2> a4(
41*a0fe02caSAlexander Hansen         ctx, "/4", props2);
42*a0fe02caSAlexander Hansen 
43*a0fe02caSAlexander Hansen     // does not compile, (wronge type of properties!)
44*a0fe02caSAlexander Hansen     // sdbusplus::async::server_t<A, sdbusplus::aserver::server::Test2> ax(ctx,
45*a0fe02caSAlexander Hansen     // "/x", props);
46*a0fe02caSAlexander Hansen 
47*a0fe02caSAlexander Hansen     // construct with both interfaces, no properties
48*a0fe02caSAlexander Hansen     sdbusplus::async::server_t<A, sdbusplus::aserver::server::Test,
49*a0fe02caSAlexander Hansen                                sdbusplus::aserver::server::Test2>
50*a0fe02caSAlexander Hansen         a5(ctx, "/5");
51*a0fe02caSAlexander Hansen 
52*a0fe02caSAlexander Hansen     // construct with both interfaces and properties
53*a0fe02caSAlexander Hansen     auto a6 = std::make_unique<
54*a0fe02caSAlexander Hansen         sdbusplus::async::server_t<A, sdbusplus::aserver::server::Test,
55*a0fe02caSAlexander Hansen                                    sdbusplus::aserver::server::Test2>>(
56*a0fe02caSAlexander Hansen         ctx, "/6", props, props2);
57*a0fe02caSAlexander Hansen 
58*a0fe02caSAlexander Hansen     // does not compile, (wrong order of properties!)
59*a0fe02caSAlexander Hansen     // auto a7 = std::make_unique<
60*a0fe02caSAlexander Hansen     //    sdbusplus::async::server_t<A, sdbusplus::aserver::server::Test,
61*a0fe02caSAlexander Hansen     //                               sdbusplus::aserver::server::Test2>>(
62*a0fe02caSAlexander Hansen     //    ctx, "/7", props2, props);
63*a0fe02caSAlexander Hansen 
64*a0fe02caSAlexander Hansen     auto a8 = std::make_unique<sdbusplus::async::server_t<
65*a0fe02caSAlexander Hansen         A, sdbusplus::aserver::server::Test, sdbusplus::aserver::server::Test2,
66*a0fe02caSAlexander Hansen         sdbusplus::aserver::server::Test3>>(ctx, "/8", props, props2,
67*a0fe02caSAlexander Hansen                                             std::nullopt);
68*a0fe02caSAlexander Hansen 
69*a0fe02caSAlexander Hansen     auto client =
70*a0fe02caSAlexander Hansen         sdbusplus::client::server::Test(ctx).service(busName).path("/3");
71*a0fe02caSAlexander Hansen 
72*a0fe02caSAlexander Hansen     assert(co_await client.some_value() == 832);
73*a0fe02caSAlexander Hansen 
74*a0fe02caSAlexander Hansen     auto client2 =
75*a0fe02caSAlexander Hansen         sdbusplus::client::server::Test2(ctx).service(busName).path("/6");
76*a0fe02caSAlexander Hansen 
77*a0fe02caSAlexander Hansen     assert(co_await client2.new_value() == 4200);
78*a0fe02caSAlexander Hansen 
79*a0fe02caSAlexander Hansen     ctx.request_stop();
80*a0fe02caSAlexander Hansen 
81*a0fe02caSAlexander Hansen     co_return;
82*a0fe02caSAlexander Hansen }
83*a0fe02caSAlexander Hansen 
main()84*a0fe02caSAlexander Hansen int main()
85*a0fe02caSAlexander Hansen {
86*a0fe02caSAlexander Hansen     sdbusplus::async::context ctx;
87*a0fe02caSAlexander Hansen 
88*a0fe02caSAlexander Hansen     std::srand(std::chrono::system_clock::now().time_since_epoch().count());
89*a0fe02caSAlexander Hansen     std::string busName = "xyz.openbmc_project.TestingMultipleInterfaces" +
90*a0fe02caSAlexander Hansen                           std::to_string(rand());
91*a0fe02caSAlexander Hansen 
92*a0fe02caSAlexander Hansen     ctx.request_name(busName.c_str());
93*a0fe02caSAlexander Hansen 
94*a0fe02caSAlexander Hansen     sdbusplus::server::manager_t manager(ctx.get_bus(), "/test");
95*a0fe02caSAlexander Hansen 
96*a0fe02caSAlexander Hansen     ctx.spawn(constructInterfaces(ctx, busName));
97*a0fe02caSAlexander Hansen 
98*a0fe02caSAlexander Hansen     ctx.run();
99*a0fe02caSAlexander Hansen 
100*a0fe02caSAlexander Hansen     return 0;
101*a0fe02caSAlexander Hansen }
102