@@ -11,7 +11,7 @@ import (
11
11
"testing"
12
12
"time"
13
13
14
- piondtls "github.com/pion/dtls/v2 "
14
+ piondtls "github.com/pion/dtls/v3 "
15
15
"github.com/plgd-dev/go-coap/v3/dtls"
16
16
"github.com/plgd-dev/go-coap/v3/message"
17
17
"github.com/plgd-dev/go-coap/v3/message/codes"
@@ -20,7 +20,6 @@ import (
20
20
coapNet "github.com/plgd-dev/go-coap/v3/net"
21
21
"github.com/plgd-dev/go-coap/v3/net/responsewriter"
22
22
"github.com/plgd-dev/go-coap/v3/options"
23
- "github.com/plgd-dev/go-coap/v3/options/config"
24
23
"github.com/plgd-dev/go-coap/v3/pkg/runner/periodic"
25
24
"github.com/plgd-dev/go-coap/v3/udp/client"
26
25
"github.com/stretchr/testify/assert"
@@ -123,7 +122,7 @@ func TestConnGet(t *testing.T) {
123
122
124
123
for _ , tt := range tests {
125
124
t .Run (tt .name , func (t * testing.T ) {
126
- ctx , cancel := context .WithTimeout (context .Background (), time . Second * 3600 )
125
+ ctx , cancel := context .WithTimeout (context .Background (), Timeout )
127
126
defer cancel ()
128
127
got , err := cc .Get (ctx , tt .args .path , tt .args .opts ... )
129
128
if tt .wantErr {
@@ -216,7 +215,7 @@ func TestConnGetSeparateMessage(t *testing.T) {
216
215
require .NoError (t , errC )
217
216
}()
218
217
219
- ctx , cancel := context .WithTimeout (context .Background (), time . Second * 3600 )
218
+ ctx , cancel := context .WithTimeout (context .Background (), Timeout )
220
219
defer cancel ()
221
220
222
221
req , err := cc .NewGetRequest (ctx , "/a" )
@@ -340,7 +339,7 @@ func TestConnPost(t *testing.T) {
340
339
require .NoError (t , errC )
341
340
}()
342
341
343
- ctx , cancel := context .WithTimeout (context .Background (), time . Second * 3600 )
342
+ ctx , cancel := context .WithTimeout (context .Background (), Timeout )
344
343
defer cancel ()
345
344
got , err := cc .Post (ctx , tt .args .path , tt .args .contentFormat , tt .args .payload , tt .args .opts ... )
346
345
if tt .wantErr {
@@ -475,7 +474,7 @@ func TestConnPut(t *testing.T) {
475
474
require .NoError (t , errC )
476
475
}()
477
476
478
- ctx , cancel := context .WithTimeout (context .Background (), time . Second * 3600 )
477
+ ctx , cancel := context .WithTimeout (context .Background (), Timeout )
479
478
defer cancel ()
480
479
got , err := cc .Put (ctx , tt .args .path , tt .args .contentFormat , tt .args .payload , tt .args .opts ... )
481
480
if tt .wantErr {
@@ -590,7 +589,7 @@ func TestConnDelete(t *testing.T) {
590
589
591
590
for _ , tt := range tests {
592
591
t .Run (tt .name , func (t * testing.T ) {
593
- ctx , cancel := context .WithTimeout (context .Background (), time . Second * 3600 )
592
+ ctx , cancel := context .WithTimeout (context .Background (), Timeout )
594
593
defer cancel ()
595
594
got , err := cc .Delete (ctx , tt .args .path , tt .args .opts ... )
596
595
if tt .wantErr {
@@ -654,58 +653,12 @@ func TestConnPing(t *testing.T) {
654
653
require .NoError (t , err )
655
654
}
656
655
657
- func TestConnHandeShakeFailure (t * testing.T ) {
658
- dtlsCfg := & piondtls.Config {
659
- PSK : func (hint []byte ) ([]byte , error ) {
660
- fmt .Printf ("Hint: %s \n " , hint )
661
- return []byte {0xAB , 0xC1 , 0x23 }, nil
662
- },
663
- PSKIdentityHint : []byte ("Pion DTLS Server" ),
664
- CipherSuites : []piondtls.CipherSuiteID {piondtls .TLS_PSK_WITH_AES_128_CCM_8 },
665
- ConnectContextMaker : func () (context.Context , func ()) {
666
- return context .WithTimeout (context .Background (), 1 * time .Second )
667
- },
668
- }
669
- l , err := coapNet .NewDTLSListener ("udp" , "" , dtlsCfg )
670
- require .NoError (t , err )
671
- defer func () {
672
- errC := l .Close ()
673
- require .NoError (t , errC )
674
- }()
675
- var wg sync.WaitGroup
676
- defer wg .Wait ()
677
-
678
- s := dtls .NewServer ()
679
- defer s .Stop ()
680
-
681
- wg .Add (1 )
682
- go func () {
683
- defer wg .Done ()
684
- errS := s .Serve (l )
685
- assert .NoError (t , errS )
686
- }()
687
-
688
- dtlsCfgClient := & piondtls.Config {
689
- PSK : func (hint []byte ) ([]byte , error ) {
690
- fmt .Printf ("Hint: %s \n " , hint )
691
- return []byte {0xAB , 0xC1 , 0x24 }, nil
692
- },
693
- PSKIdentityHint : []byte ("Pion DTLS Client" ),
694
- CipherSuites : []piondtls.CipherSuiteID {piondtls .TLS_PSK_WITH_AES_128_CCM_8 },
695
- ConnectContextMaker : func () (context.Context , func ()) {
696
- return context .WithTimeout (context .Background (), 1 * time .Second )
697
- },
698
- }
699
- _ , err = dtls .Dial (l .Addr ().String (), dtlsCfgClient )
700
- require .Error (t , err )
701
- }
702
-
703
656
func TestClientInactiveMonitor (t * testing.T ) {
704
657
var inactivityDetected atomic.Bool
705
658
706
659
ctx , cancel := context .WithTimeout (context .Background (), Timeout )
707
660
defer cancel ()
708
- serverCgf , clientCgf , _ , err := createDTLSConfig (ctx )
661
+ serverCgf , clientCgf , _ , err := createDTLSConfig ()
709
662
require .NoError (t , err )
710
663
711
664
ld , err := coapNet .NewDTLSListener ("udp4" , "" , serverCgf )
@@ -745,7 +698,9 @@ func TestClientInactiveMonitor(t *testing.T) {
745
698
serverWg .Wait ()
746
699
}()
747
700
748
- cc , err := dtls .Dial (ld .Addr ().String (), clientCgf ,
701
+ cc , err := dtls .Dial (
702
+ ld .Addr ().String (),
703
+ clientCgf ,
749
704
options .WithInactivityMonitor (100 * time .Millisecond , func (cc * client.Conn ) {
750
705
require .False (t , inactivityDetected .Load ())
751
706
inactivityDetected .Store (true )
@@ -774,65 +729,71 @@ func TestClientInactiveMonitor(t *testing.T) {
774
729
func TestClientKeepAliveMonitor (t * testing.T ) {
775
730
var inactivityDetected atomic.Bool
776
731
777
- ctx , cancel := context .WithTimeout (context .Background (), Timeout )
778
- defer cancel ()
779
- serverCgf , clientCgf , _ , err := createDTLSConfig (ctx )
732
+ serverCgf , clientCgf , _ , err := createDTLSConfig ()
780
733
require .NoError (t , err )
781
-
782
734
ld , err := coapNet .NewDTLSListener ("udp4" , "" , serverCgf )
783
735
require .NoError (t , err )
736
+ defer func () {
737
+ errC := ld .Close ()
738
+ require .NoError (t , errC )
739
+ }()
740
+
741
+ ctx , cancel := context .WithTimeout (context .Background (), Timeout )
742
+ defer cancel ()
784
743
785
- checkClose := semaphore .NewWeighted (1 )
786
- err = checkClose .Acquire (ctx , 1 )
744
+ checkClose := semaphore .NewWeighted (2 )
745
+ err = checkClose .Acquire (ctx , 2 )
787
746
require .NoError (t , err )
788
747
748
+ sd := dtls .NewServer (
749
+ options .WithOnNewConn (func (cc * client.Conn ) {
750
+ cc .AddOnClose (func () {
751
+ checkClose .Release (1 )
752
+ })
753
+ }),
754
+ options .WithPeriodicRunner (periodic .New (ctx .Done (), time .Millisecond * 10 )),
755
+ options .WithRequestMonitor (func (_ * client.Conn , _ * pool.Message ) (bool , error ) {
756
+ // lets drop all messages, this will trigger keep alive because of inactivity
757
+ return true , nil
758
+ }),
759
+ )
760
+
789
761
var serverWg sync.WaitGroup
790
762
serverWg .Add (1 )
791
763
go func () {
792
764
defer serverWg .Done ()
793
- for {
794
- c , errA := ld .AcceptWithContext (ctx )
795
- if errA != nil {
796
- if errors .Is (errA , coapNet .ErrListenerIsClosed ) {
797
- return
798
- }
799
- }
800
- defer c .Close ()
801
- assert .NoError (t , errA )
802
- }
765
+ errS := sd .Serve (ld )
766
+ assert .NoError (t , errS )
803
767
}()
804
768
defer func () {
805
- errC := ld . Close ()
806
- require . NoError ( t , errC )
769
+ sd . Stop ()
770
+ serverWg . Wait ( )
807
771
}()
808
772
809
773
cc , err := dtls .Dial (
810
774
ld .Addr ().String (),
811
775
clientCgf ,
812
776
options .WithKeepAlive (3 , 100 * time .Millisecond , func (cc * client.Conn ) {
777
+ t .Log ("client - close for inactivity" )
813
778
require .False (t , inactivityDetected .Load ())
814
779
inactivityDetected .Store (true )
815
780
errC := cc .Close ()
816
781
require .NoError (t , errC )
817
782
}),
818
783
options .WithPeriodicRunner (periodic .New (ctx .Done (), time .Millisecond * 10 )),
819
- options .WithReceivedMessageQueueSize (32 ),
820
- options .WithProcessReceivedMessageFunc (func (req * pool.Message , cc * client.Conn , handler config.HandlerFunc [* client.Conn ]) {
821
- cc .ProcessReceivedMessageWithHandler (req , handler )
822
- }),
823
784
)
824
785
require .NoError (t , err )
825
786
cc .AddOnClose (func () {
787
+ t .Log ("connection is closed" )
826
788
checkClose .Release (1 )
827
789
})
828
790
829
791
// send ping to create server side connection
830
792
ctxPing , cancel := context .WithTimeout (ctx , time .Second )
831
793
defer cancel ()
832
- err = cc .Ping (ctxPing )
833
- require .Error (t , err )
794
+ _ = cc .Ping (ctxPing )
834
795
835
- err = checkClose .Acquire (ctx , 1 )
796
+ err = checkClose .Acquire (ctx , 2 )
836
797
require .NoError (t , err )
837
798
require .True (t , inactivityDetected .Load ())
838
799
}
0 commit comments