1
1
import * as underTest from '../src/stream'
2
2
import { expect , assert } from 'aegir/chai'
3
+ import { bytes } from 'multiformats'
4
+ import * as pb from '../proto_ts/message.js'
5
+ const TEST_MESSAGE = 'test_messgae'
3
6
4
7
function setup ( ) : { peerConnection : RTCPeerConnection , datachannel : RTCDataChannel , webrtcStream : underTest . WebRTCStream } {
5
8
const peerConnection = new RTCPeerConnection ( )
@@ -9,6 +12,14 @@ function setup (): { peerConnection: RTCPeerConnection, datachannel: RTCDataChan
9
12
return { peerConnection, datachannel, webrtcStream }
10
13
}
11
14
15
+ function generatePbByFlag ( flag ?: pb . Message_Flag ) : Uint8Array {
16
+ const testPb : pb . Message = {
17
+ flag : flag ,
18
+ message : bytes . fromString ( TEST_MESSAGE )
19
+ }
20
+ return pb . Message . toBinary ( testPb )
21
+ }
22
+
12
23
describe ( 'Stream Stats' , ( ) => {
13
24
it ( 'can construct' , ( ) => {
14
25
const { webrtcStream } = setup ( )
@@ -66,3 +77,46 @@ describe('Stream Stats', () => {
66
77
expect ( datachannel . readyState ) . to . be . oneOf ( [ 'closing' , 'closed' ] )
67
78
} )
68
79
} )
80
+
81
+ describe ( 'Stream Read Stats Transition By Incoming Flag' , ( ) => {
82
+ const webrtcStream = setup ( ) . webrtcStream
83
+ it ( 'no flag, no transition' , ( ) => {
84
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . OPEN )
85
+ const IncomingBuffer = generatePbByFlag ( )
86
+ const message = webrtcStream . processIncomingProtobuf ( IncomingBuffer )
87
+ expect ( message ) . not . equal ( undefined )
88
+ if ( message != null ) {
89
+ expect ( bytes . toString ( message ) ) . to . equal ( TEST_MESSAGE )
90
+ }
91
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . OPEN )
92
+ } )
93
+
94
+ it ( 'open to read-close by flag:FIN' , ( ) => {
95
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . OPEN )
96
+ const IncomingBuffer = generatePbByFlag ( pb . Message_Flag . FIN )
97
+ webrtcStream . processIncomingProtobuf ( IncomingBuffer )
98
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . READ_CLOSED )
99
+ } )
100
+
101
+ it ( 'read-close to close by flag:STOP_SENDING' , ( ) => {
102
+ const IncomingBuffer = generatePbByFlag ( pb . Message_Flag . STOP_SENDING )
103
+ webrtcStream . processIncomingProtobuf ( IncomingBuffer )
104
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . CLOSED )
105
+ } )
106
+ } )
107
+
108
+ describe ( 'Stream Write Stats Transition By Incoming Flag' , ( ) => {
109
+ const webrtcStream = setup ( ) . webrtcStream
110
+ it ( 'open to write-close by flag:STOP_SENDING' , ( ) => {
111
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . OPEN )
112
+ const IncomingBuffer = generatePbByFlag ( pb . Message_Flag . STOP_SENDING )
113
+ webrtcStream . processIncomingProtobuf ( IncomingBuffer )
114
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . WRITE_CLOSED )
115
+ } )
116
+
117
+ it ( 'write-close to close by flag:FIN' , ( ) => {
118
+ const IncomingBuffer = generatePbByFlag ( pb . Message_Flag . FIN )
119
+ webrtcStream . processIncomingProtobuf ( IncomingBuffer )
120
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . CLOSED )
121
+ } )
122
+ } )
0 commit comments