tests: support for marking _test.v files with `// vtest flaky: true`, to reduce false positives from the CI
parent
1ad84bb2d1
commit
76c67952e6
|
@ -19,6 +19,8 @@ pub const hide_oks = os.getenv('VTEST_HIDE_OK') == '1'
|
||||||
|
|
||||||
pub const fail_fast = os.getenv('VTEST_FAIL_FAST') == '1'
|
pub const fail_fast = os.getenv('VTEST_FAIL_FAST') == '1'
|
||||||
|
|
||||||
|
pub const fail_flaky = os.getenv('VTEST_FAIL_FLAKY') == '1'
|
||||||
|
|
||||||
pub const test_only = os.getenv('VTEST_ONLY').split_any(',')
|
pub const test_only = os.getenv('VTEST_ONLY').split_any(',')
|
||||||
|
|
||||||
pub const test_only_fn = os.getenv('VTEST_ONLY_FN').split_any(',')
|
pub const test_only_fn = os.getenv('VTEST_ONLY_FN').split_any(',')
|
||||||
|
@ -362,7 +364,7 @@ fn worker_trunner(mut p pool.PoolProcessor, idx int, thread_id int) voidptr {
|
||||||
details := get_test_details(file)
|
details := get_test_details(file)
|
||||||
os.setenv('VTEST_RETRY_MAX', '$details.retry', true)
|
os.setenv('VTEST_RETRY_MAX', '$details.retry', true)
|
||||||
for retry := 1; retry <= details.retry; retry++ {
|
for retry := 1; retry <= details.retry; retry++ {
|
||||||
ts.append_message(.info, ' retrying $retry/$details.retry of $relative_file ...')
|
ts.append_message(.info, ' [stats] retrying $retry/$details.retry of $relative_file ; known flaky: $details.flaky ...')
|
||||||
os.setenv('VTEST_RETRY', '$retry', true)
|
os.setenv('VTEST_RETRY', '$retry', true)
|
||||||
status = os.system(cmd)
|
status = os.system(cmd)
|
||||||
if status == 0 {
|
if status == 0 {
|
||||||
|
@ -372,6 +374,10 @@ fn worker_trunner(mut p pool.PoolProcessor, idx int, thread_id int) voidptr {
|
||||||
}
|
}
|
||||||
time.sleep(500 * time.millisecond)
|
time.sleep(500 * time.millisecond)
|
||||||
}
|
}
|
||||||
|
if details.flaky && !testing.fail_flaky {
|
||||||
|
ts.append_message(.info, ' *FAILURE* of the known flaky test file $relative_file is ignored, since VTEST_FAIL_FLAKY is 0 . Retry count: $details.retry .')
|
||||||
|
goto test_passed_system
|
||||||
|
}
|
||||||
ts.failed = true
|
ts.failed = true
|
||||||
ts.benchmark.fail()
|
ts.benchmark.fail()
|
||||||
tls_bench.fail()
|
tls_bench.fail()
|
||||||
|
@ -399,7 +405,7 @@ fn worker_trunner(mut p pool.PoolProcessor, idx int, thread_id int) voidptr {
|
||||||
details := get_test_details(file)
|
details := get_test_details(file)
|
||||||
os.setenv('VTEST_RETRY_MAX', '$details.retry', true)
|
os.setenv('VTEST_RETRY_MAX', '$details.retry', true)
|
||||||
for retry := 1; retry <= details.retry; retry++ {
|
for retry := 1; retry <= details.retry; retry++ {
|
||||||
ts.append_message(.info, ' retrying $retry/$details.retry of $relative_file ...')
|
ts.append_message(.info, ' retrying $retry/$details.retry of $relative_file ; known flaky: $details.flaky ...')
|
||||||
os.setenv('VTEST_RETRY', '$retry', true)
|
os.setenv('VTEST_RETRY', '$retry', true)
|
||||||
r = os.execute(cmd)
|
r = os.execute(cmd)
|
||||||
if r.exit_code == 0 {
|
if r.exit_code == 0 {
|
||||||
|
@ -408,6 +414,10 @@ fn worker_trunner(mut p pool.PoolProcessor, idx int, thread_id int) voidptr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if details.flaky && !testing.fail_flaky {
|
||||||
|
ts.append_message(.info, ' *FAILURE* of the known flaky test file $relative_file is ignored, since VTEST_FAIL_FLAKY is 0 . Retry count: $details.retry .')
|
||||||
|
goto test_passed_system
|
||||||
|
}
|
||||||
ts.failed = true
|
ts.failed = true
|
||||||
ts.benchmark.fail()
|
ts.benchmark.fail()
|
||||||
tls_bench.fail()
|
tls_bench.fail()
|
||||||
|
@ -562,6 +572,7 @@ pub fn setup_new_vtmp_folder() string {
|
||||||
pub struct TestDetails {
|
pub struct TestDetails {
|
||||||
pub mut:
|
pub mut:
|
||||||
retry int
|
retry int
|
||||||
|
flaky bool // when flaky tests fail, the whole run is still considered successfull, unless VTEST_FAIL_FLAKY is 1
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_test_details(file string) TestDetails {
|
pub fn get_test_details(file string) TestDetails {
|
||||||
|
@ -571,6 +582,9 @@ pub fn get_test_details(file string) TestDetails {
|
||||||
if line.starts_with('// vtest retry:') {
|
if line.starts_with('// vtest retry:') {
|
||||||
res.retry = line.all_after(':').trim_space().int()
|
res.retry = line.all_after(':').trim_space().int()
|
||||||
}
|
}
|
||||||
|
if line.starts_with('// vtest flaky:') {
|
||||||
|
res.flaky = line.all_after(':').trim_space().bool()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 3
|
// vtest retry: 3
|
||||||
import context
|
import context
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 8
|
// vtest retry: 8
|
||||||
import net
|
import net
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 3
|
// vtest retry: 3
|
||||||
import os
|
import os
|
||||||
import os.notify
|
import os.notify
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 3
|
// vtest retry: 3
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 15
|
// vtest retry: 15
|
||||||
|
|
||||||
// This test case runs concurrent 3 instances of `do_select` that
|
// This test case runs concurrent 3 instances of `do_select` that
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
module sync
|
module sync
|
||||||
|
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 6
|
// vtest retry: 6
|
||||||
|
|
||||||
// ATTENTION! Do not use this file as an example!
|
// ATTENTION! Do not use this file as an example!
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 4
|
// vtest retry: 4
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 3
|
// vtest retry: 3
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 3
|
// vtest retry: 3
|
||||||
|
|
||||||
fn sum1(a int, b int) int {
|
fn sum1(a int, b int) int {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 3
|
// vtest retry: 3
|
||||||
|
|
||||||
fn f(x f64) f64 {
|
fn f(x f64) f64 {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 3
|
// vtest retry: 3
|
||||||
|
|
||||||
fn f(n int) ?f64 {
|
fn f(n int) ?f64 {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 4
|
// vtest retry: 4
|
||||||
import sync
|
import sync
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 4
|
// vtest retry: 4
|
||||||
/*
|
/*
|
||||||
* To verify the effect of "[keep_args_alive]", this attribute may be commented out.
|
* To verify the effect of "[keep_args_alive]", this attribute may be commented out.
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// vtest flaky: true
|
||||||
// vtest retry: 3
|
// vtest retry: 3
|
||||||
import sync
|
import sync
|
||||||
import time
|
import time
|
||||||
|
|
Loading…
Reference in New Issue