Files
virtual-kubelet/vendor/github.com/hyperhq/libcompose/docker/name_test.go
2017-12-05 17:53:58 -06:00

178 lines
4.5 KiB
Go

package docker
import (
"fmt"
"testing"
"github.com/docker/engine-api/types"
"github.com/hyperhq/libcompose/labels"
"github.com/hyperhq/libcompose/test"
"golang.org/x/net/context"
)
func TestSingleNamer(t *testing.T) {
expectedName := "myName"
expectedNumber := 1
namer := NewSingleNamer("myName")
for i := 0; i < 10; i++ {
name, number := namer.Next()
if name != expectedName {
t.Fatalf("expected %s, got %s", expectedName, name)
}
if number != expectedNumber {
t.Fatalf("expected %d, got %d", expectedNumber, number)
}
}
}
type NamerClient struct {
test.NopClient
expectedLabelFilters []string
containers []types.Container
}
func (client *NamerClient) ContainerList(ctx context.Context, options types.ContainerListOptions) ([]types.Container, error) {
if len(client.expectedLabelFilters) > 1 {
labelFilters := options.Filter.Get("label")
if len(labelFilters) != len(client.expectedLabelFilters) {
return []types.Container{}, fmt.Errorf("expected filters %v, got %v", client.expectedLabelFilters, labelFilters)
}
for _, expectedLabelFilter := range client.expectedLabelFilters {
found := false
for _, labelFilter := range labelFilters {
if labelFilter == expectedLabelFilter {
found = true
break
}
}
if !found {
return []types.Container{}, fmt.Errorf("expected to find filter %s, did not in %v", expectedLabelFilter, labelFilters)
}
}
}
return client.containers, nil
}
func TestDefaultNamerClientError(t *testing.T) {
client := test.NewNopClient()
_, err := NewNamer(client, "project", "service", false)
if err == nil || err.Error() != "Engine no longer exists" {
t.Fatalf("expected an error 'Engine no longer exists', got %s", err)
}
}
func TestDefaultNamerLabelNotANumber(t *testing.T) {
client := &NamerClient{
containers: []types.Container{
{
Labels: map[string]string{
labels.ONEOFF.Str(): "IAmAString",
},
},
},
}
_, err := NewNamer(client, "project", "service", false)
if err == nil {
t.Fatal("expected an error, got nothing")
}
}
func TestDefaultNamer(t *testing.T) {
cases := []struct {
projectName string
serviceName string
oneOff bool
containers []types.Container
expectedLabels []string
expectedName string
expectedNumber int
}{
{
projectName: "",
serviceName: "",
oneOff: false,
containers: []types.Container{},
expectedLabels: []string{
fmt.Sprintf("%s=", labels.PROJECT.Str()),
fmt.Sprintf("%s=", labels.SERVICE.Str()),
fmt.Sprintf("%s=False", labels.ONEOFF.Str()),
},
expectedName: "--1",
expectedNumber: 1,
},
{
projectName: "project",
serviceName: "service",
oneOff: false,
containers: []types.Container{},
expectedLabels: []string{
fmt.Sprintf("%s=project", labels.PROJECT.Str()),
fmt.Sprintf("%s=service", labels.SERVICE.Str()),
fmt.Sprintf("%s=False", labels.ONEOFF.Str()),
},
expectedName: "project-service-1",
expectedNumber: 1,
},
{
projectName: "project",
serviceName: "service",
oneOff: false,
containers: []types.Container{
{
Labels: map[string]string{
labels.NUMBER.Str(): "1",
},
},
},
expectedLabels: []string{
fmt.Sprintf("%s=project", labels.PROJECT.Str()),
fmt.Sprintf("%s=service", labels.SERVICE.Str()),
fmt.Sprintf("%s=False", labels.ONEOFF.Str()),
},
expectedName: "project-service-2",
expectedNumber: 2,
},
{
projectName: "project",
serviceName: "anotherservice",
oneOff: false,
containers: []types.Container{
{
Labels: map[string]string{
labels.NUMBER.Str(): "10",
},
},
},
expectedLabels: []string{
fmt.Sprintf("%s=project", labels.PROJECT.Str()),
fmt.Sprintf("%s=anotherservice", labels.SERVICE.Str()),
fmt.Sprintf("%s=False", labels.ONEOFF.Str()),
},
expectedName: "project-anotherservice-11",
expectedNumber: 11,
},
}
for _, c := range cases {
client := &NamerClient{
expectedLabelFilters: c.expectedLabels,
containers: c.containers,
}
namer, err := NewNamer(client, c.projectName, c.serviceName, c.oneOff)
if err != nil {
t.Error(err)
}
name, number := namer.Next()
if name != c.expectedName {
t.Errorf("Expected %s, got %s for %v", c.expectedName, name, c)
}
if number != c.expectedNumber {
t.Errorf("Expected %d, got %d for %v", c.expectedNumber, number, c)
}
_, number = namer.Next()
if number != c.expectedNumber+1 {
t.Errorf("Expected a 2nd call to increment numbre to %d, got %d for %v", c.expectedNumber+1, number, c)
}
}
}