@@ -553,3 +553,54 @@ func TestMediaTimeout(t *testing.T) {
553553 }
554554 })
555555}
556+
557+ func TestSymmetricRTP (t * testing.T ) {
558+ t .Run ("disabled" , func (t * testing.T ) {
559+ m1 , m2 := newMediaPair (t , & MediaOptions {SymmetricRTP : false }, nil )
560+ dstPtr := m1 .port .dst .Load ()
561+ require .NotNil (t , dstPtr )
562+ dst := * dstPtr
563+ require .True (t , dst .IsValid ())
564+
565+ c2 := m2 .port .UDPConn .(* testUDPConn )
566+ newAddr := netip .AddrPortFrom (newIP ("9.9.9.9" ), 9999 )
567+ c2 .addr = newAddr
568+
569+ err := m2 .GetAudioWriter ().WriteSample (msdk.PCM16Sample {0 , 0 })
570+ require .NoError (t , err )
571+
572+ select {
573+ case <- m1 .Received ():
574+ case <- time .After (time .Second ):
575+ t .Fatal ("no media received" )
576+ }
577+
578+ curDstPtr := m1 .port .dst .Load ()
579+ require .NotNil (t , curDstPtr )
580+ require .Equal (t , dst , * curDstPtr )
581+ })
582+
583+ t .Run ("enabled" , func (t * testing.T ) {
584+ m1 , m2 := newMediaPair (t , & MediaOptions {SymmetricRTP : true }, nil )
585+ dstPtr := m1 .port .dst .Load ()
586+ require .NotNil (t , dstPtr )
587+ require .True (t , dstPtr .IsValid ())
588+
589+ c2 := m2 .port .UDPConn .(* testUDPConn )
590+ newAddr := netip .AddrPortFrom (newIP ("9.9.9.9" ), 9999 )
591+ c2 .addr = newAddr
592+
593+ err := m2 .GetAudioWriter ().WriteSample (msdk.PCM16Sample {0 , 0 })
594+ require .NoError (t , err )
595+
596+ select {
597+ case <- m1 .Received ():
598+ case <- time .After (time .Second ):
599+ t .Fatal ("no media received" )
600+ }
601+
602+ curDstPtr := m1 .port .dst .Load ()
603+ require .NotNil (t , curDstPtr )
604+ require .Equal (t , newAddr , * curDstPtr )
605+ })
606+ }
0 commit comments