@@ -2,6 +2,7 @@ package queue_test
2
2
3
3
import (
4
4
"fmt"
5
+ "math"
5
6
"testing"
6
7
"time"
7
8
@@ -747,3 +748,73 @@ func TestTtlQueue_Put(t *testing.T) {
747
748
}
748
749
}
749
750
}
751
+
752
+ func TestUtube_Put (t * testing.T ) {
753
+ conn , err := Connect (server , opts )
754
+ if err != nil {
755
+ t .Errorf ("Failed to connect: %s" , err .Error ())
756
+ return
757
+ }
758
+ if conn == nil {
759
+ t .Errorf ("conn is nil after Connect" )
760
+ return
761
+ }
762
+ defer conn .Close ()
763
+
764
+ name := "test_utube"
765
+ cfg := queue.Cfg {
766
+ Temporary : true ,
767
+ Kind : queue .UTUBE ,
768
+ IfNotExists : true ,
769
+ }
770
+ q := queue .New (conn , name )
771
+ if err = q .Create (cfg ); err != nil {
772
+ t .Errorf ("Failed to create queue: %s" , err .Error ())
773
+ return
774
+ }
775
+ defer func () {
776
+ //Drop
777
+ err := q .Drop ()
778
+ if err != nil {
779
+ t .Errorf ("Failed drop queue: %s" , err .Error ())
780
+ }
781
+ }()
782
+
783
+ data1 := & customData {"test-data-0" }
784
+ _ , err = q .PutWithOpts (data1 , queue.Opts {Utube : "test-utube-consumer-key" })
785
+ if err != nil {
786
+ t .Fatalf ("Failed put task to queue: %s" , err .Error ())
787
+ }
788
+ data2 := & customData {"test-data-1" }
789
+ _ , err = q .PutWithOpts (data2 , queue.Opts {Utube : "test-utube-consumer-key" })
790
+ if err != nil {
791
+ t .Fatalf ("Failed put task to queue: %s" , err .Error ())
792
+ }
793
+
794
+ go func () {
795
+ t1 , err := q .TakeTimeout (2 * time .Second )
796
+ if err != nil {
797
+ t .Fatalf ("Failed to take task from utube: %s" , err .Error ())
798
+ }
799
+
800
+ time .Sleep (2 * time .Second )
801
+ if err := t1 .Ack (); err != nil {
802
+ t .Fatalf ("Failed to ack task: %s" , err .Error ())
803
+ }
804
+ }()
805
+
806
+ time .Sleep (100 * time .Millisecond )
807
+ // the queue should be blocked for ~2 seconds
808
+ start := time .Now ()
809
+ t2 , err := q .TakeTimeout (2 * time .Second )
810
+ if err != nil {
811
+ t .Fatalf ("Failed to take task from utube: %s" , err .Error ())
812
+ }
813
+ if err := t2 .Ack (); err != nil {
814
+ t .Fatalf ("Failed to ack task: %s" , err .Error ())
815
+ }
816
+ end := time .Now ()
817
+ if math .Abs (float64 (end .Sub (start )- 2 * time .Second )) > float64 (200 * time .Millisecond ) {
818
+ t .Fatalf ("Blocking time is less than expected: actual = %.2fs, expected = 1s" , end .Sub (start ).Seconds ())
819
+ }
820
+ }
0 commit comments