Create a new testclient package that can be backed by disk files
Standardize how our fakes are used so that a test case can use a simpler mechanism for providing large, complex data sets, as well as represent queries over time.
This commit is contained in:
parent
402bf60366
commit
51db3bd654
@ -20,103 +20,10 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/testapi"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/testapi"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/version"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type FakeAction struct {
|
|
||||||
Action string
|
|
||||||
Value interface{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fake implements Interface. Meant to be embedded into a struct to get a default
|
|
||||||
// implementation. This makes faking out just the method you want to test easier.
|
|
||||||
type Fake struct {
|
|
||||||
Actions []FakeAction
|
|
||||||
PodsList api.PodList
|
|
||||||
CtrlList api.ReplicationControllerList
|
|
||||||
Ctrl api.ReplicationController
|
|
||||||
ServiceList api.ServiceList
|
|
||||||
EndpointsList api.EndpointsList
|
|
||||||
MinionsList api.NodeList
|
|
||||||
EventsList api.EventList
|
|
||||||
LimitRangesList api.LimitRangeList
|
|
||||||
ResourceQuotaStatus api.ResourceQuota
|
|
||||||
ResourceQuotasList api.ResourceQuotaList
|
|
||||||
NamespacesList api.NamespaceList
|
|
||||||
Namespace api.Namespace
|
|
||||||
SecretList api.SecretList
|
|
||||||
Secret api.Secret
|
|
||||||
Err error
|
|
||||||
Watch watch.Interface
|
|
||||||
PersistentVolume api.PersistentVolume
|
|
||||||
PersistentVolumesList api.PersistentVolumeList
|
|
||||||
PersistentVolumeClaim api.PersistentVolumeClaim
|
|
||||||
PersistentVolumeClaimList api.PersistentVolumeClaimList
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) LimitRanges(namespace string) LimitRangeInterface {
|
|
||||||
return &FakeLimitRanges{Fake: c, Namespace: namespace}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) ResourceQuotas(namespace string) ResourceQuotaInterface {
|
|
||||||
return &FakeResourceQuotas{Fake: c, Namespace: namespace}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) ReplicationControllers(namespace string) ReplicationControllerInterface {
|
|
||||||
return &FakeReplicationControllers{Fake: c, Namespace: namespace}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) Nodes() NodeInterface {
|
|
||||||
return &FakeNodes{Fake: c}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) Events(namespace string) EventInterface {
|
|
||||||
return &FakeEvents{Fake: c}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) Endpoints(namespace string) EndpointsInterface {
|
|
||||||
return &FakeEndpoints{Fake: c, Namespace: namespace}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) Pods(namespace string) PodInterface {
|
|
||||||
return &FakePods{Fake: c, Namespace: namespace}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) PersistentVolumes() PersistentVolumeInterface {
|
|
||||||
return &FakePersistentVolumes{Fake: c}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) PersistentVolumeClaims(namespace string) PersistentVolumeClaimInterface {
|
|
||||||
return &FakePersistentVolumeClaims{Fake: c, Namespace: namespace}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) Services(namespace string) ServiceInterface {
|
|
||||||
return &FakeServices{Fake: c, Namespace: namespace}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) Secrets(namespace string) SecretsInterface {
|
|
||||||
return &FakeSecrets{Fake: c, Namespace: namespace}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) Namespaces() NamespaceInterface {
|
|
||||||
return &FakeNamespaces{Fake: c}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) ServerVersion() (*version.Info, error) {
|
|
||||||
c.Actions = append(c.Actions, FakeAction{Action: "get-version", Value: nil})
|
|
||||||
versionInfo := version.Get()
|
|
||||||
return &versionInfo, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Fake) ServerAPIVersions() (*api.APIVersions, error) {
|
|
||||||
c.Actions = append(c.Actions, FakeAction{Action: "get-apiversions", Value: nil})
|
|
||||||
return &api.APIVersions{Versions: []string{"v1beta1", "v1beta2"}}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type HTTPClientFunc func(*http.Request) (*http.Response, error)
|
type HTTPClientFunc func(*http.Request) (*http.Response, error)
|
||||||
|
|
||||||
func (f HTTPClientFunc) Do(req *http.Request) (*http.Response, error) {
|
func (f HTTPClientFunc) Do(req *http.Request) (*http.Response, error) {
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2014 Google Inc. 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 client
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
|
||||||
)
|
|
||||||
|
|
||||||
type FakePersistentVolumeClaims struct {
|
|
||||||
Fake *Fake
|
|
||||||
Namespace string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *FakePersistentVolumeClaims) List(labels labels.Selector, field fields.Selector) (*api.PersistentVolumeClaimList, error) {
|
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-persistentVolumeClaims"})
|
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.PersistentVolumeClaimList).(*api.PersistentVolumeClaimList), c.Fake.Err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *FakePersistentVolumeClaims) Get(name string) (*api.PersistentVolumeClaim, error) {
|
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-persistentVolumeClaim", Value: name})
|
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.PersistentVolumeClaim).(*api.PersistentVolumeClaim), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *FakePersistentVolumeClaims) Delete(name string) error {
|
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-persistentVolumeClaim", Value: name})
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *FakePersistentVolumeClaims) Create(persistentvolumeclaim *api.PersistentVolumeClaim) (*api.PersistentVolumeClaim, error) {
|
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "create-persistentVolumeClaim"})
|
|
||||||
return &api.PersistentVolumeClaim{}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *FakePersistentVolumeClaims) Update(persistentvolumeclaim *api.PersistentVolumeClaim) (*api.PersistentVolumeClaim, error) {
|
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-persistentVolumeClaim", Value: persistentvolumeclaim.Name})
|
|
||||||
return &api.PersistentVolumeClaim{}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *FakePersistentVolumeClaims) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
|
||||||
return c.Fake.Watch, c.Fake.Err
|
|
||||||
}
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
@ -31,18 +31,18 @@ type FakeEndpoints struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeEndpoints) Create(endpoints *api.Endpoints) (*api.Endpoints, error) {
|
func (c *FakeEndpoints) Create(endpoints *api.Endpoints) (*api.Endpoints, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "create-endpoints"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "create-endpoints"}, &api.Endpoints{})
|
||||||
return &api.Endpoints{}, nil
|
return obj.(*api.Endpoints), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeEndpoints) List(selector labels.Selector) (*api.EndpointsList, error) {
|
func (c *FakeEndpoints) List(selector labels.Selector) (*api.EndpointsList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-endpoints"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-endpoints"}, &api.EndpointsList{})
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.EndpointsList).(*api.EndpointsList), c.Fake.Err
|
return obj.(*api.EndpointsList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeEndpoints) Get(name string) (*api.Endpoints, error) {
|
func (c *FakeEndpoints) Get(name string) (*api.Endpoints, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-endpoints"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-endpoints", Value: name}, &api.Endpoints{})
|
||||||
return &api.Endpoints{}, nil
|
return obj.(*api.Endpoints), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeEndpoints) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
func (c *FakeEndpoints) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
||||||
@ -51,6 +51,6 @@ func (c *FakeEndpoints) Watch(label labels.Selector, field fields.Selector, reso
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeEndpoints) Update(endpoints *api.Endpoints) (*api.Endpoints, error) {
|
func (c *FakeEndpoints) Update(endpoints *api.Endpoints) (*api.Endpoints, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-endpoints", Value: endpoints.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-endpoints", Value: endpoints.Name}, &api.Endpoints{})
|
||||||
return &api.Endpoints{}, nil
|
return obj.(*api.Endpoints), err
|
||||||
}
|
}
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
@ -32,26 +32,26 @@ type FakeEvents struct {
|
|||||||
|
|
||||||
// Create makes a new event. Returns the copy of the event the server returns, or an error.
|
// Create makes a new event. Returns the copy of the event the server returns, or an error.
|
||||||
func (c *FakeEvents) Create(event *api.Event) (*api.Event, error) {
|
func (c *FakeEvents) Create(event *api.Event) (*api.Event, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-event", Value: event.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-event", Value: event.Name}, &api.Event{})
|
||||||
return &api.Event{}, nil
|
return obj.(*api.Event), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update replaces an existing event. Returns the copy of the event the server returns, or an error.
|
// Update replaces an existing event. Returns the copy of the event the server returns, or an error.
|
||||||
func (c *FakeEvents) Update(event *api.Event) (*api.Event, error) {
|
func (c *FakeEvents) Update(event *api.Event) (*api.Event, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-event", Value: event.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-event", Value: event.Name}, &api.Event{})
|
||||||
return &api.Event{}, nil
|
return obj.(*api.Event), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// List returns a list of events matching the selectors.
|
// List returns a list of events matching the selectors.
|
||||||
func (c *FakeEvents) List(label labels.Selector, field fields.Selector) (*api.EventList, error) {
|
func (c *FakeEvents) List(label labels.Selector, field fields.Selector) (*api.EventList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-events"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-events"}, &api.EventList{})
|
||||||
return &c.Fake.EventsList, nil
|
return obj.(*api.EventList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get returns the given event, or an error.
|
// Get returns the given event, or an error.
|
||||||
func (c *FakeEvents) Get(id string) (*api.Event, error) {
|
func (c *FakeEvents) Get(id string) (*api.Event, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-event", Value: id})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-endpoints", Value: id}, &api.Event{})
|
||||||
return &api.Event{}, nil
|
return obj.(*api.Event), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Watch starts watching for events matching the given selectors.
|
// Watch starts watching for events matching the given selectors.
|
||||||
@ -62,13 +62,13 @@ func (c *FakeEvents) Watch(label labels.Selector, field fields.Selector, resourc
|
|||||||
|
|
||||||
// Search returns a list of events matching the specified object.
|
// Search returns a list of events matching the specified object.
|
||||||
func (c *FakeEvents) Search(objOrRef runtime.Object) (*api.EventList, error) {
|
func (c *FakeEvents) Search(objOrRef runtime.Object) (*api.EventList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "search-events"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "search-events"}, &api.EventList{})
|
||||||
return &c.Fake.EventsList, nil
|
return obj.(*api.EventList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeEvents) Delete(name string) error {
|
func (c *FakeEvents) Delete(name string) error {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-event", Value: name})
|
_, err := c.Fake.Invokes(FakeAction{Action: "delete-event", Value: name}, &api.Event{})
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeEvents) GetFieldSelector(involvedObjectName, involvedObjectNamespace, involvedObjectKind, involvedObjectUID *string) fields.Selector {
|
func (c *FakeEvents) GetFieldSelector(involvedObjectName, involvedObjectNamespace, involvedObjectKind, involvedObjectUID *string) fields.Selector {
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
@ -31,28 +31,28 @@ type FakeLimitRanges struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeLimitRanges) List(selector labels.Selector) (*api.LimitRangeList, error) {
|
func (c *FakeLimitRanges) List(selector labels.Selector) (*api.LimitRangeList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-limitRanges"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-limitRanges"}, &api.LimitRangeList{})
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.LimitRangesList).(*api.LimitRangeList), nil
|
return obj.(*api.LimitRangeList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeLimitRanges) Get(name string) (*api.LimitRange, error) {
|
func (c *FakeLimitRanges) Get(name string) (*api.LimitRange, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-limitRange", Value: name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-limitRange", Value: name}, &api.LimitRange{})
|
||||||
return &api.LimitRange{ObjectMeta: api.ObjectMeta{Name: name, Namespace: c.Namespace}}, nil
|
return obj.(*api.LimitRange), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeLimitRanges) Delete(name string) error {
|
func (c *FakeLimitRanges) Delete(name string) error {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-limitRange", Value: name})
|
_, err := c.Fake.Invokes(FakeAction{Action: "delete-limitRange", Value: name}, &api.LimitRange{})
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeLimitRanges) Create(limitRange *api.LimitRange) (*api.LimitRange, error) {
|
func (c *FakeLimitRanges) Create(limitRange *api.LimitRange) (*api.LimitRange, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "create-limitRange"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "create-limitRange"}, &api.LimitRange{})
|
||||||
return &api.LimitRange{}, nil
|
return obj.(*api.LimitRange), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeLimitRanges) Update(limitRange *api.LimitRange) (*api.LimitRange, error) {
|
func (c *FakeLimitRanges) Update(limitRange *api.LimitRange) (*api.LimitRange, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-limitRange", Value: limitRange.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-limitRange", Value: limitRange.Name}, &api.LimitRange{})
|
||||||
return &api.LimitRange{}, nil
|
return obj.(*api.LimitRange), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeLimitRanges) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
func (c *FakeLimitRanges) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
@ -30,18 +30,18 @@ type FakeNamespaces struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNamespaces) List(labels labels.Selector, field fields.Selector) (*api.NamespaceList, error) {
|
func (c *FakeNamespaces) List(labels labels.Selector, field fields.Selector) (*api.NamespaceList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-namespaces"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-namespaces"}, &api.NamespaceList{})
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.NamespacesList).(*api.NamespaceList), nil
|
return obj.(*api.NamespaceList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNamespaces) Get(name string) (*api.Namespace, error) {
|
func (c *FakeNamespaces) Get(name string) (*api.Namespace, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-namespace", Value: name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-namespace", Value: name}, &api.Namespace{})
|
||||||
return &api.Namespace{ObjectMeta: api.ObjectMeta{Name: name}}, nil
|
return obj.(*api.Namespace), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNamespaces) Delete(name string) error {
|
func (c *FakeNamespaces) Delete(name string) error {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-namespace", Value: name})
|
_, err := c.Fake.Invokes(FakeAction{Action: "delete-namespace", Value: name}, &api.Namespace{})
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNamespaces) Create(namespace *api.Namespace) (*api.Namespace, error) {
|
func (c *FakeNamespaces) Create(namespace *api.Namespace) (*api.Namespace, error) {
|
||||||
@ -50,8 +50,8 @@ func (c *FakeNamespaces) Create(namespace *api.Namespace) (*api.Namespace, error
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNamespaces) Update(namespace *api.Namespace) (*api.Namespace, error) {
|
func (c *FakeNamespaces) Update(namespace *api.Namespace) (*api.Namespace, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-namespace", Value: namespace.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-namespace", Value: namespace}, &api.Namespace{})
|
||||||
return &api.Namespace{}, nil
|
return obj.(*api.Namespace), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNamespaces) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
func (c *FakeNamespaces) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
||||||
@ -60,12 +60,11 @@ func (c *FakeNamespaces) Watch(label labels.Selector, field fields.Selector, res
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNamespaces) Finalize(namespace *api.Namespace) (*api.Namespace, error) {
|
func (c *FakeNamespaces) Finalize(namespace *api.Namespace) (*api.Namespace, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "finalize-namespace", Value: namespace.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "finalize-namespace", Value: namespace}, &api.Namespace{})
|
||||||
c.Fake.Namespace = *namespace
|
return obj.(*api.Namespace), err
|
||||||
return namespace, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNamespaces) Status(namespace *api.Namespace) (*api.Namespace, error) {
|
func (c *FakeNamespaces) Status(namespace *api.Namespace) (*api.Namespace, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "status-namespace", Value: namespace.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "status-namespace", Value: namespace}, &api.Namespace{})
|
||||||
return &api.Namespace{}, nil
|
return obj.(*api.Namespace), err
|
||||||
}
|
}
|
@ -14,11 +14,10 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
||||||
@ -31,36 +30,31 @@ type FakeNodes struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNodes) Get(name string) (*api.Node, error) {
|
func (c *FakeNodes) Get(name string) (*api.Node, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-minion", Value: name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-node", Value: name}, &api.Node{})
|
||||||
for i := range c.Fake.MinionsList.Items {
|
return obj.(*api.Node), err
|
||||||
if c.Fake.MinionsList.Items[i].Name == name {
|
|
||||||
return &c.Fake.MinionsList.Items[i], nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil, errors.NewNotFound("Minions", name)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNodes) List() (*api.NodeList, error) {
|
func (c *FakeNodes) List() (*api.NodeList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-minions", Value: nil})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-nodes"}, &api.NodeList{})
|
||||||
return &c.Fake.MinionsList, nil
|
return obj.(*api.NodeList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNodes) Create(minion *api.Node) (*api.Node, error) {
|
func (c *FakeNodes) Create(minion *api.Node) (*api.Node, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "create-minion", Value: minion})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "create-node", Value: minion}, &api.Node{})
|
||||||
return &api.Node{}, nil
|
return obj.(*api.Node), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNodes) Delete(id string) error {
|
func (c *FakeNodes) Delete(name string) error {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-minion", Value: id})
|
_, err := c.Fake.Invokes(FakeAction{Action: "delete-node", Value: name}, &api.Node{})
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNodes) Update(minion *api.Node) (*api.Node, error) {
|
func (c *FakeNodes) Update(minion *api.Node) (*api.Node, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-minion", Value: minion})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-node", Value: minion}, &api.Node{})
|
||||||
return &api.Node{}, nil
|
return obj.(*api.Node), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeNodes) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
func (c *FakeNodes) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "watch-minions", Value: resourceVersion})
|
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "watch-nodes", Value: resourceVersion})
|
||||||
return c.Fake.Watch, c.Fake.Err
|
return c.Fake.Watch, c.Fake.Err
|
||||||
}
|
}
|
59
pkg/client/testclient/fake_persistent_volume_claims.go
Normal file
59
pkg/client/testclient/fake_persistent_volume_claims.go
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Google Inc. 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 testclient
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FakePersistentVolumeClaims struct {
|
||||||
|
Fake *Fake
|
||||||
|
Namespace string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *FakePersistentVolumeClaims) List(label labels.Selector, field fields.Selector) (*api.PersistentVolumeClaimList, error) {
|
||||||
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-persistentVolumeClaims"}, &api.PersistentVolumeClaimList{})
|
||||||
|
return obj.(*api.PersistentVolumeClaimList), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *FakePersistentVolumeClaims) Get(name string) (*api.PersistentVolumeClaim, error) {
|
||||||
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-persistentVolumeClaims", Value: name}, &api.PersistentVolumeClaim{})
|
||||||
|
return obj.(*api.PersistentVolumeClaim), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *FakePersistentVolumeClaims) Delete(name string) error {
|
||||||
|
_, err := c.Fake.Invokes(FakeAction{Action: "delete-persistentVolumeClaims", Value: name}, &api.PersistentVolumeClaim{})
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *FakePersistentVolumeClaims) Create(persistentVolumeClaims *api.PersistentVolumeClaim) (*api.PersistentVolumeClaim, error) {
|
||||||
|
obj, err := c.Fake.Invokes(FakeAction{Action: "create-persistentVolumeClaims"}, &api.PersistentVolumeClaim{})
|
||||||
|
return obj.(*api.PersistentVolumeClaim), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *FakePersistentVolumeClaims) Update(persistentVolumeClaims *api.PersistentVolumeClaim) (*api.PersistentVolumeClaim, error) {
|
||||||
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-persistentVolumeClaims", Value: persistentVolumeClaims.Name}, &api.PersistentVolumeClaim{})
|
||||||
|
return obj.(*api.PersistentVolumeClaim), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *FakePersistentVolumeClaims) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
||||||
|
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "watch-persistentVolumeClaims", Value: resourceVersion})
|
||||||
|
return c.Fake.Watch, c.Fake.Err
|
||||||
|
}
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
@ -24,32 +24,33 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type FakePersistentVolumes struct {
|
type FakePersistentVolumes struct {
|
||||||
Fake *Fake
|
Fake *Fake
|
||||||
|
Namespace string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePersistentVolumes) List(labels labels.Selector, field fields.Selector) (*api.PersistentVolumeList, error) {
|
func (c *FakePersistentVolumes) List(label labels.Selector, field fields.Selector) (*api.PersistentVolumeList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-persistentVolumes"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-persistentVolumes"}, &api.PersistentVolumeList{})
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.PersistentVolumesList).(*api.PersistentVolumeList), nil
|
return obj.(*api.PersistentVolumeList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePersistentVolumes) Get(name string) (*api.PersistentVolume, error) {
|
func (c *FakePersistentVolumes) Get(name string) (*api.PersistentVolume, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-persistentVolume", Value: name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-persistentVolumes", Value: name}, &api.PersistentVolume{})
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.PersistentVolume).(*api.PersistentVolume), nil
|
return obj.(*api.PersistentVolume), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePersistentVolumes) Delete(name string) error {
|
func (c *FakePersistentVolumes) Delete(name string) error {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-persistentVolume", Value: name})
|
_, err := c.Fake.Invokes(FakeAction{Action: "delete-persistentVolumes", Value: name}, &api.PersistentVolume{})
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePersistentVolumes) Create(persistentvolume *api.PersistentVolume) (*api.PersistentVolume, error) {
|
func (c *FakePersistentVolumes) Create(persistentVolumes *api.PersistentVolume) (*api.PersistentVolume, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "create-persistentVolume"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "create-persistentVolumes"}, &api.PersistentVolume{})
|
||||||
return &api.PersistentVolume{}, nil
|
return obj.(*api.PersistentVolume), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePersistentVolumes) Update(persistentvolume *api.PersistentVolume) (*api.PersistentVolume, error) {
|
func (c *FakePersistentVolumes) Update(persistentVolumes *api.PersistentVolume) (*api.PersistentVolume, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-persistentVolume", Value: persistentvolume.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-persistentVolumes", Value: persistentVolumes.Name}, &api.PersistentVolume{})
|
||||||
return &api.PersistentVolume{}, nil
|
return obj.(*api.PersistentVolume), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePersistentVolumes) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
func (c *FakePersistentVolumes) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
@ -31,28 +31,28 @@ type FakePods struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePods) List(selector labels.Selector) (*api.PodList, error) {
|
func (c *FakePods) List(selector labels.Selector) (*api.PodList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-pods"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-pods"}, &api.PodList{})
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.PodsList).(*api.PodList), nil
|
return obj.(*api.PodList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePods) Get(name string) (*api.Pod, error) {
|
func (c *FakePods) Get(name string) (*api.Pod, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-pod", Value: name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-pod", Value: name}, &api.Pod{})
|
||||||
return &api.Pod{ObjectMeta: api.ObjectMeta{Name: name, Namespace: c.Namespace}}, nil
|
return obj.(*api.Pod), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePods) Delete(name string) error {
|
func (c *FakePods) Delete(name string) error {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-pod", Value: name})
|
_, err := c.Fake.Invokes(FakeAction{Action: "delete-pod", Value: name}, &api.Pod{})
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePods) Create(pod *api.Pod) (*api.Pod, error) {
|
func (c *FakePods) Create(pod *api.Pod) (*api.Pod, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "create-pod"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "create-pod"}, &api.Pod{})
|
||||||
return &api.Pod{}, nil
|
return obj.(*api.Pod), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePods) Update(pod *api.Pod) (*api.Pod, error) {
|
func (c *FakePods) Update(pod *api.Pod) (*api.Pod, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-pod", Value: pod.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-pod", Value: pod.Name}, &api.Pod{})
|
||||||
return &api.Pod{}, nil
|
return obj.(*api.Pod), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePods) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
func (c *FakePods) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
||||||
@ -66,6 +66,6 @@ func (c *FakePods) Bind(bind *api.Binding) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakePods) UpdateStatus(pod *api.Pod) (*api.Pod, error) {
|
func (c *FakePods) UpdateStatus(pod *api.Pod) (*api.Pod, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-status-pod", Value: pod.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-status-pod", Value: pod.Name}, &api.Pod{})
|
||||||
return &api.Pod{}, nil
|
return obj.(*api.Pod), err
|
||||||
}
|
}
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
@ -31,31 +31,31 @@ type FakeReplicationControllers struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeReplicationControllers) List(selector labels.Selector) (*api.ReplicationControllerList, error) {
|
func (c *FakeReplicationControllers) List(selector labels.Selector) (*api.ReplicationControllerList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-controllers"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-replicationControllers"}, &api.ReplicationControllerList{})
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.CtrlList).(*api.ReplicationControllerList), nil
|
return obj.(*api.ReplicationControllerList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeReplicationControllers) Get(name string) (*api.ReplicationController, error) {
|
func (c *FakeReplicationControllers) Get(name string) (*api.ReplicationController, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-controller", Value: name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-replicationController", Value: name}, &api.ReplicationController{})
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.Ctrl).(*api.ReplicationController), nil
|
return obj.(*api.ReplicationController), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeReplicationControllers) Create(controller *api.ReplicationController) (*api.ReplicationController, error) {
|
func (c *FakeReplicationControllers) Create(controller *api.ReplicationController) (*api.ReplicationController, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "create-controller", Value: controller})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "create-replicationController", Value: controller}, &api.ReplicationController{})
|
||||||
return &api.ReplicationController{}, nil
|
return obj.(*api.ReplicationController), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeReplicationControllers) Update(controller *api.ReplicationController) (*api.ReplicationController, error) {
|
func (c *FakeReplicationControllers) Update(controller *api.ReplicationController) (*api.ReplicationController, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-controller", Value: controller})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-replicationController", Value: controller}, &api.ReplicationController{})
|
||||||
return &api.ReplicationController{}, nil
|
return obj.(*api.ReplicationController), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeReplicationControllers) Delete(controller string) error {
|
func (c *FakeReplicationControllers) Delete(name string) error {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-controller", Value: controller})
|
_, err := c.Fake.Invokes(FakeAction{Action: "delete-replicationController", Value: name}, &api.ReplicationController{})
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeReplicationControllers) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
func (c *FakeReplicationControllers) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "watch-controllers", Value: resourceVersion})
|
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "watch-replicationController", Value: resourceVersion})
|
||||||
return c.Fake.Watch, nil
|
return c.Fake.Watch, nil
|
||||||
}
|
}
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
@ -31,34 +31,33 @@ type FakeResourceQuotas struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeResourceQuotas) List(selector labels.Selector) (*api.ResourceQuotaList, error) {
|
func (c *FakeResourceQuotas) List(selector labels.Selector) (*api.ResourceQuotaList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-resourceQuotas"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-resourceQuotas"}, &api.ResourceQuotaList{})
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.ResourceQuotasList).(*api.ResourceQuotaList), nil
|
return obj.(*api.ResourceQuotaList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeResourceQuotas) Get(name string) (*api.ResourceQuota, error) {
|
func (c *FakeResourceQuotas) Get(name string) (*api.ResourceQuota, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-resourceQuota", Value: name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-resourceQuota", Value: name}, &api.ResourceQuota{})
|
||||||
return &api.ResourceQuota{ObjectMeta: api.ObjectMeta{Name: name, Namespace: c.Namespace}}, nil
|
return obj.(*api.ResourceQuota), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeResourceQuotas) Delete(name string) error {
|
func (c *FakeResourceQuotas) Delete(name string) error {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-resourceQuota", Value: name})
|
_, err := c.Fake.Invokes(FakeAction{Action: "delete-resourceQuota", Value: name}, &api.ResourceQuota{})
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeResourceQuotas) Create(resourceQuota *api.ResourceQuota) (*api.ResourceQuota, error) {
|
func (c *FakeResourceQuotas) Create(resourceQuota *api.ResourceQuota) (*api.ResourceQuota, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "create-resourceQuota"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "create-resourceQuota", Value: resourceQuota}, &api.ResourceQuota{})
|
||||||
return &api.ResourceQuota{}, nil
|
return obj.(*api.ResourceQuota), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeResourceQuotas) Update(resourceQuota *api.ResourceQuota) (*api.ResourceQuota, error) {
|
func (c *FakeResourceQuotas) Update(resourceQuota *api.ResourceQuota) (*api.ResourceQuota, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-resourceQuota", Value: resourceQuota.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-resourceQuota", Value: resourceQuota}, &api.ResourceQuota{})
|
||||||
return &api.ResourceQuota{}, nil
|
return obj.(*api.ResourceQuota), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeResourceQuotas) UpdateStatus(resourceQuota *api.ResourceQuota) (*api.ResourceQuota, error) {
|
func (c *FakeResourceQuotas) UpdateStatus(resourceQuota *api.ResourceQuota) (*api.ResourceQuota, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-status-resourceQuota", Value: resourceQuota.Name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-status-resourceQuota", Value: resourceQuota}, &api.ResourceQuota{})
|
||||||
c.Fake.ResourceQuotaStatus = *resourceQuota
|
return obj.(*api.ResourceQuota), err
|
||||||
return &api.ResourceQuota{}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeResourceQuotas) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
func (c *FakeResourceQuotas) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
@ -31,28 +31,28 @@ type FakeSecrets struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeSecrets) List(labels labels.Selector, field fields.Selector) (*api.SecretList, error) {
|
func (c *FakeSecrets) List(labels labels.Selector, field fields.Selector) (*api.SecretList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-secrets"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-secrets"}, &api.SecretList{})
|
||||||
return &c.Fake.SecretList, c.Fake.Err
|
return obj.(*api.SecretList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeSecrets) Get(name string) (*api.Secret, error) {
|
func (c *FakeSecrets) Get(name string) (*api.Secret, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-secret", Value: name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-secret", Value: name}, &api.Secret{})
|
||||||
return api.Scheme.CopyOrDie(&c.Fake.Secret).(*api.Secret), nil
|
return obj.(*api.Secret), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeSecrets) Create(secret *api.Secret) (*api.Secret, error) {
|
func (c *FakeSecrets) Create(secret *api.Secret) (*api.Secret, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "create-secret", Value: secret})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "create-secret", Value: secret}, &api.Secret{})
|
||||||
return &api.Secret{}, nil
|
return obj.(*api.Secret), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeSecrets) Update(secret *api.Secret) (*api.Secret, error) {
|
func (c *FakeSecrets) Update(secret *api.Secret) (*api.Secret, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-secret", Value: secret})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-secret", Value: secret}, &api.Secret{})
|
||||||
return &api.Secret{}, nil
|
return obj.(*api.Secret), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeSecrets) Delete(secret string) error {
|
func (c *FakeSecrets) Delete(name string) error {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-secret", Value: secret})
|
_, err := c.Fake.Invokes(FakeAction{Action: "delete-secret", Value: name}, &api.Secret{})
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeSecrets) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
func (c *FakeSecrets) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
@ -31,28 +31,28 @@ type FakeServices struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeServices) List(selector labels.Selector) (*api.ServiceList, error) {
|
func (c *FakeServices) List(selector labels.Selector) (*api.ServiceList, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "list-services"})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "list-services"}, &api.ServiceList{})
|
||||||
return &c.Fake.ServiceList, c.Fake.Err
|
return obj.(*api.ServiceList), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeServices) Get(name string) (*api.Service, error) {
|
func (c *FakeServices) Get(name string) (*api.Service, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-service", Value: name})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "get-service", Value: name}, &api.Service{})
|
||||||
return &api.Service{ObjectMeta: api.ObjectMeta{Name: name, Namespace: c.Namespace}}, nil
|
return obj.(*api.Service), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeServices) Create(service *api.Service) (*api.Service, error) {
|
func (c *FakeServices) Create(service *api.Service) (*api.Service, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "create-service", Value: service})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "create-service", Value: service}, &api.Service{})
|
||||||
return &api.Service{}, nil
|
return obj.(*api.Service), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeServices) Update(service *api.Service) (*api.Service, error) {
|
func (c *FakeServices) Update(service *api.Service) (*api.Service, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "update-service", Value: service})
|
obj, err := c.Fake.Invokes(FakeAction{Action: "update-service", Value: service}, &api.Service{})
|
||||||
return &api.Service{}, nil
|
return obj.(*api.Service), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeServices) Delete(service string) error {
|
func (c *FakeServices) Delete(name string) error {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-service", Value: service})
|
_, err := c.Fake.Invokes(FakeAction{Action: "delete-service", Value: name}, &api.Service{})
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeServices) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
func (c *FakeServices) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
@ -14,17 +14,19 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package client
|
package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
)
|
)
|
||||||
|
|
||||||
// This test file just ensures that Fake and structs it is embedded in
|
// This test file just ensures that Fake and structs it is embedded in
|
||||||
// implement Interface.
|
// implement Interface.
|
||||||
|
|
||||||
func TestFakeImplementsInterface(t *testing.T) {
|
func TestFakeImplementsInterface(t *testing.T) {
|
||||||
_ = Interface(&Fake{})
|
_ = client.Interface(&Fake{})
|
||||||
}
|
}
|
||||||
|
|
||||||
type MyFake struct {
|
type MyFake struct {
|
||||||
@ -32,6 +34,6 @@ type MyFake struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestEmbeddedFakeImplementsInterface(t *testing.T) {
|
func TestEmbeddedFakeImplementsInterface(t *testing.T) {
|
||||||
_ = Interface(MyFake{&Fake{}})
|
_ = client.Interface(MyFake{&Fake{}})
|
||||||
_ = Interface(&MyFake{&Fake{}})
|
_ = client.Interface(&MyFake{&Fake{}})
|
||||||
}
|
}
|
218
pkg/client/testclient/fixture.go
Normal file
218
pkg/client/testclient/fixture.go
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 Google Inc. 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 testclient
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/meta"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/yaml"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ObjectRetriever abstracts the implementation for retrieving or setting generic
|
||||||
|
// objects. It is intended to be used to fake calls to a server by returning
|
||||||
|
// objects based on their kind and name.
|
||||||
|
type ObjectRetriever interface {
|
||||||
|
// Kind should return a resource or a list of resources (depending on the provided kind and
|
||||||
|
// name). It should return an error if the caller should communicate an error to the server.
|
||||||
|
Kind(kind, name string) (runtime.Object, error)
|
||||||
|
// Add adds a runtime object for test purposes into this object.
|
||||||
|
Add(runtime.Object) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// ObjectReaction returns a ReactionFunc that takes a generic action string of the form
|
||||||
|
// <verb>-<resource> or <verb>-<subresource>-<resource> and attempts to return a runtime
|
||||||
|
// Object or error that matches the requested action. For instance, list-replicationControllers
|
||||||
|
// should attempt to return a list of replication controllers. This method delegates to the
|
||||||
|
// ObjectRetriever interface to satisfy retrieval of lists or retrieval of single items.
|
||||||
|
// TODO: add support for sub resources
|
||||||
|
func ObjectReaction(o ObjectRetriever, mapper meta.RESTMapper) ReactionFunc {
|
||||||
|
return func(action FakeAction) (runtime.Object, error) {
|
||||||
|
segments := strings.Split(action.Action, "-")
|
||||||
|
var verb, resource string
|
||||||
|
switch len(segments) {
|
||||||
|
case 3:
|
||||||
|
verb, _, resource = segments[0], segments[1], segments[2]
|
||||||
|
case 2:
|
||||||
|
verb, resource = segments[0], segments[1]
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("unrecognized action, need two or three segments <verb>-<resource> or <verb>-<subresource>-<resource>: %s", action.Action)
|
||||||
|
}
|
||||||
|
_, kind, err := mapper.VersionAndKindForResource(resource)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("unrecognized action %s: %v", resource, err)
|
||||||
|
}
|
||||||
|
// TODO: have mapper return a Kind for a subresource?
|
||||||
|
switch verb {
|
||||||
|
case "list", "search":
|
||||||
|
return o.Kind(kind+"List", "")
|
||||||
|
case "get", "create", "update", "delete":
|
||||||
|
// TODO: handle sub resources
|
||||||
|
if s, ok := action.Value.(string); ok && action.Value != nil {
|
||||||
|
return o.Kind(kind, s)
|
||||||
|
}
|
||||||
|
return o.Kind(kind, "unknown")
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("no reaction implemented for %s", action.Action)
|
||||||
|
}
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddObjectsFromPath loads the JSON or YAML file containing Kubernetes API resources
|
||||||
|
// and adds them to the provided ObjectRetriever.
|
||||||
|
func AddObjectsFromPath(path string, o ObjectRetriever) error {
|
||||||
|
data, err := ioutil.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
data, err = yaml.ToJSON(data)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
obj, err := api.Codec.Decode(data)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := o.Add(obj); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type objects struct {
|
||||||
|
types map[string][]runtime.Object
|
||||||
|
last map[string]int
|
||||||
|
typer runtime.ObjectTyper
|
||||||
|
creater runtime.ObjectCreater
|
||||||
|
copier copier
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ ObjectRetriever = &objects{}
|
||||||
|
|
||||||
|
type copier interface {
|
||||||
|
Copy(obj runtime.Object) (runtime.Object, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewObjects implements the ObjectRetriever interface by introspecting the
|
||||||
|
// objects provided to Add() and returning them when the Kind method is invoked.
|
||||||
|
// If an api.List object is provided to Add(), each child item is added. If an
|
||||||
|
// object is added that is itself a list (PodList, ServiceList) then that is added
|
||||||
|
// to the "PodList" kind. If no PodList is added, the retriever will take any loaded
|
||||||
|
// Pods and return them in a list. If an api.Status is added, and the Details.Kind field
|
||||||
|
// is set, that status will be returned instead (as an error if Status != Success, or
|
||||||
|
// as a runtime.Object if Status == Success). If multiple PodLists are provided, they
|
||||||
|
// will be returned in order by the Kind call, and the last PodList will be reused for
|
||||||
|
// subsequent calls.
|
||||||
|
func NewObjects(scheme *runtime.Scheme) ObjectRetriever {
|
||||||
|
return objects{
|
||||||
|
types: make(map[string][]runtime.Object),
|
||||||
|
last: make(map[string]int),
|
||||||
|
typer: scheme,
|
||||||
|
creater: scheme,
|
||||||
|
copier: scheme,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o objects) Kind(kind, name string) (runtime.Object, error) {
|
||||||
|
empty, _ := o.creater.New("", kind)
|
||||||
|
nilValue := reflect.Zero(reflect.TypeOf(empty)).Interface().(runtime.Object)
|
||||||
|
|
||||||
|
arr, ok := o.types[kind]
|
||||||
|
if !ok {
|
||||||
|
if strings.HasSuffix(kind, "List") {
|
||||||
|
itemKind := kind[:len(kind)-4]
|
||||||
|
arr, ok := o.types[itemKind]
|
||||||
|
if !ok {
|
||||||
|
return empty, nil
|
||||||
|
}
|
||||||
|
out, err := o.creater.New("", kind)
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
if err := runtime.SetList(out, arr); err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
if out, err = o.copier.Copy(out); err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
return nilValue, errors.NewNotFound(kind, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
index := o.last[kind]
|
||||||
|
if index >= len(arr) {
|
||||||
|
index = len(arr) - 1
|
||||||
|
}
|
||||||
|
if index < 0 {
|
||||||
|
return nilValue, errors.NewNotFound(kind, name)
|
||||||
|
}
|
||||||
|
out, err := o.copier.Copy(arr[index])
|
||||||
|
if err != nil {
|
||||||
|
return nilValue, err
|
||||||
|
}
|
||||||
|
o.last[kind] = index + 1
|
||||||
|
|
||||||
|
if status, ok := out.(*api.Status); ok {
|
||||||
|
if status.Details != nil {
|
||||||
|
status.Details.Kind = kind
|
||||||
|
}
|
||||||
|
if status.Status != api.StatusSuccess {
|
||||||
|
return nilValue, &errors.StatusError{*status}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o objects) Add(obj runtime.Object) error {
|
||||||
|
_, kind, err := o.typer.ObjectVersionAndKind(obj)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case runtime.IsListType(obj):
|
||||||
|
if kind != "List" {
|
||||||
|
o.types[kind] = append(o.types[kind], obj)
|
||||||
|
}
|
||||||
|
|
||||||
|
list, err := runtime.ExtractList(obj)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, obj := range list {
|
||||||
|
if err := o.Add(obj); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if status, ok := obj.(*api.Status); ok && status.Details != nil {
|
||||||
|
kind = status.Details.Kind
|
||||||
|
}
|
||||||
|
o.types[kind] = append(o.types[kind], obj)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
127
pkg/client/testclient/testclient.go
Normal file
127
pkg/client/testclient/testclient.go
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 Google Inc. 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 testclient
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/latest"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/version"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewSimpleFake returns a client that will respond with the provided objects
|
||||||
|
func NewSimpleFake(objects ...runtime.Object) *Fake {
|
||||||
|
o := NewObjects(api.Scheme)
|
||||||
|
for _, obj := range objects {
|
||||||
|
if err := o.Add(obj); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &Fake{ReactFn: ObjectReaction(o, latest.RESTMapper)}
|
||||||
|
}
|
||||||
|
|
||||||
|
type FakeAction struct {
|
||||||
|
Action string
|
||||||
|
Value interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReactionFunc is a function that returns an object or error for a given Action
|
||||||
|
type ReactionFunc func(FakeAction) (runtime.Object, error)
|
||||||
|
|
||||||
|
// Fake implements client.Interface. Meant to be embedded into a struct to get a default
|
||||||
|
// implementation. This makes faking out just the method you want to test easier.
|
||||||
|
type Fake struct {
|
||||||
|
Actions []FakeAction
|
||||||
|
Watch watch.Interface
|
||||||
|
Err error
|
||||||
|
|
||||||
|
// ReactFn is an optional function that will be invoked with the provided action
|
||||||
|
// and return a response. It can implement scenario specific behavior. The type
|
||||||
|
// of object returned must match the expected type from the caller (even if nil).
|
||||||
|
ReactFn ReactionFunc
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invokes records the provided FakeAction and then invokes the ReactFn (if provided).
|
||||||
|
// obj is expected to be of the same type a normal call would return.
|
||||||
|
func (c *Fake) Invokes(action FakeAction, obj runtime.Object) (runtime.Object, error) {
|
||||||
|
c.Actions = append(c.Actions, action)
|
||||||
|
if c.ReactFn != nil {
|
||||||
|
return c.ReactFn(action)
|
||||||
|
}
|
||||||
|
return obj, c.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) LimitRanges(namespace string) client.LimitRangeInterface {
|
||||||
|
return &FakeLimitRanges{Fake: c, Namespace: namespace}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) ResourceQuotas(namespace string) client.ResourceQuotaInterface {
|
||||||
|
return &FakeResourceQuotas{Fake: c, Namespace: namespace}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) ReplicationControllers(namespace string) client.ReplicationControllerInterface {
|
||||||
|
return &FakeReplicationControllers{Fake: c, Namespace: namespace}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) Nodes() client.NodeInterface {
|
||||||
|
return &FakeNodes{Fake: c}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) Events(namespace string) client.EventInterface {
|
||||||
|
return &FakeEvents{Fake: c}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) Endpoints(namespace string) client.EndpointsInterface {
|
||||||
|
return &FakeEndpoints{Fake: c, Namespace: namespace}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) PersistentVolumes() client.PersistentVolumeInterface {
|
||||||
|
return &FakePersistentVolumes{Fake: c}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) PersistentVolumeClaims(namespace string) client.PersistentVolumeClaimInterface {
|
||||||
|
return &FakePersistentVolumeClaims{Fake: c, Namespace: namespace}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) Pods(namespace string) client.PodInterface {
|
||||||
|
return &FakePods{Fake: c, Namespace: namespace}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) Services(namespace string) client.ServiceInterface {
|
||||||
|
return &FakeServices{Fake: c, Namespace: namespace}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) Secrets(namespace string) client.SecretsInterface {
|
||||||
|
return &FakeSecrets{Fake: c, Namespace: namespace}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) Namespaces() client.NamespaceInterface {
|
||||||
|
return &FakeNamespaces{Fake: c}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) ServerVersion() (*version.Info, error) {
|
||||||
|
c.Actions = append(c.Actions, FakeAction{Action: "get-version", Value: nil})
|
||||||
|
versionInfo := version.Get()
|
||||||
|
return &versionInfo, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Fake) ServerAPIVersions() (*api.APIVersions, error) {
|
||||||
|
c.Actions = append(c.Actions, FakeAction{Action: "get-apiversions", Value: nil})
|
||||||
|
return &api.APIVersions{Versions: []string{"v1beta1", "v1beta2"}}, nil
|
||||||
|
}
|
74
pkg/client/testclient/testclient_test.go
Normal file
74
pkg/client/testclient/testclient_test.go
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 Google Inc. 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 testclient
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/latest"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNewClient(t *testing.T) {
|
||||||
|
o := NewObjects(api.Scheme)
|
||||||
|
if err := AddObjectsFromPath("../../../examples/guestbook/frontend-service.json", o); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
client := &Fake{ReactFn: ObjectReaction(o, latest.RESTMapper)}
|
||||||
|
list, err := client.Services("test").List(labels.Everything())
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if len(list.Items) != 1 {
|
||||||
|
t.Fatalf("unexpected list %#v", list)
|
||||||
|
}
|
||||||
|
|
||||||
|
// When list is invoked a second time, the same results are returned.
|
||||||
|
list, err = client.Services("test").List(labels.Everything())
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if len(list.Items) != 1 {
|
||||||
|
t.Fatalf("unexpected list %#v", list)
|
||||||
|
}
|
||||||
|
t.Logf("list: %#v", list)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestErrors(t *testing.T) {
|
||||||
|
o := NewObjects(api.Scheme)
|
||||||
|
o.Add(&api.List{
|
||||||
|
Items: []runtime.Object{
|
||||||
|
// This first call to List will return this error
|
||||||
|
&(errors.NewNotFound("ServiceList", "").(*errors.StatusError).ErrStatus),
|
||||||
|
// The second call to List will return this error
|
||||||
|
&(errors.NewForbidden("ServiceList", "", nil).(*errors.StatusError).ErrStatus),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
client := &Fake{ReactFn: ObjectReaction(o, latest.RESTMapper)}
|
||||||
|
_, err := client.Services("test").List(labels.Everything())
|
||||||
|
if !errors.IsNotFound(err) {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
t.Logf("error: %#v", err.(*errors.StatusError).Status())
|
||||||
|
_, err = client.Services("test").List(labels.Everything())
|
||||||
|
if !errors.IsForbidden(err) {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
}
|
@ -30,6 +30,7 @@ import (
|
|||||||
apierrors "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
|
apierrors "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
fake_cloud "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/fake"
|
fake_cloud "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/fake"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
||||||
@ -49,7 +50,7 @@ const (
|
|||||||
// PodsInterface and PodInterface to test list & delet pods, which is implemented in
|
// PodsInterface and PodInterface to test list & delet pods, which is implemented in
|
||||||
// the embeded client.Fake field.
|
// the embeded client.Fake field.
|
||||||
type FakeNodeHandler struct {
|
type FakeNodeHandler struct {
|
||||||
client.Fake
|
*testclient.Fake
|
||||||
|
|
||||||
// Input: Hooks determine if request is valid or not
|
// Input: Hooks determine if request is valid or not
|
||||||
CreateHook func(*FakeNodeHandler, *api.Node) bool
|
CreateHook func(*FakeNodeHandler, *api.Node) bool
|
||||||
@ -508,6 +509,9 @@ func TestSyncCloudNodes(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, item := range table {
|
for _, item := range table {
|
||||||
|
if item.fakeNodeHandler.Fake == nil {
|
||||||
|
item.fakeNodeHandler.Fake = testclient.NewSimpleFake()
|
||||||
|
}
|
||||||
nodeController := NewNodeController(item.fakeCloud, item.matchRE, nil, &api.NodeResources{}, item.fakeNodeHandler, nil, 10, time.Minute,
|
nodeController := NewNodeController(item.fakeCloud, item.matchRE, nil, &api.NodeResources{}, item.fakeNodeHandler, nil, 10, time.Minute,
|
||||||
util.NewFakeRateLimiter(), testNodeMonitorGracePeriod, testNodeStartupGracePeriod, testNodeMonitorPeriod)
|
util.NewFakeRateLimiter(), testNodeMonitorGracePeriod, testNodeStartupGracePeriod, testNodeMonitorPeriod)
|
||||||
if err := nodeController.SyncCloudNodes(); err != nil {
|
if err := nodeController.SyncCloudNodes(); err != nil {
|
||||||
@ -542,15 +546,13 @@ func TestSyncCloudNodesEvictPods(t *testing.T) {
|
|||||||
matchRE string
|
matchRE string
|
||||||
expectedRequestCount int
|
expectedRequestCount int
|
||||||
expectedDeleted []string
|
expectedDeleted []string
|
||||||
expectedActions []client.FakeAction
|
expectedActions []testclient.FakeAction
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
// No node to delete: do nothing.
|
// No node to delete: do nothing.
|
||||||
fakeNodeHandler: &FakeNodeHandler{
|
fakeNodeHandler: &FakeNodeHandler{
|
||||||
Existing: []*api.Node{newNode("node0"), newNode("node1")},
|
Existing: []*api.Node{newNode("node0"), newNode("node1")},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0"), *newPod("pod1", "node1")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0"), *newPod("pod1", "node1")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
fakeCloud: &fake_cloud.FakeCloud{
|
fakeCloud: &fake_cloud.FakeCloud{
|
||||||
Machines: []string{"node0", "node1"},
|
Machines: []string{"node0", "node1"},
|
||||||
@ -564,9 +566,7 @@ func TestSyncCloudNodesEvictPods(t *testing.T) {
|
|||||||
// Delete node1, and pod0 is running on it.
|
// Delete node1, and pod0 is running on it.
|
||||||
fakeNodeHandler: &FakeNodeHandler{
|
fakeNodeHandler: &FakeNodeHandler{
|
||||||
Existing: []*api.Node{newNode("node0"), newNode("node1")},
|
Existing: []*api.Node{newNode("node0"), newNode("node1")},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node1")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node1")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
fakeCloud: &fake_cloud.FakeCloud{
|
fakeCloud: &fake_cloud.FakeCloud{
|
||||||
Machines: []string{"node0"},
|
Machines: []string{"node0"},
|
||||||
@ -574,15 +574,13 @@ func TestSyncCloudNodesEvictPods(t *testing.T) {
|
|||||||
matchRE: ".*",
|
matchRE: ".*",
|
||||||
expectedRequestCount: 2, // List + Delete
|
expectedRequestCount: 2, // List + Delete
|
||||||
expectedDeleted: []string{"node1"},
|
expectedDeleted: []string{"node1"},
|
||||||
expectedActions: []client.FakeAction{{Action: "list-pods"}, {Action: "delete-pod", Value: "pod0"}},
|
expectedActions: []testclient.FakeAction{{Action: "list-pods"}, {Action: "delete-pod", Value: "pod0"}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// Delete node1, but pod0 is running on node0.
|
// Delete node1, but pod0 is running on node0.
|
||||||
fakeNodeHandler: &FakeNodeHandler{
|
fakeNodeHandler: &FakeNodeHandler{
|
||||||
Existing: []*api.Node{newNode("node0"), newNode("node1")},
|
Existing: []*api.Node{newNode("node0"), newNode("node1")},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
fakeCloud: &fake_cloud.FakeCloud{
|
fakeCloud: &fake_cloud.FakeCloud{
|
||||||
Machines: []string{"node0"},
|
Machines: []string{"node0"},
|
||||||
@ -590,11 +588,14 @@ func TestSyncCloudNodesEvictPods(t *testing.T) {
|
|||||||
matchRE: ".*",
|
matchRE: ".*",
|
||||||
expectedRequestCount: 2, // List + Delete
|
expectedRequestCount: 2, // List + Delete
|
||||||
expectedDeleted: []string{"node1"},
|
expectedDeleted: []string{"node1"},
|
||||||
expectedActions: []client.FakeAction{{Action: "list-pods"}},
|
expectedActions: []testclient.FakeAction{{Action: "list-pods"}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, item := range table {
|
for _, item := range table {
|
||||||
|
if item.fakeNodeHandler.Fake == nil {
|
||||||
|
item.fakeNodeHandler.Fake = testclient.NewSimpleFake()
|
||||||
|
}
|
||||||
nodeController := NewNodeController(item.fakeCloud, item.matchRE, nil, &api.NodeResources{}, item.fakeNodeHandler, nil, 10, time.Minute,
|
nodeController := NewNodeController(item.fakeCloud, item.matchRE, nil, &api.NodeResources{}, item.fakeNodeHandler, nil, 10, time.Minute,
|
||||||
util.NewFakeRateLimiter(), testNodeMonitorGracePeriod, testNodeStartupGracePeriod, testNodeMonitorPeriod)
|
util.NewFakeRateLimiter(), testNodeMonitorGracePeriod, testNodeStartupGracePeriod, testNodeMonitorPeriod)
|
||||||
if err := nodeController.SyncCloudNodes(); err != nil {
|
if err := nodeController.SyncCloudNodes(); err != nil {
|
||||||
@ -915,7 +916,7 @@ func TestSyncProbedNodeStatusEvictPods(t *testing.T) {
|
|||||||
fakeNodeHandler *FakeNodeHandler
|
fakeNodeHandler *FakeNodeHandler
|
||||||
fakeKubeletClient *FakeKubeletClient
|
fakeKubeletClient *FakeKubeletClient
|
||||||
expectedRequestCount int
|
expectedRequestCount int
|
||||||
expectedActions []client.FakeAction
|
expectedActions []testclient.FakeAction
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
// Existing node is healthy, current probe is healthy too.
|
// Existing node is healthy, current probe is healthy too.
|
||||||
@ -935,9 +936,7 @@ func TestSyncProbedNodeStatusEvictPods(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node1")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node1")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
fakeKubeletClient: &FakeKubeletClient{
|
fakeKubeletClient: &FakeKubeletClient{
|
||||||
Status: probe.Success,
|
Status: probe.Success,
|
||||||
@ -965,9 +964,7 @@ func TestSyncProbedNodeStatusEvictPods(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
fakeKubeletClient: &FakeKubeletClient{
|
fakeKubeletClient: &FakeKubeletClient{
|
||||||
Status: probe.Failure,
|
Status: probe.Failure,
|
||||||
@ -997,9 +994,7 @@ func TestSyncProbedNodeStatusEvictPods(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
fakeKubeletClient: &FakeKubeletClient{
|
fakeKubeletClient: &FakeKubeletClient{
|
||||||
Status: probe.Failure,
|
Status: probe.Failure,
|
||||||
@ -1030,16 +1025,14 @@ func TestSyncProbedNodeStatusEvictPods(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
fakeKubeletClient: &FakeKubeletClient{
|
fakeKubeletClient: &FakeKubeletClient{
|
||||||
Status: probe.Failure,
|
Status: probe.Failure,
|
||||||
Err: nil,
|
Err: nil,
|
||||||
},
|
},
|
||||||
expectedRequestCount: 2, // List+Update
|
expectedRequestCount: 2, // List+Update
|
||||||
expectedActions: []client.FakeAction{{Action: "list-pods"}, {Action: "delete-pod", Value: "pod0"}},
|
expectedActions: []testclient.FakeAction{{Action: "list-pods"}, {Action: "delete-pod", Value: "pod0"}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1081,9 +1074,7 @@ func TestMonitorNodeStatusEvictPods(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
timeToPass: 0,
|
timeToPass: 0,
|
||||||
newNodeStatus: api.NodeStatus{},
|
newNodeStatus: api.NodeStatus{},
|
||||||
@ -1111,9 +1102,7 @@ func TestMonitorNodeStatusEvictPods(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
timeToPass: evictionTimeout,
|
timeToPass: evictionTimeout,
|
||||||
newNodeStatus: api.NodeStatus{
|
newNodeStatus: api.NodeStatus{
|
||||||
@ -1151,9 +1140,7 @@ func TestMonitorNodeStatusEvictPods(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
timeToPass: time.Hour,
|
timeToPass: time.Hour,
|
||||||
newNodeStatus: api.NodeStatus{
|
newNodeStatus: api.NodeStatus{
|
||||||
@ -1191,9 +1178,7 @@ func TestMonitorNodeStatusEvictPods(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
timeToPass: evictionTimeout - testNodeMonitorGracePeriod,
|
timeToPass: evictionTimeout - testNodeMonitorGracePeriod,
|
||||||
newNodeStatus: api.NodeStatus{
|
newNodeStatus: api.NodeStatus{
|
||||||
@ -1231,9 +1216,7 @@ func TestMonitorNodeStatusEvictPods(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
timeToPass: 60 * time.Minute,
|
timeToPass: 60 * time.Minute,
|
||||||
newNodeStatus: api.NodeStatus{
|
newNodeStatus: api.NodeStatus{
|
||||||
@ -1302,9 +1285,7 @@ func TestMonitorNodeStatusUpdateStatus(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
expectedRequestCount: 2, // List+Update
|
expectedRequestCount: 2, // List+Update
|
||||||
expectedNodes: []*api.Node{
|
expectedNodes: []*api.Node{
|
||||||
@ -1339,9 +1320,7 @@ func TestMonitorNodeStatusUpdateStatus(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
expectedRequestCount: 1, // List
|
expectedRequestCount: 1, // List
|
||||||
expectedNodes: nil,
|
expectedNodes: nil,
|
||||||
@ -1376,9 +1355,7 @@ func TestMonitorNodeStatusUpdateStatus(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
expectedRequestCount: 3, // (List+)List+Update
|
expectedRequestCount: 3, // (List+)List+Update
|
||||||
timeToPass: time.Hour,
|
timeToPass: time.Hour,
|
||||||
@ -1454,9 +1431,7 @@ func TestMonitorNodeStatusUpdateStatus(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Fake: client.Fake{
|
Fake: testclient.NewSimpleFake(&api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}}),
|
||||||
PodsList: api.PodList{Items: []api.Pod{*newPod("pod0", "node0")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
expectedRequestCount: 1, // List
|
expectedRequestCount: 1, // List
|
||||||
expectedNodes: nil,
|
expectedNodes: nil,
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/latest"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/latest"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/testapi"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/testapi"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
||||||
@ -339,12 +340,12 @@ func TestControllerUpdateReplicas(t *testing.T) {
|
|||||||
|
|
||||||
type FakeWatcher struct {
|
type FakeWatcher struct {
|
||||||
w *watch.FakeWatcher
|
w *watch.FakeWatcher
|
||||||
*client.Fake
|
*testclient.Fake
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestWatchControllers(t *testing.T) {
|
func TestWatchControllers(t *testing.T) {
|
||||||
fakeWatch := watch.NewFake()
|
fakeWatch := watch.NewFake()
|
||||||
client := &client.Fake{Watch: fakeWatch}
|
client := &testclient.Fake{Watch: fakeWatch}
|
||||||
manager := NewReplicationManager(client)
|
manager := NewReplicationManager(client)
|
||||||
var testControllerSpec api.ReplicationController
|
var testControllerSpec api.ReplicationController
|
||||||
received := make(chan struct{})
|
received := make(chan struct{})
|
||||||
|
@ -26,6 +26,7 @@ import (
|
|||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -33,7 +34,7 @@ type describeClient struct {
|
|||||||
T *testing.T
|
T *testing.T
|
||||||
Namespace string
|
Namespace string
|
||||||
Err error
|
Err error
|
||||||
*client.Fake
|
client.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -41,8 +42,13 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestDescribePod(t *testing.T) {
|
func TestDescribePod(t *testing.T) {
|
||||||
fake := &client.Fake{}
|
fake := testclient.NewSimpleFake(&api.Pod{
|
||||||
c := &describeClient{T: t, Namespace: "foo", Fake: fake}
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "bar",
|
||||||
|
Namespace: "foo",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
c := &describeClient{T: t, Namespace: "foo", Interface: fake}
|
||||||
d := PodDescriber{c}
|
d := PodDescriber{c}
|
||||||
out, err := d.Describe("foo", "bar")
|
out, err := d.Describe("foo", "bar")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -54,8 +60,13 @@ func TestDescribePod(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestDescribeService(t *testing.T) {
|
func TestDescribeService(t *testing.T) {
|
||||||
fake := &client.Fake{}
|
fake := testclient.NewSimpleFake(&api.Service{
|
||||||
c := &describeClient{T: t, Namespace: "foo", Fake: fake}
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "bar",
|
||||||
|
Namespace: "foo",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
c := &describeClient{T: t, Namespace: "foo", Interface: fake}
|
||||||
d := ServiceDescriber{c}
|
d := ServiceDescriber{c}
|
||||||
out, err := d.Describe("foo", "bar")
|
out, err := d.Describe("foo", "bar")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -68,34 +79,32 @@ func TestDescribeService(t *testing.T) {
|
|||||||
|
|
||||||
func TestPodDescribeResultsSorted(t *testing.T) {
|
func TestPodDescribeResultsSorted(t *testing.T) {
|
||||||
// Arrange
|
// Arrange
|
||||||
fake := &client.Fake{
|
fake := testclient.NewSimpleFake(&api.EventList{
|
||||||
EventsList: api.EventList{
|
Items: []api.Event{
|
||||||
Items: []api.Event{
|
{
|
||||||
{
|
Source: api.EventSource{Component: "kubelet"},
|
||||||
Source: api.EventSource{Component: "kubelet"},
|
Message: "Item 1",
|
||||||
Message: "Item 1",
|
FirstTimestamp: util.NewTime(time.Date(2014, time.January, 15, 0, 0, 0, 0, time.UTC)),
|
||||||
FirstTimestamp: util.NewTime(time.Date(2014, time.January, 15, 0, 0, 0, 0, time.UTC)),
|
LastTimestamp: util.NewTime(time.Date(2014, time.January, 15, 0, 0, 0, 0, time.UTC)),
|
||||||
LastTimestamp: util.NewTime(time.Date(2014, time.January, 15, 0, 0, 0, 0, time.UTC)),
|
Count: 1,
|
||||||
Count: 1,
|
},
|
||||||
},
|
{
|
||||||
{
|
Source: api.EventSource{Component: "scheduler"},
|
||||||
Source: api.EventSource{Component: "scheduler"},
|
Message: "Item 2",
|
||||||
Message: "Item 2",
|
FirstTimestamp: util.NewTime(time.Date(1987, time.June, 17, 0, 0, 0, 0, time.UTC)),
|
||||||
FirstTimestamp: util.NewTime(time.Date(1987, time.June, 17, 0, 0, 0, 0, time.UTC)),
|
LastTimestamp: util.NewTime(time.Date(1987, time.June, 17, 0, 0, 0, 0, time.UTC)),
|
||||||
LastTimestamp: util.NewTime(time.Date(1987, time.June, 17, 0, 0, 0, 0, time.UTC)),
|
Count: 1,
|
||||||
Count: 1,
|
},
|
||||||
},
|
{
|
||||||
{
|
Source: api.EventSource{Component: "kubelet"},
|
||||||
Source: api.EventSource{Component: "kubelet"},
|
Message: "Item 3",
|
||||||
Message: "Item 3",
|
FirstTimestamp: util.NewTime(time.Date(2002, time.December, 25, 0, 0, 0, 0, time.UTC)),
|
||||||
FirstTimestamp: util.NewTime(time.Date(2002, time.December, 25, 0, 0, 0, 0, time.UTC)),
|
LastTimestamp: util.NewTime(time.Date(2002, time.December, 25, 0, 0, 0, 0, time.UTC)),
|
||||||
LastTimestamp: util.NewTime(time.Date(2002, time.December, 25, 0, 0, 0, 0, time.UTC)),
|
Count: 1,
|
||||||
Count: 1,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
c := &describeClient{T: t, Namespace: "foo", Fake: fake}
|
c := &describeClient{T: t, Namespace: "foo", Interface: fake}
|
||||||
d := PodDescriber{c}
|
d := PodDescriber{c}
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
@ -22,10 +22,11 @@ import (
|
|||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ErrorReplicationControllers struct {
|
type ErrorReplicationControllers struct {
|
||||||
client.FakeReplicationControllers
|
testclient.FakeReplicationControllers
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ErrorReplicationControllers) Update(controller *api.ReplicationController) (*api.ReplicationController, error) {
|
func (c *ErrorReplicationControllers) Update(controller *api.ReplicationController) (*api.ReplicationController, error) {
|
||||||
@ -33,15 +34,15 @@ func (c *ErrorReplicationControllers) Update(controller *api.ReplicationControll
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ErrorReplicationControllerClient struct {
|
type ErrorReplicationControllerClient struct {
|
||||||
client.Fake
|
testclient.Fake
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ErrorReplicationControllerClient) ReplicationControllers(namespace string) client.ReplicationControllerInterface {
|
func (c *ErrorReplicationControllerClient) ReplicationControllers(namespace string) client.ReplicationControllerInterface {
|
||||||
return &ErrorReplicationControllers{client.FakeReplicationControllers{Fake: &c.Fake, Namespace: namespace}}
|
return &ErrorReplicationControllers{testclient.FakeReplicationControllers{Fake: &c.Fake, Namespace: namespace}}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestReplicationControllerResizeRetry(t *testing.T) {
|
func TestReplicationControllerResizeRetry(t *testing.T) {
|
||||||
fake := &ErrorReplicationControllerClient{Fake: client.Fake{}}
|
fake := &ErrorReplicationControllerClient{Fake: testclient.Fake{}}
|
||||||
resizer := ReplicationControllerResizer{fake}
|
resizer := ReplicationControllerResizer{fake}
|
||||||
preconditions := ResizePrecondition{-1, ""}
|
preconditions := ResizePrecondition{-1, ""}
|
||||||
count := uint(3)
|
count := uint(3)
|
||||||
@ -65,7 +66,7 @@ func TestReplicationControllerResizeRetry(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestReplicationControllerResize(t *testing.T) {
|
func TestReplicationControllerResize(t *testing.T) {
|
||||||
fake := &client.Fake{}
|
fake := &testclient.Fake{}
|
||||||
resizer := ReplicationControllerResizer{fake}
|
resizer := ReplicationControllerResizer{fake}
|
||||||
preconditions := ResizePrecondition{-1, ""}
|
preconditions := ResizePrecondition{-1, ""}
|
||||||
count := uint(3)
|
count := uint(3)
|
||||||
@ -75,22 +76,20 @@ func TestReplicationControllerResize(t *testing.T) {
|
|||||||
if len(fake.Actions) != 2 {
|
if len(fake.Actions) != 2 {
|
||||||
t.Errorf("unexpected actions: %v, expected 2 actions (get, update)", fake.Actions)
|
t.Errorf("unexpected actions: %v, expected 2 actions (get, update)", fake.Actions)
|
||||||
}
|
}
|
||||||
if fake.Actions[0].Action != "get-controller" || fake.Actions[0].Value != name {
|
if fake.Actions[0].Action != "get-replicationController" || fake.Actions[0].Value != name {
|
||||||
t.Errorf("unexpected action: %v, expected get-controller %s", fake.Actions[0], name)
|
t.Errorf("unexpected action: %v, expected get-replicationController %s", fake.Actions[0], name)
|
||||||
}
|
}
|
||||||
if fake.Actions[1].Action != "update-controller" || fake.Actions[1].Value.(*api.ReplicationController).Spec.Replicas != int(count) {
|
if fake.Actions[1].Action != "update-replicationController" || fake.Actions[1].Value.(*api.ReplicationController).Spec.Replicas != int(count) {
|
||||||
t.Errorf("unexpected action %v, expected update-controller with replicas = %d", fake.Actions[1], count)
|
t.Errorf("unexpected action %v, expected update-replicationController with replicas = %d", fake.Actions[1], count)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestReplicationControllerResizeFailsPreconditions(t *testing.T) {
|
func TestReplicationControllerResizeFailsPreconditions(t *testing.T) {
|
||||||
fake := &client.Fake{
|
fake := testclient.NewSimpleFake(&api.ReplicationController{
|
||||||
Ctrl: api.ReplicationController{
|
Spec: api.ReplicationControllerSpec{
|
||||||
Spec: api.ReplicationControllerSpec{
|
Replicas: 10,
|
||||||
Replicas: 10,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
resizer := ReplicationControllerResizer{fake}
|
resizer := ReplicationControllerResizer{fake}
|
||||||
preconditions := ResizePrecondition{2, ""}
|
preconditions := ResizePrecondition{2, ""}
|
||||||
count := uint(3)
|
count := uint(3)
|
||||||
@ -100,8 +99,8 @@ func TestReplicationControllerResizeFailsPreconditions(t *testing.T) {
|
|||||||
if len(fake.Actions) != 1 {
|
if len(fake.Actions) != 1 {
|
||||||
t.Errorf("unexpected actions: %v, expected 2 actions (get, update)", fake.Actions)
|
t.Errorf("unexpected actions: %v, expected 2 actions (get, update)", fake.Actions)
|
||||||
}
|
}
|
||||||
if fake.Actions[0].Action != "get-controller" || fake.Actions[0].Value != name {
|
if fake.Actions[0].Action != "get-replicationController" || fake.Actions[0].Value != name {
|
||||||
t.Errorf("unexpected action: %v, expected get-controller %s", fake.Actions[0], name)
|
t.Errorf("unexpected action: %v, expected get-replicationController %s", fake.Actions[0], name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,10 +24,11 @@ import (
|
|||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
type updaterFake struct {
|
type updaterFake struct {
|
||||||
*client.Fake
|
*testclient.Fake
|
||||||
ctrl client.ReplicationControllerInterface
|
ctrl client.ReplicationControllerInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,11 +37,11 @@ func (c *updaterFake) ReplicationControllers(namespace string) client.Replicatio
|
|||||||
}
|
}
|
||||||
|
|
||||||
func fakeClientFor(namespace string, responses []fakeResponse) client.Interface {
|
func fakeClientFor(namespace string, responses []fakeResponse) client.Interface {
|
||||||
fake := client.Fake{}
|
fake := testclient.Fake{}
|
||||||
return &updaterFake{
|
return &updaterFake{
|
||||||
&fake,
|
&fake,
|
||||||
&fakeRc{
|
&fakeRc{
|
||||||
&client.FakeReplicationControllers{
|
&testclient.FakeReplicationControllers{
|
||||||
Fake: &fake,
|
Fake: &fake,
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
},
|
},
|
||||||
@ -55,12 +56,12 @@ type fakeResponse struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type fakeRc struct {
|
type fakeRc struct {
|
||||||
*client.FakeReplicationControllers
|
*testclient.FakeReplicationControllers
|
||||||
responses []fakeResponse
|
responses []fakeResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *fakeRc) Get(name string) (*api.ReplicationController, error) {
|
func (c *fakeRc) Get(name string) (*api.ReplicationController, error) {
|
||||||
action := client.FakeAction{Action: "get-controller", Value: name}
|
action := testclient.FakeAction{Action: "get-controller", Value: name}
|
||||||
if len(c.responses) == 0 {
|
if len(c.responses) == 0 {
|
||||||
return nil, fmt.Errorf("Unexpected Action: %s", action)
|
return nil, fmt.Errorf("Unexpected Action: %s", action)
|
||||||
}
|
}
|
||||||
@ -71,12 +72,12 @@ func (c *fakeRc) Get(name string) (*api.ReplicationController, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *fakeRc) Create(controller *api.ReplicationController) (*api.ReplicationController, error) {
|
func (c *fakeRc) Create(controller *api.ReplicationController) (*api.ReplicationController, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, client.FakeAction{Action: "create-controller", Value: controller.ObjectMeta.Name})
|
c.Fake.Actions = append(c.Fake.Actions, testclient.FakeAction{Action: "create-controller", Value: controller.ObjectMeta.Name})
|
||||||
return controller, nil
|
return controller, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *fakeRc) Update(controller *api.ReplicationController) (*api.ReplicationController, error) {
|
func (c *fakeRc) Update(controller *api.ReplicationController) (*api.ReplicationController, error) {
|
||||||
c.Fake.Actions = append(c.Fake.Actions, client.FakeAction{Action: "update-controller", Value: controller.ObjectMeta.Name})
|
c.Fake.Actions = append(c.Fake.Actions, testclient.FakeAction{Action: "update-controller", Value: controller.ObjectMeta.Name})
|
||||||
return controller, nil
|
return controller, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,16 +23,15 @@ import (
|
|||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestReplicationControllerStop(t *testing.T) {
|
func TestReplicationControllerStop(t *testing.T) {
|
||||||
fake := &client.Fake{
|
fake := testclient.NewSimpleFake(&api.ReplicationController{
|
||||||
Ctrl: api.ReplicationController{
|
Spec: api.ReplicationControllerSpec{
|
||||||
Spec: api.ReplicationControllerSpec{
|
Replicas: 0,
|
||||||
Replicas: 0,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
reaper := ReplicationControllerReaper{fake, time.Millisecond, time.Millisecond}
|
reaper := ReplicationControllerReaper{fake, time.Millisecond, time.Millisecond}
|
||||||
name := "foo"
|
name := "foo"
|
||||||
s, err := reaper.Stop("default", name)
|
s, err := reaper.Stop("default", name)
|
||||||
@ -47,14 +46,14 @@ func TestReplicationControllerStop(t *testing.T) {
|
|||||||
t.Errorf("unexpected actions: %v, expected 4 actions (get, update, get, delete)", fake.Actions)
|
t.Errorf("unexpected actions: %v, expected 4 actions (get, update, get, delete)", fake.Actions)
|
||||||
}
|
}
|
||||||
for i, action := range []string{"get", "update", "get", "delete"} {
|
for i, action := range []string{"get", "update", "get", "delete"} {
|
||||||
if fake.Actions[i].Action != action+"-controller" {
|
if fake.Actions[i].Action != action+"-replicationController" {
|
||||||
t.Errorf("unexpected action: %v, expected %s-controller", fake.Actions[i], action)
|
t.Errorf("unexpected action: %v, expected %s-replicationController", fake.Actions[i], action)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type noSuchPod struct {
|
type noSuchPod struct {
|
||||||
*client.FakePods
|
*testclient.FakePods
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *noSuchPod) Get(name string) (*api.Pod, error) {
|
func (c *noSuchPod) Get(name string) (*api.Pod, error) {
|
||||||
@ -62,7 +61,7 @@ func (c *noSuchPod) Get(name string) (*api.Pod, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type noDeleteService struct {
|
type noDeleteService struct {
|
||||||
*client.FakeServices
|
*testclient.FakeServices
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *noDeleteService) Delete(service string) error {
|
func (c *noDeleteService) Delete(service string) error {
|
||||||
@ -70,12 +69,12 @@ func (c *noDeleteService) Delete(service string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type reaperFake struct {
|
type reaperFake struct {
|
||||||
*client.Fake
|
*testclient.Fake
|
||||||
noSuchPod, noDeleteService bool
|
noSuchPod, noDeleteService bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *reaperFake) Pods(namespace string) client.PodInterface {
|
func (c *reaperFake) Pods(namespace string) client.PodInterface {
|
||||||
pods := &client.FakePods{c.Fake, namespace}
|
pods := &testclient.FakePods{c.Fake, namespace}
|
||||||
if c.noSuchPod {
|
if c.noSuchPod {
|
||||||
return &noSuchPod{pods}
|
return &noSuchPod{pods}
|
||||||
}
|
}
|
||||||
@ -83,7 +82,7 @@ func (c *reaperFake) Pods(namespace string) client.PodInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *reaperFake) Services(namespace string) client.ServiceInterface {
|
func (c *reaperFake) Services(namespace string) client.ServiceInterface {
|
||||||
services := &client.FakeServices{c.Fake, namespace}
|
services := &testclient.FakeServices{c.Fake, namespace}
|
||||||
if c.noDeleteService {
|
if c.noDeleteService {
|
||||||
return &noDeleteService{services}
|
return &noDeleteService{services}
|
||||||
}
|
}
|
||||||
@ -100,7 +99,7 @@ func TestSimpleStop(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
fake: &reaperFake{
|
fake: &reaperFake{
|
||||||
Fake: &client.Fake{},
|
Fake: &testclient.Fake{},
|
||||||
},
|
},
|
||||||
kind: "Pod",
|
kind: "Pod",
|
||||||
actions: []string{"get-pod", "delete-pod"},
|
actions: []string{"get-pod", "delete-pod"},
|
||||||
@ -109,7 +108,7 @@ func TestSimpleStop(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
fake: &reaperFake{
|
fake: &reaperFake{
|
||||||
Fake: &client.Fake{},
|
Fake: &testclient.Fake{},
|
||||||
},
|
},
|
||||||
kind: "Service",
|
kind: "Service",
|
||||||
actions: []string{"get-service", "delete-service"},
|
actions: []string{"get-service", "delete-service"},
|
||||||
@ -118,7 +117,7 @@ func TestSimpleStop(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
fake: &reaperFake{
|
fake: &reaperFake{
|
||||||
Fake: &client.Fake{},
|
Fake: &testclient.Fake{},
|
||||||
noSuchPod: true,
|
noSuchPod: true,
|
||||||
},
|
},
|
||||||
kind: "Pod",
|
kind: "Pod",
|
||||||
@ -128,7 +127,7 @@ func TestSimpleStop(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
fake: &reaperFake{
|
fake: &reaperFake{
|
||||||
Fake: &client.Fake{},
|
Fake: &testclient.Fake{},
|
||||||
noDeleteService: true,
|
noDeleteService: true,
|
||||||
},
|
},
|
||||||
kind: "Service",
|
kind: "Service",
|
||||||
|
@ -37,8 +37,8 @@ import (
|
|||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/capabilities"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/capabilities"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/record"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/record"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/cadvisor"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/cadvisor"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container"
|
||||||
kubecontainer "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container"
|
kubecontainer "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container"
|
||||||
@ -63,7 +63,7 @@ type TestKubelet struct {
|
|||||||
kubelet *Kubelet
|
kubelet *Kubelet
|
||||||
fakeDocker *dockertools.FakeDockerClient
|
fakeDocker *dockertools.FakeDockerClient
|
||||||
fakeCadvisor *cadvisor.Mock
|
fakeCadvisor *cadvisor.Mock
|
||||||
fakeKubeClient *client.Fake
|
fakeKubeClient *testclient.Fake
|
||||||
waitGroup *sync.WaitGroup
|
waitGroup *sync.WaitGroup
|
||||||
fakeMirrorClient *fakeMirrorClient
|
fakeMirrorClient *fakeMirrorClient
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ func newTestKubelet(t *testing.T) *TestKubelet {
|
|||||||
fakeDocker := &dockertools.FakeDockerClient{RemovedImages: util.StringSet{}}
|
fakeDocker := &dockertools.FakeDockerClient{RemovedImages: util.StringSet{}}
|
||||||
fakeDockerCache := dockertools.NewFakeDockerCache(fakeDocker)
|
fakeDockerCache := dockertools.NewFakeDockerCache(fakeDocker)
|
||||||
fakeRecorder := &record.FakeRecorder{}
|
fakeRecorder := &record.FakeRecorder{}
|
||||||
fakeKubeClient := &client.Fake{}
|
fakeKubeClient := &testclient.Fake{}
|
||||||
|
|
||||||
kubelet := &Kubelet{}
|
kubelet := &Kubelet{}
|
||||||
kubelet.dockerClient = fakeDocker
|
kubelet.dockerClient = fakeDocker
|
||||||
@ -3079,10 +3079,9 @@ func TestUpdateNewNodeStatus(t *testing.T) {
|
|||||||
testKubelet := newTestKubelet(t)
|
testKubelet := newTestKubelet(t)
|
||||||
kubelet := testKubelet.kubelet
|
kubelet := testKubelet.kubelet
|
||||||
kubeClient := testKubelet.fakeKubeClient
|
kubeClient := testKubelet.fakeKubeClient
|
||||||
mockCadvisor := testKubelet.fakeCadvisor
|
kubeClient.ReactFn = testclient.NewSimpleFake(&api.NodeList{Items: []api.Node{
|
||||||
kubeClient.MinionsList = api.NodeList{Items: []api.Node{
|
|
||||||
{ObjectMeta: api.ObjectMeta{Name: "testnode"}},
|
{ObjectMeta: api.ObjectMeta{Name: "testnode"}},
|
||||||
}}
|
}}).ReactFn
|
||||||
machineInfo := &cadvisorApi.MachineInfo{
|
machineInfo := &cadvisorApi.MachineInfo{
|
||||||
MachineID: "123",
|
MachineID: "123",
|
||||||
SystemUUID: "abc",
|
SystemUUID: "abc",
|
||||||
@ -3090,6 +3089,7 @@ func TestUpdateNewNodeStatus(t *testing.T) {
|
|||||||
NumCores: 2,
|
NumCores: 2,
|
||||||
MemoryCapacity: 1024,
|
MemoryCapacity: 1024,
|
||||||
}
|
}
|
||||||
|
mockCadvisor := testKubelet.fakeCadvisor
|
||||||
mockCadvisor.On("MachineInfo").Return(machineInfo, nil)
|
mockCadvisor.On("MachineInfo").Return(machineInfo, nil)
|
||||||
versionInfo := &cadvisorApi.VersionInfo{
|
versionInfo := &cadvisorApi.VersionInfo{
|
||||||
KernelVersion: "3.16.0-0.bpo.4-amd64",
|
KernelVersion: "3.16.0-0.bpo.4-amd64",
|
||||||
@ -3130,8 +3130,8 @@ func TestUpdateNewNodeStatus(t *testing.T) {
|
|||||||
if err := kubelet.updateNodeStatus(); err != nil {
|
if err := kubelet.updateNodeStatus(); err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
if len(kubeClient.Actions) != 2 {
|
if len(kubeClient.Actions) != 2 || kubeClient.Actions[1].Action != "update-node" {
|
||||||
t.Errorf("unexpected actions: %v", kubeClient.Actions)
|
t.Fatalf("unexpected actions: %v", kubeClient.Actions)
|
||||||
}
|
}
|
||||||
updatedNode, ok := kubeClient.Actions[1].Value.(*api.Node)
|
updatedNode, ok := kubeClient.Actions[1].Value.(*api.Node)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -3146,7 +3146,7 @@ func TestUpdateNewNodeStatus(t *testing.T) {
|
|||||||
updatedNode.Status.Conditions[0].LastProbeTime = util.Time{}
|
updatedNode.Status.Conditions[0].LastProbeTime = util.Time{}
|
||||||
updatedNode.Status.Conditions[0].LastTransitionTime = util.Time{}
|
updatedNode.Status.Conditions[0].LastTransitionTime = util.Time{}
|
||||||
if !reflect.DeepEqual(expectedNode, updatedNode) {
|
if !reflect.DeepEqual(expectedNode, updatedNode) {
|
||||||
t.Errorf("expected \n%v\n, got \n%v", expectedNode, updatedNode)
|
t.Errorf("unexpected objects: %s", util.ObjectDiff(expectedNode, updatedNode))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3154,8 +3154,7 @@ func TestUpdateExistingNodeStatus(t *testing.T) {
|
|||||||
testKubelet := newTestKubelet(t)
|
testKubelet := newTestKubelet(t)
|
||||||
kubelet := testKubelet.kubelet
|
kubelet := testKubelet.kubelet
|
||||||
kubeClient := testKubelet.fakeKubeClient
|
kubeClient := testKubelet.fakeKubeClient
|
||||||
mockCadvisor := testKubelet.fakeCadvisor
|
kubeClient.ReactFn = testclient.NewSimpleFake(&api.NodeList{Items: []api.Node{
|
||||||
kubeClient.MinionsList = api.NodeList{Items: []api.Node{
|
|
||||||
{
|
{
|
||||||
ObjectMeta: api.ObjectMeta{Name: "testnode"},
|
ObjectMeta: api.ObjectMeta{Name: "testnode"},
|
||||||
Spec: api.NodeSpec{},
|
Spec: api.NodeSpec{},
|
||||||
@ -3175,7 +3174,8 @@ func TestUpdateExistingNodeStatus(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}}
|
}}).ReactFn
|
||||||
|
mockCadvisor := testKubelet.fakeCadvisor
|
||||||
machineInfo := &cadvisorApi.MachineInfo{
|
machineInfo := &cadvisorApi.MachineInfo{
|
||||||
MachineID: "123",
|
MachineID: "123",
|
||||||
SystemUUID: "abc",
|
SystemUUID: "abc",
|
||||||
@ -3231,11 +3231,11 @@ func TestUpdateExistingNodeStatus(t *testing.T) {
|
|||||||
t.Errorf("unexpected object type")
|
t.Errorf("unexpected object type")
|
||||||
}
|
}
|
||||||
// Expect LastProbeTime to be updated to Now, while LastTransitionTime to be the same.
|
// Expect LastProbeTime to be updated to Now, while LastTransitionTime to be the same.
|
||||||
if reflect.DeepEqual(updatedNode.Status.Conditions[0].LastProbeTime, util.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC)) {
|
if reflect.DeepEqual(updatedNode.Status.Conditions[0].LastProbeTime.Rfc3339Copy().UTC(), util.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Time) {
|
||||||
t.Errorf("expected \n%v\n, got \n%v", util.Now(), util.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC))
|
t.Errorf("expected \n%v\n, got \n%v", util.Now(), util.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC))
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(updatedNode.Status.Conditions[0].LastTransitionTime, util.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC)) {
|
if !reflect.DeepEqual(updatedNode.Status.Conditions[0].LastTransitionTime.Rfc3339Copy().UTC(), util.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Time) {
|
||||||
t.Errorf("expected \n%v\n, got \n%v", updatedNode.Status.Conditions[0].LastTransitionTime,
|
t.Errorf("expected \n%#v\n, got \n%#v", updatedNode.Status.Conditions[0].LastTransitionTime.Rfc3339Copy(),
|
||||||
util.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC))
|
util.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC))
|
||||||
}
|
}
|
||||||
updatedNode.Status.Conditions[0].LastProbeTime = util.Time{}
|
updatedNode.Status.Conditions[0].LastProbeTime = util.Time{}
|
||||||
@ -3248,15 +3248,14 @@ func TestUpdateExistingNodeStatus(t *testing.T) {
|
|||||||
func TestUpdateNodeStatusError(t *testing.T) {
|
func TestUpdateNodeStatusError(t *testing.T) {
|
||||||
testKubelet := newTestKubelet(t)
|
testKubelet := newTestKubelet(t)
|
||||||
kubelet := testKubelet.kubelet
|
kubelet := testKubelet.kubelet
|
||||||
kubeClient := testKubelet.fakeKubeClient
|
|
||||||
// No matching node for the kubelet
|
// No matching node for the kubelet
|
||||||
kubeClient.MinionsList = api.NodeList{Items: []api.Node{}}
|
testKubelet.fakeKubeClient.ReactFn = testclient.NewSimpleFake(&api.NodeList{Items: []api.Node{}}).ReactFn
|
||||||
|
|
||||||
if err := kubelet.updateNodeStatus(); err == nil {
|
if err := kubelet.updateNodeStatus(); err == nil {
|
||||||
t.Errorf("unexpected non error: %v", err)
|
t.Errorf("unexpected non error: %v", err)
|
||||||
}
|
}
|
||||||
if len(kubeClient.Actions) != nodeStatusUpdateRetry {
|
if len(testKubelet.fakeKubeClient.Actions) != nodeStatusUpdateRetry {
|
||||||
t.Errorf("unexpected actions: %v", kubeClient.Actions)
|
t.Errorf("unexpected actions: %v", testKubelet.fakeKubeClient.Actions)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
var testPod *api.Pod = &api.Pod{
|
var testPod *api.Pod = &api.Pod{
|
||||||
@ -34,7 +35,7 @@ var testPod *api.Pod = &api.Pod{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newTestStatusManager() *statusManager {
|
func newTestStatusManager() *statusManager {
|
||||||
return newStatusManager(&client.Fake{})
|
return newStatusManager(&testclient.Fake{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateRandomMessage() string {
|
func generateRandomMessage() string {
|
||||||
@ -48,7 +49,7 @@ func getRandomPodStatus() api.PodStatus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func verifyActions(t *testing.T, kubeClient client.Interface, expectedActions []string) {
|
func verifyActions(t *testing.T, kubeClient client.Interface, expectedActions []string) {
|
||||||
actions := kubeClient.(*client.Fake).Actions
|
actions := kubeClient.(*testclient.Fake).Actions
|
||||||
if len(actions) != len(expectedActions) {
|
if len(actions) != len(expectedActions) {
|
||||||
t.Errorf("unexpected actions, got: %s expected: %s", actions, expectedActions)
|
t.Errorf("unexpected actions, got: %s expected: %s", actions, expectedActions)
|
||||||
return
|
return
|
||||||
|
@ -20,8 +20,8 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ func TestFinalized(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestFinalize(t *testing.T) {
|
func TestFinalize(t *testing.T) {
|
||||||
mockClient := &client.Fake{}
|
mockClient := &testclient.Fake{}
|
||||||
testNamespace := api.Namespace{
|
testNamespace := api.Namespace{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: "test",
|
Name: "test",
|
||||||
@ -58,7 +58,7 @@ func TestFinalize(t *testing.T) {
|
|||||||
if mockClient.Actions[0].Action != "finalize-namespace" {
|
if mockClient.Actions[0].Action != "finalize-namespace" {
|
||||||
t.Errorf("Expected finalize-namespace action %v", mockClient.Actions[0].Action)
|
t.Errorf("Expected finalize-namespace action %v", mockClient.Actions[0].Action)
|
||||||
}
|
}
|
||||||
finalizers := mockClient.Namespace.Spec.Finalizers
|
finalizers := mockClient.Actions[0].Value.(*api.Namespace).Spec.Finalizers
|
||||||
if len(finalizers) != 1 {
|
if len(finalizers) != 1 {
|
||||||
t.Errorf("There should be a single finalizer remaining")
|
t.Errorf("There should be a single finalizer remaining")
|
||||||
}
|
}
|
||||||
@ -68,7 +68,7 @@ func TestFinalize(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestSyncNamespaceThatIsTerminating(t *testing.T) {
|
func TestSyncNamespaceThatIsTerminating(t *testing.T) {
|
||||||
mockClient := &client.Fake{}
|
mockClient := &testclient.Fake{}
|
||||||
nm := NamespaceManager{kubeClient: mockClient, store: cache.NewStore(cache.MetaNamespaceKeyFunc)}
|
nm := NamespaceManager{kubeClient: mockClient, store: cache.NewStore(cache.MetaNamespaceKeyFunc)}
|
||||||
now := util.Now()
|
now := util.Now()
|
||||||
testNamespace := api.Namespace{
|
testNamespace := api.Namespace{
|
||||||
@ -92,7 +92,7 @@ func TestSyncNamespaceThatIsTerminating(t *testing.T) {
|
|||||||
"list-services",
|
"list-services",
|
||||||
"list-pods",
|
"list-pods",
|
||||||
"list-resourceQuotas",
|
"list-resourceQuotas",
|
||||||
"list-controllers",
|
"list-replicationControllers",
|
||||||
"list-secrets",
|
"list-secrets",
|
||||||
"list-limitRanges",
|
"list-limitRanges",
|
||||||
"list-events",
|
"list-events",
|
||||||
@ -108,7 +108,7 @@ func TestSyncNamespaceThatIsTerminating(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestSyncNamespaceThatIsActive(t *testing.T) {
|
func TestSyncNamespaceThatIsActive(t *testing.T) {
|
||||||
mockClient := &client.Fake{}
|
mockClient := &testclient.Fake{}
|
||||||
nm := NamespaceManager{kubeClient: mockClient, store: cache.NewStore(cache.MetaNamespaceKeyFunc)}
|
nm := NamespaceManager{kubeClient: mockClient, store: cache.NewStore(cache.MetaNamespaceKeyFunc)}
|
||||||
testNamespace := api.Namespace{
|
testNamespace := api.Namespace{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ func TestServices(t *testing.T) {
|
|||||||
service := api.Service{ObjectMeta: api.ObjectMeta{Name: "bar", ResourceVersion: "2"}}
|
service := api.Service{ObjectMeta: api.ObjectMeta{Name: "bar", ResourceVersion: "2"}}
|
||||||
|
|
||||||
fakeWatch := watch.NewFake()
|
fakeWatch := watch.NewFake()
|
||||||
fakeClient := &client.Fake{Watch: fakeWatch}
|
fakeClient := &testclient.Fake{Watch: fakeWatch}
|
||||||
services := make(chan ServiceUpdate)
|
services := make(chan ServiceUpdate)
|
||||||
source := SourceAPI{
|
source := SourceAPI{
|
||||||
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll), services: services},
|
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll), services: services},
|
||||||
@ -44,7 +44,7 @@ func TestServices(t *testing.T) {
|
|||||||
|
|
||||||
// test adding a service to the watch
|
// test adding a service to the watch
|
||||||
fakeWatch.Add(&service)
|
fakeWatch.Add(&service)
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"watch-services", "1"}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"watch-services", "1"}}) {
|
||||||
t.Errorf("expected call to watch-services, got %#v", fakeClient)
|
t.Errorf("expected call to watch-services, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ func TestServices(t *testing.T) {
|
|||||||
fakeWatch.Stop()
|
fakeWatch.Stop()
|
||||||
|
|
||||||
newFakeWatch.Add(&service)
|
newFakeWatch.Add(&service)
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"watch-services", "1"}, {"watch-services", "2"}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"watch-services", "1"}, {"watch-services", "2"}}) {
|
||||||
t.Errorf("expected call to watch-endpoints, got %#v", fakeClient)
|
t.Errorf("expected call to watch-endpoints, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -78,13 +78,13 @@ func TestServicesFromZero(t *testing.T) {
|
|||||||
|
|
||||||
fakeWatch := watch.NewFake()
|
fakeWatch := watch.NewFake()
|
||||||
fakeWatch.Stop()
|
fakeWatch.Stop()
|
||||||
fakeClient := &client.Fake{Watch: fakeWatch}
|
fakeClient := testclient.NewSimpleFake(&api.ServiceList{
|
||||||
fakeClient.ServiceList = api.ServiceList{
|
|
||||||
ListMeta: api.ListMeta{ResourceVersion: "2"},
|
ListMeta: api.ListMeta{ResourceVersion: "2"},
|
||||||
Items: []api.Service{
|
Items: []api.Service{
|
||||||
service,
|
service,
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
|
fakeClient.Watch = fakeWatch
|
||||||
services := make(chan ServiceUpdate)
|
services := make(chan ServiceUpdate)
|
||||||
source := SourceAPI{
|
source := SourceAPI{
|
||||||
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll), services: services},
|
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll), services: services},
|
||||||
@ -108,13 +108,13 @@ func TestServicesFromZero(t *testing.T) {
|
|||||||
if resourceVersion != "2" {
|
if resourceVersion != "2" {
|
||||||
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"list-services", nil}, {"watch-services", "2"}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"list-services", nil}, {"watch-services", "2"}}) {
|
||||||
t.Errorf("unexpected actions, got %#v", fakeClient)
|
t.Errorf("unexpected actions, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestServicesError(t *testing.T) {
|
func TestServicesError(t *testing.T) {
|
||||||
fakeClient := &client.Fake{Err: errors.New("test")}
|
fakeClient := &testclient.Fake{Err: errors.New("test")}
|
||||||
services := make(chan ServiceUpdate)
|
services := make(chan ServiceUpdate)
|
||||||
source := SourceAPI{
|
source := SourceAPI{
|
||||||
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll), services: services},
|
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll), services: services},
|
||||||
@ -131,13 +131,13 @@ func TestServicesError(t *testing.T) {
|
|||||||
if resourceVersion != "" {
|
if resourceVersion != "" {
|
||||||
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"watch-services", "1"}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"watch-services", "1"}}) {
|
||||||
t.Errorf("unexpected actions, got %#v", fakeClient)
|
t.Errorf("unexpected actions, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestServicesErrorTimeout(t *testing.T) {
|
func TestServicesErrorTimeout(t *testing.T) {
|
||||||
fakeClient := &client.Fake{Err: errors.New("use of closed network connection")}
|
fakeClient := &testclient.Fake{Err: errors.New("use of closed network connection")}
|
||||||
services := make(chan ServiceUpdate)
|
services := make(chan ServiceUpdate)
|
||||||
source := SourceAPI{
|
source := SourceAPI{
|
||||||
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll), services: services},
|
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll), services: services},
|
||||||
@ -154,13 +154,13 @@ func TestServicesErrorTimeout(t *testing.T) {
|
|||||||
if resourceVersion != "1" {
|
if resourceVersion != "1" {
|
||||||
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"watch-services", "1"}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"watch-services", "1"}}) {
|
||||||
t.Errorf("unexpected actions, got %#v", fakeClient)
|
t.Errorf("unexpected actions, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestServicesFromZeroError(t *testing.T) {
|
func TestServicesFromZeroError(t *testing.T) {
|
||||||
fakeClient := &client.Fake{Err: errors.New("test")}
|
fakeClient := &testclient.Fake{Err: errors.New("test")}
|
||||||
services := make(chan ServiceUpdate)
|
services := make(chan ServiceUpdate)
|
||||||
source := SourceAPI{
|
source := SourceAPI{
|
||||||
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll), services: services},
|
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll), services: services},
|
||||||
@ -177,7 +177,7 @@ func TestServicesFromZeroError(t *testing.T) {
|
|||||||
if resourceVersion != "" {
|
if resourceVersion != "" {
|
||||||
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"list-services", nil}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"list-services", nil}}) {
|
||||||
t.Errorf("unexpected actions, got %#v", fakeClient)
|
t.Errorf("unexpected actions, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -192,7 +192,7 @@ func TestEndpoints(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fakeWatch := watch.NewFake()
|
fakeWatch := watch.NewFake()
|
||||||
fakeClient := &client.Fake{Watch: fakeWatch}
|
fakeClient := &testclient.Fake{Watch: fakeWatch}
|
||||||
endpoints := make(chan EndpointsUpdate)
|
endpoints := make(chan EndpointsUpdate)
|
||||||
source := SourceAPI{
|
source := SourceAPI{
|
||||||
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll)},
|
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll)},
|
||||||
@ -206,7 +206,7 @@ func TestEndpoints(t *testing.T) {
|
|||||||
|
|
||||||
// test adding an endpoint to the watch
|
// test adding an endpoint to the watch
|
||||||
fakeWatch.Add(&endpoint)
|
fakeWatch.Add(&endpoint)
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"watch-endpoints", "1"}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"watch-endpoints", "1"}}) {
|
||||||
t.Errorf("expected call to watch-endpoints, got %#v", fakeClient)
|
t.Errorf("expected call to watch-endpoints, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,7 +230,7 @@ func TestEndpoints(t *testing.T) {
|
|||||||
fakeWatch.Stop()
|
fakeWatch.Stop()
|
||||||
|
|
||||||
newFakeWatch.Add(&endpoint)
|
newFakeWatch.Add(&endpoint)
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"watch-endpoints", "1"}, {"watch-endpoints", "2"}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"watch-endpoints", "1"}, {"watch-endpoints", "2"}}) {
|
||||||
t.Errorf("expected call to watch-endpoints, got %#v", fakeClient)
|
t.Errorf("expected call to watch-endpoints, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -246,13 +246,13 @@ func TestEndpointsFromZero(t *testing.T) {
|
|||||||
|
|
||||||
fakeWatch := watch.NewFake()
|
fakeWatch := watch.NewFake()
|
||||||
fakeWatch.Stop()
|
fakeWatch.Stop()
|
||||||
fakeClient := &client.Fake{Watch: fakeWatch}
|
fakeClient := testclient.NewSimpleFake(&api.EndpointsList{
|
||||||
fakeClient.EndpointsList = api.EndpointsList{
|
|
||||||
ListMeta: api.ListMeta{ResourceVersion: "2"},
|
ListMeta: api.ListMeta{ResourceVersion: "2"},
|
||||||
Items: []api.Endpoints{
|
Items: []api.Endpoints{
|
||||||
endpoint,
|
endpoint,
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
|
fakeClient.Watch = fakeWatch
|
||||||
endpoints := make(chan EndpointsUpdate)
|
endpoints := make(chan EndpointsUpdate)
|
||||||
source := SourceAPI{
|
source := SourceAPI{
|
||||||
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll)},
|
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll)},
|
||||||
@ -276,13 +276,13 @@ func TestEndpointsFromZero(t *testing.T) {
|
|||||||
if resourceVersion != "2" {
|
if resourceVersion != "2" {
|
||||||
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"list-endpoints", nil}, {"watch-endpoints", "2"}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"list-endpoints", nil}, {"watch-endpoints", "2"}}) {
|
||||||
t.Errorf("unexpected actions, got %#v", fakeClient)
|
t.Errorf("unexpected actions, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEndpointsError(t *testing.T) {
|
func TestEndpointsError(t *testing.T) {
|
||||||
fakeClient := &client.Fake{Err: errors.New("test")}
|
fakeClient := &testclient.Fake{Err: errors.New("test")}
|
||||||
endpoints := make(chan EndpointsUpdate)
|
endpoints := make(chan EndpointsUpdate)
|
||||||
source := SourceAPI{
|
source := SourceAPI{
|
||||||
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll)},
|
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll)},
|
||||||
@ -299,13 +299,13 @@ func TestEndpointsError(t *testing.T) {
|
|||||||
if resourceVersion != "" {
|
if resourceVersion != "" {
|
||||||
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"watch-endpoints", "1"}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"watch-endpoints", "1"}}) {
|
||||||
t.Errorf("unexpected actions, got %#v", fakeClient)
|
t.Errorf("unexpected actions, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEndpointsErrorTimeout(t *testing.T) {
|
func TestEndpointsErrorTimeout(t *testing.T) {
|
||||||
fakeClient := &client.Fake{Err: errors.New("use of closed network connection")}
|
fakeClient := &testclient.Fake{Err: errors.New("use of closed network connection")}
|
||||||
endpoints := make(chan EndpointsUpdate)
|
endpoints := make(chan EndpointsUpdate)
|
||||||
source := SourceAPI{
|
source := SourceAPI{
|
||||||
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll)},
|
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll)},
|
||||||
@ -322,13 +322,13 @@ func TestEndpointsErrorTimeout(t *testing.T) {
|
|||||||
if resourceVersion != "1" {
|
if resourceVersion != "1" {
|
||||||
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"watch-endpoints", "1"}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"watch-endpoints", "1"}}) {
|
||||||
t.Errorf("unexpected actions, got %#v", fakeClient)
|
t.Errorf("unexpected actions, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEndpointsFromZeroError(t *testing.T) {
|
func TestEndpointsFromZeroError(t *testing.T) {
|
||||||
fakeClient := &client.Fake{Err: errors.New("test")}
|
fakeClient := &testclient.Fake{Err: errors.New("test")}
|
||||||
endpoints := make(chan EndpointsUpdate)
|
endpoints := make(chan EndpointsUpdate)
|
||||||
source := SourceAPI{
|
source := SourceAPI{
|
||||||
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll)},
|
s: servicesReflector{watcher: fakeClient.Services(api.NamespaceAll)},
|
||||||
@ -345,7 +345,7 @@ func TestEndpointsFromZeroError(t *testing.T) {
|
|||||||
if resourceVersion != "" {
|
if resourceVersion != "" {
|
||||||
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
t.Errorf("unexpected resource version, got %#v", resourceVersion)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(fakeClient.Actions, []client.FakeAction{{"list-endpoints", nil}}) {
|
if !reflect.DeepEqual(fakeClient.Actions, []testclient.FakeAction{{"list-endpoints", nil}}) {
|
||||||
t.Errorf("unexpected actions, got %#v", fakeClient)
|
t.Errorf("unexpected actions, got %#v", fakeClient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ package controller
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/rest"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/rest"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
|
||||||
|
@ -21,7 +21,7 @@ import (
|
|||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -150,17 +150,15 @@ func TestSyncResourceQuota(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
kubeClient := &client.Fake{
|
kubeClient := testclient.NewSimpleFake(&podList, "a)
|
||||||
PodsList: podList,
|
|
||||||
}
|
|
||||||
|
|
||||||
resourceQuotaManager := NewResourceQuotaManager(kubeClient)
|
resourceQuotaManager := NewResourceQuotaManager(kubeClient)
|
||||||
err := resourceQuotaManager.syncResourceQuota(quota)
|
err := resourceQuotaManager.syncResourceQuota(quota)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Unexpected error %v", err)
|
t.Fatalf("Unexpected error %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
usage := kubeClient.ResourceQuotaStatus
|
usage := kubeClient.Actions[1].Value.(*api.ResourceQuota)
|
||||||
|
|
||||||
// ensure hard and used limits are what we expected
|
// ensure hard and used limits are what we expected
|
||||||
for k, v := range expectedUsage.Status.Hard {
|
for k, v := range expectedUsage.Status.Hard {
|
||||||
|
@ -26,6 +26,7 @@ import (
|
|||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/types"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/types"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/mount"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/mount"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/volume"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/volume"
|
||||||
@ -86,9 +87,7 @@ func TestPlugin(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
client := &client.Fake{
|
client := testclient.NewSimpleFake(&secret)
|
||||||
Secret: secret,
|
|
||||||
}
|
|
||||||
|
|
||||||
pluginMgr := volume.VolumePluginMgr{}
|
pluginMgr := volume.VolumePluginMgr{}
|
||||||
pluginMgr.InitPlugins(ProbeVolumePlugins(), newTestHost(t, client))
|
pluginMgr.InitPlugins(ProbeVolumePlugins(), newTestHost(t, client))
|
||||||
|
@ -22,14 +22,14 @@ import (
|
|||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/admission"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/admission"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestAdmission verifies a namespace is created on create requests for namespace managed resources
|
// TestAdmission verifies a namespace is created on create requests for namespace managed resources
|
||||||
func TestAdmission(t *testing.T) {
|
func TestAdmission(t *testing.T) {
|
||||||
namespace := "test"
|
namespace := "test"
|
||||||
mockClient := &client.Fake{}
|
mockClient := &testclient.Fake{}
|
||||||
handler := &provision{
|
handler := &provision{
|
||||||
client: mockClient,
|
client: mockClient,
|
||||||
store: cache.NewStore(cache.MetaNamespaceKeyFunc),
|
store: cache.NewStore(cache.MetaNamespaceKeyFunc),
|
||||||
@ -56,7 +56,7 @@ func TestAdmission(t *testing.T) {
|
|||||||
// TestAdmissionNamespaceExists verifies that no client call is made when a namespace already exists
|
// TestAdmissionNamespaceExists verifies that no client call is made when a namespace already exists
|
||||||
func TestAdmissionNamespaceExists(t *testing.T) {
|
func TestAdmissionNamespaceExists(t *testing.T) {
|
||||||
namespace := "test"
|
namespace := "test"
|
||||||
mockClient := &client.Fake{}
|
mockClient := &testclient.Fake{}
|
||||||
store := cache.NewStore(cache.MetaNamespaceKeyFunc)
|
store := cache.NewStore(cache.MetaNamespaceKeyFunc)
|
||||||
store.Add(&api.Namespace{
|
store.Add(&api.Namespace{
|
||||||
ObjectMeta: api.ObjectMeta{Name: namespace},
|
ObjectMeta: api.ObjectMeta{Name: namespace},
|
||||||
@ -84,7 +84,7 @@ func TestAdmissionNamespaceExists(t *testing.T) {
|
|||||||
// TestIgnoreAdmission validates that a request is ignored if its not a create
|
// TestIgnoreAdmission validates that a request is ignored if its not a create
|
||||||
func TestIgnoreAdmission(t *testing.T) {
|
func TestIgnoreAdmission(t *testing.T) {
|
||||||
namespace := "test"
|
namespace := "test"
|
||||||
mockClient := &client.Fake{}
|
mockClient := &testclient.Fake{}
|
||||||
handler := &provision{
|
handler := &provision{
|
||||||
client: mockClient,
|
client: mockClient,
|
||||||
store: cache.NewStore(cache.MetaNamespaceKeyFunc),
|
store: cache.NewStore(cache.MetaNamespaceKeyFunc),
|
||||||
@ -108,7 +108,7 @@ func TestIgnoreAdmission(t *testing.T) {
|
|||||||
// TestAdmissionNamespaceExistsUnknownToHandler
|
// TestAdmissionNamespaceExistsUnknownToHandler
|
||||||
func TestAdmissionNamespaceExistsUnknownToHandler(t *testing.T) {
|
func TestAdmissionNamespaceExistsUnknownToHandler(t *testing.T) {
|
||||||
namespace := "test"
|
namespace := "test"
|
||||||
mockClient := &client.Fake{
|
mockClient := &testclient.Fake{
|
||||||
Err: errors.NewAlreadyExists("namespaces", namespace),
|
Err: errors.NewAlreadyExists("namespaces", namespace),
|
||||||
}
|
}
|
||||||
store := cache.NewStore(cache.MetaNamespaceKeyFunc)
|
store := cache.NewStore(cache.MetaNamespaceKeyFunc)
|
||||||
|
@ -21,8 +21,8 @@ import (
|
|||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/admission"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/admission"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestAdmission
|
// TestAdmission
|
||||||
@ -38,7 +38,7 @@ func TestAdmission(t *testing.T) {
|
|||||||
}
|
}
|
||||||
store := cache.NewStore(cache.MetaNamespaceIndexFunc)
|
store := cache.NewStore(cache.MetaNamespaceIndexFunc)
|
||||||
store.Add(namespaceObj)
|
store.Add(namespaceObj)
|
||||||
mockClient := &client.Fake{}
|
mockClient := &testclient.Fake{}
|
||||||
handler := &lifecycle{
|
handler := &lifecycle{
|
||||||
client: mockClient,
|
client: mockClient,
|
||||||
store: store,
|
store: store,
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/admission"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/admission"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getResourceRequirements(cpu, memory string) api.ResourceRequirements {
|
func getResourceRequirements(cpu, memory string) api.ResourceRequirements {
|
||||||
@ -40,7 +40,7 @@ func getResourceRequirements(cpu, memory string) api.ResourceRequirements {
|
|||||||
|
|
||||||
func TestAdmissionIgnoresDelete(t *testing.T) {
|
func TestAdmissionIgnoresDelete(t *testing.T) {
|
||||||
namespace := "default"
|
namespace := "default"
|
||||||
handler := NewResourceQuota(&client.Fake{})
|
handler := NewResourceQuota(&testclient.Fake{})
|
||||||
err := handler.Admit(admission.NewAttributesRecord(nil, namespace, "pods", "DELETE"))
|
err := handler.Admit(admission.NewAttributesRecord(nil, namespace, "pods", "DELETE"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("ResourceQuota should admit all deletes", err)
|
t.Errorf("ResourceQuota should admit all deletes", err)
|
||||||
@ -49,19 +49,17 @@ func TestAdmissionIgnoresDelete(t *testing.T) {
|
|||||||
|
|
||||||
func TestIncrementUsagePods(t *testing.T) {
|
func TestIncrementUsagePods(t *testing.T) {
|
||||||
namespace := "default"
|
namespace := "default"
|
||||||
client := &client.Fake{
|
client := testclient.NewSimpleFake(&api.PodList{
|
||||||
PodsList: api.PodList{
|
Items: []api.Pod{
|
||||||
Items: []api.Pod{
|
{
|
||||||
{
|
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
||||||
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
Spec: api.PodSpec{
|
||||||
Spec: api.PodSpec{
|
Volumes: []api.Volume{{Name: "vol"}},
|
||||||
Volumes: []api.Volume{{Name: "vol"}},
|
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
||||||
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
status := &api.ResourceQuotaStatus{
|
status := &api.ResourceQuotaStatus{
|
||||||
Hard: api.ResourceList{},
|
Hard: api.ResourceList{},
|
||||||
Used: api.ResourceList{},
|
Used: api.ResourceList{},
|
||||||
@ -84,19 +82,17 @@ func TestIncrementUsagePods(t *testing.T) {
|
|||||||
|
|
||||||
func TestIncrementUsageMemory(t *testing.T) {
|
func TestIncrementUsageMemory(t *testing.T) {
|
||||||
namespace := "default"
|
namespace := "default"
|
||||||
client := &client.Fake{
|
client := testclient.NewSimpleFake(&api.PodList{
|
||||||
PodsList: api.PodList{
|
Items: []api.Pod{
|
||||||
Items: []api.Pod{
|
{
|
||||||
{
|
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
||||||
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
Spec: api.PodSpec{
|
||||||
Spec: api.PodSpec{
|
Volumes: []api.Volume{{Name: "vol"}},
|
||||||
Volumes: []api.Volume{{Name: "vol"}},
|
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
||||||
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
status := &api.ResourceQuotaStatus{
|
status := &api.ResourceQuotaStatus{
|
||||||
Hard: api.ResourceList{},
|
Hard: api.ResourceList{},
|
||||||
Used: api.ResourceList{},
|
Used: api.ResourceList{},
|
||||||
@ -127,19 +123,17 @@ func TestIncrementUsageMemory(t *testing.T) {
|
|||||||
|
|
||||||
func TestExceedUsageMemory(t *testing.T) {
|
func TestExceedUsageMemory(t *testing.T) {
|
||||||
namespace := "default"
|
namespace := "default"
|
||||||
client := &client.Fake{
|
client := testclient.NewSimpleFake(&api.PodList{
|
||||||
PodsList: api.PodList{
|
Items: []api.Pod{
|
||||||
Items: []api.Pod{
|
{
|
||||||
{
|
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
||||||
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
Spec: api.PodSpec{
|
||||||
Spec: api.PodSpec{
|
Volumes: []api.Volume{{Name: "vol"}},
|
||||||
Volumes: []api.Volume{{Name: "vol"}},
|
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
||||||
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
status := &api.ResourceQuotaStatus{
|
status := &api.ResourceQuotaStatus{
|
||||||
Hard: api.ResourceList{},
|
Hard: api.ResourceList{},
|
||||||
Used: api.ResourceList{},
|
Used: api.ResourceList{},
|
||||||
@ -162,19 +156,17 @@ func TestExceedUsageMemory(t *testing.T) {
|
|||||||
|
|
||||||
func TestIncrementUsageCPU(t *testing.T) {
|
func TestIncrementUsageCPU(t *testing.T) {
|
||||||
namespace := "default"
|
namespace := "default"
|
||||||
client := &client.Fake{
|
client := testclient.NewSimpleFake(&api.PodList{
|
||||||
PodsList: api.PodList{
|
Items: []api.Pod{
|
||||||
Items: []api.Pod{
|
{
|
||||||
{
|
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
||||||
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
Spec: api.PodSpec{
|
||||||
Spec: api.PodSpec{
|
Volumes: []api.Volume{{Name: "vol"}},
|
||||||
Volumes: []api.Volume{{Name: "vol"}},
|
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
||||||
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
status := &api.ResourceQuotaStatus{
|
status := &api.ResourceQuotaStatus{
|
||||||
Hard: api.ResourceList{},
|
Hard: api.ResourceList{},
|
||||||
Used: api.ResourceList{},
|
Used: api.ResourceList{},
|
||||||
@ -205,19 +197,17 @@ func TestIncrementUsageCPU(t *testing.T) {
|
|||||||
|
|
||||||
func TestExceedUsageCPU(t *testing.T) {
|
func TestExceedUsageCPU(t *testing.T) {
|
||||||
namespace := "default"
|
namespace := "default"
|
||||||
client := &client.Fake{
|
client := testclient.NewSimpleFake(&api.PodList{
|
||||||
PodsList: api.PodList{
|
Items: []api.Pod{
|
||||||
Items: []api.Pod{
|
{
|
||||||
{
|
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
||||||
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
Spec: api.PodSpec{
|
||||||
Spec: api.PodSpec{
|
Volumes: []api.Volume{{Name: "vol"}},
|
||||||
Volumes: []api.Volume{{Name: "vol"}},
|
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
||||||
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
status := &api.ResourceQuotaStatus{
|
status := &api.ResourceQuotaStatus{
|
||||||
Hard: api.ResourceList{},
|
Hard: api.ResourceList{},
|
||||||
Used: api.ResourceList{},
|
Used: api.ResourceList{},
|
||||||
@ -240,19 +230,17 @@ func TestExceedUsageCPU(t *testing.T) {
|
|||||||
|
|
||||||
func TestExceedUsagePods(t *testing.T) {
|
func TestExceedUsagePods(t *testing.T) {
|
||||||
namespace := "default"
|
namespace := "default"
|
||||||
client := &client.Fake{
|
client := testclient.NewSimpleFake(&api.PodList{
|
||||||
PodsList: api.PodList{
|
Items: []api.Pod{
|
||||||
Items: []api.Pod{
|
{
|
||||||
{
|
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
||||||
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
Spec: api.PodSpec{
|
||||||
Spec: api.PodSpec{
|
Volumes: []api.Volume{{Name: "vol"}},
|
||||||
Volumes: []api.Volume{{Name: "vol"}},
|
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
||||||
Containers: []api.Container{{Name: "ctr", Image: "image", Resources: getResourceRequirements("100m", "1Gi")}},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
status := &api.ResourceQuotaStatus{
|
status := &api.ResourceQuotaStatus{
|
||||||
Hard: api.ResourceList{},
|
Hard: api.ResourceList{},
|
||||||
Used: api.ResourceList{},
|
Used: api.ResourceList{},
|
||||||
@ -268,15 +256,13 @@ func TestExceedUsagePods(t *testing.T) {
|
|||||||
|
|
||||||
func TestIncrementUsageServices(t *testing.T) {
|
func TestIncrementUsageServices(t *testing.T) {
|
||||||
namespace := "default"
|
namespace := "default"
|
||||||
client := &client.Fake{
|
client := testclient.NewSimpleFake(&api.ServiceList{
|
||||||
ServiceList: api.ServiceList{
|
Items: []api.Service{
|
||||||
Items: []api.Service{
|
{
|
||||||
{
|
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
||||||
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
status := &api.ResourceQuotaStatus{
|
status := &api.ResourceQuotaStatus{
|
||||||
Hard: api.ResourceList{},
|
Hard: api.ResourceList{},
|
||||||
Used: api.ResourceList{},
|
Used: api.ResourceList{},
|
||||||
@ -299,15 +285,13 @@ func TestIncrementUsageServices(t *testing.T) {
|
|||||||
|
|
||||||
func TestExceedUsageServices(t *testing.T) {
|
func TestExceedUsageServices(t *testing.T) {
|
||||||
namespace := "default"
|
namespace := "default"
|
||||||
client := &client.Fake{
|
client := testclient.NewSimpleFake(&api.ServiceList{
|
||||||
ServiceList: api.ServiceList{
|
Items: []api.Service{
|
||||||
Items: []api.Service{
|
{
|
||||||
{
|
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
||||||
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
status := &api.ResourceQuotaStatus{
|
status := &api.ResourceQuotaStatus{
|
||||||
Hard: api.ResourceList{},
|
Hard: api.ResourceList{},
|
||||||
Used: api.ResourceList{},
|
Used: api.ResourceList{},
|
||||||
@ -323,15 +307,13 @@ func TestExceedUsageServices(t *testing.T) {
|
|||||||
|
|
||||||
func TestIncrementUsageReplicationControllers(t *testing.T) {
|
func TestIncrementUsageReplicationControllers(t *testing.T) {
|
||||||
namespace := "default"
|
namespace := "default"
|
||||||
client := &client.Fake{
|
client := testclient.NewSimpleFake(&api.ReplicationControllerList{
|
||||||
CtrlList: api.ReplicationControllerList{
|
Items: []api.ReplicationController{
|
||||||
Items: []api.ReplicationController{
|
{
|
||||||
{
|
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
||||||
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
status := &api.ResourceQuotaStatus{
|
status := &api.ResourceQuotaStatus{
|
||||||
Hard: api.ResourceList{},
|
Hard: api.ResourceList{},
|
||||||
Used: api.ResourceList{},
|
Used: api.ResourceList{},
|
||||||
@ -354,15 +336,13 @@ func TestIncrementUsageReplicationControllers(t *testing.T) {
|
|||||||
|
|
||||||
func TestExceedUsageReplicationControllers(t *testing.T) {
|
func TestExceedUsageReplicationControllers(t *testing.T) {
|
||||||
namespace := "default"
|
namespace := "default"
|
||||||
client := &client.Fake{
|
client := testclient.NewSimpleFake(&api.ReplicationControllerList{
|
||||||
CtrlList: api.ReplicationControllerList{
|
Items: []api.ReplicationController{
|
||||||
Items: []api.ReplicationController{
|
{
|
||||||
{
|
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
||||||
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: namespace},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
status := &api.ResourceQuotaStatus{
|
status := &api.ResourceQuotaStatus{
|
||||||
Hard: api.ResourceList{},
|
Hard: api.ResourceList{},
|
||||||
Used: api.ResourceList{},
|
Used: api.ResourceList{},
|
||||||
|
Loading…
Reference in New Issue
Block a user