eb59a28949264f46983b696d08f254243e38d86c
[platform/core/security/suspicious-activity-monitor.git] / device-agent / utest / test_connection.cpp
1 #include <iostream>
2 #include <gmock/gmock.h>
3 #include <gtest/gtest.h>
4 #include <functional>
5 #include <thread>
6 #include "reportcomposer.h"
7 #include "connection.h"
8 #include "restservicemock.h"
9
10 using namespace NetworkManager;
11 using ::testing::_;
12 using ::testing::Eq;
13 using ::testing::Return;
14
15 #define TAG "Tests"
16
17 namespace
18 {
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"};
24
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"}
32 ])-"};
33 const std::string TEST_POLICY_URI{"policy-uri"};
34 const std::string TEST_ACTION_URI{"action-uri"};
35
36 }
37
38 namespace NetworkManager
39 {
40
41 bool operator==(const Event& e1, const Event& e2)
42 {
43     return e1.type == e2.type && e1.data == e2.data;
44 }
45
46 }
47
48 class TestConnection: public ::testing::Test
49 {
50 public:
51     void SetUp() override
52     {
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);
58     }
59
60     void TearDown() override
61     {
62
63     }
64 protected:
65
66     Settings settings;
67 };
68
69 class EventListenerMock: public EventListener
70 {
71 public:
72     MOCK_METHOD1(accept, void(const Event& event));
73 };
74
75 TEST_F(TestConnection, test_signal)
76 {
77     RestServiceMock rest;
78     Connection conn(settings, &rest);
79     ReportComposer rc;
80     rc.addEvent(Event(TEST_EVENT_TYPE, TEST_EVENT_DATA1));
81     rc.addEvent(Event(TEST_EVENT_TYPE, TEST_EVENT_DATA2));
82
83     EXPECT_CALL(rest, sendReport(_, ::testing::Matcher<const Json::Value&>(rc.get())))
84             .Times(1);
85
86     Event ev(TEST_EVENT_TYPE, TEST_EVENT_DATA1);
87
88     std::thread t(&Connection::loop, &conn);
89     conn.signal(ev);
90     conn.signal(Event(TEST_EVENT_TYPE, TEST_EVENT_DATA2));
91
92     std::this_thread::sleep_for(std::chrono::milliseconds(100));
93
94     conn.stop();
95
96     t.join();
97 }
98
99 TEST_F(TestConnection, test_Listeners)
100 {
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);
106
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);
116
117     conn.addEventListener("policy", &el1);
118     conn.addEventListener("policy", &el2);
119
120     int id = conn.addEventListener("action", &el0);
121
122     conn.addEventListener("action", &el3);
123
124     conn.removeEventListener(id);
125
126     std::thread t(&Connection::loop, &conn);
127
128     std::this_thread::sleep_for(std::chrono::milliseconds(1200));
129
130     conn.stop();
131
132     t.join();
133 }