@@ -157,6 +157,7 @@ class SSLDummyStreamBase : public rtc::StreamInterface,
157
157
rtc::StreamInterface* in,
158
158
rtc::StreamInterface* out)
159
159
: test_base_(test), side_(side), in_(in), out_(out), first_packet_(true ) {
160
+ RTC_DCHECK_NE (in, out);
160
161
in_->SignalEvent .connect (this , &SSLDummyStreamBase::OnEventIn);
161
162
out_->SignalEvent .connect (this , &SSLDummyStreamBase::OnEventOut);
162
163
}
@@ -187,7 +188,7 @@ class SSLDummyStreamBase : public rtc::StreamInterface,
187
188
int mask = (rtc::SE_READ | rtc::SE_CLOSE);
188
189
189
190
if (sig & mask) {
190
- RTC_LOG (LS_VERBOSE) << " SSLDummyStreamBase::OnEvent side=" << side_
191
+ RTC_LOG (LS_VERBOSE) << " SSLDummyStreamBase::OnEventIn side=" << side_
191
192
<< " sig=" << sig << " forwarding upward" ;
192
193
PostEvent (sig & mask, 0 );
193
194
}
@@ -196,7 +197,7 @@ class SSLDummyStreamBase : public rtc::StreamInterface,
196
197
// Catch writeability events on out and pass them up.
197
198
void OnEventOut (rtc::StreamInterface* stream, int sig, int err) {
198
199
if (sig & rtc::SE_WRITE) {
199
- RTC_LOG (LS_VERBOSE) << " SSLDummyStreamBase::OnEvent side=" << side_
200
+ RTC_LOG (LS_VERBOSE) << " SSLDummyStreamBase::OnEventOut side=" << side_
200
201
<< " sig=" << sig << " forwarding upward" ;
201
202
202
203
PostEvent (sig & rtc::SE_WRITE, 0 );
@@ -327,8 +328,6 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
327
328
client_private_key_pem_ (client_private_key_pem),
328
329
client_key_type_(client_key_type),
329
330
server_key_type_(server_key_type),
330
- client_stream_(nullptr ),
331
- server_stream_(nullptr ),
332
331
delay_(0 ),
333
332
mtu_(1460 ),
334
333
loss_(0 ),
@@ -347,16 +346,7 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
347
346
}
348
347
349
348
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 ();
360
350
361
351
std::unique_ptr<rtc::SSLIdentity> client_identity;
362
352
if (!client_cert_pem_.empty () && !client_private_key_pem_.empty ()) {
@@ -376,21 +366,41 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
376
366
server_ssl_.reset (nullptr );
377
367
}
378
368
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
+ }
380
398
381
399
// Recreate the client/server identities with the specified validity period.
382
400
// `not_before` and `not_after` are offsets from the current time in number
383
401
// of seconds.
384
402
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 ();
394
404
395
405
time_t now = time (nullptr );
396
406
@@ -412,18 +422,6 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
412
422
server_ssl_->SetIdentity (std::move (server_identity));
413
423
}
414
424
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
-
427
425
void SetPeerIdentitiesByDigest (bool correct, bool expect_success) {
428
426
unsigned char server_digest[20 ];
429
427
size_t server_digest_len;
@@ -755,6 +753,30 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
755
753
virtual void ReadData (rtc::StreamInterface* stream) = 0;
756
754
virtual void TestTransfer (int size) = 0;
757
755
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
+
758
780
protected:
759
781
rtc::SSLIdentity* client_identity () const {
760
782
if (!client_ssl_) {
@@ -774,8 +796,6 @@ class SSLStreamAdapterTestBase : public ::testing::Test,
774
796
std::string client_private_key_pem_;
775
797
rtc::KeyParams client_key_type_;
776
798
rtc::KeyParams server_key_type_;
777
- SSLDummyStreamBase* client_stream_; // freed by client_ssl_ destructor
778
- SSLDummyStreamBase* server_stream_; // freed by server_ssl_ destructor
779
799
std::unique_ptr<rtc::SSLStreamAdapter> client_ssl_;
780
800
std::unique_ptr<rtc::SSLStreamAdapter> server_ssl_;
781
801
int delay_;
@@ -801,11 +821,14 @@ class SSLStreamAdapterTestTLS
801
821
client_buffer_ (kFifoBufferSize ),
802
822
server_buffer_(kFifoBufferSize ) {}
803
823
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_));
809
832
}
810
833
811
834
// Test data transfer for TLS
@@ -877,7 +900,7 @@ class SSLStreamAdapterTestTLS
877
900
}
878
901
}
879
902
880
- void ReadData (rtc::StreamInterface* stream) override {
903
+ void ReadData (rtc::StreamInterface* stream) override final {
881
904
uint8_t buffer[1600 ];
882
905
size_t bread;
883
906
int err2;
@@ -930,11 +953,14 @@ class SSLStreamAdapterTestDTLSBase : public SSLStreamAdapterTestBase {
930
953
count_(0 ),
931
954
sent_(0 ) {}
932
955
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_));
938
964
}
939
965
940
966
void WriteData () override {
@@ -968,7 +994,7 @@ class SSLStreamAdapterTestDTLSBase : public SSLStreamAdapterTestBase {
968
994
delete[] packet;
969
995
}
970
996
971
- void ReadData (rtc::StreamInterface* stream) override {
997
+ void ReadData (rtc::StreamInterface* stream) override final {
972
998
uint8_t buffer[2000 ];
973
999
size_t bread;
974
1000
int err2;
@@ -1077,20 +1103,7 @@ class SSLStreamAdapterTestDTLSCertChain : public SSLStreamAdapterTestDTLS {
1077
1103
public:
1078
1104
SSLStreamAdapterTestDTLSCertChain () : SSLStreamAdapterTestDTLS(" " , " " ) {}
1079
1105
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 ();
1094
1107
1095
1108
std::unique_ptr<rtc::SSLIdentity> client_identity;
1096
1109
if (!client_cert_pem_.empty () && !client_private_key_pem_.empty ()) {
@@ -1625,65 +1638,38 @@ class SSLStreamAdapterTestDTLSExtensionPermutation
1625
1638
rtc::KeyParams::ECDSA (rtc::EC_NIST_P256)) {
1626
1639
}
1627
1640
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_));
1657
1646
server_ssl_->SetIdentity (
1658
1647
rtc::SSLIdentity::Create (" server" , server_key_type_));
1659
1648
}
1660
1649
};
1661
1650
1662
1651
TEST_F (SSLStreamAdapterTestDTLSExtensionPermutation,
1663
1652
ClientDefaultServerDefault) {
1664
- ConfigureClient (" " );
1665
- ConfigureServer (" " );
1653
+ Initialize (" " , " " );
1666
1654
TestHandshake ();
1667
1655
}
1668
1656
1669
1657
TEST_F (SSLStreamAdapterTestDTLSExtensionPermutation,
1670
1658
ClientDefaultServerPermute) {
1671
- ConfigureClient (" " );
1672
- ConfigureServer (" WebRTC-PermuteTlsClientHello/Enabled/" );
1659
+ Initialize (" " , " WebRTC-PermuteTlsClientHello/Enabled/" );
1673
1660
TestHandshake ();
1674
1661
}
1675
1662
1676
1663
TEST_F (SSLStreamAdapterTestDTLSExtensionPermutation,
1677
1664
ClientPermuteServerDefault) {
1678
- ConfigureClient (" WebRTC-PermuteTlsClientHello/Enabled/" );
1679
- ConfigureServer (" " );
1665
+ Initialize (" WebRTC-PermuteTlsClientHello/Enabled/" , " " );
1680
1666
TestHandshake ();
1681
1667
}
1682
1668
1683
1669
TEST_F (SSLStreamAdapterTestDTLSExtensionPermutation,
1684
1670
ClientPermuteServerPermute) {
1685
- ConfigureClient (" WebRTC-PermuteTlsClientHello/Enabled/" );
1686
- ConfigureServer ( " WebRTC-PermuteTlsClientHello/Enabled/" );
1671
+ Initialize (" WebRTC-PermuteTlsClientHello/Enabled/" ,
1672
+ " WebRTC-PermuteTlsClientHello/Enabled/" );
1687
1673
TestHandshake ();
1688
1674
}
1689
1675
#endif // OPENSSL_IS_BORINGSSL
0 commit comments