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 ) {
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,44 @@ 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
+ ; ( message != null ) && expect ( bytes . toString ( message ) ) . to . equal ( TEST_MESSAGE )
89
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . OPEN )
90
+ } )
91
+
92
+ it ( 'open to read-close by flag:FIN' , ( ) => {
93
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . OPEN )
94
+ const IncomingBuffer = generatePbByFlag ( pb . Message_Flag . FIN )
95
+ webrtcStream . processIncomingProtobuf ( IncomingBuffer )
96
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . READ_CLOSED )
97
+ } )
98
+
99
+ it ( 'read-close to close by flag:STOP_SENDING' , ( ) => {
100
+ const IncomingBuffer = generatePbByFlag ( pb . Message_Flag . STOP_SENDING )
101
+ webrtcStream . processIncomingProtobuf ( IncomingBuffer )
102
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . CLOSED )
103
+ } )
104
+ } )
105
+
106
+ describe ( 'Stream Write Stats Transition By Incoming Flag' , ( ) => {
107
+ const webrtcStream = setup ( ) . webrtcStream
108
+ it ( 'open to write-close by flag:STOP_SENDING' , ( ) => {
109
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . OPEN )
110
+ const IncomingBuffer = generatePbByFlag ( pb . Message_Flag . STOP_SENDING )
111
+ webrtcStream . processIncomingProtobuf ( IncomingBuffer )
112
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . WRITE_CLOSED )
113
+ } )
114
+
115
+ it ( 'write-close to close by flag:FIN' , ( ) => {
116
+ const IncomingBuffer = generatePbByFlag ( pb . Message_Flag . FIN )
117
+ webrtcStream . processIncomingProtobuf ( IncomingBuffer )
118
+ expect ( webrtcStream . streamState . state ) . to . equal ( underTest . StreamStates . CLOSED )
119
+ } )
120
+ } )
0 commit comments