@@ -847,3 +847,98 @@ func TestConcurrentMessageHandling(t *testing.T) {
847847 }
848848 })
849849}
850+
851+ func TestPerMessageDeadline (t * testing.T ) {
852+ done := make (chan bool )
853+
854+ ws := NewTestServer ()
855+ ws .m .Config .WriteWait = 5 * time .Second
856+
857+ ws .m .HandleConnect (func (s * Session ) {
858+ // New API with custom deadline
859+ err := s .WriteWithDeadline ([]byte ("test" ), 30 * time .Second )
860+ assert .Nil (t , err )
861+ close (done )
862+ })
863+
864+ server := httptest .NewServer (ws )
865+ defer server .Close ()
866+
867+ conn := MustNewDialer (server .URL )
868+ defer conn .Close ()
869+
870+ _ , msg , err := conn .ReadMessage ()
871+ assert .Nil (t , err )
872+ assert .Equal (t , "test" , string (msg ))
873+
874+ <- done
875+ }
876+
877+ func TestZeroDeadlineUsesConfig (t * testing.T ) {
878+ done := make (chan bool )
879+
880+ ws := NewTestServer ()
881+ ws .m .Config .WriteWait = 5 * time .Second
882+
883+ ws .m .HandleConnect (func (s * Session ) {
884+ // Explicitly pass 0, should use Config.WriteWait
885+ err := s .WriteWithDeadline ([]byte ("test" ), 0 )
886+ assert .Nil (t , err )
887+ close (done )
888+ })
889+
890+ server := httptest .NewServer (ws )
891+ defer server .Close ()
892+
893+ conn := MustNewDialer (server .URL )
894+ defer conn .Close ()
895+
896+ _ , msg , err := conn .ReadMessage ()
897+ assert .Nil (t , err )
898+ assert .Equal (t , "test" , string (msg ))
899+
900+ <- done
901+ }
902+
903+ func TestSizeBasedDeadline (t * testing.T ) {
904+ received := make (chan bool , 2 )
905+
906+ ws := NewTestServer ()
907+ ws .m .Config .WriteWait = 10 * time .Second
908+
909+ server := httptest .NewServer (ws )
910+ defer server .Close ()
911+
912+ conn := MustNewDialer (server .URL )
913+ defer conn .Close ()
914+
915+ // Small message - short deadline
916+ smallMsg := []byte ("ping" )
917+ deadline := 2 * time .Second
918+ err := ws .m .BroadcastWithDeadline (smallMsg , deadline )
919+ assert .Nil (t , err )
920+
921+ // Large message - long deadline
922+ largeMsg := make ([]byte , 8192 )
923+ for i := range largeMsg {
924+ largeMsg [i ] = 'x'
925+ }
926+ longDeadline := 30 * time .Second
927+ err = ws .m .BroadcastWithDeadline (largeMsg , longDeadline )
928+ assert .Nil (t , err )
929+
930+ // Read first message
931+ _ , msg1 , err := conn .ReadMessage ()
932+ assert .Nil (t , err )
933+ assert .Equal (t , smallMsg , msg1 )
934+ received <- true
935+
936+ // Read second message
937+ _ , msg2 , err := conn .ReadMessage ()
938+ assert .Nil (t , err )
939+ assert .Equal (t , largeMsg , msg2 )
940+ received <- true
941+
942+ <- received
943+ <- received
944+ }
0 commit comments