diff --git a/cluster/mesos/cluster_test.go b/cluster/mesos/cluster_test.go new file mode 100644 index 0000000000..ea9d9e5c08 --- /dev/null +++ b/cluster/mesos/cluster_test.go @@ -0,0 +1,78 @@ +package mesos + +import ( + "testing" + + "github.com/docker/swarm/cluster" + "github.com/samalba/dockerclient" + "github.com/stretchr/testify/assert" +) + +func createSlave(t *testing.T, ID string, containers ...*cluster.Container) *slave { + engine := cluster.NewEngine(ID, 0) + engine.Name = ID + engine.ID = ID + + for _, container := range containers { + container.Engine = engine + engine.AddContainer(container) + } + + return newSlave("slave-"+ID, engine) +} + +func TestContainerLookup(t *testing.T) { + c := &Cluster{ + slaves: make(map[string]*slave), + } + container1 := &cluster.Container{ + Container: dockerclient.Container{ + Id: "container1-id", + Names: []string{"/container1-name1", "/container1-name2"}, + }, + Config: cluster.BuildContainerConfig(dockerclient.ContainerConfig{ + Labels: map[string]string{ + "com.docker.swarm.id": "swarm1-id", + }, + }), + } + + container2 := &cluster.Container{ + Container: dockerclient.Container{ + Id: "container2-id", + Names: []string{"/con"}, + }, + Config: cluster.BuildContainerConfig(dockerclient.ContainerConfig{ + Labels: map[string]string{ + "com.docker.swarm.id": "swarm2-id", + }, + }), + } + + s := createSlave(t, "test-engine", container1, container2) + c.slaves[s.id] = s + + // Invalid lookup + assert.Nil(t, c.Container("invalid-id")) + assert.Nil(t, c.Container("")) + // Container ID lookup. + assert.NotNil(t, c.Container("container1-id")) + // Container ID prefix lookup. + assert.NotNil(t, c.Container("container1-")) + assert.Nil(t, c.Container("container")) + // Container name lookup. + assert.NotNil(t, c.Container("container1-name1")) + assert.NotNil(t, c.Container("container1-name2")) + // Container engine/name matching. + assert.NotNil(t, c.Container("test-engine/container1-name1")) + assert.NotNil(t, c.Container("test-engine/container1-name2")) + // Swarm ID lookup. + assert.NotNil(t, c.Container("swarm1-id")) + // Swarm ID prefix lookup. + assert.NotNil(t, c.Container("swarm1-")) + assert.Nil(t, c.Container("swarm")) + // Match name before ID prefix + cc := c.Container("con") + assert.NotNil(t, cc) + assert.Equal(t, cc.Id, "container2-id") +}