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