func createFakeRuntimeCache(fakeRecorder *record.FakeRecorder) qingcontainer.RuntimeCache { fakeDocker := &dockertools.FakeDockerClient{} np, _ := network.InitNetworkPlugin([]network.NetworkPlugin{}, "", network.NewFakeHost(nil)) dockerManager := dockertools.NewFakeDockerManager(fakeDocker, fakeRecorder, nil, nil, dockertools.PodInfraContainerImage, 0, 0, "", qingcontainer.FakeOS{}, np, nil, nil, newQingletRuntimeHooks(fakeRecorder)) return qingcontainer.NewFakeRuntimeCache(dockerManager) }
// TestFakePodWorkers verifies that the fakePodWorkers behaves the same way as the real podWorkers // for their invocation of the syncPodFn. func TestFakePodWorkers(t *testing.T) { // Create components for pod workers. fakeDocker := &dockertools.FakeDockerClient{} fakeRecorder := &record.FakeRecorder{} np, _ := network.InitNetworkPlugin([]network.NetworkPlugin{}, "", network.NewFakeHost(nil)) dockerManager := dockertools.NewFakeDockerManager(fakeDocker, fakeRecorder, nil, nil, dockertools.PodInfraContainerImage, 0, 0, "", qingcontainer.FakeOS{}, np, nil, nil, newQingletRuntimeHooks(fakeRecorder)) fakeRuntimeCache := qingcontainer.NewFakeRuntimeCache(dockerManager) qingletForRealWorkers := &simpleFakeQinglet{} qingletForFakeWorkers := &simpleFakeQinglet{} realPodWorkers := newPodWorkers(fakeRuntimeCache, qingletForRealWorkers.syncPodWithWaitGroup, fakeRecorder) fakePodWorkers := &fakePodWorkers{qingletForFakeWorkers.syncPod, fakeRuntimeCache, t} tests := []struct { pod *api.Pod mirrorPod *api.Pod containerList []docker.APIContainers containersInRunningPod int }{ { &api.Pod{}, &api.Pod{}, []docker.APIContainers{}, 0, }, { &api.Pod{ ObjectMeta: api.ObjectMeta{ UID: "12345678", Name: "foo", Namespace: "new", }, Spec: api.PodSpec{ Containers: []api.Container{ { Name: "fooContainer", }, }, }, }, &api.Pod{ ObjectMeta: api.ObjectMeta{ UID: "12345678", Name: "fooMirror", Namespace: "new", }, Spec: api.PodSpec{ Containers: []api.Container{ { Name: "fooContainerMirror", }, }, }, }, []docker.APIContainers{ { // format is // k8s_<container-id>_<pod-fullname>_<pod-uid>_<random> Names: []string{"/k8s_bar.hash123_foo_new_12345678_0"}, ID: "1234", }, { // pod infra container Names: []string{"/k8s_POD.hash123_foo_new_12345678_0"}, ID: "9876", }, }, 2, }, { &api.Pod{ ObjectMeta: api.ObjectMeta{ UID: "98765", Name: "bar", Namespace: "new", }, Spec: api.PodSpec{ Containers: []api.Container{ { Name: "fooContainer", }, }, }, }, &api.Pod{ ObjectMeta: api.ObjectMeta{ UID: "98765", Name: "fooMirror", Namespace: "new", }, Spec: api.PodSpec{ Containers: []api.Container{ { Name: "fooContainerMirror", }, }, }, }, []docker.APIContainers{ { // format is // k8s_<container-id>_<pod-fullname>_<pod-uid>_<random> Names: []string{"/k8s_bar.hash123_bar_new_98765_0"}, ID: "1234", }, { // pod infra container Names: []string{"/k8s_POD.hash123_foo_new_12345678_0"}, ID: "9876", }, }, 1, }, // Empty running pod. { &api.Pod{ ObjectMeta: api.ObjectMeta{ UID: "98765", Name: "baz", Namespace: "new", }, Spec: api.PodSpec{ Containers: []api.Container{ { Name: "bazContainer", }, }, }, }, &api.Pod{ ObjectMeta: api.ObjectMeta{ UID: "98765", Name: "bazMirror", Namespace: "new", }, Spec: api.PodSpec{ Containers: []api.Container{ { Name: "bazContainerMirror", }, }, }, }, []docker.APIContainers{ { // format is // k8s_<container-id>_<pod-fullname>_<pod-uid>_<random> Names: []string{"/k8s_bar.hash123_bar_new_12345678_0"}, ID: "1234", }, { // pod infra container Names: []string{"/k8s_POD.hash123_foo_new_12345678_0"}, ID: "9876", }, }, 0, }, } for i, tt := range tests { qingletForRealWorkers.wg.Add(1) fakeDocker.ContainerList = tt.containerList realPodWorkers.UpdatePod(tt.pod, tt.mirrorPod, func() {}) fakePodWorkers.UpdatePod(tt.pod, tt.mirrorPod, func() {}) qingletForRealWorkers.wg.Wait() if !reflect.DeepEqual(qingletForRealWorkers.pod, qingletForFakeWorkers.pod) { t.Errorf("%d: Expected: %#v, Actual: %#v", i, qingletForRealWorkers.pod, qingletForFakeWorkers.pod) } if !reflect.DeepEqual(qingletForRealWorkers.mirrorPod, qingletForFakeWorkers.mirrorPod) { t.Errorf("%d: Expected: %#v, Actual: %#v", i, qingletForRealWorkers.mirrorPod, qingletForFakeWorkers.mirrorPod) } if tt.containersInRunningPod != len(qingletForFakeWorkers.runningPod.Containers) { t.Errorf("%d: Expected: %#v, Actual: %#v", i, tt.containersInRunningPod, len(qingletForFakeWorkers.runningPod.Containers)) } sort.Sort(byContainerName(qingletForRealWorkers.runningPod)) sort.Sort(byContainerName(qingletForFakeWorkers.runningPod)) if !reflect.DeepEqual(qingletForRealWorkers.runningPod, qingletForFakeWorkers.runningPod) { t.Errorf("%d: Expected: %#v, Actual: %#v", i, qingletForRealWorkers.runningPod, qingletForFakeWorkers.runningPod) } } }