1 /* Copyright (C) 2013 BMW Group
2 * Author: Manfred Bathelt (manfred.bathelt@bmw.de)
3 * Author: Juergen Gehring (juergen.gehring@bmw.de)
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include <CommonAPI/Runtime.h>
8 #include <CommonAPI/Factory.h>
9 #include <CommonAPI/DBus/DBusServiceRegistry.h>
10 #include <CommonAPI/DBus/DBusConnection.h>
12 #include <commonapi/tests/TestInterfaceStub.h>
13 #include <commonapi/tests/TestInterfaceStubDefault.h>
14 #include <commonapi/tests/TestInterfaceDBusStubAdapter.h>
16 #include <gtest/gtest.h>
21 class DBusServiceRegistryTest: public ::testing::Test {
23 virtual void SetUp() {
26 virtual void TearDown() {
31 TEST_F(DBusServiceRegistryTest, CanBeConstructed) {
32 CommonAPI::DBus::DBusServiceRegistry* registry = new CommonAPI::DBus::DBusServiceRegistry();
33 ASSERT_TRUE(registry != NULL);
37 TEST_F(DBusServiceRegistryTest, DBusConnectionHasRegistry) {
38 auto dbusConnection = CommonAPI::DBus::DBusConnection::getSessionBus();
39 auto serviceRegistry = dbusConnection->getDBusServiceRegistry();
40 ASSERT_FALSE(!serviceRegistry);
43 TEST_F(DBusServiceRegistryTest, ServiceStatusEventCanBeFetched) {
44 auto dbusConnection = CommonAPI::DBus::DBusConnection::getSessionBus();
45 auto dbusServiceRegistry = dbusConnection->getDBusServiceRegistry();
46 dbusConnection->connect();
47 ASSERT_NO_FATAL_FAILURE(auto serviceStatusEvent = dbusServiceRegistry->getServiceStatusEvent());
51 TEST_F(DBusServiceRegistryTest, ServiceStatusEventCanBeSubscribedTo) {
52 auto dbusConnection = CommonAPI::DBus::DBusConnection::getSessionBus();
53 auto dbusServiceRegistry = dbusConnection->getDBusServiceRegistry();
54 dbusConnection->connect();
55 auto serviceStatusEvent = dbusServiceRegistry->getServiceStatusEvent();
56 std::string eventName_ = "local:some:address";
57 serviceStatusEvent.subscribe(eventName_,
58 [&] (const std::string& eventName, const CommonAPI::AvailabilityStatus& availabilityStatus) -> CommonAPI::SubscriptionStatus {
59 return CommonAPI::SubscriptionStatus::RETAIN;
65 TEST_F(DBusServiceRegistryTest, ServiceStatusEventGetsFirstCall) {
66 auto dbusConnection = CommonAPI::DBus::DBusConnection::getSessionBus();
67 auto dbusServiceRegistry = dbusConnection->getDBusServiceRegistry();
68 dbusConnection->connect();
69 auto serviceStatusEvent = dbusServiceRegistry->getServiceStatusEvent();
70 std::string eventName_ = "local:some:address";
72 serviceStatusEvent.subscribe(eventName_,
73 [&] (const std::string& eventName, const CommonAPI::AvailabilityStatus& availabilityStatus) -> CommonAPI::SubscriptionStatus {
75 return CommonAPI::SubscriptionStatus::RETAIN;
85 TEST_F(DBusServiceRegistryTest, SubscriptionToServiceStatusEventCanBeCancelled) {
86 auto dbusConnection = CommonAPI::DBus::DBusConnection::getSessionBus();
87 auto dbusServiceRegistry = dbusConnection->getDBusServiceRegistry();
88 dbusConnection->connect();
89 auto serviceStatusEvent = dbusServiceRegistry->getServiceStatusEvent();
90 std::string eventName_ = "local:some:address";
91 serviceStatusEvent.subscribe(eventName_,
92 [&] (const std::string& eventName, const CommonAPI::AvailabilityStatus& availabilityStatus) -> CommonAPI::SubscriptionStatus {
93 return CommonAPI::SubscriptionStatus::CANCEL;
100 class DBusServiceRegistryTestWithPredefinedRemote: public ::testing::Test {
102 virtual void SetUp() {
103 CommonAPI::DBus::DBusConnection::getSessionBus();
104 dbusServiceRegistry_ = dbusConnection_->getDBusServiceRegistry();
105 dbusConnection_->connect();
107 dbusStubConnection_ = CommonAPI::DBus::DBusConnection::getSessionBus();
108 dbusStubConnection_->connect();
110 auto stub = std::make_shared<commonapi::tests::TestInterfaceStubDefault>();
112 dbusStubConnection_->requestServiceNameAndBlock("test.instance.name");
113 auto stubAdapter = std::make_shared<commonapi::tests::TestInterfaceDBusStubAdapter>(
114 "local:test.service.name:test.instance.name",
116 "test.instance.name",
117 "/test/instance/name",
123 virtual void TearDown() {
126 std::shared_ptr<CommonAPI::DBus::DBusConnection> dbusConnection_;
127 std::shared_ptr<CommonAPI::DBus::DBusConnection> dbusStubConnection_;
128 std::shared_ptr<CommonAPI::DBus::DBusServiceRegistry> dbusServiceRegistry_;
132 TEST_F(DBusServiceRegistryTestWithPredefinedRemote, RecognizesCommonAPIDBusServiceInstanceAsAlive) {
133 ASSERT_TRUE(dbusServiceRegistry_->isServiceInstanceAlive("test.service.name", "test.instance.name", "/test/instance/name"));
137 TEST_F(DBusServiceRegistryTestWithPredefinedRemote, FindsCommonAPIDBusServiceInstance) {
138 auto availableServices = dbusServiceRegistry_->getAvailableServiceInstances("test.service.name", "local");
139 ASSERT_EQ(1, availableServices.size());
141 for(auto it = availableServices.begin(); it != availableServices.end(); ++it) {
142 if(*it == "local:test.service.name:test.instance.name") {
146 ASSERT_TRUE(serviceFound);
151 int main(int argc, char** argv) {
152 ::testing::InitGoogleTest(&argc, argv);
153 return RUN_ALL_TESTS();