fix: flaky registry data race on mockdns close

Signed-off-by: Terry Howe <terrylhowe@gmail.com>
pull/31199/head
Terry Howe 3 weeks ago
parent 934f761e08
commit 6273f9b38e
No known key found for this signature in database

@ -32,10 +32,7 @@ type HTTPRegistryClientTestSuite struct {
func (suite *HTTPRegistryClientTestSuite) SetupSuite() { func (suite *HTTPRegistryClientTestSuite) SetupSuite() {
// init test client // init test client
dockerRegistry := setup(&suite.TestSuite, false, false) setup(&suite.TestSuite, false, false)
// Start Docker registry
go dockerRegistry.ListenAndServe()
} }
func (suite *HTTPRegistryClientTestSuite) TearDownSuite() { func (suite *HTTPRegistryClientTestSuite) TearDownSuite() {

@ -29,10 +29,7 @@ type InsecureTLSRegistryClientTestSuite struct {
func (suite *InsecureTLSRegistryClientTestSuite) SetupSuite() { func (suite *InsecureTLSRegistryClientTestSuite) SetupSuite() {
// init test client // init test client
dockerRegistry := setup(&suite.TestSuite, true, true) setup(&suite.TestSuite, true, true)
// Start Docker registry
go dockerRegistry.ListenAndServe()
} }
func (suite *InsecureTLSRegistryClientTestSuite) TearDownSuite() { func (suite *InsecureTLSRegistryClientTestSuite) TearDownSuite() {

@ -31,10 +31,7 @@ type TLSRegistryClientTestSuite struct {
func (suite *TLSRegistryClientTestSuite) SetupSuite() { func (suite *TLSRegistryClientTestSuite) SetupSuite() {
// init test client // init test client
dockerRegistry := setup(&suite.TestSuite, true, false) setup(&suite.TestSuite, true, false)
// Start Docker registry
go dockerRegistry.ListenAndServe()
} }
func (suite *TLSRegistryClientTestSuite) TearDownSuite() { func (suite *TLSRegistryClientTestSuite) TearDownSuite() {

@ -29,7 +29,6 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
"sync"
"time" "time"
"github.com/distribution/distribution/v3/configuration" "github.com/distribution/distribution/v3/configuration"
@ -65,12 +64,13 @@ type TestSuite struct {
CompromisedRegistryHost string CompromisedRegistryHost string
WorkspaceDir string WorkspaceDir string
RegistryClient *Client RegistryClient *Client
dockerRegistry *registry.Registry
// A mock DNS server needed for TLS connection testing. // A mock DNS server needed for TLS connection testing.
srv *mockdns.Server srv *mockdns.Server
} }
func setup(suite *TestSuite, tlsEnabled, insecure bool) *registry.Registry { func setup(suite *TestSuite, tlsEnabled, insecure bool) {
suite.WorkspaceDir = testWorkspaceDir suite.WorkspaceDir = testWorkspaceDir
os.RemoveAll(suite.WorkspaceDir) os.RemoveAll(suite.WorkspaceDir)
os.Mkdir(suite.WorkspaceDir, 0700) os.Mkdir(suite.WorkspaceDir, 0700)
@ -166,20 +166,20 @@ func setup(suite *TestSuite, tlsEnabled, insecure bool) *registry.Registry {
config.HTTP.TLS.ClientCAs = []string{tlsCA} config.HTTP.TLS.ClientCAs = []string{tlsCA}
} }
} }
dockerRegistry, err := registry.NewRegistry(context.Background(), config) suite.dockerRegistry, err = registry.NewRegistry(context.Background(), config)
suite.Nil(err, "no error creating test registry") suite.Nil(err, "no error creating test registry")
suite.CompromisedRegistryHost = initCompromisedRegistryTestServer() suite.CompromisedRegistryHost = initCompromisedRegistryTestServer()
return dockerRegistry go func() {
_ = suite.dockerRegistry.ListenAndServe()
_ = suite.srv.Close()
mockdns.UnpatchNet(net.DefaultResolver)
}()
} }
func teardown(suite *TestSuite) { func teardown(suite *TestSuite) {
var lock sync.Mutex if suite.dockerRegistry != nil {
lock.Lock() _ = suite.dockerRegistry.Shutdown(context.Background())
defer lock.Unlock()
if suite.srv != nil {
mockdns.UnpatchNet(net.DefaultResolver)
suite.srv.Close()
} }
} }

Loading…
Cancel
Save