1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-08-08 09:42:06 +03:00

Fix open source build

Summary:
Fixing four issues in open source build.

First, two missing changes to `CMakeLists.cpp` changes
- `handshake/TokenGenerator.cpp`, added in D31673160 (7233c55d29)
- `state/AckEvent.cpp`, added in D31221302 (7a916869ff)

The two two issues are caused by inconsistencies between our build env and open source build env, including gtest versions. We should investigate getting open source gtest on same version.

 ---

**[D31216724 (20c17a882b)] We cannot use lambdas with `testing::ResultOf` for older versions of gtest and/or older compilers.**

```
gmock-matchers.h:2310:29: error: no type named 'result_type' in '(lambda at /data/sandcastle/temp/fbcode_builder_getdeps/shipit/mvfst/quic/api/test/QuicTransportTest.cpp:711:19)'
```

In particular, the `decltype(f(arg))` logic in the following code from gtest is going to fail on the lambda, since a lambda has no type. I believe it would need to be a `declval(decltype(f(arg)))` for the lambda to work.

```
template <typename Functor>
struct CallableTraits {
  typedef Functor StorageType;

  static void CheckIsValid(Functor /* functor */) {}

  template <typename T>
  static auto Invoke(Functor f, const T& arg) -> decltype(f(arg)) {
    return f(arg);
  }
};
```

See this for details: https://stackoverflow.com/questions/4846540/c11-lambda-in-decltype

-----

**[D32772165 (e784fafb10)] `EXPECT_CALL` does not work with the formatting used for older versions of gtest and/or older compilers (again, unclear).**

Specifically
```
EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished);
```

must instead be

```
EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished());
```

Reviewed By: kvtsoy

Differential Revision: D33026131

fbshipit-source-id: 886a6165f2e217cadbe479320195abbd4895eb7c
This commit is contained in:
Brandon Schlinker
2021-12-12 17:03:27 -08:00
committed by Facebook GitHub Bot
parent d036d520c7
commit fa0aa9754e
4 changed files with 33 additions and 22 deletions

View File

@@ -702,22 +702,31 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
// part 3.2, we write two ACK eliciting packets, then become app limited // part 3.2, we write two ACK eliciting packets, then become app limited
// one of the ACK eliciting packets contains an ACK frame // one of the ACK eliciting packets contains an ACK frame
{ {
// older versions of gtest do not seem to accept lambdas for ResultOf
// matcher, so define an std::function
std::function<uint64_t(const Observer::WriteEvent&)>
countPacketsWithAckFrames =
[](const Observer::WriteEvent& event) -> uint64_t {
uint64_t packetsWithAckFrames = 0;
for (auto& outstandingPacket : event.outstandingPackets) {
bool hasAckFrame = false;
for (auto& frame : outstandingPacket.packet.frames) {
if (frame.asWriteAckFrame()) {
hasAckFrame = true;
}
}
if (hasAckFrame) {
packetsWithAckFrames++;
}
}
return packetsWithAckFrames;
};
const auto writeEventMatcher = AllOf( const auto writeEventMatcher = AllOf(
testing::ResultOf(countPacketsWithAckFrames, 1),
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(9)), &Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(9)),
testing::Property(
&Observer::WriteEvent::getOutstandingPackets,
testing::Contains(testing::ResultOf(
[](auto& outstandingPacket) {
for (auto& frame : outstandingPacket.packet.frames) {
auto ackFrame = frame.asWriteAckFrame();
if (ackFrame) {
return true;
}
}
return false;
},
testing::Eq(true)))),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum))); &Observer::WriteEvent::writeCount, testing::Eq(writeNum)));
const auto packetsWrittenEventMatcher = AllOf( const auto packetsWrittenEventMatcher = AllOf(

View File

@@ -8,6 +8,7 @@ add_library(
handshake/AppToken.cpp handshake/AppToken.cpp
handshake/ServerHandshake.cpp handshake/ServerHandshake.cpp
handshake/StatelessResetGenerator.cpp handshake/StatelessResetGenerator.cpp
handshake/TokenGenerator.cpp
state/ServerStateMachine.cpp) state/ServerStateMachine.cpp)
target_include_directories( target_include_directories(

View File

@@ -3063,7 +3063,7 @@ TEST_F(
folly::SocketAddress newPeer("100.101.102.103", 23456); folly::SocketAddress newPeer("100.101.102.103", 23456);
EXPECT_CALL(handshakeFinishedCallback, onHandshakeUnfinished); EXPECT_CALL(handshakeFinishedCallback, onHandshakeUnfinished());
try { try {
recvClientFinished(true, &newPeer); recvClientFinished(true, &newPeer);
} catch (const std::runtime_error& ex) { } catch (const std::runtime_error& ex) {
@@ -3097,7 +3097,7 @@ TEST_F(
auto data = IOBuf::copyBuffer("bad data"); auto data = IOBuf::copyBuffer("bad data");
folly::SocketAddress newPeer("100.101.102.103", 23456); folly::SocketAddress newPeer("100.101.102.103", 23456);
EXPECT_CALL(handshakeFinishedCallback, onHandshakeUnfinished); EXPECT_CALL(handshakeFinishedCallback, onHandshakeUnfinished());
try { try {
recvClientFinished(true, &newPeer); recvClientFinished(true, &newPeer);
} catch (const std::runtime_error& ex) { } catch (const std::runtime_error& ex) {
@@ -3296,7 +3296,7 @@ TEST_F(
*server->getNonConstConn().writableBytesLimit, *server->getNonConstConn().writableBytesLimit,
server->getConn().transportSettings.limitedCwndInMss * originalUdpSize); server->getConn().transportSettings.limitedCwndInMss * originalUdpSize);
EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished); EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished());
recvClientFinished(); recvClientFinished();
loopForWrites(); loopForWrites();
EXPECT_EQ(server->getConn().writableBytesLimit, folly::none); EXPECT_EQ(server->getConn().writableBytesLimit, folly::none);
@@ -3317,7 +3317,7 @@ TEST_F(
} }
TEST_F(QuicUnencryptedServerTransportTest, TestSendHandshakeDone) { TEST_F(QuicUnencryptedServerTransportTest, TestSendHandshakeDone) {
EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished); EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished());
getFakeHandshakeLayer()->allowZeroRttKeys(); getFakeHandshakeLayer()->allowZeroRttKeys();
setupClientReadCodec(); setupClientReadCodec();
recvClientHello(true, QuicVersion::QUIC_DRAFT); recvClientHello(true, QuicVersion::QUIC_DRAFT);
@@ -3535,7 +3535,7 @@ TEST_F(QuicUnencryptedServerTransportTest, TestCloseWhileAsyncPending) {
IOBufEqualTo eq; IOBufEqualTo eq;
EXPECT_TRUE(eq(getCryptoStreamData(), IOBuf::copyBuffer("SHLO"))); EXPECT_TRUE(eq(getCryptoStreamData(), IOBuf::copyBuffer("SHLO")));
EXPECT_CALL(handshakeFinishedCallback, onHandshakeUnfinished); EXPECT_CALL(handshakeFinishedCallback, onHandshakeUnfinished());
recvClientFinished(); recvClientFinished();
server->close(std::make_pair( server->close(std::make_pair(
@@ -3661,7 +3661,7 @@ TEST_P(
EXPECT_EQ(server->getConn().streamManager->streamCount(), 0); EXPECT_EQ(server->getConn().streamManager->streamCount(), 0);
EXPECT_EQ(server->getConn().pendingOneRttData->size(), 1); EXPECT_EQ(server->getConn().pendingOneRttData->size(), 1);
EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished); EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished());
recvClientFinished(); recvClientFinished();
EXPECT_EQ(server->getConn().streamManager->streamCount(), 1); EXPECT_EQ(server->getConn().streamManager->streamCount(), 1);
EXPECT_EQ(server->getConn().pendingZeroRttData, nullptr); EXPECT_EQ(server->getConn().pendingZeroRttData, nullptr);
@@ -3721,7 +3721,7 @@ TEST_P(
GetParam().acceptZeroRtt ? 1 : 0); GetParam().acceptZeroRtt ? 1 : 0);
EXPECT_EQ(server->getConn().pendingOneRttData->size(), 1); EXPECT_EQ(server->getConn().pendingOneRttData->size(), 1);
EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished); EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished());
recvClientFinished(); recvClientFinished();
EXPECT_EQ( EXPECT_EQ(
server->getConn().streamManager->streamCount(), server->getConn().streamManager->streamCount(),
@@ -3839,7 +3839,7 @@ class QuicServerTransportHandshakeTest
EXPECT_CALL(routingCallback, onConnectionIdBound(_)); EXPECT_CALL(routingCallback, onConnectionIdBound(_));
// NST is always written after CFIN is processed // NST is always written after CFIN is processed
expectWriteNewSessionTicket(); expectWriteNewSessionTicket();
EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished); EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished());
recvClientFinished(); recvClientFinished();
} }
@@ -3902,7 +3902,7 @@ TEST_P(QuicServerTransportHandshakeTest, TestD6DStartCallback) {
TEST_F(QuicUnencryptedServerTransportTest, DuplicateOneRttWriteCipher) { TEST_F(QuicUnencryptedServerTransportTest, DuplicateOneRttWriteCipher) {
setupClientReadCodec(); setupClientReadCodec();
recvClientHello(); recvClientHello();
EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished); EXPECT_CALL(handshakeFinishedCallback, onHandshakeFinished());
recvClientFinished(); recvClientFinished();
loopForWrites(); loopForWrites();
try { try {

View File

@@ -54,6 +54,7 @@ target_link_libraries(
add_library( add_library(
mvfst_state_ack_handler mvfst_state_ack_handler
AckEvent.cpp
AckHandlers.cpp AckHandlers.cpp
) )