github.com/EagleQL/Xray-core@v1.4.3/common/task/task_test.go (about) 1 package task_test 2 3 import ( 4 "context" 5 "errors" 6 "strings" 7 "testing" 8 "time" 9 10 "github.com/google/go-cmp/cmp" 11 12 "github.com/xtls/xray-core/common" 13 . "github.com/xtls/xray-core/common/task" 14 ) 15 16 func TestExecuteParallel(t *testing.T) { 17 err := Run(context.Background(), 18 func() error { 19 time.Sleep(time.Millisecond * 200) 20 return errors.New("test") 21 }, func() error { 22 time.Sleep(time.Millisecond * 500) 23 return errors.New("test2") 24 }) 25 26 if r := cmp.Diff(err.Error(), "test"); r != "" { 27 t.Error(r) 28 } 29 } 30 31 func TestExecuteParallelContextCancel(t *testing.T) { 32 ctx, cancel := context.WithCancel(context.Background()) 33 err := Run(ctx, func() error { 34 time.Sleep(time.Millisecond * 2000) 35 return errors.New("test") 36 }, func() error { 37 time.Sleep(time.Millisecond * 5000) 38 return errors.New("test2") 39 }, func() error { 40 cancel() 41 return nil 42 }) 43 44 errStr := err.Error() 45 if !strings.Contains(errStr, "canceled") { 46 t.Error("expected error string to contain 'canceled', but actually not: ", errStr) 47 } 48 } 49 50 func BenchmarkExecuteOne(b *testing.B) { 51 noop := func() error { 52 return nil 53 } 54 for i := 0; i < b.N; i++ { 55 common.Must(Run(context.Background(), noop)) 56 } 57 } 58 59 func BenchmarkExecuteTwo(b *testing.B) { 60 noop := func() error { 61 return nil 62 } 63 for i := 0; i < b.N; i++ { 64 common.Must(Run(context.Background(), noop, noop)) 65 } 66 }