From aa2e7fe688f82205a91f9d859365a870f2590e24 Mon Sep 17 00:00:00 2001 From: Yifan Gu Date: Thu, 26 Mar 2015 15:06:27 -0700 Subject: [PATCH] kubelet_test: Add verifyUnorderedCalls(). This fixes TestSyncPodsDeletesWithNoPodInfraContainer. Since we need to sync two pods in parallel, we should not verify the docker calls in strict order. --- pkg/kubelet/dockertools/fake_docker_client.go | 18 ++++++++++++++++++ pkg/kubelet/kubelet_test.go | 9 ++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/pkg/kubelet/dockertools/fake_docker_client.go b/pkg/kubelet/dockertools/fake_docker_client.go index ceb851ca4a1..ea6df4b1560 100644 --- a/pkg/kubelet/dockertools/fake_docker_client.go +++ b/pkg/kubelet/dockertools/fake_docker_client.go @@ -19,6 +19,7 @@ package dockertools import ( "fmt" "reflect" + "sort" "sync" "time" @@ -66,6 +67,23 @@ func (f *FakeDockerClient) AssertCalls(calls []string) (err error) { return } +func (f *FakeDockerClient) AssertUnorderedCalls(calls []string) (err error) { + f.Lock() + defer f.Unlock() + + var actual, expected []string + copy(actual, calls) + copy(expected, f.called) + + sort.StringSlice(actual).Sort() + sort.StringSlice(expected).Sort() + + if !reflect.DeepEqual(actual, expected) { + err = fmt.Errorf("expected(sorted) %#v, got(sorted) %#v", expected, actual) + } + return +} + // ListContainers is a test-spy implementation of DockerInterface.ListContainers. // It adds an entry "list" to the internal method call record. func (f *FakeDockerClient) ListContainers(options docker.ListContainersOptions) ([]docker.APIContainers, error) { diff --git a/pkg/kubelet/kubelet_test.go b/pkg/kubelet/kubelet_test.go index 9892f2fe323..533f1553abd 100644 --- a/pkg/kubelet/kubelet_test.go +++ b/pkg/kubelet/kubelet_test.go @@ -121,6 +121,13 @@ func verifyCalls(t *testing.T, fakeDocker *dockertools.FakeDockerClient, calls [ } } +func verifyUnorderedCalls(t *testing.T, fakeDocker *dockertools.FakeDockerClient, calls []string) { + err := fakeDocker.AssertUnorderedCalls(calls) + if err != nil { + t.Error(err) + } +} + func verifyStringArrayEquals(t *testing.T, actual, expected []string) { invalid := len(actual) != len(expected) if !invalid { @@ -819,7 +826,7 @@ func TestSyncPodsDeletesWithNoPodInfraContainer(t *testing.T) { } waitGroup.Wait() - verifyCalls(t, fakeDocker, []string{ + verifyUnorderedCalls(t, fakeDocker, []string{ "list", "list", "list", "list", "inspect_container", "inspect_container", "list", "inspect_container", "inspect_container", "stop", "create", "start", "inspect_container", "create", "start", "list", "inspect_container", "inspect_container"}) // A map iteration is used to delete containers, so must not depend on