mirror of https://github.com/XTLS/Xray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.3 KiB
65 lines
1.3 KiB
package task_test |
|
|
|
import ( |
|
"context" |
|
"errors" |
|
"strings" |
|
"testing" |
|
"time" |
|
|
|
"github.com/google/go-cmp/cmp" |
|
"github.com/xtls/xray-core/common" |
|
. "github.com/xtls/xray-core/common/task" |
|
) |
|
|
|
func TestExecuteParallel(t *testing.T) { |
|
err := Run(context.Background(), |
|
func() error { |
|
time.Sleep(time.Millisecond * 200) |
|
return errors.New("test") |
|
}, func() error { |
|
time.Sleep(time.Millisecond * 500) |
|
return errors.New("test2") |
|
}) |
|
|
|
if r := cmp.Diff(err.Error(), "test"); r != "" { |
|
t.Error(r) |
|
} |
|
} |
|
|
|
func TestExecuteParallelContextCancel(t *testing.T) { |
|
ctx, cancel := context.WithCancel(context.Background()) |
|
err := Run(ctx, func() error { |
|
time.Sleep(time.Millisecond * 2000) |
|
return errors.New("test") |
|
}, func() error { |
|
time.Sleep(time.Millisecond * 5000) |
|
return errors.New("test2") |
|
}, func() error { |
|
cancel() |
|
return nil |
|
}) |
|
|
|
errStr := err.Error() |
|
if !strings.Contains(errStr, "canceled") { |
|
t.Error("expected error string to contain 'canceled', but actually not: ", errStr) |
|
} |
|
} |
|
|
|
func BenchmarkExecuteOne(b *testing.B) { |
|
noop := func() error { |
|
return nil |
|
} |
|
for i := 0; i < b.N; i++ { |
|
common.Must(Run(context.Background(), noop)) |
|
} |
|
} |
|
|
|
func BenchmarkExecuteTwo(b *testing.B) { |
|
noop := func() error { |
|
return nil |
|
} |
|
for i := 0; i < b.N; i++ { |
|
common.Must(Run(context.Background(), noop, noop)) |
|
} |
|
}
|
|
|