9 #include <gmock/gmock.h> 10 #include <gtest/gtest.h> 25 using namespace folly;
55 context_ = std::make_shared<FizzClientContext>();
56 context_->setSendEarlyData(
true);
57 mockPskCache_ = std::make_shared<MockPskCache>();
58 context_->setPskCache(mockPskCache_);
65 ON_CALL(readCallback_, isBufferMovable_()).WillByDefault(
Return(
true));
71 .WillRepeatedly(SaveArg<0>(&socketReadCallback_));
90 expectTransportReadCallback();
94 client_->connect(&handshakeCallback_,
nullptr,
sni, pskIdentity_);
100 std::shared_ptr<const Cert>
clientCert =
nullptr,
101 std::shared_ptr<const Cert>
serverCert =
nullptr,
102 bool pskResumed =
false) {
105 auto addToState = [=](
State& newState) {
106 newState.exporterMasterSecret() =
111 newState.alpn() =
none;
113 newState.alpn() =
alpn;
118 if (acceptEarlyData || pskResumed) {
133 EXPECT_CALL(handshakeCallback_, _fizzHandshakeSuccess());
134 fullHandshakeSuccess(
false);
149 auto addParamsToState =
160 EXPECT_CALL(handshakeCallback_, _fizzHandshakeSuccess());
181 return eq(*arg, *expected);
236 client_->getEkm(
"EXPORTER-Some-Label",
nullptr, 32), std::runtime_error);
238 client_->getEkm(
"EXPORTER-Some-Label",
nullptr, 32);
247 EXPECT_CALL(handshakeCallback_, _fizzHandshakeError(
_));
264 client_->setReadCB(&readCallback_);
276 client_->setReadCB(&readCallback_);
293 client_->setReadCB(&readCallback_);
298 [&numTimesRun](
State& newState) {
312 EXPECT_CALL(handshakeCallback_, _fizzHandshakeError(
_));
327 EXPECT_CALL(handshakeCallback_, _fizzHandshakeSuccess());
360 auto server = std::make_unique<TestServer>();
367 evbClient->closeNow();
371 server->getAddress(),
405 HasSubstr(
"handshake connect called but socket isn't open"));
445 EXPECT_EQ(client_->getApplicationProtocol(),
"h2");
450 EXPECT_CALL(handshakeCallback_, _fizzHandshakeSuccess());
451 fullHandshakeSuccess(
false,
"");
452 EXPECT_EQ(client_->getApplicationProtocol(),
"");
457 EXPECT_CALL(handshakeCallback_, _fizzHandshakeSuccess());
458 fullHandshakeSuccess(
false,
"h2",
nullptr,
nullptr,
true);
464 EXPECT_CALL(handshakeCallback_, _fizzHandshakeSuccess());
465 fullHandshakeSuccess(
false,
"h2",
nullptr,
nullptr,
false);
471 EXPECT_EQ(client_->getSelfCert(),
nullptr);
472 EXPECT_EQ(client_->getPeerCert(),
nullptr);
476 auto clientCert = std::make_shared<MockCert>();
477 auto serverCert = std::make_shared<MockCert>();
479 EXPECT_CALL(handshakeCallback_, _fizzHandshakeSuccess());
480 fullHandshakeSuccess(
false,
"h2",
clientCert, serverCert);
482 EXPECT_EQ(client_->getSelfCert(),
nullptr);
484 EXPECT_EQ(client_->getPeerCert(),
nullptr);
488 completeEarlyHandshake();
489 fullHandshakeSuccess(
true);
495 auto clientCert = std::make_shared<MockCert>();
496 auto serverCert = std::make_shared<MockCert>();
500 completeEarlyHandshake(
std::move(params));
501 EXPECT_EQ(client_->getApplicationProtocol(),
"h2");
503 EXPECT_EQ(client_->getSelfCert(),
nullptr);
505 EXPECT_EQ(client_->getPeerCert(),
nullptr);
512 EXPECT_EQ(client_->getApplicationProtocol(),
"");
516 completeEarlyHandshake();
522 fullHandshakeSuccess(
true);
530 completeEarlyHandshake();
531 client_->setReplaySafetyCallback(&mockReplayCallback_);
538 fullHandshakeSuccess(
true);
542 completeEarlyHandshake();
543 client_->setReplaySafetyCallback(&mockReplayCallback_);
544 client_->setReplaySafetyCallback(
nullptr);
546 EXPECT_CALL(mockReplayCallback_, onReplaySafe_()).Times(0);
547 fullHandshakeSuccess(
true);
551 completeEarlyHandshake();
552 client_->setReplaySafetyCallback(&mockReplayCallback_);
556 std::memset(longWrite->writableData(),
'a', 2000);
557 longWrite->append(2000);
566 client_->writeChain(
nullptr, earlyWrite->clone());
567 client_->writeChain(
nullptr, longWrite->clone());
568 client_->writeChain(
nullptr, shortWrite->clone());
591 .WillOnce(
Invoke([
this, &replaySafeWrite]() {
592 client_->writeChain(
nullptr, replaySafeWrite->clone());
594 fullHandshakeSuccess(
true);
598 completeEarlyHandshake();
599 client_->setReplaySafetyCallback(&mockReplayCallback_);
602 std::memset(buf->writableData(),
'a', 2000);
604 client_->writeChain(
nullptr, buf->clone());
612 fullHandshakeSuccess(
true);
616 client_->setEarlyDataRejectionPolicy(
618 completeEarlyHandshake();
621 std::memset(buf->writableData(),
'a', 2000);
623 client_->writeChain(
nullptr,
std::move(buf));
628 fullHandshakeSuccess(
false);
632 client_->setEarlyDataRejectionPolicy(
634 completeEarlyHandshake();
635 client_->setReplaySafetyCallback(&mockReplayCallback_);
636 client_->setReadCB(&readCallback_);
642 EXPECT_CALL(mockReplayCallback_, onReplaySafe_()).Times(0);
643 fullHandshakeSuccess(
false);
647 client_->setEarlyDataRejectionPolicy(
649 completeEarlyHandshake();
650 client_->setReplaySafetyCallback(&mockReplayCallback_);
652 fullHandshakeSuccess(
false);
656 client_->setEarlyDataRejectionPolicy(
658 completeEarlyHandshake();
678 fullHandshakeSuccess(
false);
682 client_->setEarlyDataRejectionPolicy(
684 completeEarlyHandshake();
685 client_->setReplaySafetyCallback(&mockReplayCallback_);
694 std::memset(buf->writableData(),
'b', 2000);
696 client_->writeChain(
nullptr, buf->clone());
721 fullHandshakeSuccess(
false);
725 client_->setEarlyDataRejectionPolicy(
727 completeEarlyHandshake();
736 client_->write(
nullptr, buf->data(), buf->length());
743 fullHandshakeSuccess(
false);
747 client_->setEarlyDataRejectionPolicy(
749 completeEarlyHandshake();
750 client_->setReplaySafetyCallback(&mockReplayCallback_);
751 client_->setReadCB(&readCallback_);
757 EXPECT_CALL(mockReplayCallback_, onReplaySafe_()).Times(0);
758 fullHandshakeSuccess(
false,
"h3");
762 client_->setEarlyDataRejectionPolicy(
764 completeEarlyHandshake();
765 client_->setReplaySafetyCallback(&mockReplayCallback_);
766 client_->setReadCB(&readCallback_);
772 EXPECT_CALL(mockReplayCallback_, onReplaySafe_()).Times(0);
773 fullHandshakeSuccess(
false,
"h3");
777 client_->setEarlyDataRejectionPolicy(
782 client_->setReplaySafetyCallback(&mockReplayCallback_);
783 client_->setReadCB(&readCallback_);
789 EXPECT_CALL(mockReplayCallback_, onReplaySafe_()).Times(0);
790 fullHandshakeSuccess(
false);
794 client_->setEarlyDataRejectionPolicy(
799 client_->setReplaySafetyCallback(&mockReplayCallback_);
800 client_->setReadCB(&readCallback_);
806 EXPECT_CALL(mockReplayCallback_, onReplaySafe_()).Times(0);
807 fullHandshakeSuccess(
false);
811 client_->setEarlyDataRejectionPolicy(
814 params.clientCert = std::make_shared<MockCert>();
816 client_->setReplaySafetyCallback(&mockReplayCallback_);
817 client_->setReadCB(&readCallback_);
823 EXPECT_CALL(mockReplayCallback_, onReplaySafe_()).Times(0);
824 fullHandshakeSuccess(
false);
828 client_->setEarlyDataRejectionPolicy(
831 params.clientCert = std::make_shared<MockCert>();
833 client_->setReplaySafetyCallback(&mockReplayCallback_);
834 client_->setReadCB(&readCallback_);
840 EXPECT_CALL(mockReplayCallback_, onReplaySafe_()).Times(0);
841 fullHandshakeSuccess(
false);
845 client_->setEarlyDataRejectionPolicy(
847 auto cert1 = std::make_shared<MockCert>();
848 auto cert2 = std::make_shared<MockCert>();
850 params.serverCert = cert1;
851 completeEarlyHandshake(
std::move(params));
852 client_->setReplaySafetyCallback(&mockReplayCallback_);
853 client_->setReadCB(&readCallback_);
859 EXPECT_CALL(mockReplayCallback_, onReplaySafe_()).Times(0);
862 fullHandshakeSuccess(
false,
"h2",
nullptr, cert2);
866 client_->setEarlyDataRejectionPolicy(
868 auto cert1 = std::make_shared<MockCert>();
869 auto cert2 = std::make_shared<MockCert>();
871 params.serverCert = cert1;
872 completeEarlyHandshake(
std::move(params));
873 client_->setReplaySafetyCallback(&mockReplayCallback_);
877 fullHandshakeSuccess(
false,
"h2",
nullptr, cert2);
881 client_->setEarlyDataRejectionPolicy(
883 auto cert1 = std::make_shared<MockCert>();
884 auto cert2 = std::make_shared<MockCert>();
886 params.clientCert = cert1;
887 completeEarlyHandshake(
std::move(params));
888 client_->setReplaySafetyCallback(&mockReplayCallback_);
889 client_->setReadCB(&readCallback_);
895 EXPECT_CALL(mockReplayCallback_, onReplaySafe_()).Times(0);
898 fullHandshakeSuccess(
false,
"h2", cert2,
nullptr);
902 client_->setEarlyDataRejectionPolicy(
904 auto cert1 = std::make_shared<MockCert>();
905 auto cert2 = std::make_shared<MockCert>();
907 params.clientCert = cert1;
908 completeEarlyHandshake(
std::move(params));
909 client_->setReplaySafetyCallback(&mockReplayCallback_);
913 fullHandshakeSuccess(
false,
"h2", cert2,
nullptr);
917 EXPECT_CALL(*mockPskCache_, removePsk(*pskIdentity_));
918 completeEarlyHandshake();
919 fullHandshakeSuccess(
false);
923 completeEarlyHandshake();
935 completeEarlyHandshake();
947 client_->setReadCB(&readCallback_);
958 client_->setReadCB(&readCallback_);
963 socketReadCallback_->readBufferAvailable(
970 client_->setReadCB(&readCallback_);
975 socketReadCallback_->readBufferAvailable(
folly::fbstring what() const
std::unique_ptr< folly::IOBuf > data
static Optional< EarlyDataParams > getEarlyDataParams(const FizzClientContext &context, const Optional< CachedPsk > &psk)
void expectTransportReadCallback()
static EarlyDataParams getEarlyDataParams()
void write(const T &in, folly::io::Appender &appender)
int connect(NetworkSocket s, const sockaddr *name, socklen_t namelen)
GTEST_API_ Cardinality AtLeast(int n)
void completeEarlyHandshake(EarlyDataParams params=getEarlyDataParams())
#define EXPECT_THROW(statement, expected_exception)
static std::unique_ptr< IOBuf > create(std::size_t capacity)
void fullHandshakeSuccess(bool acceptEarlyData, std::string alpn="h2", std::shared_ptr< const Cert > clientCert=nullptr, std::shared_ptr< const Cert > serverCert=nullptr, bool pskResumed=false)
#define EXPECT_EQ(val1, val2)
constexpr detail::Map< Move > move
folly::small_vector< TLSContent, 4 > contents
virtual void connectErr(const AsyncSocketException &ex) noexcept=0
—— Concurrent Priority Queue Implementation ——
MockReplaySafetyCallback mockReplayCallback_
requires E e noexcept(noexcept(s.error(std::move(e))))
std::unique_ptr< AsyncFizzClientT, folly::DelayedDestruction::Destructor > UniquePtr
MockHandshakeCallbackT< MockClientStateMachineInstance > handshakeCallback_
requires And< SemiMovable< VN >... > &&SemiMovable< E > auto error(E e)
PolymorphicAction< internal::InvokeWithoutArgsAction< FunctionImpl > > InvokeWithoutArgs(FunctionImpl function_impl)
void connectSuccess() noexceptoverride
constexpr bool empty() const
std::map< OptionKey, int > OptionMap
TEST_F(AsyncFizzClientTest, TestConnect)
constexpr Params params[]
std::unique_ptr< AsyncTransportWrapper, Destructor > UniquePtr
AsyncTransportWrapper::ReadCallback * socketReadCallback_
PolymorphicMatcher< internal::HasSubstrMatcher< internal::string > > HasSubstr(const internal::string &substring)
PolymorphicAction< internal::InvokeAction< FunctionImpl > > Invoke(FunctionImpl function_impl)
std::vector< Action > Actions
MATCHER_P(BufMatches, expected,"")
AsyncServerSocket::UniquePtr socket_
std::basic_string< E, T, A > toStdString() const
EncryptionLevel encryptionLevel
std::shared_ptr< const Cert > serverCert
MockClientStateMachineInstance * machine_
Actions actions(Args &&...act)
#define EXPECT_TRUE(condition)
#define EXPECT_THAT(value, matcher)
#define ON_CALL(obj, call)
MockReadCallback readCallback_
#define MOCK_METHOD1(m,...)
MockClientStateMachineInstance()
std::shared_ptr< MockPskCache > mockPskCache_
std::shared_ptr< const Cert > clientCert
#define EXPECT_CALL(obj, call)
const internal::AnythingMatcher _
MockWriteCallback writeCallback_
folly::Optional< std::string > alpn
#define EXPECT_FALSE(condition)
AsyncFizzClientT< MockClientStateMachineInstance >::UniquePtr client_
static MockClientStateMachineInstance * instance
AsyncSocketExceptionType getType() const noexcept
static std::unique_ptr< IOBuf > copyBuffer(const void *buf, std::size_t size, std::size_t headroom=0, std::size_t minTailroom=0)
MockAsyncTransport * socket_
void connectErr(const AsyncSocketException &ex) noexceptoverride
uint32_t maxEarlyDataSize
std::unique_ptr< folly::IOBuf > data
std::shared_ptr< FizzClientContext > context_
internal::ReturnAction< R > Return(R value)
#define MOCK_METHOD0(m,...)