@@ -157,6 +157,7 @@ class SSLDummyStreamBase : public rtc::StreamInterface,
157157 rtc::StreamInterface* in,
158158 rtc::StreamInterface* out)
159159 : test_base_(test), side_(side), in_(in), out_(out), first_packet_(true ) {
160+ RTC_DCHECK_NE (in, out);
160161 in_->SignalEvent .connect (this , &SSLDummyStreamBase::OnEventIn);
161162 out_->SignalEvent .connect (this , &SSLDummyStreamBase::OnEventOut);
162163 }
@@ -187,7 +188,7 @@ class SSLDummyStreamBase : public rtc::StreamInterface,
187188 int mask = (rtc::SE_READ | rtc::SE_CLOSE);
188189
189190 if (sig & mask) {
190- RTC_LOG (LS_VERBOSE) << " SSLDummyStreamBase::OnEvent side=" << side_
191+ RTC_LOG (LS_VERBOSE) << " SSLDummyStreamBase::OnEventIn side=" << side_
191192 << " sig=" << sig << " forwarding upward" ;
192193 PostEvent (sig & mask, 0 );
193194 }
@@ -196,7 +197,7 @@ class SSLDummyStreamBase : public rtc::StreamInterface,
196197 // Catch writeability events on out and pass them up.
197198 void OnEventOut (rtc::StreamInterface* stream, int sig, int err) {
198199 if (sig & rtc::SE_WRITE) {
199- RTC_LOG (LS_VERBOSE) << " SSLDummyStreamBase::OnEvent side=" << side_
200+ RTC_LOG (LS_VERBOSE) << " SSLDummyStreamBase::OnEventOut side=" << side_
200201 << " sig=" << sig << " forwarding upward" ;
201202
202203 PostEvent (sig & rtc::SE_WRITE, 0 );
@@ -327,8 +328,6 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
327328 client_private_key_pem_ (client_private_key_pem),
328329 client_key_type_(client_key_type),
329330 server_key_type_(server_key_type),
330- client_stream_(nullptr ),
331- server_stream_(nullptr ),
332331 delay_(0 ),
333332 mtu_(1460 ),
334333 loss_(0 ),
@@ -347,16 +346,7 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
347346 }
348347
349348 void SetUp () override {
350- CreateStreams ();
351-
352- client_ssl_ =
353- rtc::SSLStreamAdapter::Create (absl::WrapUnique (client_stream_));
354- server_ssl_ =
355- rtc::SSLStreamAdapter::Create (absl::WrapUnique (server_stream_));
356-
357- // Set up the slots
358- client_ssl_->SignalEvent .connect (this , &SSLStreamAdapterTestBase::OnEvent);
359- server_ssl_->SignalEvent .connect (this , &SSLStreamAdapterTestBase::OnEvent);
349+ InitializeClientAndServerStreams ();
360350
361351 std::unique_ptr<rtc::SSLIdentity> client_identity;
362352 if (!client_cert_pem_.empty () && !client_private_key_pem_.empty ()) {
@@ -376,21 +366,41 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
376366 server_ssl_.reset (nullptr );
377367 }
378368
379- virtual void CreateStreams () = 0;
369+ virtual std::unique_ptr<rtc::StreamInterface> CreateClientStream () = 0;
370+ virtual std::unique_ptr<rtc::StreamInterface> CreateServerStream () = 0;
371+
372+ void InitializeClientAndServerStreams (
373+ absl::string_view client_experiment = " " ,
374+ absl::string_view server_experiment = " " ) {
375+ // Note: `client_ssl_` and `server_ssl_` may be non-nullptr.
376+
377+ // The legacy TLS protocols flag is read when the OpenSSLStreamAdapter is
378+ // initialized, so we set the field trials while constructing the adapters.
379+ using webrtc::test::ScopedFieldTrials;
380+ {
381+ std::unique_ptr<ScopedFieldTrials> trial (
382+ client_experiment.empty () ? nullptr
383+ : new ScopedFieldTrials (client_experiment));
384+ client_ssl_ = rtc::SSLStreamAdapter::Create (CreateClientStream ());
385+ }
386+ {
387+ std::unique_ptr<ScopedFieldTrials> trial (
388+ server_experiment.empty () ? nullptr
389+ : new ScopedFieldTrials (server_experiment));
390+ server_ssl_ = rtc::SSLStreamAdapter::Create (CreateServerStream ());
391+ }
392+
393+ client_ssl_->SignalEvent .connect (this ,
394+ &SSLStreamAdapterTestBase::OnClientEvent);
395+ server_ssl_->SignalEvent .connect (this ,
396+ &SSLStreamAdapterTestBase::OnServerEvent);
397+ }
380398
381399 // Recreate the client/server identities with the specified validity period.
382400 // `not_before` and `not_after` are offsets from the current time in number
383401 // of seconds.
384402 void ResetIdentitiesWithValidity (int not_before, int not_after) {
385- CreateStreams ();
386-
387- client_ssl_ =
388- rtc::SSLStreamAdapter::Create (absl::WrapUnique (client_stream_));
389- server_ssl_ =
390- rtc::SSLStreamAdapter::Create (absl::WrapUnique (server_stream_));
391-
392- client_ssl_->SignalEvent .connect (this , &SSLStreamAdapterTestBase::OnEvent);
393- server_ssl_->SignalEvent .connect (this , &SSLStreamAdapterTestBase::OnEvent);
403+ InitializeClientAndServerStreams ();
394404
395405 time_t now = time (nullptr );
396406
@@ -412,18 +422,6 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
412422 server_ssl_->SetIdentity (std::move (server_identity));
413423 }
414424
415- virtual void OnEvent (rtc::StreamInterface* stream, int sig, int err) {
416- RTC_LOG (LS_VERBOSE) << " SSLStreamAdapterTestBase::OnEvent sig=" << sig;
417-
418- if (sig & rtc::SE_READ) {
419- ReadData (stream);
420- }
421-
422- if ((stream == client_ssl_.get ()) && (sig & rtc::SE_WRITE)) {
423- WriteData ();
424- }
425- }
426-
427425 void SetPeerIdentitiesByDigest (bool correct, bool expect_success) {
428426 unsigned char server_digest[20 ];
429427 size_t server_digest_len;
@@ -755,6 +753,30 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
755753 virtual void ReadData (rtc::StreamInterface* stream) = 0;
756754 virtual void TestTransfer (int size) = 0;
757755
756+ private:
757+ void OnClientEvent (rtc::StreamInterface* stream, int sig, int err) {
758+ RTC_DCHECK_EQ (stream, client_ssl_.get ());
759+ RTC_LOG (LS_VERBOSE) << " SSLStreamAdapterTestBase::OnClientEvent sig="
760+ << sig;
761+
762+ if (sig & rtc::SE_READ) {
763+ ReadData (stream);
764+ }
765+
766+ if (sig & rtc::SE_WRITE) {
767+ WriteData ();
768+ }
769+ }
770+
771+ void OnServerEvent (rtc::StreamInterface* stream, int sig, int err) {
772+ RTC_DCHECK_EQ (stream, server_ssl_.get ());
773+ RTC_LOG (LS_VERBOSE) << " SSLStreamAdapterTestBase::OnServerEvent sig="
774+ << sig;
775+ if (sig & rtc::SE_READ) {
776+ ReadData (stream);
777+ }
778+ }
779+
758780 protected:
759781 rtc::SSLIdentity* client_identity () const {
760782 if (!client_ssl_) {
@@ -774,8 +796,6 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
774796 std::string client_private_key_pem_;
775797 rtc::KeyParams client_key_type_;
776798 rtc::KeyParams server_key_type_;
777- SSLDummyStreamBase* client_stream_; // freed by client_ssl_ destructor
778- SSLDummyStreamBase* server_stream_; // freed by server_ssl_ destructor
779799 std::unique_ptr<rtc::SSLStreamAdapter> client_ssl_;
780800 std::unique_ptr<rtc::SSLStreamAdapter> server_ssl_;
781801 int delay_;
@@ -801,11 +821,14 @@ class SSLStreamAdapterTestTLS
801821 client_buffer_ (kFifoBufferSize ),
802822 server_buffer_(kFifoBufferSize ) {}
803823
804- void CreateStreams () override {
805- client_stream_ =
806- new SSLDummyStreamTLS (this , " c2s" , &client_buffer_, &server_buffer_);
807- server_stream_ =
808- new SSLDummyStreamTLS (this , " s2c" , &server_buffer_, &client_buffer_);
824+ std::unique_ptr<rtc::StreamInterface> CreateClientStream () override final {
825+ return absl::WrapUnique (
826+ new SSLDummyStreamTLS (this , " c2s" , &client_buffer_, &server_buffer_));
827+ }
828+
829+ std::unique_ptr<rtc::StreamInterface> CreateServerStream () override final {
830+ return absl::WrapUnique (
831+ new SSLDummyStreamTLS (this , " s2c" , &server_buffer_, &client_buffer_));
809832 }
810833
811834 // Test data transfer for TLS
@@ -877,7 +900,7 @@ class SSLStreamAdapterTestTLS
877900 }
878901 }
879902
880- void ReadData (rtc::StreamInterface* stream) override {
903+ void ReadData (rtc::StreamInterface* stream) override final {
881904 uint8_t buffer[1600 ];
882905 size_t bread;
883906 int err2;
@@ -930,11 +953,14 @@ class SSLStreamAdapterTestDTLSBase : public SSLStreamAdapterTestBase {
930953 count_(0 ),
931954 sent_(0 ) {}
932955
933- void CreateStreams () override {
934- client_stream_ =
935- new SSLDummyStreamDTLS (this , " c2s" , &client_buffer_, &server_buffer_);
936- server_stream_ =
937- new SSLDummyStreamDTLS (this , " s2c" , &server_buffer_, &client_buffer_);
956+ std::unique_ptr<rtc::StreamInterface> CreateClientStream () override final {
957+ return absl::WrapUnique (
958+ new SSLDummyStreamDTLS (this , " c2s" , &client_buffer_, &server_buffer_));
959+ }
960+
961+ std::unique_ptr<rtc::StreamInterface> CreateServerStream () override final {
962+ return absl::WrapUnique (
963+ new SSLDummyStreamDTLS (this , " s2c" , &server_buffer_, &client_buffer_));
938964 }
939965
940966 void WriteData () override {
@@ -968,7 +994,7 @@ class SSLStreamAdapterTestDTLSBase : public SSLStreamAdapterTestBase {
968994 delete[] packet;
969995 }
970996
971- void ReadData (rtc::StreamInterface* stream) override {
997+ void ReadData (rtc::StreamInterface* stream) override final {
972998 uint8_t buffer[2000 ];
973999 size_t bread;
9741000 int err2;
@@ -1077,20 +1103,7 @@ class SSLStreamAdapterTestDTLSCertChain : public SSLStreamAdapterTestDTLS {
10771103 public:
10781104 SSLStreamAdapterTestDTLSCertChain () : SSLStreamAdapterTestDTLS(" " , " " ) {}
10791105 void SetUp () override {
1080- CreateStreams ();
1081-
1082- client_ssl_ =
1083- rtc::SSLStreamAdapter::Create (absl::WrapUnique (client_stream_));
1084- server_ssl_ =
1085- rtc::SSLStreamAdapter::Create (absl::WrapUnique (server_stream_));
1086-
1087- // Set up the slots
1088- client_ssl_->SignalEvent .connect (
1089- reinterpret_cast <SSLStreamAdapterTestBase*>(this ),
1090- &SSLStreamAdapterTestBase::OnEvent);
1091- server_ssl_->SignalEvent .connect (
1092- reinterpret_cast <SSLStreamAdapterTestBase*>(this ),
1093- &SSLStreamAdapterTestBase::OnEvent);
1106+ InitializeClientAndServerStreams ();
10941107
10951108 std::unique_ptr<rtc::SSLIdentity> client_identity;
10961109 if (!client_cert_pem_.empty () && !client_private_key_pem_.empty ()) {
@@ -1625,65 +1638,38 @@ class SSLStreamAdapterTestDTLSExtensionPermutation
16251638 rtc::KeyParams::ECDSA (rtc::EC_NIST_P256)) {
16261639 }
16271640
1628- // Do not use the SetUp version from the parent class.
1629- void SetUp () override {}
1630-
1631- // The legacy TLS protocols flag is read when the OpenSSLStreamAdapter is
1632- // initialized, so we set the experiment while creationg client_ssl_
1633- // and server_ssl_.
1634-
1635- void ConfigureClient (absl::string_view experiment) {
1636- webrtc::test::ScopedFieldTrials trial{std::string (experiment)};
1637- client_stream_ =
1638- new SSLDummyStreamDTLS (this , " c2s" , &client_buffer_, &server_buffer_);
1639- client_ssl_ =
1640- rtc::SSLStreamAdapter::Create (absl::WrapUnique (client_stream_));
1641- client_ssl_->SignalEvent .connect (
1642- static_cast <SSLStreamAdapterTestBase*>(this ),
1643- &SSLStreamAdapterTestBase::OnEvent);
1644- auto client_identity = rtc::SSLIdentity::Create (" client" , client_key_type_);
1645- client_ssl_->SetIdentity (std::move (client_identity));
1646- }
1647-
1648- void ConfigureServer (absl::string_view experiment) {
1649- webrtc::test::ScopedFieldTrials trial{std::string (experiment)};
1650- server_stream_ =
1651- new SSLDummyStreamDTLS (this , " s2c" , &server_buffer_, &client_buffer_);
1652- server_ssl_ =
1653- rtc::SSLStreamAdapter::Create (absl::WrapUnique (server_stream_));
1654- server_ssl_->SignalEvent .connect (
1655- static_cast <SSLStreamAdapterTestBase*>(this ),
1656- &SSLStreamAdapterTestBase::OnEvent);
1641+ void Initialize (absl::string_view client_experiment,
1642+ absl::string_view server_experiment) {
1643+ InitializeClientAndServerStreams (client_experiment, server_experiment);
1644+ client_ssl_->SetIdentity (
1645+ rtc::SSLIdentity::Create (" client" , client_key_type_));
16571646 server_ssl_->SetIdentity (
16581647 rtc::SSLIdentity::Create (" server" , server_key_type_));
16591648 }
16601649};
16611650
16621651TEST_F (SSLStreamAdapterTestDTLSExtensionPermutation,
16631652 ClientDefaultServerDefault) {
1664- ConfigureClient (" " );
1665- ConfigureServer (" " );
1653+ Initialize (" " , " " );
16661654 TestHandshake ();
16671655}
16681656
16691657TEST_F (SSLStreamAdapterTestDTLSExtensionPermutation,
16701658 ClientDefaultServerPermute) {
1671- ConfigureClient (" " );
1672- ConfigureServer (" WebRTC-PermuteTlsClientHello/Enabled/" );
1659+ Initialize (" " , " WebRTC-PermuteTlsClientHello/Enabled/" );
16731660 TestHandshake ();
16741661}
16751662
16761663TEST_F (SSLStreamAdapterTestDTLSExtensionPermutation,
16771664 ClientPermuteServerDefault) {
1678- ConfigureClient (" WebRTC-PermuteTlsClientHello/Enabled/" );
1679- ConfigureServer (" " );
1665+ Initialize (" WebRTC-PermuteTlsClientHello/Enabled/" , " " );
16801666 TestHandshake ();
16811667}
16821668
16831669TEST_F (SSLStreamAdapterTestDTLSExtensionPermutation,
16841670 ClientPermuteServerPermute) {
1685- ConfigureClient (" WebRTC-PermuteTlsClientHello/Enabled/" );
1686- ConfigureServer ( " WebRTC-PermuteTlsClientHello/Enabled/" );
1671+ Initialize (" WebRTC-PermuteTlsClientHello/Enabled/" ,
1672+ " WebRTC-PermuteTlsClientHello/Enabled/" );
16871673 TestHandshake ();
16881674}
16891675#endif // OPENSSL_IS_BORINGSSL
0 commit comments