@@ -978,13 +978,73 @@ func TestPagePool(t *testing.T) {
978978
979979 pool := rod .NewPagePool (3 )
980980 create := func () * rod.Page { return g .browser .MustPage () }
981- p := pool .Get (create )
981+ p := pool .MustGet (create )
982982 pool .Put (p )
983983 pool .Cleanup (func (p * rod.Page ) {
984984 p .MustClose ()
985985 })
986986}
987987
988+ func TestPagePool_Get (t * testing.T ) {
989+ g := setup (t )
990+
991+ pool := rod .NewPagePool (3 )
992+ defer pool .Cleanup (func (p * rod.Page ) {
993+ p .MustClose ()
994+ })
995+ create := func () (* rod.Page , error ) {
996+ b , err := g .browser .Incognito ()
997+ if err != nil {
998+ return nil , err
999+ }
1000+ return b .Page (proto.TargetCreateTarget {URL : "" })
1001+ }
1002+ for i := 0 ; i < 4 ; i ++ {
1003+ p , err := pool .Get (create )
1004+ if err != nil {
1005+ t .Fatal (err )
1006+ }
1007+ pool .Put (p )
1008+ }
1009+ }
1010+
1011+ func TestPagePool_Get_Negative (t * testing.T ) {
1012+ g := setup (t )
1013+ failContext , cancel := context .WithCancel (g .Context ())
1014+ g .browser = g .browser .Context (failContext )
1015+ // manipulate browser canceled by another thread
1016+ pool := rod .NewPagePool (3 )
1017+
1018+ defer pool .Cleanup (func (p * rod.Page ) {
1019+ err := p .Close ()
1020+ if err != nil {
1021+ t .Log (err )
1022+ }
1023+ })
1024+
1025+ create := func () (* rod.Page , error ) {
1026+ b , err := g .browser .Incognito ()
1027+ if err != nil {
1028+ return nil , err
1029+ }
1030+ return b .Page (proto.TargetCreateTarget {URL : "" })
1031+ }
1032+ p , err := pool .Get (create )
1033+ if err != nil {
1034+ t .Fatal (err )
1035+ }
1036+ pool .Put (p )
1037+
1038+ cancel ()
1039+ p , err = pool .Get (create )
1040+ if err != nil {
1041+ t .Log (err )
1042+ } else {
1043+ pool .Put (p )
1044+ t .FailNow ()
1045+ }
1046+ }
1047+
9881048func TestPageUseNonExistSession (t * testing.T ) {
9891049 g := setup (t )
9901050
0 commit comments