mirror of https://github.com/status-im/consul.git
Merge pull request #8896 from hashicorp/dnephin/go-test-race-more-pkgs
ci: go test -race more packages
This commit is contained in:
commit
8e8ba6301d
|
@ -243,8 +243,9 @@ jobs:
|
|||
--junitfile $TEST_RESULTS_DIR/gotestsum-report.xml -- \
|
||||
-tags="$GOTAGS" -p 2 \
|
||||
-race -gcflags=all=-d=checkptr=0 \
|
||||
./agent/{ae,cache,checks,config,pool,proxycfg,router} \
|
||||
./agent/consul/{authmethod/...,autopilot,fsm,state,stream} \
|
||||
./agent/{ae,cache,cache-types,checks,config,pool,proxycfg,router}/... \
|
||||
./agent/consul/{authmethod,autopilot,fsm,state,stream}/... \
|
||||
./agent/{grpc,rpc,rpcclient,submatview}/... \
|
||||
./snapshot
|
||||
|
||||
- store_test_results:
|
||||
|
|
|
@ -9,9 +9,10 @@ import (
|
|||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/consul/lib"
|
||||
"github.com/mitchellh/hashstructure"
|
||||
|
||||
"github.com/hashicorp/consul/lib"
|
||||
|
||||
"github.com/hashicorp/consul/agent/cache"
|
||||
"github.com/hashicorp/consul/agent/connect"
|
||||
"github.com/hashicorp/consul/agent/consul"
|
||||
|
@ -466,11 +467,7 @@ func (c *ConnectCALeaf) Fetch(opts cache.FetchOptions, req cache.Request) (cache
|
|||
func activeRootHasKey(roots *structs.IndexedCARoots, currentSigningKeyID string) bool {
|
||||
for _, ca := range roots.Roots {
|
||||
if ca.Active {
|
||||
if ca.SigningKeyID == currentSigningKeyID {
|
||||
return true
|
||||
}
|
||||
// Found the active CA but it has changed
|
||||
return false
|
||||
return ca.SigningKeyID == currentSigningKeyID
|
||||
}
|
||||
}
|
||||
// Shouldn't be possible since at least one root should be active.
|
||||
|
|
|
@ -10,14 +10,14 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/consul/sdk/testutil/retry"
|
||||
"github.com/stretchr/testify/mock"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/hashicorp/consul/agent/cache"
|
||||
"github.com/hashicorp/consul/agent/connect"
|
||||
"github.com/hashicorp/consul/agent/consul"
|
||||
"github.com/hashicorp/consul/agent/structs"
|
||||
"github.com/stretchr/testify/mock"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/hashicorp/consul/sdk/testutil/retry"
|
||||
)
|
||||
|
||||
func TestCalculateSoftExpire(t *testing.T) {
|
||||
|
@ -147,6 +147,9 @@ func TestCalculateSoftExpire(t *testing.T) {
|
|||
// Test that after an initial signing, new CA roots (new ID) will
|
||||
// trigger a blocking query to execute.
|
||||
func TestConnectCALeaf_changingRoots(t *testing.T) {
|
||||
if testingRace {
|
||||
t.Skip("fails with -race because caRoot.Active is modified concurrently")
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
require := require.New(t)
|
||||
|
@ -693,6 +696,9 @@ func TestConnectCALeaf_CSRRateLimiting(t *testing.T) {
|
|||
// This test runs multiple concurrent callers watching different leaf certs and
|
||||
// tries to ensure that the background root watch activity behaves correctly.
|
||||
func TestConnectCALeaf_watchRootsDedupingMultipleCallers(t *testing.T) {
|
||||
if testingRace {
|
||||
t.Skip("fails with -race because caRoot.Active is modified concurrently")
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
rpc := TestRPC(t)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
// +build !race
|
||||
|
||||
package cachetype
|
||||
|
||||
const testingRace = false
|
|
@ -0,0 +1,5 @@
|
|||
// +build race
|
||||
|
||||
package cachetype
|
||||
|
||||
const testingRace = true
|
|
@ -4,8 +4,9 @@ import (
|
|||
"reflect"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/consul/agent/cache"
|
||||
"github.com/mitchellh/go-testing-interface"
|
||||
|
||||
"github.com/hashicorp/consul/agent/cache"
|
||||
)
|
||||
|
||||
// TestRPC returns a mock implementation of the RPC interface.
|
||||
|
@ -23,7 +24,8 @@ func TestFetchCh(
|
|||
t testing.T,
|
||||
typ cache.Type,
|
||||
opts cache.FetchOptions,
|
||||
req cache.Request) <-chan interface{} {
|
||||
req cache.Request,
|
||||
) <-chan interface{} {
|
||||
resultCh := make(chan interface{})
|
||||
go func() {
|
||||
result, err := typ.Fetch(opts, req)
|
||||
|
|
|
@ -3,15 +3,17 @@ package grpc
|
|||
import (
|
||||
"context"
|
||||
"net"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/armon/go-metrics"
|
||||
"github.com/hashicorp/consul/agent/grpc/internal/testservice"
|
||||
"github.com/hashicorp/consul/sdk/testutil/retry"
|
||||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/sync/errgroup"
|
||||
"google.golang.org/grpc"
|
||||
|
||||
"github.com/hashicorp/consul/agent/grpc/internal/testservice"
|
||||
"github.com/hashicorp/consul/sdk/testutil/retry"
|
||||
)
|
||||
|
||||
func noopRegister(*grpc.Server) {}
|
||||
|
@ -57,15 +59,18 @@ func TestHandler_EmitsStats(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
cancel()
|
||||
conn.Close()
|
||||
handler.srv.GracefulStop()
|
||||
// Wait for the server to stop so that active_streams is predictable.
|
||||
retry.RunWith(fastRetry, t, func(r *retry.R) {
|
||||
expectedGauge := []metricCall{
|
||||
{key: []string{"testing", "grpc", "server", "active_conns"}, val: 1},
|
||||
{key: []string{"testing", "grpc", "server", "active_streams"}, val: 1},
|
||||
{key: []string{"testing", "grpc", "server", "active_streams"}, val: 0},
|
||||
}
|
||||
require.Equal(r, expectedGauge, sink.gaugeCalls)
|
||||
})
|
||||
require.NoError(t, g.Wait())
|
||||
|
||||
expectedGauge := []metricCall{
|
||||
{key: []string{"testing", "grpc", "server", "active_conns"}, val: 1},
|
||||
{key: []string{"testing", "grpc", "server", "active_streams"}, val: 1},
|
||||
{key: []string{"testing", "grpc", "server", "active_conns"}, val: 0},
|
||||
{key: []string{"testing", "grpc", "server", "active_streams"}, val: 0},
|
||||
}
|
||||
require.Equal(t, expectedGauge, sink.gaugeCalls)
|
||||
|
||||
expectedCounter := []metricCall{
|
||||
{key: []string{"testing", "grpc", "server", "request"}, val: 1},
|
||||
|
@ -96,17 +101,22 @@ func patchGlobalMetrics(t *testing.T) *fakeMetricsSink {
|
|||
}
|
||||
|
||||
type fakeMetricsSink struct {
|
||||
lock sync.Mutex
|
||||
metrics.BlackholeSink
|
||||
gaugeCalls []metricCall
|
||||
incrCounterCalls []metricCall
|
||||
}
|
||||
|
||||
func (f *fakeMetricsSink) SetGaugeWithLabels(key []string, val float32, labels []metrics.Label) {
|
||||
f.lock.Lock()
|
||||
f.gaugeCalls = append(f.gaugeCalls, metricCall{key: key, val: val, labels: labels})
|
||||
f.lock.Unlock()
|
||||
}
|
||||
|
||||
func (f *fakeMetricsSink) IncrCounterWithLabels(key []string, val float32, labels []metrics.Label) {
|
||||
f.lock.Lock()
|
||||
f.incrCounterCalls = append(f.incrCounterCalls, metricCall{key: key, val: val, labels: labels})
|
||||
f.lock.Unlock()
|
||||
}
|
||||
|
||||
type metricCall struct {
|
||||
|
|
Loading…
Reference in New Issue