-
-
Notifications
You must be signed in to change notification settings - Fork 485
/
connection_initiator_test.cpp
84 lines (67 loc) · 2.33 KB
/
connection_initiator_test.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <future>
#include <gmock/gmock.h>
#include "connection_initiator.h"
#include "mocks/dronecore_mock.h"
using testing::_;
using testing::NiceMock;
using event_callback_t = dronecore::testing::event_callback_t;
using MockDroneCore = NiceMock<dronecore::testing::MockDroneCore>;
using ConnectionInitiator = dronecore::backend::ConnectionInitiator<MockDroneCore>;
static constexpr auto ARBITRARY_PORT = 1291;
static constexpr auto ARBITRARY_UUID = 1492;
ACTION_P(SaveCallback, event_callback)
{
*event_callback = arg0;
}
TEST(ConnectionInitiator, registerDiscoverIsCalledExactlyOnce)
{
ConnectionInitiator initiator;
MockDroneCore dc;
EXPECT_CALL(dc, register_on_discover(_))
.Times(1);
initiator.start(dc, ARBITRARY_PORT);
}
TEST(ConnectionInitiator, startAddsUDPConnection)
{
ConnectionInitiator initiator;
MockDroneCore dc;
EXPECT_CALL(dc, add_udp_connection(_));
initiator.start(dc, ARBITRARY_PORT);
}
TEST(ConnectionInitiator, startHangsUntilDeviceDiscovered)
{
ConnectionInitiator initiator;
MockDroneCore dc;
event_callback_t discover_callback;
EXPECT_CALL(dc, register_on_discover(_))
.WillOnce(SaveCallback(&discover_callback));
auto async_future = std::async(std::launch::async, [&initiator, &dc]() {
initiator.start(dc, ARBITRARY_PORT);
initiator.wait();
});
EXPECT_TRUE(async_future.wait_for(std::chrono::milliseconds(100)) == std::future_status::timeout) <<
"Call to 'start(...)' should hang until 'discover_callback(...)' is actually called!";
discover_callback(ARBITRARY_UUID);
}
TEST(ConnectionInitiator, connectionDetectedIfDiscoverCallbackCalledBeforeWait)
{
ConnectionInitiator initiator;
MockDroneCore dc;
event_callback_t discover_callback;
EXPECT_CALL(dc, register_on_discover(_))
.WillOnce(SaveCallback(&discover_callback));
initiator.start(dc, ARBITRARY_PORT);
discover_callback(ARBITRARY_UUID);
initiator.wait();
}
TEST(ConnectionInitiator, doesNotCrashIfDiscoverCallbackCalledMoreThanOnce)
{
ConnectionInitiator initiator;
MockDroneCore dc;
event_callback_t discover_callback;
EXPECT_CALL(dc, register_on_discover(_))
.WillOnce(SaveCallback(&discover_callback));
initiator.start(dc, ARBITRARY_PORT);
discover_callback(ARBITRARY_UUID);
discover_callback(ARBITRARY_UUID);
}