Commit 11f97335 authored by Brian Grant's avatar Brian Grant

Merge pull request #5587 from nikhiljindal/enable3

Updating integration tests to test both API versions - v1beta1 and 3
parents 97b806e3 7e36bbab
{
"kind": "ReplicationController",
"apiVersion": "v1beta3",
"metadata": {
"name": "nginx-controller",
"labels": {"name": "nginx"}
},
"spec": {
"replicas": 2,
"selector": {"name": "nginx"},
"template": {
"metadata": {
"labels": {"name": "nginx"}
},
"spec": {
"containers": [{
"name": "nginx",
"image": "dockerfile/nginx",
"ports": [{"containerPort": 80}]
}]
}
}
}
}
...@@ -229,7 +229,6 @@ func (s *APIServer) Run(_ []string) error { ...@@ -229,7 +229,6 @@ func (s *APIServer) Run(_ []string) error {
admissionController := admission.NewFromPlugins(client, admissionControlPluginNames, s.AdmissionControlConfigFile) admissionController := admission.NewFromPlugins(client, admissionControlPluginNames, s.AdmissionControlConfigFile)
config := &master.Config{ config := &master.Config{
Client: client,
Cloud: cloud, Cloud: cloud,
EtcdHelper: helper, EtcdHelper: helper,
EventTTL: s.EventTTL, EventTTL: s.EventTTL,
......
...@@ -76,7 +76,7 @@ func (h *delegateHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { ...@@ -76,7 +76,7 @@ func (h *delegateHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
} }
// RunApiServer starts an API server in a go routine. // RunApiServer starts an API server in a go routine.
func runApiServer(cl *client.Client, etcdClient tools.EtcdClient, addr net.IP, port int, masterServiceNamespace string) { func runApiServer(etcdClient tools.EtcdClient, addr net.IP, port int, masterServiceNamespace string) {
handler := delegateHandler{} handler := delegateHandler{}
helper, err := master.NewEtcdHelper(etcdClient, "") helper, err := master.NewEtcdHelper(etcdClient, "")
...@@ -86,7 +86,6 @@ func runApiServer(cl *client.Client, etcdClient tools.EtcdClient, addr net.IP, p ...@@ -86,7 +86,6 @@ func runApiServer(cl *client.Client, etcdClient tools.EtcdClient, addr net.IP, p
// Create a master and install handlers into mux. // Create a master and install handlers into mux.
m := master.New(&master.Config{ m := master.New(&master.Config{
Client: cl,
EtcdHelper: helper, EtcdHelper: helper,
KubeletClient: &client.HTTPKubeletClient{ KubeletClient: &client.HTTPKubeletClient{
Client: http.DefaultClient, Client: http.DefaultClient,
...@@ -142,7 +141,7 @@ func runControllerManager(machineList []string, cl *client.Client, nodeMilliCPU, ...@@ -142,7 +141,7 @@ func runControllerManager(machineList []string, cl *client.Client, nodeMilliCPU,
func startComponents(etcdClient tools.EtcdClient, cl *client.Client, addr net.IP, port int) { func startComponents(etcdClient tools.EtcdClient, cl *client.Client, addr net.IP, port int) {
machineList := []string{"localhost"} machineList := []string{"localhost"}
runApiServer(cl, etcdClient, addr, port, *masterServiceNamespace) runApiServer(etcdClient, addr, port, *masterServiceNamespace)
runScheduler(cl) runScheduler(cl)
runControllerManager(machineList, cl, *nodeMilliCPU, *nodeMemory) runControllerManager(machineList, cl, *nodeMilliCPU, *nodeMemory)
......
...@@ -100,7 +100,8 @@ func TestExampleObjectSchemas(t *testing.T) { ...@@ -100,7 +100,8 @@ func TestExampleObjectSchemas(t *testing.T) {
"pod": &api.Pod{}, "pod": &api.Pod{},
}, },
"../cmd/integration": { "../cmd/integration": {
"controller": &api.ReplicationController{}, "v1beta1-controller": &api.ReplicationController{},
"v1beta3-controller": &api.ReplicationController{},
}, },
"../examples/guestbook": { "../examples/guestbook": {
"frontend-controller": &api.ReplicationController{}, "frontend-controller": &api.ReplicationController{},
......
...@@ -30,20 +30,25 @@ cleanup() { ...@@ -30,20 +30,25 @@ cleanup() {
kube::log::status "Integration test cleanup complete" kube::log::status "Integration test cleanup complete"
} }
"${KUBE_ROOT}/hack/build-go.sh" "$@" cmd/integration runTests() {
kube::etcd::start
# Run cleanup to stop etcd on interrupt or other kill signal. kube::log::status "Running integration test cases"
trap cleanup EXIT KUBE_GOFLAGS="-tags 'integration no-docker' " \
KUBE_RACE="-race" \
"${KUBE_ROOT}/hack/test-go.sh" test/integration
kube::log::status "Running integration test scenario"
kube::etcd::start "${KUBE_OUTPUT_HOSTBIN}/integration" --v=2 --apiVersion="$1"
kube::log::status "Running integration test cases" cleanup
KUBE_GOFLAGS="-tags 'integration no-docker' " \ }
KUBE_RACE="-race" \
"${KUBE_ROOT}/hack/test-go.sh" test/integration
kube::log::status "Running integration test scenario" "${KUBE_ROOT}/hack/build-go.sh" "$@" cmd/integration
"${KUBE_OUTPUT_HOSTBIN}/integration" --v=2 # Run cleanup to stop etcd on interrupt or other kill signal.
trap cleanup EXIT
cleanup runTests "v1beta1"
runTests "v1beta3"
...@@ -89,7 +89,7 @@ type Request struct { ...@@ -89,7 +89,7 @@ type Request struct {
baseURL *url.URL baseURL *url.URL
codec runtime.Codec codec runtime.Codec
// If true, add "?namespace=<namespace>" as a query parameter, if false put ns/<namespace> in path // If true, add "?namespace=<namespace>" as a query parameter, if false put namespaces/<namespace> in path
// Query parameter is considered legacy behavior // Query parameter is considered legacy behavior
namespaceInQuery bool namespaceInQuery bool
// If true, lowercase resource prior to inserting into a path, if false, leave it as is. Preserving // If true, lowercase resource prior to inserting into a path, if false, leave it as is. Preserving
......
...@@ -78,7 +78,13 @@ func (c *services) Get(name string) (result *api.Service, err error) { ...@@ -78,7 +78,13 @@ func (c *services) Get(name string) (result *api.Service, err error) {
// Create creates a new service. // Create creates a new service.
func (c *services) Create(svc *api.Service) (result *api.Service, err error) { func (c *services) Create(svc *api.Service) (result *api.Service, err error) {
result = &api.Service{} result = &api.Service{}
err = c.r.Post().Namespace(c.ns).Resource("services").Body(svc).Do().Into(result) // v1beta3 does not allow POST without a namespace.
needNamespace := !api.PreV1Beta3(c.r.APIVersion())
namespace := c.ns
if needNamespace && len(namespace) == 0 {
namespace = api.NamespaceDefault
}
err = c.r.Post().Namespace(namespace).Resource("services").Body(svc).Do().Into(result)
return return
} }
...@@ -89,12 +95,24 @@ func (c *services) Update(svc *api.Service) (result *api.Service, err error) { ...@@ -89,12 +95,24 @@ func (c *services) Update(svc *api.Service) (result *api.Service, err error) {
err = fmt.Errorf("invalid update object, missing resource version: %v", svc) err = fmt.Errorf("invalid update object, missing resource version: %v", svc)
return return
} }
err = c.r.Put().Namespace(c.ns).Resource("services").Name(svc.Name).Body(svc).Do().Into(result) // v1beta3 does not allow PUT without a namespace.
needNamespace := !api.PreV1Beta3(c.r.APIVersion())
namespace := c.ns
if needNamespace && len(namespace) == 0 {
namespace = api.NamespaceDefault
}
err = c.r.Put().Namespace(namespace).Resource("services").Name(svc.Name).Body(svc).Do().Into(result)
return return
} }
// Delete deletes an existing service. // Delete deletes an existing service.
func (c *services) Delete(name string) error { func (c *services) Delete(name string) error {
// v1beta3 does not allow DELETE without a namespace.
needNamespace := !api.PreV1Beta3(c.r.APIVersion())
namespace := c.ns
if needNamespace && len(namespace) == 0 {
namespace = api.NamespaceDefault
}
return c.r.Delete().Namespace(c.ns).Resource("services").Name(name).Do().Error() return c.r.Delete().Namespace(c.ns).Resource("services").Name(name).Do().Error()
} }
......
...@@ -65,7 +65,6 @@ import ( ...@@ -65,7 +65,6 @@ import (
// Config is a structure used to configure a Master. // Config is a structure used to configure a Master.
type Config struct { type Config struct {
Client *client.Client
Cloud cloudprovider.Interface Cloud cloudprovider.Interface
EtcdHelper tools.EtcdHelper EtcdHelper tools.EtcdHelper
EventTTL time.Duration EventTTL time.Duration
...@@ -122,7 +121,6 @@ type Config struct { ...@@ -122,7 +121,6 @@ type Config struct {
// Master contains state for a Kubernetes cluster master/api server. // Master contains state for a Kubernetes cluster master/api server.
type Master struct { type Master struct {
// "Inputs", Copied from Config // "Inputs", Copied from Config
client *client.Client
portalNet *net.IPNet portalNet *net.IPNet
cacheTimeout time.Duration cacheTimeout time.Duration
...@@ -262,7 +260,6 @@ func New(c *Config) *Master { ...@@ -262,7 +260,6 @@ func New(c *Config) *Master {
glog.V(4).Infof("Setting master service IPs based on PortalNet subnet to %q (read-only) and %q (read-write).", serviceReadOnlyIP, serviceReadWriteIP) glog.V(4).Infof("Setting master service IPs based on PortalNet subnet to %q (read-only) and %q (read-write).", serviceReadOnlyIP, serviceReadWriteIP)
m := &Master{ m := &Master{
client: c.Client,
portalNet: c.PortalNet, portalNet: c.PortalNet,
rootWebService: new(restful.WebService), rootWebService: new(restful.WebService),
enableLogsSupport: c.EnableLogsSupport, enableLogsSupport: c.EnableLogsSupport,
......
...@@ -201,8 +201,7 @@ func (factory *ConfigFactory) createMinionLW() *cache.ListWatch { ...@@ -201,8 +201,7 @@ func (factory *ConfigFactory) createMinionLW() *cache.ListWatch {
// Lists all minions and filter out unhealthy ones, then returns // Lists all minions and filter out unhealthy ones, then returns
// an enumerator for cache.Poller. // an enumerator for cache.Poller.
func (factory *ConfigFactory) pollMinions() (cache.Enumerator, error) { func (factory *ConfigFactory) pollMinions() (cache.Enumerator, error) {
allNodes := &api.NodeList{} allNodes, err := factory.Client.Nodes().List()
err := factory.Client.Get().Resource("minions").Do().Into(allNodes)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
...@@ -312,7 +312,6 @@ func TestAuthModeAlwaysAllow(t *testing.T) { ...@@ -312,7 +312,6 @@ func TestAuthModeAlwaysAllow(t *testing.T) {
defer s.Close() defer s.Close()
m = master.New(&master.Config{ m = master.New(&master.Config{
Client: client.NewOrDie(&client.Config{Host: s.URL}),
EtcdHelper: helper, EtcdHelper: helper,
KubeletClient: client.FakeKubeletClient{}, KubeletClient: client.FakeKubeletClient{},
EnableLogsSupport: false, EnableLogsSupport: false,
...@@ -415,7 +414,6 @@ func TestAuthModeAlwaysDeny(t *testing.T) { ...@@ -415,7 +414,6 @@ func TestAuthModeAlwaysDeny(t *testing.T) {
defer s.Close() defer s.Close()
m = master.New(&master.Config{ m = master.New(&master.Config{
Client: client.NewOrDie(&client.Config{Host: s.URL}),
EtcdHelper: helper, EtcdHelper: helper,
KubeletClient: client.FakeKubeletClient{}, KubeletClient: client.FakeKubeletClient{},
EnableLogsSupport: false, EnableLogsSupport: false,
...@@ -483,7 +481,6 @@ func TestAliceNotForbiddenOrUnauthorized(t *testing.T) { ...@@ -483,7 +481,6 @@ func TestAliceNotForbiddenOrUnauthorized(t *testing.T) {
defer s.Close() defer s.Close()
m = master.New(&master.Config{ m = master.New(&master.Config{
Client: client.NewOrDie(&client.Config{Host: s.URL}),
EtcdHelper: helper, EtcdHelper: helper,
KubeletClient: client.FakeKubeletClient{}, KubeletClient: client.FakeKubeletClient{},
EnableLogsSupport: false, EnableLogsSupport: false,
...@@ -569,7 +566,6 @@ func TestBobIsForbidden(t *testing.T) { ...@@ -569,7 +566,6 @@ func TestBobIsForbidden(t *testing.T) {
defer s.Close() defer s.Close()
m = master.New(&master.Config{ m = master.New(&master.Config{
Client: client.NewOrDie(&client.Config{Host: s.URL}),
EtcdHelper: helper, EtcdHelper: helper,
KubeletClient: client.FakeKubeletClient{}, KubeletClient: client.FakeKubeletClient{},
EnableLogsSupport: false, EnableLogsSupport: false,
...@@ -631,7 +627,6 @@ func TestUnknownUserIsUnauthorized(t *testing.T) { ...@@ -631,7 +627,6 @@ func TestUnknownUserIsUnauthorized(t *testing.T) {
defer s.Close() defer s.Close()
m = master.New(&master.Config{ m = master.New(&master.Config{
Client: client.NewOrDie(&client.Config{Host: s.URL}),
EtcdHelper: helper, EtcdHelper: helper,
KubeletClient: client.FakeKubeletClient{}, KubeletClient: client.FakeKubeletClient{},
EnableLogsSupport: false, EnableLogsSupport: false,
...@@ -712,7 +707,6 @@ func TestNamespaceAuthorization(t *testing.T) { ...@@ -712,7 +707,6 @@ func TestNamespaceAuthorization(t *testing.T) {
defer s.Close() defer s.Close()
m = master.New(&master.Config{ m = master.New(&master.Config{
Client: client.NewOrDie(&client.Config{Host: s.URL}),
EtcdHelper: helper, EtcdHelper: helper,
KubeletClient: client.FakeKubeletClient{}, KubeletClient: client.FakeKubeletClient{},
EnableLogsSupport: false, EnableLogsSupport: false,
...@@ -827,7 +821,6 @@ func TestKindAuthorization(t *testing.T) { ...@@ -827,7 +821,6 @@ func TestKindAuthorization(t *testing.T) {
defer s.Close() defer s.Close()
m = master.New(&master.Config{ m = master.New(&master.Config{
Client: client.NewOrDie(&client.Config{Host: s.URL}),
EtcdHelper: helper, EtcdHelper: helper,
KubeletClient: client.FakeKubeletClient{}, KubeletClient: client.FakeKubeletClient{},
EnableLogsSupport: false, EnableLogsSupport: false,
...@@ -930,7 +923,6 @@ func TestReadOnlyAuthorization(t *testing.T) { ...@@ -930,7 +923,6 @@ func TestReadOnlyAuthorization(t *testing.T) {
defer s.Close() defer s.Close()
m = master.New(&master.Config{ m = master.New(&master.Config{
Client: client.NewOrDie(&client.Config{Host: s.URL}),
EtcdHelper: helper, EtcdHelper: helper,
KubeletClient: client.FakeKubeletClient{}, KubeletClient: client.FakeKubeletClient{},
EnableLogsSupport: false, EnableLogsSupport: false,
......
...@@ -50,7 +50,6 @@ func TestClient(t *testing.T) { ...@@ -50,7 +50,6 @@ func TestClient(t *testing.T) {
defer s.Close() defer s.Close()
m = master.New(&master.Config{ m = master.New(&master.Config{
Client: client.NewOrDie(&client.Config{Host: s.URL}),
EtcdHelper: helper, EtcdHelper: helper,
KubeletClient: client.FakeKubeletClient{}, KubeletClient: client.FakeKubeletClient{},
EnableLogsSupport: false, EnableLogsSupport: false,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment