@@ -284,6 +284,156 @@ func TestWrappedByteStreams(t *testing.T) {
284284 SpawnClientServerTest (t , "localhost:12943" , ClientSendWrapper (client ), ServerReceiveWrapper (server ))
285285}
286286
287+ type ReceiverMessage struct {
288+ Message string
289+ Receiver libchan.Receiver
290+ }
291+
292+ func TestSubChannel (t * testing.T ) {
293+ client := func (t * testing.T , sender libchan.Sender , s * Transport ) {
294+ remote1 , send1 := libchan .Pipe ()
295+ m1 := & ReceiverMessage {
296+ Message : "WithReceiver" ,
297+ Receiver : remote1 ,
298+ }
299+ if sendErr := sender .Send (m1 ); sendErr != nil {
300+ t .Fatalf ("Error sending ReceiverMessage: %s" , sendErr )
301+ }
302+
303+ remote2 , send2 := libchan .Pipe ()
304+ m2 := & ReceiverMessage {
305+ Message : "Nested" ,
306+ Receiver : remote2 ,
307+ }
308+ if sendErr := send1 .Send (m2 ); sendErr != nil {
309+ t .Fatalf ("Error sending ReceiverMessage: %s" , sendErr )
310+ }
311+
312+ m3 := & SimpleMessage {"This is a simple message" }
313+ if sendErr := send2 .Send (m3 ); sendErr != nil {
314+ t .Fatalf ("Error sending simple message: %s" , sendErr )
315+ }
316+
317+ if closeErr := send1 .Close (); closeErr != nil {
318+ t .Fatalf ("Error closing send1: %s" , closeErr )
319+ }
320+
321+ if closeErr := send2 .Close (); closeErr != nil {
322+ t .Fatalf ("Error closing send2: %s" , closeErr )
323+ }
324+ }
325+ server := func (t * testing.T , receiver libchan.Receiver , s * Transport ) {
326+ m1 := & ReceiverMessage {}
327+ if receiveErr := receiver .Receive (m1 ); receiveErr != nil {
328+ t .Fatalf ("Error receiving ReceiverMessage: %s" , receiveErr )
329+ }
330+
331+ if expected := "WithReceiver" ; m1 .Message != expected {
332+ t .Fatalf ("Unexpected message\n \t Expected: %s\n \t Actual: %s" , expected , m1 .Message )
333+ }
334+
335+ if m1 .Receiver == nil {
336+ t .Fatalf ("Receiver is nil" )
337+ }
338+
339+ m2 := & ReceiverMessage {}
340+ if receiveErr := m1 .Receiver .Receive (m2 ); receiveErr != nil {
341+ t .Fatalf ("Error receiving ReceiverMessage: %s" , receiveErr )
342+ }
343+ if expected := "Nested" ; m2 .Message != expected {
344+ t .Fatalf ("Unexpected message value:\n \t Expected: %s\n \t Actual: %s" , expected , m2 .Message )
345+ }
346+
347+ if m2 .Receiver == nil {
348+ t .Fatalf ("Receiver is nil" )
349+ }
350+
351+ m3 := & SimpleMessage {}
352+ if receiverErr := m2 .Receiver .Receive (m3 ); receiverErr != nil {
353+ t .Fatalf ("Error receiving SimpleMessage: %s" , receiverErr )
354+ }
355+ if expected := "This is a simple message" ; m3 .Message != expected {
356+ t .Fatalf ("Unexpected message value:\n \t Expected: %s\n \t Actual: %s" , expected , m3 .Message )
357+ }
358+ }
359+ SpawnClientServerTest (t , "localhost:12845" , ClientSendWrapper (client ), ServerReceiveWrapper (server ))
360+ }
361+
362+ type SenderMessage struct {
363+ Message string
364+ Sender libchan.Sender
365+ }
366+
367+ func TestSenderSubChannel (t * testing.T ) {
368+ client := func (t * testing.T , sender libchan.Sender , s * Transport ) {
369+ recv , remote1 := libchan .Pipe ()
370+ m1 := & SenderMessage {
371+ Message : "WithSender" ,
372+ Sender : remote1 ,
373+ }
374+ if sendErr := sender .Send (m1 ); sendErr != nil {
375+ t .Fatalf ("Error sending SenderMessage: %s" , sendErr )
376+ }
377+
378+ m2 := & SenderMessage {}
379+ if receiveErr := recv .Receive (m2 ); receiveErr != nil {
380+ t .Fatalf ("Error receiving ReceiverMessage: %s" , receiveErr )
381+ }
382+ if expected := "Nested" ; m2 .Message != expected {
383+ t .Fatalf ("Unexpected message value:\n \t Expected: %s\n \t Actual: %s" , expected , m2 .Message )
384+ }
385+
386+ if m2 .Sender == nil {
387+ t .Fatalf ("Receiver is nil" )
388+ }
389+
390+ m3 := & SimpleMessage {"This is a simple message" }
391+ if sendErr := m2 .Sender .Send (m3 ); sendErr != nil {
392+ t .Fatalf ("Error sending simple message: %s" , sendErr )
393+ }
394+
395+ if closeErr := m2 .Sender .Close (); closeErr != nil {
396+ t .Fatalf ("Error closing send2: %s" , closeErr )
397+ }
398+ }
399+ server := func (t * testing.T , receiver libchan.Receiver , s * Transport ) {
400+ m1 := & SenderMessage {}
401+ if receiveErr := receiver .Receive (m1 ); receiveErr != nil {
402+ t .Fatalf ("Error receiving SenderMessage: %s" , receiveErr )
403+ }
404+
405+ if expected := "WithSender" ; m1 .Message != expected {
406+ t .Fatalf ("Unexpected message\n \t Expected: %s\n \t Actual: %s" , expected , m1 .Message )
407+ }
408+
409+ if m1 .Sender == nil {
410+ t .Fatalf ("Receiver is nil" )
411+ }
412+
413+ recv , remote := libchan .Pipe ()
414+ m2 := & SenderMessage {
415+ Message : "Nested" ,
416+ Sender : remote ,
417+ }
418+ if sendErr := m1 .Sender .Send (m2 ); sendErr != nil {
419+ t .Fatalf ("Error sending SenderMessage: %s" , sendErr )
420+ }
421+
422+ m3 := & SimpleMessage {}
423+ if receiverErr := recv .Receive (m3 ); receiverErr != nil {
424+ t .Fatalf ("Error receiving SimpleMessage: %s" , receiverErr )
425+ }
426+ if expected := "This is a simple message" ; m3 .Message != expected {
427+ t .Fatalf ("Unexpected message value:\n \t Expected: %s\n \t Actual: %s" , expected , m3 .Message )
428+ }
429+
430+ if closeErr := m1 .Sender .Close (); closeErr != nil {
431+ t .Fatalf ("Error closing send1: %s" , closeErr )
432+ }
433+
434+ }
435+ SpawnClientServerTest (t , "localhost:12845" , ClientSendWrapper (client ), ServerReceiveWrapper (server ))
436+ }
287437func ClientSendWrapper (f func (t * testing.T , c libchan.Sender , s * Transport )) ClientRoutine {
288438 return func (t * testing.T , server string ) {
289439 conn , connErr := net .Dial ("tcp" , server )
0 commit comments