Merge pull request #21953 from timstclair/testing

Move kubelet test-only files to test-only packages
This commit is contained in:
Saad Ali 2016-03-01 15:48:10 -08:00
commit f9b1a33b12
35 changed files with 240 additions and 192 deletions

View File

@ -46,9 +46,9 @@ import (
endpointcontroller "k8s.io/kubernetes/pkg/controller/endpoint" endpointcontroller "k8s.io/kubernetes/pkg/controller/endpoint"
nodecontroller "k8s.io/kubernetes/pkg/controller/node" nodecontroller "k8s.io/kubernetes/pkg/controller/node"
replicationcontroller "k8s.io/kubernetes/pkg/controller/replication" replicationcontroller "k8s.io/kubernetes/pkg/controller/replication"
"k8s.io/kubernetes/pkg/kubelet/cadvisor" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
"k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cm"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/kubelet/dockertools" "k8s.io/kubernetes/pkg/kubelet/dockertools"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
"k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/labels"
@ -203,7 +203,7 @@ func startComponents(firstManifestURL, secondManifestURL string) (string, string
nodeController := nodecontroller.NewNodeController(nil, clientset, 5*time.Minute, util.NewFakeAlwaysRateLimiter(), util.NewFakeAlwaysRateLimiter(), nodeController := nodecontroller.NewNodeController(nil, clientset, 5*time.Minute, util.NewFakeAlwaysRateLimiter(), util.NewFakeAlwaysRateLimiter(),
40*time.Second, 60*time.Second, 5*time.Second, nil, false) 40*time.Second, 60*time.Second, 5*time.Second, nil, false)
nodeController.Run(5 * time.Second) nodeController.Run(5 * time.Second)
cadvisorInterface := new(cadvisor.Fake) cadvisorInterface := new(cadvisortest.Fake)
// Kubelet (localhost) // Kubelet (localhost)
testRootDir := integration.MakeTempDirOrDie("kubelet_integ_1.", "") testRootDir := integration.MakeTempDirOrDie("kubelet_integ_1.", "")
@ -225,7 +225,7 @@ func startComponents(firstManifestURL, secondManifestURL string) (string, string
cadvisorInterface, cadvisorInterface,
configFilePath, configFilePath,
nil, nil,
kubecontainer.FakeOS{}, containertest.FakeOS{},
1*time.Second, /* FileCheckFrequency */ 1*time.Second, /* FileCheckFrequency */
1*time.Second, /* HTTPCheckFrequency */ 1*time.Second, /* HTTPCheckFrequency */
10*time.Second, /* MinimumGCAge */ 10*time.Second, /* MinimumGCAge */
@ -257,7 +257,7 @@ func startComponents(firstManifestURL, secondManifestURL string) (string, string
cadvisorInterface, cadvisorInterface,
"", "",
nil, nil,
kubecontainer.FakeOS{}, containertest.FakeOS{},
1*time.Second, /* FileCheckFrequency */ 1*time.Second, /* FileCheckFrequency */
1*time.Second, /* HTTPCheckFrequency */ 1*time.Second, /* HTTPCheckFrequency */
10*time.Second, /* MinimumGCAge */ 10*time.Second, /* MinimumGCAge */

View File

@ -27,7 +27,7 @@ import (
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
client "k8s.io/kubernetes/pkg/client/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
"k8s.io/kubernetes/pkg/kubelet/cadvisor" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
"k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cm"
"k8s.io/kubernetes/pkg/kubelet/dockertools" "k8s.io/kubernetes/pkg/kubelet/dockertools"
"k8s.io/kubernetes/pkg/kubemark" "k8s.io/kubernetes/pkg/kubemark"
@ -95,7 +95,7 @@ func main() {
} }
if config.Morph == "kubelet" { if config.Morph == "kubelet" {
cadvisorInterface := new(cadvisor.Fake) cadvisorInterface := new(cadvisortest.Fake)
containerManager := cm.NewStubContainerManager() containerManager := cm.NewStubContainerManager()
fakeDockerClient := dockertools.NewFakeDockerClient() fakeDockerClient := dockertools.NewFakeDockerClient()

View File

@ -14,19 +14,20 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package cadvisor package testing
import ( import (
"github.com/google/cadvisor/events" "github.com/google/cadvisor/events"
cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapi "github.com/google/cadvisor/info/v1"
cadvisorapiv2 "github.com/google/cadvisor/info/v2" cadvisorapiv2 "github.com/google/cadvisor/info/v2"
"k8s.io/kubernetes/pkg/kubelet/cadvisor"
) )
// Fake cAdvisor implementation. // Fake cAdvisor implementation.
type Fake struct { type Fake struct {
} }
var _ Interface = new(Fake) var _ cadvisor.Interface = new(Fake)
func (c *Fake) Start() error { func (c *Fake) Start() error {
return nil return nil

View File

@ -14,20 +14,21 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package cadvisor package testing
import ( import (
"github.com/google/cadvisor/events" "github.com/google/cadvisor/events"
cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapi "github.com/google/cadvisor/info/v1"
cadvisorapiv2 "github.com/google/cadvisor/info/v2" cadvisorapiv2 "github.com/google/cadvisor/info/v2"
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
"k8s.io/kubernetes/pkg/kubelet/cadvisor"
) )
type Mock struct { type Mock struct {
mock.Mock mock.Mock
} }
var _ Interface = new(Mock) var _ cadvisor.Interface = new(Mock)
func (c *Mock) Start() error { func (c *Mock) Start() error {
args := c.Called() args := c.Called()

View File

@ -0,0 +1,40 @@
/*
Copyright 2015 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package container
// TestRunTimeCache embeds runtimeCache with some additional methods for
// testing.
type TestRuntimeCache struct {
runtimeCache
}
func (r *TestRuntimeCache) UpdateCacheWithLock() error {
r.Lock()
defer r.Unlock()
return r.updateCache()
}
func (r *TestRuntimeCache) GetCachedPods() []*Pod {
r.Lock()
defer r.Unlock()
return r.pods
}
func NewTestRuntimeCache(getter podsGetter) *TestRuntimeCache {
c, _ := NewRuntimeCache(getter)
return &TestRuntimeCache{*c.(*runtimeCache)}
}

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package container package container_test
import ( import (
"errors" "errors"
@ -24,6 +24,8 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
. "k8s.io/kubernetes/pkg/kubelet/container"
ctest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util"
) )
@ -101,7 +103,7 @@ func TestPuller(t *testing.T) {
fakeClock := util.NewFakeClock(time.Now()) fakeClock := util.NewFakeClock(time.Now())
backOff.Clock = fakeClock backOff.Clock = fakeClock
fakeRuntime := &FakeRuntime{} fakeRuntime := &ctest.FakeRuntime{}
fakeRecorder := &record.FakeRecorder{} fakeRecorder := &record.FakeRecorder{}
puller := NewImagePuller(fakeRecorder, fakeRuntime, backOff) puller := NewImagePuller(fakeRecorder, fakeRuntime, backOff)

View File

@ -39,17 +39,3 @@ func (RealOS) Mkdir(path string, perm os.FileMode) error {
func (RealOS) Symlink(oldname string, newname string) error { func (RealOS) Symlink(oldname string, newname string) error {
return os.Symlink(oldname, newname) return os.Symlink(oldname, newname)
} }
// FakeOS mocks out certain OS calls to avoid perturbing the filesystem
// on the test machine.
type FakeOS struct{}
// MkDir is a fake call that just returns nil.
func (FakeOS) Mkdir(path string, perm os.FileMode) error {
return nil
}
// Symlink is a fake call that just returns nil.
func (FakeOS) Symlink(oldname string, newname string) error {
return nil
}

View File

@ -14,42 +14,22 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package container package container_test
import ( import (
"reflect" "reflect"
"testing" "testing"
"time" "time"
. "k8s.io/kubernetes/pkg/kubelet/container"
ctest "k8s.io/kubernetes/pkg/kubelet/container/testing"
) )
// testRunTimeCache embeds runtimeCache with some additional methods for
// testing.
type testRuntimeCache struct {
runtimeCache
}
func (r *testRuntimeCache) updateCacheWithLock() error {
r.Lock()
defer r.Unlock()
return r.updateCache()
}
func (r *testRuntimeCache) getCachedPods() []*Pod {
r.Lock()
defer r.Unlock()
return r.pods
}
func newTestRuntimeCache(getter podsGetter) *testRuntimeCache {
c, _ := NewRuntimeCache(getter)
return &testRuntimeCache{*c.(*runtimeCache)}
}
func TestGetPods(t *testing.T) { func TestGetPods(t *testing.T) {
runtime := &FakeRuntime{} runtime := &ctest.FakeRuntime{}
expected := []*Pod{{ID: "1111"}, {ID: "2222"}, {ID: "3333"}} expected := []*Pod{{ID: "1111"}, {ID: "2222"}, {ID: "3333"}}
runtime.PodList = expected runtime.PodList = expected
cache := newTestRuntimeCache(runtime) cache := NewTestRuntimeCache(runtime)
actual, err := cache.GetPods() actual, err := cache.GetPods()
if err != nil { if err != nil {
t.Errorf("unexpected error %v", err) t.Errorf("unexpected error %v", err)
@ -60,13 +40,13 @@ func TestGetPods(t *testing.T) {
} }
func TestForceUpdateIfOlder(t *testing.T) { func TestForceUpdateIfOlder(t *testing.T) {
runtime := &FakeRuntime{} runtime := &ctest.FakeRuntime{}
cache := newTestRuntimeCache(runtime) cache := NewTestRuntimeCache(runtime)
// Cache old pods. // Cache old pods.
oldpods := []*Pod{{ID: "1111"}} oldpods := []*Pod{{ID: "1111"}}
runtime.PodList = oldpods runtime.PodList = oldpods
cache.updateCacheWithLock() cache.UpdateCacheWithLock()
// Update the runtime to new pods. // Update the runtime to new pods.
newpods := []*Pod{{ID: "1111"}, {ID: "2222"}, {ID: "3333"}} newpods := []*Pod{{ID: "1111"}, {ID: "2222"}, {ID: "3333"}}
@ -74,14 +54,14 @@ func TestForceUpdateIfOlder(t *testing.T) {
// An older timestamp should not force an update. // An older timestamp should not force an update.
cache.ForceUpdateIfOlder(time.Now().Add(-20 * time.Minute)) cache.ForceUpdateIfOlder(time.Now().Add(-20 * time.Minute))
actual := cache.getCachedPods() actual := cache.GetCachedPods()
if !reflect.DeepEqual(oldpods, actual) { if !reflect.DeepEqual(oldpods, actual) {
t.Errorf("expected %#v, got %#v", oldpods, actual) t.Errorf("expected %#v, got %#v", oldpods, actual)
} }
// A newer timestamp should force an update. // A newer timestamp should force an update.
cache.ForceUpdateIfOlder(time.Now().Add(20 * time.Second)) cache.ForceUpdateIfOlder(time.Now().Add(20 * time.Second))
actual = cache.getCachedPods() actual = cache.GetCachedPods()
if !reflect.DeepEqual(newpods, actual) { if !reflect.DeepEqual(newpods, actual) {
t.Errorf("expected %#v, got %#v", newpods, actual) t.Errorf("expected %#v, got %#v", newpods, actual)
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package container package container_test
import ( import (
"errors" "errors"
@ -24,6 +24,8 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
. "k8s.io/kubernetes/pkg/kubelet/container"
ctest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util"
) )
@ -101,7 +103,7 @@ func TestSerializedPuller(t *testing.T) {
fakeClock := util.NewFakeClock(time.Now()) fakeClock := util.NewFakeClock(time.Now())
backOff.Clock = fakeClock backOff.Clock = fakeClock
fakeRuntime := &FakeRuntime{} fakeRuntime := &ctest.FakeRuntime{}
fakeRecorder := &record.FakeRecorder{} fakeRecorder := &record.FakeRecorder{}
puller := NewSerializedImagePuller(fakeRecorder, fakeRuntime, backOff) puller := NewSerializedImagePuller(fakeRecorder, fakeRuntime, backOff)

View File

@ -14,31 +14,32 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package container package testing
import ( import (
"time" "time"
"k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
) )
type fakeCache struct { type fakeCache struct {
runtime Runtime runtime container.Runtime
} }
func NewFakeCache(runtime Runtime) Cache { func NewFakeCache(runtime container.Runtime) container.Cache {
return &fakeCache{runtime: runtime} return &fakeCache{runtime: runtime}
} }
func (c *fakeCache) Get(id types.UID) (*PodStatus, error) { func (c *fakeCache) Get(id types.UID) (*container.PodStatus, error) {
return c.runtime.GetPodStatus(id, "", "") return c.runtime.GetPodStatus(id, "", "")
} }
func (c *fakeCache) GetNewerThan(id types.UID, minTime time.Time) (*PodStatus, error) { func (c *fakeCache) GetNewerThan(id types.UID, minTime time.Time) (*container.PodStatus, error) {
return c.Get(id) return c.Get(id)
} }
func (c *fakeCache) Set(id types.UID, status *PodStatus, err error, timestamp time.Time) { func (c *fakeCache) Set(id types.UID, status *container.PodStatus, err error, timestamp time.Time) {
} }
func (c *fakeCache) Delete(id types.UID) { func (c *fakeCache) Delete(id types.UID) {

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package container package testing
import ( import (
"fmt" "fmt"
@ -24,6 +24,7 @@ import (
"time" "time"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
. "k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
"k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util"
"k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume"
@ -70,6 +71,10 @@ func (fv *FakeVersion) Compare(other string) (int, error) {
return result, nil return result, nil
} }
type podsGetter interface {
GetPods(bool) ([]*Pod, error)
}
type FakeRuntimeCache struct { type FakeRuntimeCache struct {
getter podsGetter getter podsGetter
} }

View File

@ -0,0 +1,35 @@
/*
Copyright 2016 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package testing
import (
"os"
)
// FakeOS mocks out certain OS calls to avoid perturbing the filesystem
// on the test machine.
type FakeOS struct{}
// Mkdir is a fake call that just returns nil.
func (FakeOS) Mkdir(path string, perm os.FileMode) error {
return nil
}
// Symlink is a fake call that just returns nil.
func (FakeOS) Symlink(oldname string, newname string) error {
return nil
}

View File

@ -14,13 +14,14 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package container package testing
import ( import (
"io" "io"
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
. "k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
"k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util"
"k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume"

View File

@ -23,7 +23,7 @@ import (
cadvisorapi "github.com/google/cadvisor/info/v2" cadvisorapi "github.com/google/cadvisor/info/v2"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"k8s.io/kubernetes/pkg/kubelet/cadvisor" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
) )
func testPolicy() DiskSpacePolicy { func testPolicy() DiskSpacePolicy {
@ -33,10 +33,10 @@ func testPolicy() DiskSpacePolicy {
} }
} }
func setUp(t *testing.T) (*assert.Assertions, DiskSpacePolicy, *cadvisor.Mock) { func setUp(t *testing.T) (*assert.Assertions, DiskSpacePolicy, *cadvisortest.Mock) {
assert := assert.New(t) assert := assert.New(t)
policy := testPolicy() policy := testPolicy()
c := new(cadvisor.Mock) c := new(cadvisortest.Mock)
return assert, policy, c return assert, policy, c
} }
@ -240,7 +240,7 @@ func Test_getFsInfo(t *testing.T) {
assert.NoError(err) assert.NoError(err)
// Threshold case // Threshold case
mockCadvisor = new(cadvisor.Mock) mockCadvisor = new(cadvisortest.Mock)
mockCadvisor.On("RootFsInfo").Return(cadvisorapi.FsInfo{ mockCadvisor.On("RootFsInfo").Return(cadvisorapi.FsInfo{
Usage: 9 * mb, Usage: 9 * mb,
Capacity: 100 * mb, Capacity: 100 * mb,
@ -273,7 +273,7 @@ func Test_getFsInfo(t *testing.T) {
assert.NoError(err) assert.NoError(err)
// Capacity error case // Capacity error case
mockCadvisor = new(cadvisor.Mock) mockCadvisor = new(cadvisortest.Mock)
mockCadvisor.On("RootFsInfo").Return(cadvisorapi.FsInfo{ mockCadvisor.On("RootFsInfo").Return(cadvisorapi.FsInfo{
Usage: 9 * mb, Usage: 9 * mb,
Capacity: 0, Capacity: 0,

View File

@ -33,7 +33,9 @@ import (
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/credentialprovider" "k8s.io/kubernetes/pkg/credentialprovider"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/kubelet/network" "k8s.io/kubernetes/pkg/kubelet/network"
nettest "k8s.io/kubernetes/pkg/kubelet/network/testing"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
hashutil "k8s.io/kubernetes/pkg/util/hash" hashutil "k8s.io/kubernetes/pkg/util/hash"
@ -703,9 +705,9 @@ func TestFindContainersByPod(t *testing.T) {
}, },
} }
fakeClient := &FakeDockerClient{} fakeClient := &FakeDockerClient{}
np, _ := network.InitNetworkPlugin([]network.NetworkPlugin{}, "", network.NewFakeHost(nil)) np, _ := network.InitNetworkPlugin([]network.NetworkPlugin{}, "", nettest.NewFakeHost(nil))
// image back-off is set to nil, this test should not pull images // image back-off is set to nil, this test should not pull images
containerManager := NewFakeDockerManager(fakeClient, &record.FakeRecorder{}, nil, nil, &cadvisorapi.MachineInfo{}, kubetypes.PodInfraContainerImage, 0, 0, "", kubecontainer.FakeOS{}, np, nil, nil, nil) containerManager := NewFakeDockerManager(fakeClient, &record.FakeRecorder{}, nil, nil, &cadvisorapi.MachineInfo{}, kubetypes.PodInfraContainerImage, 0, 0, "", containertest.FakeOS{}, np, nil, nil, nil)
for i, test := range tests { for i, test := range tests {
fakeClient.ContainerList = test.containerList fakeClient.ContainerList = test.containerList
fakeClient.ExitedContainerList = test.exitedContainerList fakeClient.ExitedContainerList = test.exitedContainerList

View File

@ -36,7 +36,9 @@ import (
"k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/kubelet/network" "k8s.io/kubernetes/pkg/kubelet/network"
nettest "k8s.io/kubernetes/pkg/kubelet/network/testing"
proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
@ -86,7 +88,7 @@ func newTestDockerManagerWithHTTPClientWithVersion(fakeHTTPClient *fakeHTTP, ver
fakeDocker := NewFakeDockerClientWithVersion(version, apiVersion) fakeDocker := NewFakeDockerClientWithVersion(version, apiVersion)
fakeRecorder := &record.FakeRecorder{} fakeRecorder := &record.FakeRecorder{}
containerRefManager := kubecontainer.NewRefManager() containerRefManager := kubecontainer.NewRefManager()
networkPlugin, _ := network.InitNetworkPlugin([]network.NetworkPlugin{}, "", network.NewFakeHost(nil)) networkPlugin, _ := network.InitNetworkPlugin([]network.NetworkPlugin{}, "", nettest.NewFakeHost(nil))
dockerManager := NewFakeDockerManager( dockerManager := NewFakeDockerManager(
fakeDocker, fakeDocker,
fakeRecorder, fakeRecorder,
@ -95,7 +97,7 @@ func newTestDockerManagerWithHTTPClientWithVersion(fakeHTTPClient *fakeHTTP, ver
&cadvisorapi.MachineInfo{}, &cadvisorapi.MachineInfo{},
kubetypes.PodInfraContainerImage, kubetypes.PodInfraContainerImage,
0, 0, "", 0, 0, "",
kubecontainer.FakeOS{}, containertest.FakeOS{},
networkPlugin, networkPlugin,
&fakeRuntimeHelper{}, &fakeRuntimeHelper{},
fakeHTTPClient, fakeHTTPClient,

View File

@ -1,50 +0,0 @@
/*
Copyright 2015 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package kubelet
import (
"k8s.io/kubernetes/pkg/api"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
"k8s.io/kubernetes/pkg/types"
)
// fakePodWorkers runs sync pod function in serial, so we can have
// deterministic behaviour in testing.
type fakePodWorkers struct {
syncPodFn syncPodFnType
cache kubecontainer.Cache
t TestingInterface
}
func (f *fakePodWorkers) UpdatePod(pod *api.Pod, mirrorPod *api.Pod, updateType kubetypes.SyncPodType, updateComplete func()) {
status, err := f.cache.Get(pod.UID)
if err != nil {
f.t.Errorf("Unexpected error: %v", err)
}
if err := f.syncPodFn(pod, mirrorPod, status, kubetypes.SyncPodUpdate); err != nil {
f.t.Errorf("Unexpected error: %v", err)
}
}
func (f *fakePodWorkers) ForgetNonExistingPodWorkers(desiredPods map[types.UID]empty) {}
func (f *fakePodWorkers) ForgetWorker(uid types.UID) {}
type TestingInterface interface {
Errorf(format string, args ...interface{})
}

View File

@ -25,16 +25,17 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/kubelet/cadvisor" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
"k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/container"
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util"
) )
var zero time.Time var zero time.Time
func newRealImageManager(policy ImageGCPolicy) (*realImageManager, *container.FakeRuntime, *cadvisor.Mock) { func newRealImageManager(policy ImageGCPolicy) (*realImageManager, *containertest.FakeRuntime, *cadvisortest.Mock) {
fakeRuntime := &container.FakeRuntime{} fakeRuntime := &containertest.FakeRuntime{}
mockCadvisor := new(cadvisor.Mock) mockCadvisor := new(cadvisortest.Mock)
return &realImageManager{ return &realImageManager{
runtime: fakeRuntime, runtime: fakeRuntime,
policy: policy, policy: policy,
@ -407,8 +408,8 @@ func TestGarbageCollectImageNotOldEnough(t *testing.T) {
LowThresholdPercent: 80, LowThresholdPercent: 80,
MinAge: time.Minute * 1, MinAge: time.Minute * 1,
} }
fakeRuntime := &container.FakeRuntime{} fakeRuntime := &containertest.FakeRuntime{}
mockCadvisor := new(cadvisor.Mock) mockCadvisor := new(cadvisortest.Mock)
manager := &realImageManager{ manager := &realImageManager{
runtime: fakeRuntime, runtime: fakeRuntime,
policy: policy, policy: policy,

View File

@ -43,15 +43,17 @@ import (
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/client/testing/core" "k8s.io/kubernetes/pkg/client/testing/core"
"k8s.io/kubernetes/pkg/client/unversioned/testclient" "k8s.io/kubernetes/pkg/client/unversioned/testclient"
"k8s.io/kubernetes/pkg/kubelet/cadvisor" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
"k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cm"
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/kubelet/network" "k8s.io/kubernetes/pkg/kubelet/network"
nettest "k8s.io/kubernetes/pkg/kubelet/network/testing"
"k8s.io/kubernetes/pkg/kubelet/pleg" "k8s.io/kubernetes/pkg/kubelet/pleg"
kubepod "k8s.io/kubernetes/pkg/kubelet/pod" kubepod "k8s.io/kubernetes/pkg/kubelet/pod"
"k8s.io/kubernetes/pkg/kubelet/prober" podtest "k8s.io/kubernetes/pkg/kubelet/pod/testing"
proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results"
probetest "k8s.io/kubernetes/pkg/kubelet/prober/testing"
"k8s.io/kubernetes/pkg/kubelet/status" "k8s.io/kubernetes/pkg/kubelet/status"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
"k8s.io/kubernetes/pkg/kubelet/util/queue" "k8s.io/kubernetes/pkg/kubelet/util/queue"
@ -90,16 +92,16 @@ func (f *fakeHTTP) Get(url string) (*http.Response, error) {
type TestKubelet struct { type TestKubelet struct {
kubelet *Kubelet kubelet *Kubelet
fakeRuntime *kubecontainer.FakeRuntime fakeRuntime *containertest.FakeRuntime
fakeCadvisor *cadvisor.Mock fakeCadvisor *cadvisortest.Mock
fakeKubeClient *fake.Clientset fakeKubeClient *fake.Clientset
fakeMirrorClient *kubepod.FakeMirrorClient fakeMirrorClient *podtest.FakeMirrorClient
fakeClock *util.FakeClock fakeClock *util.FakeClock
mounter mount.Interface mounter mount.Interface
} }
func newTestKubelet(t *testing.T) *TestKubelet { func newTestKubelet(t *testing.T) *TestKubelet {
fakeRuntime := &kubecontainer.FakeRuntime{} fakeRuntime := &containertest.FakeRuntime{}
fakeRuntime.VersionInfo = "1.15" fakeRuntime.VersionInfo = "1.15"
fakeRuntime.ImageList = []kubecontainer.Image{ fakeRuntime.ImageList = []kubecontainer.Image{
{ {
@ -117,12 +119,12 @@ func newTestKubelet(t *testing.T) *TestKubelet {
fakeKubeClient := &fake.Clientset{} fakeKubeClient := &fake.Clientset{}
kubelet := &Kubelet{} kubelet := &Kubelet{}
kubelet.kubeClient = fakeKubeClient kubelet.kubeClient = fakeKubeClient
kubelet.os = kubecontainer.FakeOS{} kubelet.os = containertest.FakeOS{}
kubelet.hostname = testKubeletHostname kubelet.hostname = testKubeletHostname
kubelet.nodeName = testKubeletHostname kubelet.nodeName = testKubeletHostname
kubelet.runtimeState = newRuntimeState(maxWaitForContainerRuntime, false, func() error { return nil }) kubelet.runtimeState = newRuntimeState(maxWaitForContainerRuntime, false, func() error { return nil })
kubelet.networkPlugin, _ = network.InitNetworkPlugin([]network.NetworkPlugin{}, "", network.NewFakeHost(nil)) kubelet.networkPlugin, _ = network.InitNetworkPlugin([]network.NetworkPlugin{}, "", nettest.NewFakeHost(nil))
if tempDir, err := ioutil.TempDir("/tmp", "kubelet_test."); err != nil { if tempDir, err := ioutil.TempDir("/tmp", "kubelet_test."); err != nil {
t.Fatalf("can't make a temp rootdir: %v", err) t.Fatalf("can't make a temp rootdir: %v", err)
} else { } else {
@ -141,9 +143,9 @@ func newTestKubelet(t *testing.T) *TestKubelet {
t.Fatalf("can't initialize kubelet data dirs: %v", err) t.Fatalf("can't initialize kubelet data dirs: %v", err)
} }
kubelet.daemonEndpoints = &api.NodeDaemonEndpoints{} kubelet.daemonEndpoints = &api.NodeDaemonEndpoints{}
mockCadvisor := &cadvisor.Mock{} mockCadvisor := &cadvisortest.Mock{}
kubelet.cadvisor = mockCadvisor kubelet.cadvisor = mockCadvisor
fakeMirrorClient := kubepod.NewFakeMirrorClient() fakeMirrorClient := podtest.NewFakeMirrorClient()
kubelet.podManager = kubepod.NewBasicPodManager(fakeMirrorClient) kubelet.podManager = kubepod.NewBasicPodManager(fakeMirrorClient)
kubelet.statusManager = status.NewManager(fakeKubeClient, kubelet.podManager) kubelet.statusManager = status.NewManager(fakeKubeClient, kubelet.podManager)
kubelet.containerRefManager = kubecontainer.NewRefManager() kubelet.containerRefManager = kubecontainer.NewRefManager()
@ -154,16 +156,16 @@ func newTestKubelet(t *testing.T) *TestKubelet {
kubelet.diskSpaceManager = diskSpaceManager kubelet.diskSpaceManager = diskSpaceManager
kubelet.containerRuntime = fakeRuntime kubelet.containerRuntime = fakeRuntime
kubelet.runtimeCache = kubecontainer.NewFakeRuntimeCache(kubelet.containerRuntime) kubelet.runtimeCache = containertest.NewFakeRuntimeCache(kubelet.containerRuntime)
kubelet.reasonCache = NewReasonCache() kubelet.reasonCache = NewReasonCache()
kubelet.podCache = kubecontainer.NewFakeCache(kubelet.containerRuntime) kubelet.podCache = containertest.NewFakeCache(kubelet.containerRuntime)
kubelet.podWorkers = &fakePodWorkers{ kubelet.podWorkers = &fakePodWorkers{
syncPodFn: kubelet.syncPod, syncPodFn: kubelet.syncPod,
cache: kubelet.podCache, cache: kubelet.podCache,
t: t, t: t,
} }
kubelet.probeManager = prober.FakeManager{} kubelet.probeManager = probetest.FakeManager{}
kubelet.livenessManager = proberesults.NewManager() kubelet.livenessManager = proberesults.NewManager()
kubelet.volumeManager = newVolumeManager() kubelet.volumeManager = newVolumeManager()
@ -2634,7 +2636,7 @@ func TestValidateContainerLogStatus(t *testing.T) {
// with the mock FsInfo values added to Cadvisor should make the kubelet report that it has // with the mock FsInfo values added to Cadvisor should make the kubelet report that it has
// sufficient disk space or it is out of disk, depending on the capacity, availability and // sufficient disk space or it is out of disk, depending on the capacity, availability and
// threshold values. // threshold values.
func updateDiskSpacePolicy(kubelet *Kubelet, mockCadvisor *cadvisor.Mock, rootCap, dockerCap, rootAvail, dockerAvail uint64, rootThreshold, dockerThreshold int) error { func updateDiskSpacePolicy(kubelet *Kubelet, mockCadvisor *cadvisortest.Mock, rootCap, dockerCap, rootAvail, dockerAvail uint64, rootThreshold, dockerThreshold int) error {
dockerimagesFsInfo := cadvisorapiv2.FsInfo{Capacity: rootCap * mb, Available: rootAvail * mb} dockerimagesFsInfo := cadvisorapiv2.FsInfo{Capacity: rootCap * mb, Available: rootAvail * mb}
rootFsInfo := cadvisorapiv2.FsInfo{Capacity: dockerCap * mb, Available: dockerAvail * mb} rootFsInfo := cadvisorapiv2.FsInfo{Capacity: dockerCap * mb, Available: dockerAvail * mb}
mockCadvisor.On("DockerImagesFsInfo").Return(dockerimagesFsInfo, nil) mockCadvisor.On("DockerImagesFsInfo").Return(dockerimagesFsInfo, nil)
@ -3506,7 +3508,7 @@ func TestCreateMirrorPod(t *testing.T) {
} }
pods := []*api.Pod{pod} pods := []*api.Pod{pod}
kl.podManager.SetPods(pods) kl.podManager.SetPods(pods)
err := kl.syncPod(pod, nil, &container.PodStatus{}, updateType) err := kl.syncPod(pod, nil, &kubecontainer.PodStatus{}, updateType)
if err != nil { if err != nil {
t.Errorf("unexpected error: %v", err) t.Errorf("unexpected error: %v", err)
} }
@ -3564,7 +3566,7 @@ func TestDeleteOutdatedMirrorPod(t *testing.T) {
pods := []*api.Pod{pod, mirrorPod} pods := []*api.Pod{pod, mirrorPod}
kl.podManager.SetPods(pods) kl.podManager.SetPods(pods)
err := kl.syncPod(pod, mirrorPod, &container.PodStatus{}, kubetypes.SyncPodUpdate) err := kl.syncPod(pod, mirrorPod, &kubecontainer.PodStatus{}, kubetypes.SyncPodUpdate)
if err != nil { if err != nil {
t.Errorf("unexpected error: %v", err) t.Errorf("unexpected error: %v", err)
} }
@ -3730,7 +3732,7 @@ func TestHostNetworkAllowed(t *testing.T) {
}, },
} }
kubelet.podManager.SetPods([]*api.Pod{pod}) kubelet.podManager.SetPods([]*api.Pod{pod})
err := kubelet.syncPod(pod, nil, &container.PodStatus{}, kubetypes.SyncPodUpdate) err := kubelet.syncPod(pod, nil, &kubecontainer.PodStatus{}, kubetypes.SyncPodUpdate)
if err != nil { if err != nil {
t.Errorf("expected pod infra creation to succeed: %v", err) t.Errorf("expected pod infra creation to succeed: %v", err)
} }
@ -3763,7 +3765,7 @@ func TestHostNetworkDisallowed(t *testing.T) {
}, },
}, },
} }
err := kubelet.syncPod(pod, nil, &container.PodStatus{}, kubetypes.SyncPodUpdate) err := kubelet.syncPod(pod, nil, &kubecontainer.PodStatus{}, kubetypes.SyncPodUpdate)
if err == nil { if err == nil {
t.Errorf("expected pod infra creation to fail") t.Errorf("expected pod infra creation to fail")
} }
@ -3790,7 +3792,7 @@ func TestPrivilegeContainerAllowed(t *testing.T) {
}, },
} }
kubelet.podManager.SetPods([]*api.Pod{pod}) kubelet.podManager.SetPods([]*api.Pod{pod})
err := kubelet.syncPod(pod, nil, &container.PodStatus{}, kubetypes.SyncPodUpdate) err := kubelet.syncPod(pod, nil, &kubecontainer.PodStatus{}, kubetypes.SyncPodUpdate)
if err != nil { if err != nil {
t.Errorf("expected pod infra creation to succeed: %v", err) t.Errorf("expected pod infra creation to succeed: %v", err)
} }
@ -3816,7 +3818,7 @@ func TestPrivilegeContainerDisallowed(t *testing.T) {
}, },
}, },
} }
err := kubelet.syncPod(pod, nil, &container.PodStatus{}, kubetypes.SyncPodUpdate) err := kubelet.syncPod(pod, nil, &kubecontainer.PodStatus{}, kubetypes.SyncPodUpdate)
if err == nil { if err == nil {
t.Errorf("expected pod infra creation to fail") t.Errorf("expected pod infra creation to fail")
} }

View File

@ -36,8 +36,10 @@ import (
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/kubelet/dockertools" "k8s.io/kubernetes/pkg/kubelet/dockertools"
"k8s.io/kubernetes/pkg/kubelet/network" "k8s.io/kubernetes/pkg/kubelet/network"
nettest "k8s.io/kubernetes/pkg/kubelet/network/testing"
proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
utiltesting "k8s.io/kubernetes/pkg/util/testing" utiltesting "k8s.io/kubernetes/pkg/util/testing"
@ -143,7 +145,7 @@ func newTestDockerManager() (*dockertools.DockerManager, *dockertools.FakeDocker
fakeDocker := dockertools.NewFakeDockerClient() fakeDocker := dockertools.NewFakeDockerClient()
fakeRecorder := &record.FakeRecorder{} fakeRecorder := &record.FakeRecorder{}
containerRefManager := kubecontainer.NewRefManager() containerRefManager := kubecontainer.NewRefManager()
networkPlugin, _ := network.InitNetworkPlugin([]network.NetworkPlugin{}, "", network.NewFakeHost(nil)) networkPlugin, _ := network.InitNetworkPlugin([]network.NetworkPlugin{}, "", nettest.NewFakeHost(nil))
dockerManager := dockertools.NewFakeDockerManager( dockerManager := dockertools.NewFakeDockerManager(
fakeDocker, fakeDocker,
fakeRecorder, fakeRecorder,
@ -152,7 +154,7 @@ func newTestDockerManager() (*dockertools.DockerManager, *dockertools.FakeDocker
&cadvisorapi.MachineInfo{}, &cadvisorapi.MachineInfo{},
kubetypes.PodInfraContainerImage, kubetypes.PodInfraContainerImage,
0, 0, "", 0, 0, "",
kubecontainer.FakeOS{}, containertest.FakeOS{},
networkPlugin, networkPlugin,
nil, nil,
nil, nil,

View File

@ -30,6 +30,7 @@ import (
"text/template" "text/template"
"k8s.io/kubernetes/pkg/kubelet/network" "k8s.io/kubernetes/pkg/kubelet/network"
nettest "k8s.io/kubernetes/pkg/kubelet/network/testing"
"k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/sets"
utiltesting "k8s.io/kubernetes/pkg/util/testing" utiltesting "k8s.io/kubernetes/pkg/util/testing"
) )
@ -132,7 +133,7 @@ func TestSelectPlugin(t *testing.T) {
installPluginUnderTest(t, "", testPluginPath, pluginName, nil) installPluginUnderTest(t, "", testPluginPath, pluginName, nil)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, network.NewFakeHost(nil)) plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil))
if err != nil { if err != nil {
t.Errorf("Failed to select the desired plugin: %v", err) t.Errorf("Failed to select the desired plugin: %v", err)
} }
@ -154,7 +155,7 @@ func TestSelectVendoredPlugin(t *testing.T) {
installPluginUnderTest(t, vendor, testPluginPath, pluginName, nil) installPluginUnderTest(t, vendor, testPluginPath, pluginName, nil)
vendoredPluginName := fmt.Sprintf("%s/%s", vendor, pluginName) vendoredPluginName := fmt.Sprintf("%s/%s", vendor, pluginName)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), vendoredPluginName, network.NewFakeHost(nil)) plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), vendoredPluginName, nettest.NewFakeHost(nil))
if err != nil { if err != nil {
t.Errorf("Failed to select the desired plugin: %v", err) t.Errorf("Failed to select the desired plugin: %v", err)
} }
@ -175,7 +176,7 @@ func TestSelectWrongPlugin(t *testing.T) {
installPluginUnderTest(t, "", testPluginPath, pluginName, nil) installPluginUnderTest(t, "", testPluginPath, pluginName, nil)
wrongPlugin := "abcd" wrongPlugin := "abcd"
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), wrongPlugin, network.NewFakeHost(nil)) plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), wrongPlugin, nettest.NewFakeHost(nil))
if plug != nil || err == nil { if plug != nil || err == nil {
t.Errorf("Expected to see an error. Wrong plugin selected.") t.Errorf("Expected to see an error. Wrong plugin selected.")
} }
@ -203,7 +204,7 @@ func TestPluginValidation(t *testing.T) {
} }
f.Close() f.Close()
_, err = network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, network.NewFakeHost(nil)) _, err = network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil))
if err == nil { if err == nil {
// we expected an error here because validation would have failed // we expected an error here because validation would have failed
t.Errorf("Expected non-nil value.") t.Errorf("Expected non-nil value.")
@ -221,7 +222,7 @@ func TestPluginSetupHook(t *testing.T) {
installPluginUnderTest(t, "", testPluginPath, pluginName, nil) installPluginUnderTest(t, "", testPluginPath, pluginName, nil)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, network.NewFakeHost(nil)) plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil))
err = plug.SetUpPod("podNamespace", "podName", "dockerid2345") err = plug.SetUpPod("podNamespace", "podName", "dockerid2345")
if err != nil { if err != nil {
@ -249,7 +250,7 @@ func TestPluginTearDownHook(t *testing.T) {
installPluginUnderTest(t, "", testPluginPath, pluginName, nil) installPluginUnderTest(t, "", testPluginPath, pluginName, nil)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, network.NewFakeHost(nil)) plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil))
err = plug.TearDownPod("podNamespace", "podName", "dockerid2345") err = plug.TearDownPod("podNamespace", "podName", "dockerid2345")
if err != nil { if err != nil {
@ -277,7 +278,7 @@ func TestPluginStatusHook(t *testing.T) {
installPluginUnderTest(t, "", testPluginPath, pluginName, nil) installPluginUnderTest(t, "", testPluginPath, pluginName, nil)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, network.NewFakeHost(nil)) plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil))
ip, err := plug.Status("namespace", "name", "dockerid2345") ip, err := plug.Status("namespace", "name", "dockerid2345")
if err != nil { if err != nil {
@ -313,7 +314,7 @@ func TestPluginStatusHookIPv6(t *testing.T) {
} }
installPluginUnderTest(t, "", testPluginPath, pluginName, execTemplate) installPluginUnderTest(t, "", testPluginPath, pluginName, execTemplate)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, network.NewFakeHost(nil)) plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil))
if err != nil { if err != nil {
t.Errorf("InitNetworkPlugin() failed: %v", err) t.Errorf("InitNetworkPlugin() failed: %v", err)
} }

View File

@ -18,11 +18,13 @@ package network
import ( import (
"testing" "testing"
nettest "k8s.io/kubernetes/pkg/kubelet/network/testing"
) )
func TestSelectDefaultPlugin(t *testing.T) { func TestSelectDefaultPlugin(t *testing.T) {
all_plugins := []NetworkPlugin{} all_plugins := []NetworkPlugin{}
plug, err := InitNetworkPlugin(all_plugins, "", NewFakeHost(nil)) plug, err := InitNetworkPlugin(all_plugins, "", nettest.NewFakeHost(nil))
if err != nil { if err != nil {
t.Fatalf("Unexpected error in selecting default plugin: %v", err) t.Fatalf("Unexpected error in selecting default plugin: %v", err)
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package network package testing
// helper for testing plugins // helper for testing plugins
// a fake host is created here that can be used by plugins for testing // a fake host is created here that can be used by plugins for testing
@ -23,6 +23,7 @@ import (
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
) )
type fakeNetworkHost struct { type fakeNetworkHost struct {
@ -43,5 +44,5 @@ func (fnh *fakeNetworkHost) GetKubeClient() clientset.Interface {
} }
func (nh *fakeNetworkHost) GetRuntime() kubecontainer.Runtime { func (nh *fakeNetworkHost) GetRuntime() kubecontainer.Runtime {
return &kubecontainer.FakeRuntime{} return &containertest.FakeRuntime{}
} }

View File

@ -21,12 +21,12 @@ import (
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/kubelet/cadvisor" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
) )
func TestBasic(t *testing.T) { func TestBasic(t *testing.T) {
fakeRecorder := &record.FakeRecorder{} fakeRecorder := &record.FakeRecorder{}
mockCadvisor := &cadvisor.Fake{} mockCadvisor := &cadvisortest.Fake{}
node := &api.ObjectReference{} node := &api.ObjectReference{}
oomWatcher := NewOOMWatcher(mockCadvisor, fakeRecorder) oomWatcher := NewOOMWatcher(mockCadvisor, fakeRecorder)
err := oomWatcher.Start(node) err := oomWatcher.Start(node)

View File

@ -25,6 +25,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
"k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util"
) )
@ -35,11 +36,11 @@ const (
type TestGenericPLEG struct { type TestGenericPLEG struct {
pleg *GenericPLEG pleg *GenericPLEG
runtime *kubecontainer.FakeRuntime runtime *containertest.FakeRuntime
} }
func newTestGenericPLEG() *TestGenericPLEG { func newTestGenericPLEG() *TestGenericPLEG {
fakeRuntime := &kubecontainer.FakeRuntime{} fakeRuntime := &containertest.FakeRuntime{}
// The channel capacity should be large enough to hold all events in a // The channel capacity should be large enough to hold all events in a
// single test. // single test.
pleg := &GenericPLEG{ pleg := &GenericPLEG{
@ -213,8 +214,8 @@ func TestReportMissingPods(t *testing.T) {
verifyEvents(t, expected, actual) verifyEvents(t, expected, actual)
} }
func newTestGenericPLEGWithRuntimeMock() (*GenericPLEG, *kubecontainer.Mock) { func newTestGenericPLEGWithRuntimeMock() (*GenericPLEG, *containertest.Mock) {
runtimeMock := &kubecontainer.Mock{} runtimeMock := &containertest.Mock{}
pleg := &GenericPLEG{ pleg := &GenericPLEG{
relistPeriod: time.Hour, relistPeriod: time.Hour,
runtime: runtimeMock, runtime: runtimeMock,

View File

@ -21,12 +21,13 @@ import (
"testing" "testing"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
podtest "k8s.io/kubernetes/pkg/kubelet/pod/testing"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
) )
// Stub out mirror client for testing purpose. // Stub out mirror client for testing purpose.
func newTestManager() (*basicManager, *FakeMirrorClient) { func newTestManager() (*basicManager, *podtest.FakeMirrorClient) {
fakeMirrorClient := NewFakeMirrorClient() fakeMirrorClient := podtest.NewFakeMirrorClient()
manager := NewBasicPodManager(fakeMirrorClient).(*basicManager) manager := NewBasicPodManager(fakeMirrorClient).(*basicManager)
return manager, fakeMirrorClient return manager, fakeMirrorClient
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package pod package testing
import ( import (
"sync" "sync"

View File

@ -25,11 +25,38 @@ import (
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
"k8s.io/kubernetes/pkg/kubelet/util/queue" "k8s.io/kubernetes/pkg/kubelet/util/queue"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
) )
// fakePodWorkers runs sync pod function in serial, so we can have
// deterministic behaviour in testing.
type fakePodWorkers struct {
syncPodFn syncPodFnType
cache kubecontainer.Cache
t TestingInterface
}
func (f *fakePodWorkers) UpdatePod(pod *api.Pod, mirrorPod *api.Pod, updateType kubetypes.SyncPodType, updateComplete func()) {
status, err := f.cache.Get(pod.UID)
if err != nil {
f.t.Errorf("Unexpected error: %v", err)
}
if err := f.syncPodFn(pod, mirrorPod, status, kubetypes.SyncPodUpdate); err != nil {
f.t.Errorf("Unexpected error: %v", err)
}
}
func (f *fakePodWorkers) ForgetNonExistingPodWorkers(desiredPods map[types.UID]empty) {}
func (f *fakePodWorkers) ForgetWorker(uid types.UID) {}
type TestingInterface interface {
Errorf(format string, args ...interface{})
}
func newPod(uid, name string) *api.Pod { func newPod(uid, name string) *api.Pod {
return &api.Pod{ return &api.Pod{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
@ -43,8 +70,8 @@ func createPodWorkers() (*podWorkers, map[types.UID][]string) {
lock := sync.Mutex{} lock := sync.Mutex{}
processed := make(map[types.UID][]string) processed := make(map[types.UID][]string)
fakeRecorder := &record.FakeRecorder{} fakeRecorder := &record.FakeRecorder{}
fakeRuntime := &kubecontainer.FakeRuntime{} fakeRuntime := &containertest.FakeRuntime{}
fakeCache := kubecontainer.NewFakeCache(fakeRuntime) fakeCache := containertest.NewFakeCache(fakeRuntime)
podWorkers := newPodWorkers( podWorkers := newPodWorkers(
func(pod *api.Pod, mirrorPod *api.Pod, status *kubecontainer.PodStatus, updateType kubetypes.SyncPodType) error { func(pod *api.Pod, mirrorPod *api.Pod, status *kubecontainer.PodStatus, updateType kubetypes.SyncPodType) error {
func() { func() {
@ -183,8 +210,8 @@ func (b byContainerName) Less(i, j int) bool {
// for their invocation of the syncPodFn. // for their invocation of the syncPodFn.
func TestFakePodWorkers(t *testing.T) { func TestFakePodWorkers(t *testing.T) {
fakeRecorder := &record.FakeRecorder{} fakeRecorder := &record.FakeRecorder{}
fakeRuntime := &kubecontainer.FakeRuntime{} fakeRuntime := &containertest.FakeRuntime{}
fakeCache := kubecontainer.NewFakeCache(fakeRuntime) fakeCache := containertest.NewFakeCache(fakeRuntime)
kubeletForRealWorkers := &simpleFakeKubelet{} kubeletForRealWorkers := &simpleFakeKubelet{}
kubeletForFakeWorkers := &simpleFakeKubelet{} kubeletForFakeWorkers := &simpleFakeKubelet{}

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package prober package testing
import ( import (
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
@ -23,8 +23,6 @@ import (
type FakeManager struct{} type FakeManager struct{}
var _ Manager = FakeManager{}
// Unused methods. // Unused methods.
func (_ FakeManager) AddPod(_ *api.Pod) {} func (_ FakeManager) AddPod(_ *api.Pod) {}
func (_ FakeManager) RemovePod(_ *api.Pod) {} func (_ FakeManager) RemovePod(_ *api.Pod) {}

View File

@ -25,18 +25,21 @@ import (
cadvisorapiv2 "github.com/google/cadvisor/info/v2" cadvisorapiv2 "github.com/google/cadvisor/info/v2"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/kubelet/cadvisor" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
"k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cm"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/kubelet/network" "k8s.io/kubernetes/pkg/kubelet/network"
nettest "k8s.io/kubernetes/pkg/kubelet/network/testing"
kubepod "k8s.io/kubernetes/pkg/kubelet/pod" kubepod "k8s.io/kubernetes/pkg/kubelet/pod"
podtest "k8s.io/kubernetes/pkg/kubelet/pod/testing"
"k8s.io/kubernetes/pkg/kubelet/status" "k8s.io/kubernetes/pkg/kubelet/status"
"k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util"
utiltesting "k8s.io/kubernetes/pkg/util/testing" utiltesting "k8s.io/kubernetes/pkg/util/testing"
) )
func TestRunOnce(t *testing.T) { func TestRunOnce(t *testing.T) {
cadvisor := &cadvisor.Mock{} cadvisor := &cadvisortest.Mock{}
cadvisor.On("MachineInfo").Return(&cadvisorapi.MachineInfo{}, nil) cadvisor.On("MachineInfo").Return(&cadvisorapi.MachineInfo{}, nil)
cadvisor.On("DockerImagesFsInfo").Return(cadvisorapiv2.FsInfo{ cadvisor.On("DockerImagesFsInfo").Return(cadvisorapiv2.FsInfo{
Usage: 400 * mb, Usage: 400 * mb,
@ -47,9 +50,9 @@ func TestRunOnce(t *testing.T) {
Usage: 9 * mb, Usage: 9 * mb,
Capacity: 10 * mb, Capacity: 10 * mb,
}, nil) }, nil)
podManager := kubepod.NewBasicPodManager(kubepod.NewFakeMirrorClient()) podManager := kubepod.NewBasicPodManager(podtest.NewFakeMirrorClient())
diskSpaceManager, _ := newDiskSpaceManager(cadvisor, DiskSpacePolicy{}) diskSpaceManager, _ := newDiskSpaceManager(cadvisor, DiskSpacePolicy{})
fakeRuntime := &kubecontainer.FakeRuntime{} fakeRuntime := &containertest.FakeRuntime{}
basePath, err := utiltesting.MkTmpdir("kubelet") basePath, err := utiltesting.MkTmpdir("kubelet")
if err != nil { if err != nil {
t.Fatalf("can't make a temp rootdir %v", err) t.Fatalf("can't make a temp rootdir %v", err)
@ -64,7 +67,7 @@ func TestRunOnce(t *testing.T) {
statusManager: status.NewManager(nil, podManager), statusManager: status.NewManager(nil, podManager),
containerRefManager: kubecontainer.NewRefManager(), containerRefManager: kubecontainer.NewRefManager(),
podManager: podManager, podManager: podManager,
os: kubecontainer.FakeOS{}, os: containertest.FakeOS{},
volumeManager: newVolumeManager(), volumeManager: newVolumeManager(),
diskSpaceManager: diskSpaceManager, diskSpaceManager: diskSpaceManager,
containerRuntime: fakeRuntime, containerRuntime: fakeRuntime,
@ -73,7 +76,7 @@ func TestRunOnce(t *testing.T) {
} }
kb.containerManager = cm.NewStubContainerManager() kb.containerManager = cm.NewStubContainerManager()
kb.networkPlugin, _ = network.InitNetworkPlugin([]network.NetworkPlugin{}, "", network.NewFakeHost(nil)) kb.networkPlugin, _ = network.InitNetworkPlugin([]network.NetworkPlugin{}, "", nettest.NewFakeHost(nil))
if err := kb.setupDataDirs(); err != nil { if err := kb.setupDataDirs(); err != nil {
t.Errorf("Failed to init data dirs: %v", err) t.Errorf("Failed to init data dirs: %v", err)
} }

View File

@ -34,6 +34,7 @@ import (
"k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/unversioned"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
kubepod "k8s.io/kubernetes/pkg/kubelet/pod" kubepod "k8s.io/kubernetes/pkg/kubelet/pod"
podtest "k8s.io/kubernetes/pkg/kubelet/pod/testing"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
) )
@ -68,7 +69,7 @@ func (m *manager) testSyncBatch() {
} }
func newTestManager(kubeClient clientset.Interface) *manager { func newTestManager(kubeClient clientset.Interface) *manager {
podManager := kubepod.NewBasicPodManager(kubepod.NewFakeMirrorClient()) podManager := kubepod.NewBasicPodManager(podtest.NewFakeMirrorClient())
podManager.AddPod(getTestPod()) podManager.AddPod(getTestPod())
return NewManager(kubeClient, podManager).(*manager) return NewManager(kubeClient, podManager).(*manager)
} }

View File

@ -24,7 +24,7 @@ import (
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/kubelet/cadvisor" "k8s.io/kubernetes/pkg/kubelet/cadvisor"
"k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cm"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/kubelet/dockertools" "k8s.io/kubernetes/pkg/kubelet/dockertools"
"k8s.io/kubernetes/pkg/volume/empty_dir" "k8s.io/kubernetes/pkg/volume/empty_dir"
"k8s.io/kubernetes/test/integration" "k8s.io/kubernetes/test/integration"
@ -64,7 +64,7 @@ func NewHollowKubelet(
cadvisorInterface, cadvisorInterface,
manifestFilePath, manifestFilePath,
nil, /* cloud-provider */ nil, /* cloud-provider */
kubecontainer.FakeOS{}, /* os-interface */ containertest.FakeOS{}, /* os-interface */
20*time.Second, /* FileCheckFrequency */ 20*time.Second, /* FileCheckFrequency */
20*time.Second, /* HTTPCheckFrequency */ 20*time.Second, /* HTTPCheckFrequency */
1*time.Minute, /* MinimumGCAge */ 1*time.Minute, /* MinimumGCAge */