@@ -292,6 +292,74 @@ func TestByteStream(t *testing.T) {
292292 SpawnClientServerTest (t , "localhost:12944" , ClientSendWrapper (client ), ServerReceiveWrapper (server ))
293293}
294294
295+ type WrappedMessage struct {
296+ Message string
297+ Wrapped io.ReadWriteCloser
298+ }
299+
300+ func TestWrappedByteStreams (t * testing.T ) {
301+ serverSend := "G'day client ☺"
302+ clientReply := "Hello Server, ☢ FYI your stream was transparently copied ☠"
303+ client := func (t * testing.T , sender libchan.Sender , s * SpdyTransport ) {
304+ // Create pipe
305+ p1 , p2 := net .Pipe ()
306+
307+ m1 := & WrappedMessage {
308+ Message : "wrapped" ,
309+ Wrapped : libchan.ByteStreamWrapper {p2 },
310+ }
311+
312+ sendErr := sender .Send (m1 )
313+ if sendErr != nil {
314+ t .Fatalf ("Error sending channel: %s" , sendErr )
315+ }
316+
317+ // read
318+ readBytes := make ([]byte , 30 )
319+ n , readErr := p1 .Read (readBytes )
320+ if readErr != nil {
321+ t .Fatalf ("Error reading from byte stream: %s" , readErr )
322+ }
323+ if expected := serverSend ; string (readBytes [:n ]) != expected {
324+ t .Fatalf ("Unexpected read value:\n \t Expected: %q\n \t Actual: %q" , expected , string (readBytes [:n ]))
325+ }
326+
327+ // write
328+ _ , writeErr := p1 .Write ([]byte (clientReply ))
329+ if writeErr != nil {
330+ t .Fatalf ("Error writing to byte stream: %s" , writeErr )
331+ }
332+
333+ }
334+ server := func (t * testing.T , receiver libchan.Receiver , s * SpdyTransport ) {
335+ m1 := & WrappedMessage {}
336+ recvErr := receiver .Receive (m1 )
337+ if recvErr != nil {
338+ t .Fatalf ("Error receiving message: %s" , recvErr )
339+ }
340+
341+ if expected := "wrapped" ; m1 .Message != expected {
342+ t .Fatalf ("Unexpected message\n \t Expected: %s\n \t Actual: %s" , expected , m1 .Message )
343+ }
344+
345+ _ , writeErr := m1 .Wrapped .Write ([]byte (serverSend ))
346+ if writeErr != nil {
347+ t .Fatalf ("Error writing to byte stream: %s" , writeErr )
348+ }
349+
350+ readBytes := make ([]byte , 80 )
351+ n , readErr := m1 .Wrapped .Read (readBytes )
352+ if readErr != nil {
353+ t .Fatalf ("Error reading from byte stream: %s" , readErr )
354+ }
355+ if expected := clientReply ; string (readBytes [:n ]) != expected {
356+ t .Fatalf ("Unexpected read value:\n \t Expected: %q\n \t Actual: %q" , expected , string (readBytes [:n ]))
357+ }
358+
359+ }
360+ SpawnClientServerTest (t , "localhost:12943" , ClientSendWrapper (client ), ServerReceiveWrapper (server ))
361+ }
362+
295363func ClientSendWrapper (f func (t * testing.T , c libchan.Sender , s * SpdyTransport )) ClientRoutine {
296364 return func (t * testing.T , server string ) {
297365 conn , connErr := net .Dial ("tcp" , server )
0 commit comments