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