2 #include <gmock/gmock.h>
3 #include <gtest/gtest.h>
6 #include "reportcomposer.h"
7 #include "connection.h"
8 #include "restservicemock.h"
10 using namespace NetworkManager;
13 using ::testing::Return;
19 const std::chrono::seconds TEST_KEEP_ALIVE(1);
20 const std::string TEST_SERVER_ADDRESS{"test-server"};
21 const std::string TEST_DEVICE_ID{"device-id"};
22 const std::string TEST_DEVICE_TYPE{"device-type"};
23 const std::string TEST_DEVICE_MODEL{"device-model"};
25 const std::string TEST_EVENT_TYPE{"report"};
26 const std::string TEST_EVENT_DATA1{"{sdfssdfsdfffsdfsdfsd}"};
27 const std::string TEST_EVENT_DATA2{"{--------------------}"};
28 const std::string TEST_UPDATES{ R"-([
29 {"type":"policy","uri":"policy-uri"},
30 {"type":"action","uri":"action-uri"},
31 {"type":"unused","uri":"unused-uri"}
33 const std::string TEST_POLICY_URI{"policy-uri"};
34 const std::string TEST_ACTION_URI{"action-uri"};
38 namespace NetworkManager
41 bool operator==(const Event& e1, const Event& e2)
43 return e1.type == e2.type && e1.data == e2.data;
48 class TestConnection: public ::testing::Test
53 settings.setKeepAliveTimeout(TEST_KEEP_ALIVE);
54 settings.setServerAddress(TEST_SERVER_ADDRESS);
55 settings.setDeviceId(TEST_DEVICE_ID);
56 settings.setDeviceModel(TEST_DEVICE_MODEL);
57 settings.setDeviceType(TEST_DEVICE_TYPE);
60 void TearDown() override
69 class EventListenerMock: public EventListener
72 MOCK_METHOD1(accept, void(const Event& event));
75 TEST_F(TestConnection, test_signal)
78 Connection conn(settings, &rest);
80 rc.addEvent(Event(TEST_EVENT_TYPE, TEST_EVENT_DATA1));
81 rc.addEvent(Event(TEST_EVENT_TYPE, TEST_EVENT_DATA2));
83 EXPECT_CALL(rest, sendReport(_, ::testing::Matcher<const Json::Value&>(rc.get())))
86 Event ev(TEST_EVENT_TYPE, TEST_EVENT_DATA1);
88 std::thread t(&Connection::loop, &conn);
90 conn.signal(Event(TEST_EVENT_TYPE, TEST_EVENT_DATA2));
92 std::this_thread::sleep_for(std::chrono::milliseconds(100));
99 TEST_F(TestConnection, test_Listeners)
101 RestServiceMock rest;
102 Connection conn(settings, &rest);
103 EventListenerMock el0, el1, el2, el3;
104 Event policy_event("policy", TEST_EVENT_DATA1);
105 Event action_event("action", TEST_EVENT_DATA2);
107 EXPECT_CALL(rest, getUpdates(_))
108 .WillRepeatedly(Return(TEST_UPDATES));
109 EXPECT_CALL(rest, doGet(_, TEST_POLICY_URI))
110 .WillOnce(Return(TEST_EVENT_DATA1));
111 EXPECT_CALL(rest, doGet(_, TEST_ACTION_URI))
112 .WillOnce(Return(TEST_EVENT_DATA2));
113 EXPECT_CALL(el1, accept(Eq(policy_event))).Times(1);
114 EXPECT_CALL(el2, accept(Eq(policy_event))).Times(1);
115 EXPECT_CALL(el3, accept(Eq(action_event))).Times(1);
117 conn.addEventListener("policy", &el1);
118 conn.addEventListener("policy", &el2);
120 int id = conn.addEventListener("action", &el0);
122 conn.addEventListener("action", &el3);
124 conn.removeEventListener(id);
126 std::thread t(&Connection::loop, &conn);
128 std::this_thread::sleep_for(std::chrono::milliseconds(1200));