File tree Expand file tree Collapse file tree 5 files changed +45
-8
lines changed
Expand file tree Collapse file tree 5 files changed +45
-8
lines changed Original file line number Diff line number Diff line change @@ -18,6 +18,7 @@ coverage/
1818coverage_badge.svg
1919coverage.xml
2020TEST-report. *
21+ coverage_dir /*
2122
2223# IntelliJ related
2324* .iml
Original file line number Diff line number Diff line change @@ -1218,7 +1218,9 @@ class CallSession {
12181218 }
12191219 };
12201220 } catch (e) {
1221- Logs ().v ('[VOIP] prepareMediaStream error => ${e .toString ()}' );
1221+ Logs ().v ('[VOIP] preparePeerConnection error => ${e .toString ()}' );
1222+ await _createPeerConnectionFailed (e);
1223+ rethrow ;
12221224 }
12231225 }
12241226
@@ -1454,10 +1456,19 @@ class CallSession {
14541456 }
14551457 }
14561458
1459+ Future <void > _createPeerConnectionFailed (dynamic err) async {
1460+ Logs ().e ('Failed to create peer connection object ${err .toString ()}' );
1461+ fireCallEvent (CallStateChange .kError);
1462+ await terminate (
1463+ CallParty .kLocal,
1464+ CallErrorCode .createPeerConnectionFailed,
1465+ true ,
1466+ );
1467+ }
1468+
14571469 Future <void > _getLocalOfferFailed (dynamic err) async {
14581470 Logs ().e ('Failed to get local offer ${err .toString ()}' );
14591471 fireCallEvent (CallStateChange .kError);
1460-
14611472 await terminate (CallParty .kLocal, CallErrorCode .localOfferFailed, true );
14621473 }
14631474
Original file line number Diff line number Diff line change @@ -40,6 +40,9 @@ enum CallErrorCode {
4040 /// The user chose to end the call
4141 userHangup ('user_hangup' ),
4242
43+ /// An error code when creating peer connection object fails locally.
44+ createPeerConnectionFailed ('create_peer_connection_failed' ),
45+
4346 /// An error code when the local client failed to create an offer.
4447 localOfferFailed ('local_offer_failed' ),
4548
Original file line number Diff line number Diff line change @@ -615,6 +615,26 @@ void main() {
615615 );
616616 });
617617
618+ test ('Call fails when peer connection creation fails' , () async {
619+ final mockDelegate = MockWebRTCDelegate ()
620+ ..throwOnCreatePeerConnection = true ;
621+ voip = VoIP (matrix, mockDelegate);
622+ VoIP .customTxid = '1234' ;
623+
624+ try {
625+ await voip.inviteToCall (
626+ room,
627+ CallType .kVoice,
628+ userId: '@alice:testing.com' ,
629+ );
630+ fail ('Expected call to fail' );
631+ } catch (e) {
632+ expect (e, isA <CallError >());
633+ expect ((e as CallError ).code, CallErrorCode .createPeerConnectionFailed);
634+ expect (voip.currentCID, null );
635+ }
636+ });
637+
618638 test ('getFamedlyCallEvents sort order' , () {
619639 room.setState (
620640 Event (
Original file line number Diff line number Diff line change @@ -5,15 +5,21 @@ import 'package:webrtc_interface/webrtc_interface.dart';
55import 'package:matrix/matrix.dart' ;
66
77class MockWebRTCDelegate implements WebRTCDelegate {
8+ bool throwOnCreatePeerConnection = false ;
9+
810 @override
911 bool get canHandleNewCall => true ;
1012
1113 @override
1214 Future <RTCPeerConnection > createPeerConnection (
1315 Map <String , dynamic > configuration, [
1416 Map <String , dynamic > constraints = const {},
15- ]) async =>
16- MockRTCPeerConnection ();
17+ ]) async {
18+ if (throwOnCreatePeerConnection) {
19+ throw Exception ('Failed to create peer connection' );
20+ }
21+ return MockRTCPeerConnection ();
22+ }
1723
1824 @override
1925 Future <void > registerListeners (CallSession session) async {
@@ -844,8 +850,4 @@ class MockVideoRenderer implements VideoRenderer {
844850 // Mock implementation for disposing VideoRenderer
845851 Logs ().i ('Mock: Disposing VideoRenderer' );
846852 }
847-
848- @override
849- // TODO: implement videoValue
850- RTCVideoValue get videoValue => RTCVideoValue .empty;
851853}
You can’t perform that action at this time.
0 commit comments