mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-14 23:17:29 +00:00
tstest, tstest/integration, github/workflows: shard integration tests
Over four jobs for now. Updates #cleanup Change-Id: Ic2b1a739a454916893945a3f9efc480d6fcbd70b Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:

committed by
Brad Fitzpatrick

parent
e6ab7d3c14
commit
4dec0c6eb9
@@ -6,6 +6,10 @@ package tstest
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -46,3 +50,27 @@ func WaitFor(maxWait time.Duration, try func() error) error {
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
var testNum atomic.Int32
|
||||
|
||||
// Shard skips t if it's not running if the TS_TEST_SHARD test shard is set to
|
||||
// "n/m" and this test execution number in the process mod m is not equal to n-1.
|
||||
// That is, to run with 4 shards, set TS_TEST_SHARD=1/4, ..., TS_TEST_SHARD=4/4
|
||||
// for the four jobs.
|
||||
func Shard(t testing.TB) {
|
||||
e := os.Getenv("TS_TEST_SHARD")
|
||||
a, b, ok := strings.Cut(e, "/")
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
wantShard, _ := strconv.ParseInt(a, 10, 32)
|
||||
shards, _ := strconv.ParseInt(b, 10, 32)
|
||||
if wantShard == 0 || shards == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
shard := ((testNum.Add(1) - 1) % int32(shards)) + 1
|
||||
if shard != int32(wantShard) {
|
||||
t.Skipf("skipping shard %d/%d (process has TS_TEST_SHARD=%q)", shard, shards, e)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user