github.com/wangyougui/gf/v2@v2.6.5/os/gtimer/gtimer_z_unit_entry_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/wangyougui/gf. 6 7 // Job Operations 8 9 package gtimer_test 10 11 import ( 12 "context" 13 "testing" 14 "time" 15 16 "github.com/wangyougui/gf/v2/container/garray" 17 "github.com/wangyougui/gf/v2/os/gtimer" 18 "github.com/wangyougui/gf/v2/test/gtest" 19 ) 20 21 func TestJob_Start_Stop_Close(t *testing.T) { 22 gtest.C(t, func(t *gtest.T) { 23 timer := gtimer.New() 24 array := garray.New(true) 25 job := timer.Add(ctx, 200*time.Millisecond, func(ctx context.Context) { 26 array.Append(1) 27 }) 28 time.Sleep(250 * time.Millisecond) 29 t.Assert(array.Len(), 1) 30 job.Stop() 31 time.Sleep(250 * time.Millisecond) 32 t.Assert(array.Len(), 1) 33 job.Start() 34 time.Sleep(250 * time.Millisecond) 35 t.Assert(array.Len(), 2) 36 job.Close() 37 time.Sleep(250 * time.Millisecond) 38 t.Assert(array.Len(), 2) 39 40 t.Assert(job.Status(), gtimer.StatusClosed) 41 }) 42 } 43 44 func TestJob_Singleton(t *testing.T) { 45 gtest.C(t, func(t *gtest.T) { 46 timer := gtimer.New() 47 array := garray.New(true) 48 job := timer.Add(ctx, 200*time.Millisecond, func(ctx context.Context) { 49 array.Append(1) 50 time.Sleep(10 * time.Second) 51 }) 52 t.Assert(job.IsSingleton(), false) 53 job.SetSingleton(true) 54 t.Assert(job.IsSingleton(), true) 55 time.Sleep(250 * time.Millisecond) 56 t.Assert(array.Len(), 1) 57 58 time.Sleep(250 * time.Millisecond) 59 t.Assert(array.Len(), 1) 60 }) 61 } 62 63 func TestJob_SingletonQuick(t *testing.T) { 64 gtest.C(t, func(t *gtest.T) { 65 timer := gtimer.New(gtimer.TimerOptions{ 66 Quick: true, 67 }) 68 array := garray.New(true) 69 job := timer.Add(ctx, 5*time.Second, func(ctx context.Context) { 70 array.Append(1) 71 time.Sleep(10 * time.Second) 72 }) 73 t.Assert(job.IsSingleton(), false) 74 job.SetSingleton(true) 75 t.Assert(job.IsSingleton(), true) 76 time.Sleep(250 * time.Millisecond) 77 t.Assert(array.Len(), 1) 78 79 time.Sleep(250 * time.Millisecond) 80 t.Assert(array.Len(), 1) 81 }) 82 } 83 84 func TestJob_SetTimes(t *testing.T) { 85 gtest.C(t, func(t *gtest.T) { 86 timer := gtimer.New() 87 array := garray.New(true) 88 job := timer.Add(ctx, 200*time.Millisecond, func(ctx context.Context) { 89 array.Append(1) 90 }) 91 job.SetTimes(2) 92 //job.IsSingleton() 93 time.Sleep(1200 * time.Millisecond) 94 t.Assert(array.Len(), 2) 95 }) 96 } 97 98 func TestJob_Run(t *testing.T) { 99 gtest.C(t, func(t *gtest.T) { 100 timer := gtimer.New() 101 array := garray.New(true) 102 job := timer.Add(ctx, 1000*time.Millisecond, func(ctx context.Context) { 103 array.Append(1) 104 }) 105 job.Job()(ctx) 106 t.Assert(array.Len(), 1) 107 }) 108 }