From 35a359f1054e50c5816591c6fd31ac6f40e857f7 Mon Sep 17 00:00:00 2001 From: Nick Banks Date: Wed, 4 Dec 2019 09:35:50 -0800 Subject: [PATCH 1/4] QUIC: Fix Failing Tests --- core/connection.c | 14 ++++-- platform/tls_stub.c | 3 +- test/bin/quic_gtest.cpp | 99 +++++++++++++++++++++++++++++++++-------- test/bin/quic_gtest.h | 3 +- 4 files changed, 93 insertions(+), 26 deletions(-) diff --git a/core/connection.c b/core/connection.c index f6431f97fe..5afb2a004b 100644 --- a/core/connection.c +++ b/core/connection.c @@ -1607,10 +1607,16 @@ QuicConnHandshakeConfigure( QUIC_CID_HASH_ENTRY, Link); LocalTP.Flags |= QUIC_TP_FLAG_STATELESS_RESET_TOKEN; - QuicBindingGenerateStatelessResetToken( - Connection->Paths[0].Binding, - SourceCID->CID.Data, - LocalTP.StatelessResetToken); + Status = + QuicBindingGenerateStatelessResetToken( + Connection->Paths[0].Binding, + SourceCID->CID.Data, + LocalTP.StatelessResetToken); + if (QUIC_FAILED(Status)) { + EventWriteQuicConnErrorStatus(Connection, Status, + "QuicBindingGenerateStatelessResetToken"); + goto Error; + } if (Connection->AckDelayExponent != QUIC_DEFAULT_ACK_DELAY_EXPONENT) { LocalTP.Flags |= QUIC_TP_FLAG_ACK_DELAY_EXPONENT; diff --git a/platform/tls_stub.c b/platform/tls_stub.c index 92e8e4d041..700447fa20 100644 --- a/platform/tls_stub.c +++ b/platform/tls_stub.c @@ -1407,7 +1407,6 @@ QuicHashCompute( UNREFERENCED_PARAMETER(Hash); UNREFERENCED_PARAMETER(Input); UNREFERENCED_PARAMETER(InputLength); - UNREFERENCED_PARAMETER(OutputLength); - UNREFERENCED_PARAMETER(Output); + QuicZeroMemory(Output, OutputLength); return QUIC_STATUS_SUCCESS; } diff --git a/test/bin/quic_gtest.cpp b/test/bin/quic_gtest.cpp index dfa240b047..dcf60e7443 100644 --- a/test/bin/quic_gtest.cpp +++ b/test/bin/quic_gtest.cpp @@ -7,6 +7,10 @@ #include "quic_gtest.h" +#ifdef QUIC_LOGS_WPP +#include "quic_gtest.tmh" +#endif + QUIC_API_V1* MsQuic; HQUIC Registration; QUIC_SEC_CONFIG_PARAMS* SelfSignedCertParams; @@ -98,19 +102,45 @@ LogTestFailure( va_start(Args, Format); (void)_vsnprintf_s(Buffer, sizeof(Buffer), _TRUNCATE, Format, Args); va_end(Args); + LogError("[test] FAILURE - %s:%d - %s", File, Line, Buffer); GTEST_MESSAGE_AT_(File, Line, Buffer, ::testing::TestPartResult::kFatalFailure); } +struct TestLogger { + const char* TestName; + TestLogger(const char* Name) : TestName(Name) { + LogInfo("[test] START %s", TestName); + } + ~TestLogger() { + LogInfo("[test] END %s", TestName); + } +}; + +template +struct TestLoggerT { + const char* TestName; + TestLoggerT(const char* Name, const T& Params) : TestName(Name) { + std::ostringstream stream; stream << Params; + LogInfo("[test] START %s, %s", TestName, stream.str().c_str()); + } + ~TestLoggerT() { + LogInfo("[test] END %s", TestName); + } +}; + TEST(ParameterValidation, ValidateApi) { + TestLogger Logger("QuicTestValidateApi"); QuicTestValidateApi(); } TEST(ParameterValidation, ValidateRegistration) { + TestLogger Logger("QuicTestValidateRegistration"); QuicTestValidateRegistration(); } #if _WIN32 TEST(ParameterValidation, ValidateServerSecConfig) { + TestLogger Logger("QuicTestValidateServerSecConfig"); QUIC_CERTIFICATE_HASH_STORE CertHashStore = { QUIC_CERTIFICATE_HASH_STORE_FLAG_NONE }; memcpy(CertHashStore.ShaHash, SelfSignedCertParams->Thumbprint, sizeof(CertHashStore.ShaHash)); memcpy(CertHashStore.StoreName, "My", 2); @@ -120,58 +150,72 @@ TEST(ParameterValidation, ValidateServerSecConfig) { #endif // _WIN32 TEST(ParameterValidation, ValidateSession) { + TestLogger Logger("QuicTestValidateSession"); QuicTestValidateSession(); } TEST(ParameterValidation, ValidateListener) { + TestLogger Logger("QuicTestValidateListener"); QuicTestValidateListener(); } TEST(ParameterValidation, ValidateConnection) { + TestLogger Logger("QuicTestValidateConnection"); QuicTestValidateConnection(); } TEST_P(WithBool, ValidateStream) { + TestLoggerT Logger("QuicTestValidateStream", GetParam()); QuicTestValidateStream(GetParam()); } TEST(Basic, CreateListener) { + TestLogger Logger("QuicTestCreateListener"); QuicTestCreateListener(); } TEST(Basic, StartListener) { + TestLogger Logger("QuicTestStartListener"); QuicTestStartListener(); } TEST_P(WithFamilyArgs, StartListenerImplicit) { + TestLoggerT Logger("QuicTestStartListenerImplicit", GetParam()); QuicTestStartListenerImplicit(GetParam().Family); } TEST(Basic, StartTwoListeners) { + TestLogger Logger("QuicTestStartTwoListeners"); QuicTestStartTwoListeners(); } TEST(Basic, StartTwoListenersSameALPN) { + TestLogger Logger("QuicTestStartTwoListenersSameALPN"); QuicTestStartTwoListenersSameALPN(); } TEST_P(WithFamilyArgs, StartListenerExplicit) { + TestLoggerT Logger("QuicTestStartListenerImplicit", GetParam()); QuicTestStartListenerExplicit(GetParam().Family); } TEST(Basic, CreateConnection) { + TestLogger Logger("QuicTestCreateConnection"); QuicTestCreateConnection(); } TEST_P(WithFamilyArgs, BindConnectionImplicit) { + TestLoggerT Logger("QuicTestBindConnectionImplicit", GetParam()); QuicTestBindConnectionImplicit(GetParam().Family); } TEST_P(WithFamilyArgs, BindConnectionExplicit) { + TestLoggerT Logger("QuicTestBindConnectionExplicit", GetParam()); QuicTestBindConnectionExplicit(GetParam().Family); } TEST_P(WithHandshakeArgs1, Connect) { + TestLoggerT Logger("QuicTestConnect", GetParam()); QuicTestConnect( GetParam().Family, GetParam().ServerStatelessRetry, @@ -180,11 +224,11 @@ TEST_P(WithHandshakeArgs1, Connect) { false, // ChangeMaxStreamID GetParam().MultipleALPNs, false, // AsyncSecConfig - GetParam().MultiPacketClientInitial - ); + GetParam().MultiPacketClientInitial); } TEST_P(WithHandshakeArgs2, OldVersion) { + TestLoggerT Logger("QuicTestConnect", GetParam()); QuicTestConnect( GetParam().Family, GetParam().ServerStatelessRetry, @@ -193,15 +237,16 @@ TEST_P(WithHandshakeArgs2, OldVersion) { false, // ChangeMaxStreamID false, // MultipleALPNs false, // AsyncSecConfig - false // MultiPacketClientInitial - ); + false); // MultiPacketClientInitial } TEST_P(WithFamilyArgs, VersionNegotiation) { + TestLoggerT Logger("QuicTestVersionNegotiation", GetParam()); QuicTestVersionNegotiation(GetParam().Family); } TEST_P(WithFamilyArgs, Rebind) { + TestLoggerT Logger("QuicTestConnect", GetParam()); QuicTestConnect( GetParam().Family, false, // ServerStatelessRetry @@ -210,11 +255,11 @@ TEST_P(WithFamilyArgs, Rebind) { false, // ChangeMaxStreamID false, // MultipleALPNs false, // AsyncSecConfig - false // MultiPacketClientInitial - ); + false); // MultiPacketClientInitial } TEST_P(WithFamilyArgs, ChangeMaxStreamIDs) { + TestLoggerT Logger("QuicTestConnect", GetParam()); QuicTestConnect( GetParam().Family, false, // ServerStatelessRetry @@ -223,11 +268,11 @@ TEST_P(WithFamilyArgs, ChangeMaxStreamIDs) { true, // ChangeMaxStreamID false, // MultipleALPNs false, // AsyncSecConfig - false // MultiPacketClientInitial - ); + false); // MultiPacketClientInitial } TEST_P(WithHandshakeArgs1, AsyncSecurityConfig) { + TestLoggerT Logger("QuicTestConnect", GetParam()); QuicTestConnect( GetParam().Family, GetParam().ServerStatelessRetry, @@ -236,27 +281,31 @@ TEST_P(WithHandshakeArgs1, AsyncSecurityConfig) { false, // ChangeMaxStreamID GetParam().MultipleALPNs, true, // AsyncSecConfig - false // MultiPacketClientInitial - ); + false); // MultiPacketClientInitial } TEST_P(WithFamilyArgs, Unreachable) { + TestLoggerT Logger("QuicTestConnectUnreachable", GetParam()); QuicTestConnectUnreachable(GetParam().Family); } TEST_P(WithFamilyArgs, BadALPN) { + TestLoggerT Logger("QuicTestConnectBadAlpn", GetParam()); QuicTestConnectBadAlpn(GetParam().Family); } TEST_P(WithFamilyArgs, BadSNI) { + TestLoggerT Logger("QuicTestConnectBadSni", GetParam()); QuicTestConnectBadSni(GetParam().Family); } TEST_P(WithFamilyArgs, ServerRejected) { + TestLoggerT Logger("QuicTestConnectServerRejected", GetParam()); QuicTestConnectServerRejected(GetParam().Family); } TEST_P(WithSendArgs1, Send) { + TestLoggerT Logger("QuicTestConnectAndPing", GetParam()); QuicTestConnectAndPing( GetParam().Family, GetParam().Length, @@ -270,8 +319,7 @@ TEST_P(WithSendArgs1, Send) { false, // ServerRejectZeroRtt GetParam().UseSendBuffer, GetParam().UnidirectionalStreams, - GetParam().ServerInitiatedStreams - ); + GetParam().ServerInitiatedStreams); } #ifndef QUIC_0RTT_UNSUPPORTED @@ -280,6 +328,7 @@ TEST_P(WithSendArgs1, Send) { #endif TEST_P(WithSendArgs2, SendLarge) { + TestLoggerT Logger("QuicTestConnectAndPing", GetParam()); QuicTestConnectAndPing( GetParam().Family, 100000000llu, @@ -293,11 +342,11 @@ TEST_P(WithSendArgs2, SendLarge) { false, // ServerRejectZeroRtt GetParam().UseSendBuffer, false, // UnidirectionalStreams - false // ServerInitiatedStreams - ); + false); // ServerInitiatedStreams } TEST_P(WithSendArgs3, SendIntermittently) { + TestLoggerT Logger("QuicTestConnectAndPing", GetParam()); QuicTestConnectAndPing( GetParam().Family, GetParam().Length, @@ -311,46 +360,58 @@ TEST_P(WithSendArgs3, SendIntermittently) { false, // ServerRejectZeroRtt GetParam().UseSendBuffer, false, // UnidirectionalStreams - false // ServerInitiatedStreams - ); + false); // ServerInitiatedStreams } TEST_P(WithBool, IdleTimeout) { + TestLoggerT Logger("QuicTestConnectAndIdle", GetParam()); QuicTestConnectAndIdle(GetParam()); } TEST(Misc, ServerDisconnect) { + TestLogger Logger("QuicTestServerDisconnect"); QuicTestServerDisconnect(); } TEST(Misc, ClientDisconnect) { + TestLogger Logger("QuicTestClientDisconnect"); QuicTestClientDisconnect(false); // TODO - Support true, when race condition is fixed. } TEST_P(WithKeyUpdateArgs1, KeyUpdate) { + TestLoggerT Logger("QuicTestKeyUpdate", GetParam()); QuicTestKeyUpdate( GetParam().Family, GetParam().KeyUpdate == 0 ? 5 : 1, // Iterations 0, // KeyUpdateBytes GetParam().KeyUpdate == 0, // UseKeyUpdateBytes GetParam().KeyUpdate & 1, // ClientKeyUpdate - GetParam().KeyUpdate & 2 // ServerKeyUpdate - ); + GetParam().KeyUpdate & 2); // ServerKeyUpdate } TEST_P(WithAbortiveArgs, AbortiveShutdown) { + TestLoggerT Logger("QuicAbortiveTransfers", GetParam()); QuicAbortiveTransfers(GetParam().Family, GetParam().Flags); } TEST_P(WithCidUpdateArgs, CidUpdate) { + TestLoggerT Logger("QuicTestCidUpdate", GetParam()); QuicTestCidUpdate(GetParam().Family, GetParam().Iterations); } TEST_P(WithReceiveResumeArgs, ReceiveResume) { - QuicTestReceiveResume(GetParam().Family, GetParam().SendBytes, GetParam().ConsumeBytes, GetParam().ShutdownType, GetParam().PauseType, GetParam().PauseFirst); + TestLoggerT Logger("QuicTestReceiveResume", GetParam()); + QuicTestReceiveResume( + GetParam().Family, + GetParam().SendBytes, + GetParam().ConsumeBytes, + GetParam().ShutdownType, + GetParam().PauseType, + GetParam().PauseFirst); } TEST_P(WithReceiveResumeNoDataArgs, ReceiveResumeNoData) { + TestLoggerT Logger("QuicTestReceiveResumeNoData", GetParam()); QuicTestReceiveResumeNoData(GetParam().Family, GetParam().ShutdownType); } diff --git a/test/bin/quic_gtest.h b/test/bin/quic_gtest.h index 7a1edd65eb..910f8ae021 100644 --- a/test/bin/quic_gtest.h +++ b/test/bin/quic_gtest.h @@ -10,6 +10,7 @@ #include #include #include +#include "quic_trace.h" #undef min // gtest headers conflict with previous definitions of min/max. #undef max #include "gtest/gtest.h" @@ -189,7 +190,7 @@ struct KeyUpdateArgs1 { static ::std::vector Generate() { ::std::vector list; for (int Family : { 4, 6 }) - for (int KeyUpdate : { 1, 2, 3, 4 }) + for (int KeyUpdate : { 0, 1, 2, 3 }) list.push_back({ Family, KeyUpdate }); return list; } From 10a3de130132e90d6085d77aa363038dd0eba9da Mon Sep 17 00:00:00 2001 From: Nick Banks Date: Wed, 4 Dec 2019 09:42:52 -0800 Subject: [PATCH 2/4] Specify template type --- test/bin/quic_gtest.cpp | 48 ++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/test/bin/quic_gtest.cpp b/test/bin/quic_gtest.cpp index dcf60e7443..8e919d8606 100644 --- a/test/bin/quic_gtest.cpp +++ b/test/bin/quic_gtest.cpp @@ -165,7 +165,7 @@ TEST(ParameterValidation, ValidateConnection) { } TEST_P(WithBool, ValidateStream) { - TestLoggerT Logger("QuicTestValidateStream", GetParam()); + TestLoggerT Logger("QuicTestValidateStream", GetParam()); QuicTestValidateStream(GetParam()); } @@ -180,7 +180,7 @@ TEST(Basic, StartListener) { } TEST_P(WithFamilyArgs, StartListenerImplicit) { - TestLoggerT Logger("QuicTestStartListenerImplicit", GetParam()); + TestLoggerT Logger("QuicTestStartListenerImplicit", GetParam()); QuicTestStartListenerImplicit(GetParam().Family); } @@ -195,7 +195,7 @@ TEST(Basic, StartTwoListenersSameALPN) { } TEST_P(WithFamilyArgs, StartListenerExplicit) { - TestLoggerT Logger("QuicTestStartListenerImplicit", GetParam()); + TestLoggerT Logger("QuicTestStartListenerImplicit", GetParam()); QuicTestStartListenerExplicit(GetParam().Family); } @@ -205,17 +205,17 @@ TEST(Basic, CreateConnection) { } TEST_P(WithFamilyArgs, BindConnectionImplicit) { - TestLoggerT Logger("QuicTestBindConnectionImplicit", GetParam()); + TestLoggerT Logger("QuicTestBindConnectionImplicit", GetParam()); QuicTestBindConnectionImplicit(GetParam().Family); } TEST_P(WithFamilyArgs, BindConnectionExplicit) { - TestLoggerT Logger("QuicTestBindConnectionExplicit", GetParam()); + TestLoggerT Logger("QuicTestBindConnectionExplicit", GetParam()); QuicTestBindConnectionExplicit(GetParam().Family); } TEST_P(WithHandshakeArgs1, Connect) { - TestLoggerT Logger("QuicTestConnect", GetParam()); + TestLoggerT Logger("QuicTestConnect", GetParam()); QuicTestConnect( GetParam().Family, GetParam().ServerStatelessRetry, @@ -228,7 +228,7 @@ TEST_P(WithHandshakeArgs1, Connect) { } TEST_P(WithHandshakeArgs2, OldVersion) { - TestLoggerT Logger("QuicTestConnect", GetParam()); + TestLoggerT Logger("QuicTestConnect", GetParam()); QuicTestConnect( GetParam().Family, GetParam().ServerStatelessRetry, @@ -241,12 +241,12 @@ TEST_P(WithHandshakeArgs2, OldVersion) { } TEST_P(WithFamilyArgs, VersionNegotiation) { - TestLoggerT Logger("QuicTestVersionNegotiation", GetParam()); + TestLoggerT Logger("QuicTestVersionNegotiation", GetParam()); QuicTestVersionNegotiation(GetParam().Family); } TEST_P(WithFamilyArgs, Rebind) { - TestLoggerT Logger("QuicTestConnect", GetParam()); + TestLoggerT Logger("QuicTestConnect", GetParam()); QuicTestConnect( GetParam().Family, false, // ServerStatelessRetry @@ -259,7 +259,7 @@ TEST_P(WithFamilyArgs, Rebind) { } TEST_P(WithFamilyArgs, ChangeMaxStreamIDs) { - TestLoggerT Logger("QuicTestConnect", GetParam()); + TestLoggerT Logger("QuicTestConnect", GetParam()); QuicTestConnect( GetParam().Family, false, // ServerStatelessRetry @@ -272,7 +272,7 @@ TEST_P(WithFamilyArgs, ChangeMaxStreamIDs) { } TEST_P(WithHandshakeArgs1, AsyncSecurityConfig) { - TestLoggerT Logger("QuicTestConnect", GetParam()); + TestLoggerT Logger("QuicTestConnect", GetParam()); QuicTestConnect( GetParam().Family, GetParam().ServerStatelessRetry, @@ -285,27 +285,27 @@ TEST_P(WithHandshakeArgs1, AsyncSecurityConfig) { } TEST_P(WithFamilyArgs, Unreachable) { - TestLoggerT Logger("QuicTestConnectUnreachable", GetParam()); + TestLoggerT Logger("QuicTestConnectUnreachable", GetParam()); QuicTestConnectUnreachable(GetParam().Family); } TEST_P(WithFamilyArgs, BadALPN) { - TestLoggerT Logger("QuicTestConnectBadAlpn", GetParam()); + TestLoggerT Logger("QuicTestConnectBadAlpn", GetParam()); QuicTestConnectBadAlpn(GetParam().Family); } TEST_P(WithFamilyArgs, BadSNI) { - TestLoggerT Logger("QuicTestConnectBadSni", GetParam()); + TestLoggerT Logger("QuicTestConnectBadSni", GetParam()); QuicTestConnectBadSni(GetParam().Family); } TEST_P(WithFamilyArgs, ServerRejected) { - TestLoggerT Logger("QuicTestConnectServerRejected", GetParam()); + TestLoggerT Logger("QuicTestConnectServerRejected", GetParam()); QuicTestConnectServerRejected(GetParam().Family); } TEST_P(WithSendArgs1, Send) { - TestLoggerT Logger("QuicTestConnectAndPing", GetParam()); + TestLoggerT Logger("QuicTestConnectAndPing", GetParam()); QuicTestConnectAndPing( GetParam().Family, GetParam().Length, @@ -328,7 +328,7 @@ TEST_P(WithSendArgs1, Send) { #endif TEST_P(WithSendArgs2, SendLarge) { - TestLoggerT Logger("QuicTestConnectAndPing", GetParam()); + TestLoggerT Logger("QuicTestConnectAndPing", GetParam()); QuicTestConnectAndPing( GetParam().Family, 100000000llu, @@ -346,7 +346,7 @@ TEST_P(WithSendArgs2, SendLarge) { } TEST_P(WithSendArgs3, SendIntermittently) { - TestLoggerT Logger("QuicTestConnectAndPing", GetParam()); + TestLoggerT Logger("QuicTestConnectAndPing", GetParam()); QuicTestConnectAndPing( GetParam().Family, GetParam().Length, @@ -364,7 +364,7 @@ TEST_P(WithSendArgs3, SendIntermittently) { } TEST_P(WithBool, IdleTimeout) { - TestLoggerT Logger("QuicTestConnectAndIdle", GetParam()); + TestLoggerT Logger("QuicTestConnectAndIdle", GetParam()); QuicTestConnectAndIdle(GetParam()); } @@ -379,7 +379,7 @@ TEST(Misc, ClientDisconnect) { } TEST_P(WithKeyUpdateArgs1, KeyUpdate) { - TestLoggerT Logger("QuicTestKeyUpdate", GetParam()); + TestLoggerT Logger("QuicTestKeyUpdate", GetParam()); QuicTestKeyUpdate( GetParam().Family, GetParam().KeyUpdate == 0 ? 5 : 1, // Iterations @@ -390,17 +390,17 @@ TEST_P(WithKeyUpdateArgs1, KeyUpdate) { } TEST_P(WithAbortiveArgs, AbortiveShutdown) { - TestLoggerT Logger("QuicAbortiveTransfers", GetParam()); + TestLoggerT Logger("QuicAbortiveTransfers", GetParam()); QuicAbortiveTransfers(GetParam().Family, GetParam().Flags); } TEST_P(WithCidUpdateArgs, CidUpdate) { - TestLoggerT Logger("QuicTestCidUpdate", GetParam()); + TestLoggerT Logger("QuicTestCidUpdate", GetParam()); QuicTestCidUpdate(GetParam().Family, GetParam().Iterations); } TEST_P(WithReceiveResumeArgs, ReceiveResume) { - TestLoggerT Logger("QuicTestReceiveResume", GetParam()); + TestLoggerT Logger("QuicTestReceiveResume", GetParam()); QuicTestReceiveResume( GetParam().Family, GetParam().SendBytes, @@ -411,7 +411,7 @@ TEST_P(WithReceiveResumeArgs, ReceiveResume) { } TEST_P(WithReceiveResumeNoDataArgs, ReceiveResumeNoData) { - TestLoggerT Logger("QuicTestReceiveResumeNoData", GetParam()); + TestLoggerT Logger("QuicTestReceiveResumeNoData", GetParam()); QuicTestReceiveResumeNoData(GetParam().Family, GetParam().ShutdownType); } From 05d5787e885f915a019b8542f68559777ee97e0b Mon Sep 17 00:00:00 2001 From: Nick Banks Date: Wed, 4 Dec 2019 11:15:22 -0800 Subject: [PATCH 3/4] Fix openssl hash --- platform/tls_openssl.c | 3 ++- test/run_linux.sh | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/platform/tls_openssl.c b/platform/tls_openssl.c index 67f1e67ce0..13c2517c20 100644 --- a/platform/tls_openssl.c +++ b/platform/tls_openssl.c @@ -2039,7 +2039,8 @@ QuicHashCompute( InputLength, Hash->Salt, Hash->SaltLength, - Hash); + Hash) != 0 ? + QUIC_STATUS_SUCCESS : QUIC_STATUS_INTERNAL_ERROR; } static diff --git a/test/run_linux.sh b/test/run_linux.sh index 8c821a1b93..fbd2d1b8c7 100644 --- a/test/run_linux.sh +++ b/test/run_linux.sh @@ -8,6 +8,7 @@ sudo truncate -s 0 /var/log/syslog # Run the tests. ./artifacts/bin/msquictest \ + --gtest_filter=Handshake/WithHandshakeArgs1.Connect/0 \ --gtest_output=xml:artifacts/logs/linux-test-results.xml # Copy logs to log folder (with correct permsissions). From d4f502d660867f9747e3620bccf2b76271562565 Mon Sep 17 00:00:00 2001 From: Nick Banks Date: Wed, 4 Dec 2019 11:35:15 -0800 Subject: [PATCH 4/4] More Fixes --- inc/quic_platform_winuser.h | 2 +- test/lib/QuicTest.cpp | 45 +++++++++++++++++++++++++++++++++++++ test/lib/TestConnection.cpp | 32 ++++++++++++++++++++------ test/run_linux.sh | 1 - 4 files changed, 71 insertions(+), 9 deletions(-) diff --git a/inc/quic_platform_winuser.h b/inc/quic_platform_winuser.h index 59a07dea85..f78022d342 100644 --- a/inc/quic_platform_winuser.h +++ b/inc/quic_platform_winuser.h @@ -236,7 +236,7 @@ _Post_writable_byte_size_(ByteCount) DECLSPEC_ALLOCATOR void* QuicAlloc( - _In_ SIZE_T ByteCount + _In_ size_t ByteCount ); void diff --git a/test/lib/QuicTest.cpp b/test/lib/QuicTest.cpp index 5072444d80..e5211e1ff5 100644 --- a/test/lib/QuicTest.cpp +++ b/test/lib/QuicTest.cpp @@ -1827,6 +1827,21 @@ QuicAbortiveTransfers( return; } + uint32_t CertFlags = + QUIC_CERTIFICATE_FLAG_IGNORE_UNKNOWN_CA | + QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_CN_INVALID; + Status = + MsQuic->SetParam( + ClientContext.Conn.Handle, + QUIC_PARAM_LEVEL_CONNECTION, + QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS, + sizeof(CertFlags), + &CertFlags); + if (QUIC_FAILED(Status)) { + TEST_FAILURE("MsQuic->SetParam(CERT_VALIDATION_FLAGS) failed, 0x%x.", Status); + return; + } + Status = MsQuic->ConnectionStart( ClientContext.Conn.Handle, @@ -2349,6 +2364,21 @@ QuicTestReceiveResume( return; } + uint32_t CertFlags = + QUIC_CERTIFICATE_FLAG_IGNORE_UNKNOWN_CA | + QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_CN_INVALID; + Status = + MsQuic->SetParam( + ClientContext.Conn.Handle, + QUIC_PARAM_LEVEL_CONNECTION, + QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS, + sizeof(CertFlags), + &CertFlags); + if (QUIC_FAILED(Status)) { + TEST_FAILURE("MsQuic->SetParam(CERT_VALIDATION_FLAGS) failed, 0x%x.", Status); + return; + } + Status = MsQuic->ConnectionStart( ClientContext.Conn.Handle, @@ -2598,6 +2628,21 @@ QuicTestReceiveResumeNoData( return; } + uint32_t CertFlags = + QUIC_CERTIFICATE_FLAG_IGNORE_UNKNOWN_CA | + QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_CN_INVALID; + Status = + MsQuic->SetParam( + ClientContext.Conn.Handle, + QUIC_PARAM_LEVEL_CONNECTION, + QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS, + sizeof(CertFlags), + &CertFlags); + if (QUIC_FAILED(Status)) { + TEST_FAILURE("MsQuic->SetParam(CERT_VALIDATION_FLAGS) failed, 0x%x.", Status); + return; + } + Status = MsQuic->ConnectionStart( ClientContext.Conn.Handle, diff --git a/test/lib/TestConnection.cpp b/test/lib/TestConnection.cpp index 2d3771a422..2ca37e8060 100644 --- a/test/lib/TestConnection.cpp +++ b/test/lib/TestConnection.cpp @@ -264,14 +264,32 @@ TestConnection::SetLocalAddr( _In_ const QuicAddr &localAddr ) { + QUIC_STATUS Status; + uint32_t Try = 0; uint32_t Size = sizeof(localAddr.SockAddr); - return - MsQuic->SetParam( - QuicConnection, - QUIC_PARAM_LEVEL_CONNECTION, - QUIC_PARAM_CONN_LOCAL_ADDRESS, - Size, - &localAddr.SockAddr); + + do { + // + // If setting the new local address right after handshake complete, it's + // possible the handshake hasn't been confirmed yet, and this call will + // fail with QUIC_STATUS_INVALID_STATE (because the client's not allowed + // to change IP until handshake confirmation). To get around this we + // allow for a couple retries (with some sleeps). + // + if (Try != 0) { + QuicSleep(100); + } + Status = + MsQuic->SetParam( + QuicConnection, + QUIC_PARAM_LEVEL_CONNECTION, + QUIC_PARAM_CONN_LOCAL_ADDRESS, + Size, + &localAddr.SockAddr); + + } while (Status == QUIC_STATUS_INVALID_STATE && ++Try <= 3); + + return Status; } QUIC_STATUS diff --git a/test/run_linux.sh b/test/run_linux.sh index fbd2d1b8c7..8c821a1b93 100644 --- a/test/run_linux.sh +++ b/test/run_linux.sh @@ -8,7 +8,6 @@ sudo truncate -s 0 /var/log/syslog # Run the tests. ./artifacts/bin/msquictest \ - --gtest_filter=Handshake/WithHandshakeArgs1.Connect/0 \ --gtest_output=xml:artifacts/logs/linux-test-results.xml # Copy logs to log folder (with correct permsissions).