2 #include <gmock/gmock.h>
3 #include <gtest/gtest.h>
6 #include "reportcomposer.h"
7 #include "connection.h"
8 #include "eventlistener.h"
9 #include "restservicemock.h"
11 using namespace NetworkManager;
14 using ::testing::Return;
15 using ::testing::Throw;
16 using ::testing::DoAll;
17 using ::testing::Invoke;
18 using ::testing::WithArgs;
24 const std::chrono::milliseconds TEST_KEEP_ALIVE(10);
25 const std::string TEST_SERVER_ADDRESS{"test-server"};
26 const std::string TEST_DEVICE_ID{"device-id"};
28 const std::string TEST_EVENT_TYPE{"report"};
29 const std::string TEST_EVENT_DATA1{"{sdfssdfsdfffsdfsdfsd}"};
30 const std::string TEST_EVENT_DATA2{"{--------------------}"};
31 const std::string TEST_UPDATES{ R"-([
32 {"type":"policy","uri":"policy-uri"},
33 {"type":"action","uri":"action-uri"},
34 {"type":"unused","uri":"unused-uri"}
36 const std::string TEST_POLICY_URI{"policy-uri"};
37 const std::string TEST_ACTION_URI{"action-uri"};
41 class TestConnection: public ::testing::Test
46 Settings& settings = Settings::instance();
47 settings.setKeepAliveTimeout(TEST_KEEP_ALIVE);
48 settings.setServerAddress(TEST_SERVER_ADDRESS);
49 settings.setDeviceId(TEST_DEVICE_ID);
52 void TearDown() override
58 class EventListenerMock: public EventListener
61 EventListenerMock(Connection& conn, const std::string& type): EventListener(conn, type)
65 MOCK_METHOD1(accept, void(Event& event));
68 namespace NetworkManager
71 bool operator==(const SessionInfo& si1, const SessionInfo& si2)
73 return si1.duid == si2.duid && si1.authToken == si2.authToken;
78 TEST_F(TestConnection, test_signal)
80 Settings& settings = Settings::instance();
82 settings.setDeviceId("");
83 Connection conn(settings, &rest);
85 rc.addEvent(std::make_pair(TEST_EVENT_TYPE, TEST_EVENT_DATA1));
86 rc.addEvent(std::make_pair(TEST_EVENT_TYPE, TEST_EVENT_DATA2));
87 SessionInfo checkSessState{"", ""};
89 EXPECT_CALL(rest, registerDevice(Eq(checkSessState)))
90 .WillOnce(Throw(std::runtime_error("")))
91 .WillOnce(Return(TEST_DEVICE_ID));
92 EXPECT_CALL(rest, getUpdates(_))
93 .WillRepeatedly(Return(""));
94 EXPECT_CALL(rest, sendReport(_, ::testing::Matcher<const Json::Value&>(rc.get())))
97 std::thread t(&Connection::loop, &conn);
98 conn.addReportEvent(TEST_EVENT_TYPE, TEST_EVENT_DATA1);
99 conn.addReportEvent(TEST_EVENT_TYPE, TEST_EVENT_DATA2);
101 std::this_thread::sleep_for(std::chrono::milliseconds(70));
108 void fakeInvoker(Event& e)
113 TEST_F(TestConnection, test_Listeners)
116 Settings& settings = Settings::instance();
117 RestServiceMock rest;
118 Connection conn(settings, &rest);
120 EventListenerMock el1{conn, "policy"};
121 EventListenerMock el2{conn, "policy"};
122 EventListenerMock el3{conn, "action"};
124 EXPECT_CALL(rest, getUpdates(_))
125 .WillRepeatedly(Return(TEST_UPDATES));
126 EXPECT_CALL(rest, doGet(_, TEST_POLICY_URI))
127 .WillOnce(Return(TEST_EVENT_DATA1));
128 EXPECT_CALL(rest, doGet(_, TEST_ACTION_URI))
129 .WillOnce(Return(TEST_EVENT_DATA2));
130 EXPECT_CALL(el1, accept(_))
131 .WillOnce(WithArgs<0>(Invoke(fakeInvoker)));
132 EXPECT_CALL(el2, accept(_))
133 .WillOnce(WithArgs<0>(Invoke(fakeInvoker)));
134 EXPECT_CALL(el3, accept(_))
135 .WillOnce(WithArgs<0>(Invoke(fakeInvoker)));
137 std::thread t(&Connection::loop, &conn);
139 std::this_thread::sleep_for(std::chrono::milliseconds(15));
144 } catch (std::exception& e) {