38 TEST_CASE(
"ConnectionFactory's can be constructed.",
"[ConnectionFactory]")
40 fakeit::Mock<Filter> mock_filter;
45 SECTION(
"And ensures the given filter is not null.")
54 TEST_CASE(
"ConnectionFactory's 'get' method returns a new connection.",
55 "[ConnectionFactory]")
58 std::make_shared<packet_v2::Packet>(to_vector(HeartbeatV2()));
59 fakeit::Mock<Filter> mock_filter;
60 fakeit::When(Method(mock_filter, will_accept)
61 ).AlwaysDo([](
auto & a,
auto & b)
65 return std::pair<bool, int>(
true, 0);
68 REQUIRE(filter !=
nullptr);
70 SECTION(
"with connection name")
72 std::unique_ptr<Connection> conn = connection_factory.
get(
"CONNECTION");
73 REQUIRE(conn !=
nullptr);
74 REQUIRE(
str(*conn) ==
"CONNECTION");
78 REQUIRE(packet !=
nullptr);
81 SECTION(
"without connection name")
83 std::unique_ptr<Connection> conn = connection_factory.
get();
84 REQUIRE(conn !=
nullptr);
85 REQUIRE(
str(*conn) ==
"unknown");
89 REQUIRE(packet !=
nullptr);
95 TEST_CASE(
"ConnectionFactory's 'wait_for_packet' method waits for a packet " 96 "on any of the connections created by the factory.",
97 "[ConnectionFactory]")
100 std::make_shared<packet_v2::Packet>(to_vector(HeartbeatV2()));
101 fakeit::Mock<Filter> mock_filter;
102 fakeit::When(Method(mock_filter, will_accept)
103 ).AlwaysDo([](
auto & a,
auto & b)
107 return std::pair<bool, int>(
true, 0);
110 REQUIRE(filter !=
nullptr);
112 std::unique_ptr<Connection> conn1 = connection_factory.
get();
113 std::unique_ptr<Connection> conn2 = connection_factory.
get();
116 SECTION(
"First connection.")
118 auto future = std::async(std::launch::async, [&]()
122 REQUIRE(future.wait_for(0ms) != std::future_status::ready);
124 REQUIRE(future.wait_for(5ms) == std::future_status::ready);
125 REQUIRE(future.get());
127 SECTION(
"Second connection.")
129 auto future = std::async(std::launch::async, [&]()
133 REQUIRE(future.wait_for(0ms) != std::future_status::ready);
135 REQUIRE(future.wait_for(5ms) == std::future_status::ready);
136 REQUIRE(future.get());
138 SECTION(
"Returns false on timeout.")
140 auto future = std::async(std::launch::async, [&]()
144 REQUIRE(future.wait_for(0ms) != std::future_status::ready);
145 REQUIRE(future.wait_for(10ms) == std::future_status::ready);
146 REQUIRE_FALSE(future.get());
std::string str(const T &object)
TEST_VIRTUAL std::unique_ptr< C > get(std::string name="unknown")
TEST_VIRTUAL bool wait_for_packet(const std::chrono::nanoseconds &timeout)
TEST_VIRTUAL std::shared_ptr< const Packet > next_packet(const std::chrono::nanoseconds &timeout=std::chrono::nanoseconds(0))
std::shared_ptr< T > mock_shared(fakeit::Mock< T > &mock)
TEST_CASE("ConnectionFactory's can be constructed.", "[ConnectionFactory]")
TEST_VIRTUAL void add_address(MAVAddress address)
TEST_VIRTUAL void send(std::shared_ptr< const Packet > packet)