mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #10780 from estesp/test-bogus-link
Fix daemon.Get() error handling with --link setup. Add test.
This commit is contained in:
commit
3ddef31793
2 changed files with 29 additions and 14 deletions
|
@ -155,31 +155,32 @@ func (daemon *Daemon) Install(eng *engine.Engine) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get looks for a container with the provided prefix
|
// Get looks for a container using the provided information, which could be
|
||||||
func (daemon *Daemon) Get(prefix string) (*Container, error) {
|
// one of the following inputs from the caller:
|
||||||
if containerByID := daemon.containers.Get(prefix); containerByID != nil {
|
// - A full container ID, which will exact match a container in daemon's list
|
||||||
|
// - A container name, which will only exact match via the GetByName() function
|
||||||
|
// - A partial container ID prefix (e.g. short ID) of any length that is
|
||||||
|
// unique enough to only return a single container object
|
||||||
|
// If none of these searches succeed, an error is returned
|
||||||
|
func (daemon *Daemon) Get(prefixOrName string) (*Container, error) {
|
||||||
|
if containerByID := daemon.containers.Get(prefixOrName); containerByID != nil {
|
||||||
// prefix is an exact match to a full container ID
|
// prefix is an exact match to a full container ID
|
||||||
return containerByID, nil
|
return containerByID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Either GetByName finds an entity matching prefix exactly, or it doesn't.
|
// GetByName will match only an exact name provided; we ignore errors
|
||||||
// Check value of containerByName and ignore any errors
|
containerByName, _ := daemon.GetByName(prefixOrName)
|
||||||
containerByName, _ := daemon.GetByName(prefix)
|
containerId, indexError := daemon.idIndex.Get(prefixOrName)
|
||||||
containerId, indexError := daemon.idIndex.Get(prefix)
|
|
||||||
|
|
||||||
if containerByName != nil {
|
if containerByName != nil {
|
||||||
|
|
||||||
// prefix is an exact match to a full container Name
|
// prefix is an exact match to a full container Name
|
||||||
return containerByName, nil
|
return containerByName, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if containerId != "" {
|
if containerId != "" {
|
||||||
|
|
||||||
// prefix is a fuzzy match to a container ID
|
// prefix is a fuzzy match to a container ID
|
||||||
return daemon.containers.Get(containerId), nil
|
return daemon.containers.Get(containerId), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, indexError
|
return nil, indexError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -767,9 +768,7 @@ func (daemon *Daemon) RegisterLinks(container *Container, hostConfig *runconfig.
|
||||||
}
|
}
|
||||||
child, err := daemon.Get(parts["name"])
|
child, err := daemon.Get(parts["name"])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
//An error from daemon.Get() means this name could not be found
|
||||||
}
|
|
||||||
if child == nil {
|
|
||||||
return fmt.Errorf("Could not get container for %s", parts["name"])
|
return fmt.Errorf("Could not get container for %s", parts["name"])
|
||||||
}
|
}
|
||||||
if child.hostConfig.NetworkMode.IsHost() {
|
if child.hostConfig.NetworkMode.IsHost() {
|
||||||
|
|
|
@ -64,6 +64,22 @@ func TestLinksPingUnlinkedContainers(t *testing.T) {
|
||||||
logDone("links - ping unlinked container")
|
logDone("links - ping unlinked container")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test for appropriate error when calling --link with an invalid target container
|
||||||
|
func TestLinksInvalidContainerTarget(t *testing.T) {
|
||||||
|
runCmd := exec.Command(dockerBinary, "run", "--link", "bogus:alias", "busybox", "true")
|
||||||
|
out, _, err := runCommandWithOutput(runCmd)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("an invalid container target should produce an error")
|
||||||
|
}
|
||||||
|
if !strings.Contains(out, "Could not get container") {
|
||||||
|
t.Fatal("error output expected 'Could not get container', but got %q instead; err: %v", out, err)
|
||||||
|
}
|
||||||
|
deleteAllContainers()
|
||||||
|
|
||||||
|
logDone("links - linking to non-existent container should not work")
|
||||||
|
}
|
||||||
|
|
||||||
func TestLinksPingLinkedContainers(t *testing.T) {
|
func TestLinksPingLinkedContainers(t *testing.T) {
|
||||||
var out string
|
var out string
|
||||||
out, _, _ = dockerCmd(t, "run", "-d", "--name", "container1", "busybox", "sleep", "10")
|
out, _, _ = dockerCmd(t, "run", "-d", "--name", "container1", "busybox", "sleep", "10")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue