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