@@ -35,6 +35,105 @@ func (c *noopConn) SetDeadline(time.Time) error { return nil }
3535func (c * noopConn ) SetReadDeadline (time.Time ) error { return nil }
3636func (c * noopConn ) SetWriteDeadline (time.Time ) error { return nil }
3737
38+ func TestPeek (t * testing.T ) {
39+ firstBuffer := []byte {0xAA , 0xAA , 0xAA , 0xAA , 0xAA , 0xAA }
40+ secondBuffer := []byte {0xBB , 0xBB , 0xBB }
41+ thirdBuffer := []byte {0xCC , 0xCC , 0xCC }
42+
43+ buffer := packetio .NewBuffer ()
44+ stream := & ReadStreamSRTP {buffer : buffer }
45+
46+ t .Run ("Short Peek" , func (t * testing.T ) {
47+ _ , err := buffer .Write (firstBuffer )
48+ assert .NoError (t , err )
49+
50+ readBuff := make ([]byte , 1 )
51+ _ , err = stream .Peek (readBuff )
52+ assert .Error (t , err , io .ErrShortBuffer )
53+ })
54+
55+ t .Run ("Short Read" , func (t * testing.T ) {
56+ _ , err := buffer .Write (firstBuffer )
57+ assert .NoError (t , err )
58+
59+ readBuff := make ([]byte , 6 )
60+ n , err := stream .Peek (readBuff )
61+ assert .NoError (t , err )
62+ assert .Equal (t , n , 6 )
63+ assert .Equal (t , readBuff , firstBuffer )
64+
65+ n , err = stream .Read ([]byte {})
66+ assert .Error (t , err , io .ErrShortBuffer )
67+ assert .Equal (t , n , 0 )
68+ assert .Equal (t , readBuff , firstBuffer )
69+
70+ n , err = stream .Read (readBuff )
71+ assert .NoError (t , err )
72+ assert .Equal (t , n , 6 )
73+ assert .Equal (t , readBuff , firstBuffer )
74+ })
75+
76+ t .Run ("Single Peek" , func (t * testing.T ) {
77+ _ , err := buffer .Write (firstBuffer )
78+ assert .NoError (t , err )
79+
80+ readBuff := make ([]byte , 6 )
81+
82+ n , err := stream .Peek (readBuff )
83+ assert .NoError (t , err )
84+ assert .Equal (t , n , 6 )
85+ assert .Equal (t , readBuff , firstBuffer )
86+
87+ n , err = stream .Read (readBuff )
88+ assert .NoError (t , err )
89+ assert .Equal (t , n , 6 )
90+ assert .Equal (t , readBuff , firstBuffer )
91+ })
92+
93+ t .Run ("Multi Peek" , func (t * testing.T ) {
94+ _ , err := buffer .Write (firstBuffer )
95+ assert .NoError (t , err )
96+
97+ _ , err = buffer .Write (secondBuffer )
98+ assert .NoError (t , err )
99+
100+ _ , err = buffer .Write (thirdBuffer )
101+ assert .NoError (t , err )
102+
103+ readBuff := make ([]byte , 6 )
104+
105+ n , err := stream .Peek (readBuff )
106+ assert .NoError (t , err )
107+ assert .Equal (t , n , 6 )
108+ assert .Equal (t , readBuff [:n ], firstBuffer )
109+
110+ n , err = stream .Peek (readBuff )
111+ assert .NoError (t , err )
112+ assert .Equal (t , n , 3 )
113+ assert .Equal (t , readBuff [:n ], secondBuffer )
114+
115+ n , err = stream .Peek (readBuff )
116+ assert .NoError (t , err )
117+ assert .Equal (t , n , 3 )
118+ assert .Equal (t , readBuff [:n ], thirdBuffer )
119+
120+ n , err = stream .Read (readBuff )
121+ assert .NoError (t , err )
122+ assert .Equal (t , n , 6 )
123+ assert .Equal (t , readBuff [:n ], firstBuffer )
124+
125+ n , err = stream .Read (readBuff )
126+ assert .NoError (t , err )
127+ assert .Equal (t , n , 3 )
128+ assert .Equal (t , readBuff [:n ], secondBuffer )
129+
130+ n , err = stream .Read (readBuff )
131+ assert .NoError (t , err )
132+ assert .Equal (t , n , 3 )
133+ assert .Equal (t , readBuff [:n ], thirdBuffer )
134+ })
135+ }
136+
38137func TestBufferFactory (t * testing.T ) {
39138 wg := sync.WaitGroup {}
40139 wg .Add (2 )
0 commit comments