Initial import to Git
[profile/ivi/common-api-dbus-runtime.git] / CommonAPI-DBus / src / test / DBusMultipleConnectionTest.cpp
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 #include <gtest/gtest.h>
6
7 #include <cassert>
8 #include <cstdint>
9 #include <iostream>
10 #include <functional>
11 #include <memory>
12 #include <stdint.h>
13 #include <string>
14 #include <utility>
15 #include <tuple>
16 #include <type_traits>
17
18 #include <CommonAPI/types.h>
19 #include <CommonAPI/Runtime.h>
20
21 #include "commonapi/tests/TestInterfaceProxy.h"
22 #include "commonapi/tests/TestInterfaceStubDefault.h"
23 const std::string serviceAddress = "local:commonapi.tests.TestInterface:commonapi.tests.TestInterface";
24
25 class DBusMultipleConnectionTest: public ::testing::Test {
26  protected:
27     virtual void SetUp() {
28         proxyFactory = CommonAPI::Runtime::load()->createFactory();
29         stubFactory = CommonAPI::Runtime::load()->createFactory();
30         ASSERT_TRUE((bool)proxyFactory);
31         ASSERT_TRUE((bool)stubFactory);
32
33         stub = std::make_shared<commonapi::tests::TestInterfaceStubDefault>();
34         bool success = stubFactory->registerService(stub, serviceAddress);
35         ASSERT_TRUE(success);
36
37         proxy = proxyFactory->buildProxy<commonapi::tests::TestInterfaceProxy>(serviceAddress);
38         ASSERT_TRUE((bool)proxy);
39     }
40
41     virtual void TearDown() {
42     }
43
44     std::shared_ptr<CommonAPI::Factory> proxyFactory;
45     std::shared_ptr<CommonAPI::Factory> stubFactory;
46     std::shared_ptr<commonapi::tests::TestInterfaceStubDefault> stub;
47     std::shared_ptr<commonapi::tests::TestInterfaceProxy<> > proxy;
48
49 };
50
51
52 TEST_F(DBusMultipleConnectionTest, SetAttribute) {
53     uint32_t v1 = 5;
54     uint32_t v2;
55     CommonAPI::CallStatus stat;
56     proxy->getTestPredefinedTypeAttributeAttribute().setValue(v1, stat, v2);
57     ASSERT_EQ(stat, CommonAPI::CallStatus::SUCCESS);
58     ASSERT_EQ(v1, v2);
59 }
60
61 TEST_F(DBusMultipleConnectionTest, SetAttributeBroadcast) {
62     uint32_t v1 = 6;
63     uint32_t v2;
64     uint32_t v3 = 0;
65
66     std::promise<bool> promise;
67     auto future = promise.get_future();
68
69     proxy->getTestPredefinedTypeAttributeAttribute().getChangedEvent().subscribe([&](
70                     const uint32_t intVal) {
71         v3 = intVal;
72         promise.set_value(true);
73     });
74
75     CommonAPI::CallStatus stat;
76     proxy->getTestPredefinedTypeAttributeAttribute().setValue(v1, stat, v2);
77     ASSERT_EQ(stat, CommonAPI::CallStatus::SUCCESS);
78     ASSERT_EQ(v1, v2);
79
80     ASSERT_TRUE(future.get());
81     ASSERT_EQ(v1, v3);
82
83 }
84
85
86 TEST_F(DBusMultipleConnectionTest, GetAttribute) {
87     uint32_t v1;
88     CommonAPI::CallStatus stat = proxy->getTestPredefinedTypeAttributeAttribute().getValue(v1);
89     ASSERT_EQ(stat, CommonAPI::CallStatus::SUCCESS);
90 }
91
92 TEST_F(DBusMultipleConnectionTest, RemoteMethodCall) {
93     uint32_t v1 = 5;
94     std::string v2 = "Hai :)";
95     CommonAPI::CallStatus stat;
96     proxy->testVoidPredefinedTypeMethod(v1, v2, stat);
97     ASSERT_EQ(stat, CommonAPI::CallStatus::SUCCESS);
98 }
99
100 TEST_F(DBusMultipleConnectionTest, Broadcast) {
101     uint32_t v1 = 5;
102     uint32_t v3 = 0;
103     std::string v2 = "Hai :)";
104
105     std::promise<bool> promise;
106     auto future = promise.get_future();
107
108     proxy->getTestPredefinedTypeBroadcastEvent().subscribe([&](
109                     const uint32_t intVal, const std::string& strVal) {
110         v3 = intVal;
111         promise.set_value(true);
112     });
113
114     stub->firePredefinedBroadcast(v1, v2);
115
116     ASSERT_TRUE(future.get());
117     ASSERT_EQ(v1, v3);
118 }
119
120
121 int main(int argc, char** argv) {
122     ::testing::InitGoogleTest(&argc, argv);
123     return RUN_ALL_TESTS();
124 }
125