Memoize library.IntegrationEnv so it's only constructed once per test.
This is probably a good idea regardless, but it also avoids an infinite recursion from IntegrationEnv() -> assertNoRestartsDuringTest() -> NewKubeclient() -> IntegrationEnv() -> ... Signed-off-by: Matt Moyer <moyerm@vmware.com>
This commit is contained in:
parent
0dd2b358fb
commit
74df6d138b
@ -7,6 +7,7 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
@ -73,9 +74,17 @@ func (e *TestEnv) ProxyEnv() []string {
|
|||||||
return []string{"http_proxy=" + e.Proxy, "https_proxy=" + e.Proxy, "no_proxy=127.0.0.1"}
|
return []string{"http_proxy=" + e.Proxy, "https_proxy=" + e.Proxy, "no_proxy=127.0.0.1"}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// memoizedTestEnvsByTest maps *testing.T pointers to *TestEnv. It exists so that we don't do all the
|
||||||
|
// environment parsing N times per test and so that any implicit assertions happen only once.
|
||||||
|
var memoizedTestEnvsByTest sync.Map //nolint: gochecknoglobals
|
||||||
|
|
||||||
// IntegrationEnv gets the integration test environment from OS environment variables. This
|
// IntegrationEnv gets the integration test environment from OS environment variables. This
|
||||||
// method also implies SkipUnlessIntegration().
|
// method also implies SkipUnlessIntegration().
|
||||||
func IntegrationEnv(t *testing.T) *TestEnv {
|
func IntegrationEnv(t *testing.T) *TestEnv {
|
||||||
|
if existing, exists := memoizedTestEnvsByTest.Load(t); exists {
|
||||||
|
return existing.(*TestEnv)
|
||||||
|
}
|
||||||
|
|
||||||
t.Helper()
|
t.Helper()
|
||||||
SkipUnlessIntegration(t)
|
SkipUnlessIntegration(t)
|
||||||
|
|
||||||
@ -96,12 +105,12 @@ func IntegrationEnv(t *testing.T) *TestEnv {
|
|||||||
require.NoErrorf(t, err, "capabilities specification was invalid YAML")
|
require.NoErrorf(t, err, "capabilities specification was invalid YAML")
|
||||||
|
|
||||||
loadEnvVars(t, &result)
|
loadEnvVars(t, &result)
|
||||||
|
result.t = t
|
||||||
|
memoizedTestEnvsByTest.Store(t, &result)
|
||||||
|
|
||||||
// In every integration test, assert that no pods in our namespaces restart during the test.
|
// In every integration test, assert that no pods in our namespaces restart during the test.
|
||||||
assertNoRestartsDuringTest(t, result.ConciergeNamespace, "")
|
assertNoRestartsDuringTest(t, result.ConciergeNamespace, "")
|
||||||
assertNoRestartsDuringTest(t, result.SupervisorNamespace, "")
|
assertNoRestartsDuringTest(t, result.SupervisorNamespace, "")
|
||||||
|
|
||||||
result.t = t
|
|
||||||
return &result
|
return &result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user