~thomas-voss/dbus-cpp/refactor-core-dbus-object

« back to all changes in this revision

Viewing changes to tests/dbus_test.cpp

  • Committer: thomas-voss
  • Date: 2014-04-01 20:53:57 UTC
  • Revision ID: thomas.voss@canonical.com-20140401205357-1n4xf4fue3myva8f
And the major refactorings are in.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
#include <core/dbus/dbus.h>
20
20
#include <core/dbus/fixture.h>
 
21
#include <core/dbus/message_streaming_operators.h>
21
22
#include <core/dbus/object.h>
22
23
#include <core/dbus/service.h>
23
24
#include <core/dbus/asio/executor.h>
61
62
        auto bus = session_bus();
62
63
 
63
64
        auto service = dbus::Service::use_service<test::Service>(bus);
64
 
        auto object = service->object_for_path(dbus::types::ObjectPath{path});
 
65
        auto object = dbus::Object::Stub::create(service, dbus::types::ObjectPath{path});
 
66
        auto test_method = object->typed_method<test::Service::Method>();
65
67
 
66
 
        object->invoke_method_synchronously<test::Service::Method, void>();
 
68
        test_method->invoke_and_block();
67
69
 
68
70
        return ::testing::Test::HasFailure() ? core::posix::exit::Status::failure : core::posix::exit::Status::success;
69
71
    }, core::posix::StandardStream::empty);
75
77
    {
76
78
        core::testing::SigTermCatcher sc;
77
79
 
 
80
        auto service_bus = session_bus();
78
81
        auto bus = session_bus();
 
82
 
 
83
        service_bus->install_executor(core::dbus::asio::make_executor(service_bus));
79
84
        bus->install_executor(core::dbus::asio::make_executor(bus));
 
85
        std::thread t1{[service_bus](){ service_bus->run(); }};
 
86
        std::thread t2{[bus](){ bus->run(); }};
 
87
 
80
88
        dbus::DBus daemon{bus};
81
89
 
82
 
        auto service = dbus::Service::add_service<test::Service>(bus);
83
 
        auto object = service->add_object_for_path(dbus::types::ObjectPath{path});
 
90
        auto service = dbus::Service::add_service<test::Service>(service_bus);
 
91
        auto object = dbus::Object::Skeleton::create(service, dbus::types::ObjectPath{path});
84
92
 
85
93
        uint32_t sender_pid = 0, sender_uid = 0;
86
94
 
87
 
        auto method = object->get_method<test::Service::Method>();
 
95
        auto method = object->typed_method<test::Service::Method>();
88
96
 
89
97
        method->register_invocation_handler(
90
 
            [&daemon, &sender_pid, &sender_uid, bus](
 
98
            [&daemon, &sender_pid, &sender_uid, bus, service_bus](
91
99
                const dbus::Message::Ptr& request,
92
 
                const dbus::Object::Ptr& context,
 
100
                const dbus::Object::Skeleton::Ptr& context,
93
101
                const dbus::MessageFactory::Ptr& mf)
94
102
            {
95
103
                auto sender = request->sender();
97
105
                sender_pid = daemon.get_connection_unix_process_id(sender);
98
106
                sender_uid = daemon.get_connection_unix_user(sender);
99
107
 
100
 
                context->send(mf->make_method_return(request));
 
108
                auto reply = mf->make_method_return(request);
 
109
                reply->writer() << std::int64_t{42};
 
110
                context->send(reply);
101
111
 
102
112
                bus->stop();
 
113
                service_bus->stop();
103
114
            });
104
115
 
105
116
        barrier.try_signal_ready_for(std::chrono::milliseconds{500});
106
117
 
107
 
        std::thread t1{[bus](){ bus->run(); }};
108
 
        std::thread t2{[bus](){ bus->run(); }};
109
 
 
110
118
        sc.wait_for_signal();
111
119
 
112
120
        if (t1.joinable())