From b9f9944351c6fbd6ba46be2f7d88cbf49e323132 Mon Sep 17 00:00:00 2001 From: mqliang Date: Thu, 15 Oct 2015 15:35:09 +0800 Subject: [PATCH 1/2] add unit test for StoreToJobLister --- pkg/client/cache/listers_test.go | 169 +++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) diff --git a/pkg/client/cache/listers_test.go b/pkg/client/cache/listers_test.go index 43f82aab6c0..1ec3fac6b6a 100644 --- a/pkg/client/cache/listers_test.go +++ b/pkg/client/cache/listers_test.go @@ -278,6 +278,175 @@ func TestStoreToDaemonSetLister(t *testing.T) { } } +func TestStoreToJobLister(t *testing.T) { + store := NewStore(MetaNamespaceKeyFunc) + lister := StoreToJobLister{store} + testCases := []struct { + inJobs []*extensions.Job + list func() ([]extensions.Job, error) + outJobNames sets.String + expectErr bool + msg string + }{ + // Basic listing + { + inJobs: []*extensions.Job{ + {ObjectMeta: api.ObjectMeta{Name: "basic"}}, + }, + list: func() ([]extensions.Job, error) { + return lister.List() + }, + outJobNames: sets.NewString("basic"), + msg: "basic listing failed", + }, + // Listing multiple jobs + { + inJobs: []*extensions.Job{ + {ObjectMeta: api.ObjectMeta{Name: "basic"}}, + {ObjectMeta: api.ObjectMeta{Name: "complex"}}, + {ObjectMeta: api.ObjectMeta{Name: "complex2"}}, + }, + list: func() ([]extensions.Job, error) { + return lister.List() + }, + outJobNames: sets.NewString("basic", "complex", "complex2"), + msg: "listing multiple jobs failed", + }, + // No pod labels + { + inJobs: []*extensions.Job{ + { + ObjectMeta: api.ObjectMeta{Name: "basic", Namespace: "ns"}, + Spec: extensions.JobSpec{ + Selector: &extensions.PodSelector{ + MatchLabels: map[string]string{"foo": "baz"}, + }, + }, + }, + }, + list: func() ([]extensions.Job, error) { + pod := &api.Pod{ + ObjectMeta: api.ObjectMeta{Name: "pod", Namespace: "ns"}, + } + return lister.GetPodJobs(pod) + }, + outJobNames: sets.NewString(), + expectErr: true, + msg: "listing jobs failed when pod has no labels: expected error, got none", + }, + // No Job selectors + { + inJobs: []*extensions.Job{ + { + ObjectMeta: api.ObjectMeta{Name: "basic", Namespace: "ns"}, + }, + }, + list: func() ([]extensions.Job, error) { + pod := &api.Pod{ + ObjectMeta: api.ObjectMeta{ + Name: "pod", + Namespace: "ns", + Labels: map[string]string{"foo": "bar"}, + }, + } + return lister.GetPodJobs(pod) + }, + outJobNames: sets.NewString(), + expectErr: true, + msg: "listing jobs failed when job has no selector: expected error, got none", + }, + // Matching labels to selectors and namespace + { + inJobs: []*extensions.Job{ + { + ObjectMeta: api.ObjectMeta{Name: "foo"}, + Spec: extensions.JobSpec{ + Selector: &extensions.PodSelector{ + MatchLabels: map[string]string{"foo": "bar"}, + }, + }, + }, + { + ObjectMeta: api.ObjectMeta{Name: "bar", Namespace: "ns"}, + Spec: extensions.JobSpec{ + Selector: &extensions.PodSelector{ + MatchLabels: map[string]string{"foo": "bar"}, + }, + }, + }, + }, + list: func() ([]extensions.Job, error) { + pod := &api.Pod{ + ObjectMeta: api.ObjectMeta{ + Name: "pod", + Labels: map[string]string{"foo": "bar"}, + Namespace: "ns", + }, + } + return lister.GetPodJobs(pod) + }, + outJobNames: sets.NewString("bar"), + msg: "listing jobs with namespace and selector failed", + }, + // Matching labels to selectors and namespace, error case + { + inJobs: []*extensions.Job{ + { + ObjectMeta: api.ObjectMeta{Name: "foo", Namespace: "foo"}, + Spec: extensions.JobSpec{ + Selector: &extensions.PodSelector{ + MatchLabels: map[string]string{"foo": "bar"}, + }, + }, + }, + { + ObjectMeta: api.ObjectMeta{Name: "bar", Namespace: "bar"}, + Spec: extensions.JobSpec{ + Selector: &extensions.PodSelector{ + MatchLabels: map[string]string{"foo": "bar"}, + }, + }, + }, + }, + list: func() ([]extensions.Job, error) { + pod := &api.Pod{ + ObjectMeta: api.ObjectMeta{ + Name: "pod", + Labels: map[string]string{"foo": "bar"}, + Namespace: "baz", + }, + } + return lister.GetPodJobs(pod) + }, + expectErr: true, + msg: "listing jobs with namespace and selector failed: expected error, got none", + }, + } + for _, c := range testCases { + for _, r := range c.inJobs { + store.Add(r) + } + + Jobs, err := c.list() + if err != nil && c.expectErr { + continue + } else if c.expectErr { + t.Errorf("%v", c.msg) + continue + } else if err != nil { + t.Errorf("Unexpected error %#v", err) + continue + } + JobNames := make([]string, len(Jobs)) + for ix := range Jobs { + JobNames[ix] = Jobs[ix].Name + } + if !c.outJobNames.HasAll(JobNames...) || len(JobNames) != len(c.outJobNames) { + t.Errorf("%v : expected %v, got %v", c.msg, JobNames, c.outJobNames) + } + } +} + func TestStoreToPodLister(t *testing.T) { store := NewStore(MetaNamespaceKeyFunc) ids := []string{"foo", "bar", "baz"} From 62846b8b3c436ff03007ea294861f91540f17421 Mon Sep 17 00:00:00 2001 From: mqliang Date: Sat, 17 Oct 2015 19:38:13 +0800 Subject: [PATCH 2/2] solve conflict after rebase --- pkg/client/cache/listers_test.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/client/cache/listers_test.go b/pkg/client/cache/listers_test.go index 1ec3fac6b6a..3ebafbd83f1 100644 --- a/pkg/client/cache/listers_test.go +++ b/pkg/client/cache/listers_test.go @@ -294,7 +294,8 @@ func TestStoreToJobLister(t *testing.T) { {ObjectMeta: api.ObjectMeta{Name: "basic"}}, }, list: func() ([]extensions.Job, error) { - return lister.List() + list, err := lister.List() + return list.Items, err }, outJobNames: sets.NewString("basic"), msg: "basic listing failed", @@ -307,7 +308,8 @@ func TestStoreToJobLister(t *testing.T) { {ObjectMeta: api.ObjectMeta{Name: "complex2"}}, }, list: func() ([]extensions.Job, error) { - return lister.List() + list, err := lister.List() + return list.Items, err }, outJobNames: sets.NewString("basic", "complex", "complex2"), msg: "listing multiple jobs failed",