mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
Ensure data-race-free access to the daemon configuration without locking by mutating a deep copy of the config and atomically storing a pointer to the copy into the daemon-wide configStore value. Any operations which need to read from the daemon config must capture the configStore value only once and pass it around to guarantee a consistent view of the config. Signed-off-by: Cory Snider <csnider@mirantis.com>
37 lines
932 B
Go
37 lines
932 B
Go
package daemon // import "github.com/docker/docker/daemon"
|
|
|
|
import (
|
|
"testing"
|
|
|
|
containertypes "github.com/docker/docker/api/types/container"
|
|
"github.com/docker/docker/container"
|
|
"github.com/docker/docker/daemon/config"
|
|
"gotest.tools/v3/assert"
|
|
is "gotest.tools/v3/assert/cmp"
|
|
)
|
|
|
|
func TestGetInspectData(t *testing.T) {
|
|
c := &container.Container{
|
|
ID: "inspect-me",
|
|
HostConfig: &containertypes.HostConfig{},
|
|
State: container.NewState(),
|
|
ExecCommands: container.NewExecStore(),
|
|
}
|
|
|
|
d := &Daemon{
|
|
linkIndex: newLinkIndex(),
|
|
}
|
|
if d.UsesSnapshotter() {
|
|
t.Skip("does not apply to containerd snapshotters, which don't have RWLayer set")
|
|
}
|
|
cfg := &config.Config{}
|
|
d.configStore.Store(cfg)
|
|
|
|
_, err := d.getInspectData(cfg, c)
|
|
assert.Check(t, is.ErrorContains(err, "RWLayer of container inspect-me is unexpectedly nil"))
|
|
|
|
c.Dead = true
|
|
_, err = d.getInspectData(cfg, c)
|
|
assert.Check(t, err)
|
|
}
|